编辑
2024-05-10
嵌入式
00
请注意,本文编写于 349 天前,最后修改于 336 天前,其中某些信息可能已经过时。

目录

NOR FLASH与SPI NAND FLASH 介绍
NOR FLASH
读写
NAND FLASH
读写
坏块管理

NOR FLASH与SPI NAND FLASH 介绍

本文不介绍FLASH原理,只介绍驱动和差异对比

区别NOR FLASHNAND FLASH
成本
擦除速度
读速度一般
写速度
容量通常较小
(一般1~16MB居多,再大的很贵)
通常较大
(一般64MB以上)
寿命一般
(擦写次数一般为十万次)

(擦写次数一般为一百万次)
XIP支持不支持
寻址方式直接寻址
(自带足够大的sram可以直接存取每个字节)
间接寻址
(需要先读写到缓存区再实际读写)
坏块
(实际内部处理了)
出厂就有

NOR FLASH

nor flash存储区分为页,扇区,块

字节<-页<-扇区<-块

页大小一般为256字节

扇区大小一般为4K

块大小一般为32/64K

读写单位:一般为页

擦除最小单位:一般为扇区

注意:市面上的nor flash基本都支持SFDP,驱动方式可以根据SFDP读取的参数进行统一驱动

读写

因为nor flash自带足够大的sram,所以读写都可以直接寻址

NAND FLASH

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 许可协议。转载请注明出处!