嵌入式学习笔记(47)Nand的常见操作及流程分析

 

9.3.1坏块检查

(1)Flash使用之前一定要先统一擦除(擦除的单元是块)。Flash类设备擦除后里边全是1,所以擦干净之后读出来的值是0xFF

(2)检查坏块的思路就是:先擦除,然后将整个块读出来,依次检测各字节是否为0xFF,如果是则表明不是坏块,如果不是则表明是坏块。

9.3.2页写(program)操作

(1)写之前确保这个页是被擦干净的。如果不是擦干净的(而是脏的、用过的)页,写进去的值就是错的,不是你想要的结果。

(2)写操作(wright)在Flash的操作中就叫编程(program)

(3)SoC写Flash时通过命令线、IO线依次发送写命令、写页地址、写数据等进入NandFlash。

(4)写的过程:SoC通过Nand控制器和Nand芯片完成顺序对接,然后按照时序要求将一页数据发给Nand芯片内部的接口电路。接口电路先接收数据到自己的缓冲区,然后再集中写入Nand芯片的存储区域中。Nand接口电路将一页数据从缓冲区中写入Nand存储系统需要一定的时间,这段时间Nand芯片不能再响应SoC发过来的其他命令,所以SoC要等待Nand接口电路忙完。等待方法是SoC不断读取状态寄存器(这个状态寄存器有2种情况:一种是SoC的Nand控制器自带的,另一种是SoC通过发命令得到命令响应得到的),然后通过检查这个状态寄存器的状态位就能知道Nand接口电路刚才写的那一页数据写完了没、写好了没。直到SoC收到正确的状态寄存器响应才能认为刚才要写的那一页数据已经OK。(如果SoC收到的状态一直不对,可以考虑重写或认为这一页所在的块已经是坏块,或者整个Nand芯片已经坏了)。

(5)正常情况下到了(4)已经结束了。但是因为Nand的读写有不靠谱情况,因此,为了安全要去做ECC校验。ECC校验有硬件式校验和软件式校验2种。软件式校验可以采用的策略有很多,其中之一(Nand芯片手册上推荐的方式是):将刚才写入的一页数据读出来,和写入的内容进行逐一对比。如果读出的和写入的完全一样说明刚才的写入过程正确完成;如果读出来的和写入的不完全一样那就说明刚才的写入有问题。

(6)硬件式ECC:SoC的Nand控制器可以提供硬件式ECC(这个也是比较普遍的情况)。硬件式ECC就是在Nand控制器中有个硬件模块专门做ECC操作。当我们操作Nand芯片时,只要按照SoC的要求按时打开ECC生成开关,则当我们写入Nand芯片时SoC的Nand控制器的ECC模块会自动生成ECC数据放在相应的寄存器中,然后我们只需将这生成的ECC数据写入Nand芯片的带外数据区即可;在将来读取这块Nand芯片时,同样要打开硬件ECC开关,然后开始读,在读的过程中硬件ECC会自动计算读进来的一页数据的ECC值并将之放到相应的寄存器中。然后我们再去读取带外数据区中原来写入时的ECC值,和我们刚才读的时候得到的ECC值进行校验。校验通过则说明读写正确,校验不通过则说明不正确(放弃数据或尝试修复)。

9.3.3擦除(erase)操作

(1)擦除时必须给块对齐的地址。如果给了不对齐的地址,结果是不可知的(有的Nand芯片没关系,它内部会自动将其对齐,而有些Nand会返回地址错误)。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。在评论区输入“嵌入式”,即可0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值