本文不介绍FLASH原理,只介绍驱动和差异对比
区别 | NOR FLASH | NAND FLASH |
---|---|---|
成本 | 高 | 低 |
擦除速度 | 慢 | 快 |
读速度 | 快 | 一般 |
写速度 | 慢 | 快 |
容量 | 通常较小 (一般1~16MB居多,再大的很贵) | 通常较大 (一般64MB以上) |
寿命 | 一般 (擦写次数一般为十万次) | 长 (擦写次数一般为一百万次) |
XIP | 支持 | 不支持 |
寻址方式 | 直接寻址 (自带足够大的sram可以直接存取每个字节) | 间接寻址 (需要先读写到缓存区再实际读写) |
坏块 | 无 (实际内部处理了) | 出厂就有 |
nor flash存储区分为页,扇区,块
字节<-页<-扇区<-块
页大小一般为256字节
扇区大小一般为4K
块大小一般为32/64K
读写单位:一般为页
擦除最小单位:一般为扇区
注意:市面上的nor flash基本都支持SFDP,驱动方式可以根据SFDP读取的参数进行统一驱动
因为nor flash自带足够大的sram,所以读写都可以直接寻址
nand flash存储区分为页,块
字节<-页<-块
页大小一般为2KB
读写单位:一般为页
擦除最小单位:一般为块
注意:nand目前大部分没有遵循统一标准,不像nor flash市面上的基本都支持SFDP,SFDP虽然支持nand falsh,但是基本没有厂家支持,各个厂家的命令和驱动方式也不尽相同,比如状态寄存器,一切以手册为准
下面以 W25N01GVZEIG 为例
读取单位:页 = 2KB
擦除单位:块 = 64x2KB = 128KB
容量: 1024x64x2KB=128MB = 1Gb (1024块 每块64页 每页2048字节)
注意:每个厂家的nand内存分布也不一定一样,上面只是举一个例子,其他nand还是以手册为准
nand flash 读写与nor flash不同,需要先读写到缓冲区(Data Buffer),即
在读取时,要先从物理地址读到缓冲区,然后再读取缓冲区。
在写入时,要先将数据写入缓冲区,再将缓冲区数据写入物理地址。
这也是复杂的地方之一,无法直接寻址,一般采用页地址+列地址(Page Address + Column Address)组成阵列的寻址方式
以 W25N01GVZEIG 为例:
Page Address (PA) [15:0],即页面地址,其高10bit表示块号索引(10bit的最大值为1023),低6bit表示页索引(6bit的最大值为63)。
说Column Address之前,先说一下Data Buffer
Data Buffer 大小为2112Byte,由2048Byte的数据缓冲区和64Byte的备用区域(Spare Area)组成。备用区域一是用于标记坏块,二是用于保存ECC码(纠错码)。
Column Address CA[11:0],即缓冲区的地址。在读写缓冲区的参数 CA 即表示该值。12为有效,正好2048字节
因为nand本身就有坏块,读写时候注意判断坏块与ECC
由于工艺和成本的限制,标准规范中出厂时器件是允许存在坏块的,只要它的容量小于总容量的2%就是允许的,这些被称之为原始坏块。后面在随着不断的读写使用,由于寿命等问题也会不断的有新的坏块产生
所以nand flash强烈推荐使用带有坏快管理+擦写均衡的文件系统进行管理
本文作者:打盹的消防车
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!