S3C2440 NAND Flash的使用

1、基本知识
NAND flash: 速度快,擦写5ms内;位翻转概率较大,为10%左右;容量大,块容量在8K以上,擦写次数较多;接口为IO接口
NOR flash: 速度慢,擦除5S时间;位翻转概率小于NAND flash;容量较小,块容量在64K以上,擦写次数没有NAND flash多;接口为RAM接口,可以直接运行程序
2、注意事项
2.1:在每次写操作之前需要进行擦除操作
2.1:使用前扫描坏块,不再使用
3、容量关系
1页 = 512 + 16字节
1块 = 512B * 32页
= (16K + 512)字节
1个器件 = 4096块 = 528M

不同的flash有不一样的页块大小,对于K9F2G08U0C来说

1页 = 2K
1块 = 128K = 64页
冗余区大小 = 512 * 16 byte
一个器件两层
一层 = 1GB = 8块

4、一次传输
4.1:传命令 检查状态
4.2:传地址 检查状态
4.3:传数据 检查状态
5、NAND flash interface(基本接口)
RnB : 就绪/忙 输出信号 \Busy
\nFRE: 读使能
\nFCE: 芯片使能
CLE : 命令锁存使能
ALE : 地址锁存使能
\nFWE: 写使能
DATA[0~7]: 数据输入输出

扩展
\WP : 写保护

6、关于时间
寄存器NFCONF的 TACLS = setup time
TWRPH0 = WE High to Busy
TWRPH1 = Hold time
7、关于位地址操作
由于本板子上的nand flash标写的是八位的,而技术手册上明确表示
8位、2048bit、5 cycle address的取址操作是A0-A7 A8-A11 A12-A19 A20-A27 A28
16位、2048bit、5 cycle address的取址操作是A0-A7 A8-A10 A11-A18 A19-A26 A27

但是在本板子上实验的结果是按16位的可以正确索引到地址,而按8位的反而不能找到地址了,而韦东山的程序也是按照16位的,并且还多出了A28,暂且在此认为是硬件的问题

8、NAND flash 的操作步骤
8.1、NFCONF寄存器的配置:主要是关于时序的问题,板子上集成的nand flash 模块可以发出特定的时序,只需要简单的配置一下时间,
具体可以参照NAND flash 对应的技术手册。
8.2、NFCONT寄存器的配置:主要关注的是使能ECC,关闭片选,类似于LCD1602的配置方式,其中有些位是由外部引脚的状态所决定的,
具体可以参照S3C2440技术手册的NAND flash控制章节。
8.3、复位:复位指令0xFF,需要先片选,等待操作成功,取消片选
指令的下达,有关操作可以参照NAND flash的控制步骤

Tips: 用define的时候一定要在后面加上括号
例如:#define S3C2440_NAND ((S3C2440_NAND_FLASH *)0x4E000000)
形如:#define S3C2440_NAND (S3C2440_NAND_FLASH *)0x4E000000 是错误的

你可能感兴趣的:(s3c2440,nand-flash)