网站大量收购闲置独家精品文档,联系QQ:2885784924

Nand_bbtc详细分析.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档