1 简介
我们通过stm32f429的fmc接口实现对MT29F4G08的访问,实现读写数据功能
-
NAND FLASH信号线
-
NAND FLASH 框图
-
NAND FLASH 存储阵列
以上可以得知:(MT29F4G08)
每个这样的芯片有两个plane
每个plane有2048个block,一个包含偶数块,一个包含奇数块
每个block有64个pege
每个page有2K+64字节
所以这个芯片的总容量为512M
page有两个区
数据存储区:一般用于存放用户数据
备份区:存放ECC校验值,实现坏块管理和磨损均衡 -
阵列寻址
访问存储单元需要通过三个地址告诉芯片是哪个位置,
CAx:column address也就是列地址,就是一个page内的地址,MT29F4G08page大小为2112Bytes, 需要12根地址线表示,所以CA0~CA11
PAx:page address 页地址,每个block有64个页,可以用6个地址线表示
BAx:block address块地址,此芯片总共有4096个块,可以用12个地址线表示
寻址需要五个周期数据:
1~2 周期表示发送列地址,3 ~ 5周期表示块和页地址,可以用过一个参数被传递
2 命令定义
- 命令定义
-
0x90 读取设备ID,非常重要,首先读取ID验证读写操作是否有问题
-
READ PAGE
这个指令用于读取一个page,不能直接跨页读取
首先发送一个字节命令00h,然后发送五个字节要读取内容的地址,然后发送30h等待 -
WRITE PAGE.
首先发送08h表示写数据命令,然后发送五个字节的地址,告诉芯片要写哪个位置,等待tADL时间后,可以连续读出数据内容,不能跨页,然后发送10h,表示加载到存储位置,最后发送70h读取状态,等待芯片状态为READY后,一次写操作完成。 -
ERASE BLOCK
NAND FLASH最小的擦除单位是一个block
首先发送60h,然后发送三个字节地址表示要擦除哪一个块,然后发送DOh,等待READY后,一次擦除块操作完成。
- ECC 校验
ECC,英文全称为: Error checking and Correction,是一种对传输数据的错误检测和修正的
算法。 STM32 的 FMC 模块就支持硬件 ECC 计算,使用的就是汉明码,