本周总结点
- NandFlash和iNand概念和相关接图
- NandFlash常见操作流程图分析
- Nand控制器(SOc角度)
- iNand介绍
- iNand/SD卡操作
NandFlash和iNand概念和相关接图
• Nand和iNand接线图如下
Nand的型号和命名:K9F2G08
1:K9F表示厂家是三星公司的,型号是NandFlash系列,2G表示Nand的容量2Gbit(256MB),08表示Nand的数据位是8位的(8根数据线)
• NandFlash内部结构功能框图如图
基本信息
1:Nand是块设备,是一个矩阵式存储器,有一层层的片(页)组成,每一小块组成一页,一小块可以存储一个bit位,
2:页是Nand访问的最小单元,如图一页的大小是(2KB+ 64B),分为带内数据和带外数据,一个页由两部分存储组成,其中2KB的是带内数据,是我们数据的存储的空间,
我们平时计算的容量也是值考虑着2KB,64字节的的带外数据不能储存数据,是作为别的附加用途的,如(存储ECC数据,存储坏块标志)
> ECC:error correction code,错误校验码,因为nand本身出错(位反转)概率高,(Nand较Nor最大缺点是稳定性)
3:块是擦除Nand的最小单位,1个块(Block) 等于(2K + 64)B x 64 Pages = (128K + 4K) Bytes
4:一个设备由多个Block(块)组成
存储原理分析
1:Nand芯片中有两部分:Nand存储颗粒 + Nand接口电路, Nand存储颗粒当做仓库来存储二进制位,接口用来管理存储颗粒,提供给外界统一的Nand接口
2:Nand中的每个单位都有自己的独立地址(地址访问能精确到字节,但是实际是能精确到页),所以一般访问的地址不能随便写,需要以页对齐的,比如2k,4k
3:Nand读写时地址通过IO线发送的,因为地址有30位,而IO只有8位,所以需要多个cycle才能发送完毕,地址时序图如图所示
4:每个nand厂商的一个block的几个page是不同的,导致nand组织架构乱,接口时序不同,所以很难兼容,导致升级容量或者换芯片,硬件要从新做,软件从新一直,
成为最大的问题
• Nand的命令码
1:外部Soc通过Nand控制器来访问Nand,实质就是通过Nand接口,就必须按照Nand接口给Nand发送命令,地址,数据等信息来读写Nand
2:Nand芯片内部的管理电路本身可以接受外部发送的命令,然后根据命令来读写Nand内容与外部SoC交互,所以我们对Nand进行的操作(擦,读,写)都要有命令,地址,数据的参与才
能完成,而且必须按照Nand芯片规定的流程来读
NandFlash常见操作流程图分析
》坏块检查,如图
1:Flash使用之前需要擦出,Flash擦出后位全部为1,读出来的值即为0xff
2:检查思路:先将块擦出,然后整块读出,循环检查(Check "FFh or FFFFh")各字节是否为0xff,是则表明不是坏块,不是则表示是坏块,
并(Create (or update) Invalid Block(s) Table)写入或标记到坏块表,直到循环最后一块结束
》页写操作
1:写之前已经要先擦出干净,我们编程需要用到写操作,写地址必须块对齐
2:写过程:Soc通过Nand控制器和Nand芯片完成时序对接,然后按照要求将一页的数据发送给Nand芯片内部的接口电路,接口电路先接收到自己的缓冲区,
然后再集中写入到Nand芯片的存储区域中,从缓冲区写入到存储系统需要一定时间,这段时间Nand芯片不能再响应Soc发过来的其他命令了,所以SOc要等待nand接口电路状态寄存器状态位标识符(Read Status Register)才会确认写操作结束【Soc不断读取这个状态寄存器】
3:当写入完成后,有些Nand不稳定,添加了可选ECC校验,ECC校验分为硬件和软件两种方式,如图右边部分为软件方式,
硬件:Nand控制器提供硬件是ECC(现在比较普片),当我们按照SOc要求,打开ECC生成开关我们写入输入到芯片时,写入数据后,Nand控制器的ECC模块会自动进行计算,生成ECC数据,我们将ecc生成的结果写入到带外数据区即可
软件:重新读取一遍刚才写入的内容,和写入的数据进行比较是否一致
》擦除
1:给定地址必须块地址对齐
Nand控制器(SOc角度)
作用:nand接口电路和Soc之间通过接口时序来通信,nand接口时序复杂,如果要Soc完全用软件来实现,编程复杂
解决办法:在SOc内部集成一个Nand控制器(是指就是一块硬件电路,这个硬件完全满足nand接口时序的操作,然后将时序操作寄存器化),然后编程人员不需要关注Nand时序问题了,只需要操作Nand控制器即可, 这是现在的趋势
框图分析:系统总线连接,通过AHB(高性能总线)连接SFR(特殊功能寄存器),和ECC,NAnd控制器通信,并完成Nand接口时序转换,nFCE,I/O1-7,nRE等和核心板图的接线图
大致是一一匹配的
关键点:SFR:编程关键,通过读写SFR来产生Nand接口时序来读写Nand芯片
Nand接口:硬件接口,用来和Nand芯片的相应引脚进行连接
ECC生成器
主要控制器:NFCONF,NFCONT,NFADDR,NFDATA,NFMECCD0&NFMECCD1,NFSECCD,NFSTAT
iNand介绍
》MMC卡出现的最早,卡片式结构,按照MMC协议设计,(相较于NandFlash芯片来说,MMC卡2个优势,第一是卡片化,偏于拆装,第二是统一了协议接口,兼容性好)
- iNand/eMMC/SDCard/MMCCard的关联
》SD卡出现后,兼容MMC协议,较MMC有一些改进,如容量,读写速率,写保护
》iNand、eMMC是在SD卡基础上发展起来,将SD卡芯片化,
》iNandh和eMMC关联:eMMC是协议,iNand是符合eMMC协议的一种芯片系列名称
iNand/eMMC 和 NandFlash的区别
》iNand内部也是有存系统和接口电路构成(和Nand结构相似,不同之处在于接口电路功能不同)
》iNand接口电路复杂,功能很健全:如
1:提供emmC接口协议,和SoC和eMMC接口控制器通信对接
2:提供块的ECC校验相关逻辑,也就是说iNand本身自己完成存储系统的ECC功能,SoC使用iNand时自己不用写代码来进行ECC相关的操作,简化编程
3:iNand使用MCL Nand颗粒,性价比高(Nandflash分两种:SLC和MLC,SLC稳定,容量小,价格高,MCL容易出错,容量大,价格低)
4:iNand接口电路提供cache机制,所以操作速度很快
iNand/eMMC 和 SD卡物理接口对比,接线图如
》210芯片本身支持4通道SD/MMC,在210中实际上SD/MMC0通道接了iNand芯片,而SD/MMC2接了SD卡
》对比iNand和SD卡接线,发现这两个接线几乎一样,唯一区别是SD卡IO线有4根,而iNand的IO线有8根
- 》总结:实际操作iNand芯片和SD卡几乎是一样的(物理接口一样,软件操作协议一样)
iNand/SD卡操作
》硬件接口:DATA,CLK(设置时钟),CMD(用来传输命令)
》命令响应的操作模式:命令都是SOc发给SD卡的,卡只管接受,不会发送给SoC的
• 命令:命令是启动一项操作的令牌。命令可以从主机发送到一张卡 (寻址命令)或发送到连接的所有卡(广播命令)。命令在 CMD 线上串 行传输。
• 响应:响应是从被寻址的卡或(同时)从所有连接的卡发送到主机, 作为对接收到的命令的回答的令牌。响应在 CMD 线上串行传输。
• 数据:数据可以从卡发送到主机或者相反。数据通过数据线传输。
• 命令操作模式:SD协议实现定义了很多标准命令(cmd0,cmd1),每个命令都有它的作用和使用条件和对应的响应,sd卡工作时就是一个个命令的周期组合起来的,在一个
周期类,主机先发送cmd给SD卡,然后SD卡解析这个命令并且执行这个命令,然后SD卡根据结果回发给主机SoC一个响应,标准的命令+响应周期中,主机发完一个命令后
应该等待SD卡的响应而不是接着发下一条命令
• SD卡内部控制器:这个控制器类似一个单片机,它的程序功能是通过CMD线接受外部主机Soc发给SD卡的命令码,然后执行这个命令并且回发响应给主机SoC,这个单片机
处理命令及回响应遵循的就是SD协议,这个单片机可以同时控制SD卡内部的存储单元和读写存储单元
》SD卡寄存器(注意,不是SOc的)
• 和多外部芯片像SD卡一样,都有内置寄存器,这些寄存器可以按照一定的规则访问,可以得知一些芯片信息,
• RCA(relative address)相对地址寄存器,我们访问SD卡时,实际上SD卡内部每个单元的地址没有绝对数字,都是使用的相对地址