一、结构分析 S3C2410处理器集成了8位NandFlash控制器。目前市场上常见的8位NandFlash有三星公司的k9f1208、k9f1g08、k9f2g08等。k9f1208、k9f1g08、k9f2g08的数据页大小分别为512Byte、2kByte、2kByte。它们在寻址方式上有一定差异,所以程序代码并不通用。本文以S3C2410处理器和k9f1208系统为例,讲述NandFlash的读写方法。 NandFlash的数据是以bit 的方式保存在memory cell里的,一般来说,一个cell 中只能存储一个bit,这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。这些Line 组成Page, page 再组织形成一个Block。k9f1208的相关数据如下: 1block=32page;1page=528byte=512byte(Main Area)+16byte(Spare Area)。 总容量为=4096(block数量)*32(page/block)*512(byte/page)=64Mbyte NandFlash以页为单位读写数据,而以块为单位擦除数据。按照k9f1208的组织方式可以分四类地址: Column Address、halfpage pointer、Page Address 、Block Address。A[0:25]表示数据在64M空间中的地址。 Column Address表示数据在半页中的地址,大小范围0~255,用A[0:7]表示; halfpage pointer表示半页在整页中的位置,即在0~255空间还是在256~511空间,用A[8]表示; Page Address表示页在块中的地址,大小范围0~31,用A[13:9]表示; Block Address表示块在flash中的位置,大小范围0~4095,A[25:14] 表示; 二、读操作过程 K9f1208的寻址分为4个cycle。分别是:A[0:7]、A[9:16]、A[17:24]、A[25]。 读操作的过程为: 1、发送读取指令;2、发送第1个cycle地址;3、发送第2个cycle地址;4、发送第3个cycle地址;5、发送第4个cycle地址;6、读取数据至页末。 K9f1208提供了两个读指令,‘0x00’、‘0x01’。这两个指令区别在于‘0x00’可以将A[8]置为0,选中上半页;而‘0x01’可以将A[8]置为1,选中下半页。 三、写操作过程 写操作的过程为: 1、发送写开始指令;2、发送第1个cycle地址;3、发送第2个cycle地址;4、发送第3个cycle地址;5、发送第4个cycle地址;6、写入数据至页末;7、发送写结束指令 下面通过分析写入页的代码,阐述读写过程。 四、总结 本文以S3C2410处理器和k9f1208系统为例讲述了nand flash的读写过程。在读写过程中没有考虑到坏块问题,有关ecc及坏块处理问题将在下个专题中讲述。
from:http://www.embedu.org/Column/Column06.htm |
NandFlash系列之二:S3C2410读写Nand Flash分析
最新推荐文章于 2021-05-17 13:28:57 发布
NandFlash系列之二:S3C2410读写Nand Flash分析
2009年12月09日 星期三 09:06