笔记整理—Flash之Nand

        Nand中可以被访问的最小单位为页(page),每次最少读取n*page大小,即便是只读取一个字节也是如此。这就是典型的块(block)设备(典型值)。有的提供了randomread模式,可以支持1字节读取(非典型值)。

        1个块(block)是若干页(page)组成,若干块组成一个设备(device),但在页与块中都会有数十个B做额外空间,这个下面会说明。

        其中page是读写的最小单位,block是擦除的最小单位。每个Nand地址精确到字节(地址编排)但依然以page为最小单位R/W,操作要求页对齐。

        一个设备的地址可能有数十位,但每次只能传输8位或16位,所以出现了多cycle(周期)传输。一个页中的多余区叫spare区,占数十个字节。

eg:page=2kb+64B
其中2km为main区,64B为spare区

        spare区存放ECC校验与坏块标记。ECC校验是用于数据存储校验防止出现位反转,其原因是Nand不稳定,要进行ECC校验。ECC对于出入数据会进行计算出错会进行相关数据的尝试修复或跳过。

        Nand的最小寻址单位为字节(B),但读/写最小为页(page)。Nand寻找因与时序相同并与顺序相同。

        Flash在擦除时会将数据全部置1,所以就可以用于检测坏块。Flash开机时就会自动擦除并进行检测(0xff),Flash写入应写入一片clear过的区域,而非脏区。

        ECC校验,写入后读出做对比(page),ECC校验分软/硬校验,如今几乎都为硬件ECC校验,软ECC校验则是通过程序,硬件ECC通过寄存器+校验实现。擦除应对齐地址进行擦除,否则结果不可知,读写时也能对齐页地址,否则结果也不可知。

        这里插一嘴,I2C线上的设备基本都是低速设备,基本都不快。

        前面说了那么多的Flash相关知识,这里就针对X210进行的启动信息做一个简单的解释。首先Uboot必须在Flash前面(开头)各分区大小一般为合适的大小,分区在进行移植前确定好,在Uboot与Kernel使用同一分区表,代码与部署时分区表也应相同。分区是为了数据不会相互重叠,因为重叠=覆盖,Uboot可以看作一个裸机程序,所以不会对内存进行管理,但内核会有内存管理。有了内存管理,才是一个系统的基础。

        现在来分析一下X210的启动信息:

bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw 
init=/linuxrc rootfstype=ext3

console=ttySAC2,115200    控制台使用串口2 波特率设为115200
root=/dev/mmcblk0p2 rw    根文件系统在SD卡端0设备第2区域,可读可写
init=/linuxrc             linux的进程1,也就是init进程的路径
rootfstype=ext3           根文件系统类型为ext3类型
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值