上一章节中,我们已经介绍了Nor Flash原理和操作流程,这一章开始学习Nand Flash。
JZ2400中Nand Flash电路图如下所示:
它利用I/O0~I/O7这8条数据线,即传输数据,又传输地址,还传输命令,那如何进行区分呢?
- 当ALE为高电平时传输地址。
- 当CLE为高电平是传输命令。
- 当ALE和CLE都是低电平时,传输数据。
假设烧写NAND FLASH,把命令、地址、数据发送给它之后,NAND FLASH肯定不可能瞬间完成烧写。
通过状态引脚RnB来判断:它为高电平表示就绪,它为低电平表示正忙。
操作NAND FLASH的过程: 发送命令、发送地址、读/写操作。
K9F1G08U0B
用u-boot体验NAND FLASH的操作:
nand dump 0
53 04 a0 e3 00 10 a0 e3 00 10 80 e5 13 03 a0 e3
OpenJTAG> mw.l 0x4E000004 1
OpenJTAG> mw.b 0x4E000008 0x00
OpenJTAG> mw.b 0x4E00000C 0x00
OpenJTAG> mw.b 0x4E00000C 0x00
OpenJTAG> mw.b 0x4E00000C 0x00
OpenJTAG> mw.b 0x4E00000C 0x00
OpenJTAG> mw.b 0x4E00000C 0x00
OpenJTAG> mw.b 0x4E000008 0x30
OpenJTAG> md.b 0x4E000010 1
4e000010: 53 S
OpenJTAG> md.b 0x4E000010 1
4e000010: 04 .
OpenJTAG> md.b 0x4E000010 1
4e000010: a0 .
OpenJTAG> md.b 0x4E000010 1
4e000010: e3 .
OpenJTAG> mw.b 0x4E000008 0xff
CPU看不到OOB(out of bank)区。 Nand Flash相对于Nor Flash而言,有一个缺点,当读取或写一个page的数据时,可能会发送位翻转。
OOB:是为了解决Nand缺点而存在
CPU:只关心数据,不需要看到OOB
作业: 1、实现Nand测试菜单中的 Read nand flash 2、读OOB检测坏块,改进nand_read,实现碰到坏块就跳过。OOB[0]!=0xff表示block是坏的,参考lib_nand 3、改进nand_write,实现碰到坏块就跳过。 4、了解NAND ECC。