一、nand flash容量与接口
1.容量
nand flash按照面、块、页、字节进行存储空间的管理,以我接触过的两款芯片来说:
K9K8G08U0A的存储容量为1024MB = 4(planes) * 2K(blocks) * 64(pages) * 2K(Bytes)
oob区的大小为32MB = 256Mbit = 512K(pages) * 64(Bytes)
(注:该flash中每一页包括2KB存储空间和64B的oob区信息)
K9F2G08U0A的存储容量为2Gbit = 256MB = 2(planes) * 1K(blocks) * 64(pages) * 2K(Bytes)
oob区的大小为8MB = 64Mbit = 128K(pages) * 64(Bytes)
(注:该flash中每一页包括2KB存储空间和64B的oob区信息)
2. 接口I/O[0-7]:数据、地址、状态和命令共同复用的输入输出口
CLE:命令锁存使能
ALE:地址锁存使能
CE:芯片片选使能
RE:读使能
WE:写使能
WP:写保护使能
R/B:芯片“就绪/忙”信号
Vcc:电源
Vss:地
N.C:悬空
二、K9F2G08U0A功能框图、组织结构与支持的命令集
三、操作步骤
Nand flash相关寄存器初始化
给出页地址,发送块擦除命令(0x60/0xd0),按块(128K)擦除
给出将要写入数据的起始地址,发送写命令(0x80/0x10),数据被写入nand flash指定地址
给出将要读取数据的起始地址,发送读命令(0x00/0x30),将从nand flash读取指定长度的数据
四、说明
通过给定列地址值,我们可以不按页对齐开始,而是从给定地址开始读取数据
循环读取数据的长度也不必是整页的长度大小,而是根据实际长度来读取,如len = 100
写入也是同理,不必整页对齐,但这样会降低读写效率
擦除必须是从整数页开始擦,擦除空间必须是一个block的大小,比如128KB