- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Nand_bbtc详细分析
Nand_bbt.c详细分析
类别:技术类
Nand_bbt.c详细分析
check_pattern(uint8_t *buf, int len, int paglen, struct nand_bbt_descr *td)
如图1:在buf内的B段寻找pattern匹配。如option有NAND_BBT_SCANEMPTY, 则在A,C段还要全为0xff才判为匹配上
0: 匹配上,
-1: 匹配不上
图1
check_short_pattern(uint8_t *buf, struct nand_bbt_descr *td)
如图2:在B段内看是否匹配td-pattern
0: 匹配
-1:不匹配
图2
read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num, int bits, int offs, int reserved_block_code)
每个block用bits个比特来表示好坏(一般bits = 2), 一共要读num个block的标志位,即一共要读(num * bits)/8字节bbt,从第page页开始从flash里读,并根据读得的值来修改this-bbt[offs] ~ this-bbt[offs + (num * bits)/8]。reserved_block_code为bbt保留块标志。要注意flash里的bbt标志值和this-bbt[]里的值(memory_bbt)代表的含义相反,如上述。
read_abs_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *td, int chip)
option NAND_BBT_NRBITS_MSK = 每个block用多少个bit来表示好坏块,默认值为2
if(NAND_BBT_PERCHIP)
{
if(chip == -1)
{
调用td-numchips次read_bbt,分别从第td-page[0],td-page[1],...,td-page[this-numchips -1]页读取chipsize/bbt_erase_shift个block的好坏块值,并修改this-bbt[],如图3
}
else
{
从第chip个flash的第td-page[chip]个页,调用read_bbt,读得bbt值并修改thi-bbt对应部分,如只执行图3中的一个虚线部分
}
}
else
{
执行图3中第0号flash的read_bbt操作,从td-page[0]页开始读
}
图3
scan_read_raw(struct mtd_info *mtd, uint8_t *buf, loff_t offs, size_t len)
调用mtd-read_oob, mode = MTD_OOB_RAW,从flash的offs地址开始读len个byte到buf里,包括OOB
scan_write_bbt(struct mtd_info *mtd, loff_t offs, size_t len, uint8_t *buf, uint8_t *oob)
调用mtd-write_oob, mode = MTD_OOB_PLACE
read_abs_bbts(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *td, struct nand_bbt_descr *md)
if(td-options NAND_BBT_VERSION)
{
调用scan_read_raw,从flash的td-page[0]页及其OOB读到buffer,并修改td-version[0]
}
if(md (md-options NAND_BBT_VERSION))
{
调用scan_read_raw,从flash的md-page[0]页及其OOB读到buffer,并修改md-version[0]
}
调用完这个函数,如果md存在并且有NAND_BBT_VERSION,则buf里是mirror_bbt的内容,否则如果td有NAND_BBT_VERSION,则buf里是main_bbt的内容, 否则不做任何操作。
scan_block_full(struct mtd_info *mtd, struct nand_bbt_descr *bd, loff_t offs, int8_t *buf, size_t readlen, int scanlen, int len)
调用scan
您可能关注的文档
- LRC暂态过程论文.doc
- LR语法分析实验报告.doc
- lwip嵌入式的web服务器的外文翻译.doc
- MACD应用技巧---分享者:和尚.doc
- Linux新手全攻略.doc
- MACD指标的实战买卖点图解.doc
- MACD短线经典应用.ppt
- Magento中文用户手册.doc
- Linux桌面两大阵营 GNOME与KDE的战争.doc
- LSMW Direct Input采购订单批导.docx
- 5G认证考核测试2021-4.pdf
- 2022年-2023年国家电网招聘之经济学类自我提分评估(附答案).pdf
- Unit5Developingideas(Reading)课件(2024)版七年级英语上册(1).pptx
- Module4Unit1Thisismyhead(课件)(一起)英语一年级下册(3).pptx
- 高三生物一轮复习课件捕获光能的色素和结构及光合作用的原理.pptx
- Unit1SectionA课件人教版英语九年级全册2.pptx
- 专题03申请美术馆展览志愿者-2023年高考英语作文满分突破精美课件.pptx
- 3210300456(3)函数y=Asin(ωx+φ)的性质(一)-高一上学期数学教学(人教A版).pptx
- 1B-Unit24Alightdinner新概念英语青少版.pptx
- 湖北省武汉市高三上学期九月调考数学质量分析课件.pptx
文档评论(0)