s3c2410 NandFlash K9F1208U0A /K9F1208U0B的读取操作1 (转)

板子上使用的是SAMSUNGK9F1208U0B,下面我将对此型号的NandFlash读取操作做一个讲解。首先我们先从物理结构上来了解这颗芯片,结构图如下所示:

正如硬盘的盘片被分为磁道,每个磁道又被分为若干扇区,一块Nand Flash被分为若干Block, 每个Block又被分为若干Page。由上图我们可以知道FlashByte(字节)Page()Block(块)3个单位之间的关系为 1 Page = 512 Bytes Data Field + 16 Bytes Spare Field1 Blcok = 32 Pages

我们讨论的K9F1208U0B总共有4096 Blocks,故我们可以知道这块Flash的容量为4096 *(32 *528) = 69206016 Bytes = 66 MB 但事实上每个Page上的最后16 Bytes是用于存贮检验码用的,并不能存放实际的数据,所以实际上我们可以操作的芯片容量为4096 *(32 *512) = 67108864 Bytes = 64 MB 由上图所示,1Page总共由528 Bytes组成,这528个字节按顺序由上而下以列为单位进行排列(1列代表一个Byte。第0行为第0 Byte,第1行为第1 Byte,以此类推,每个行又由8个位组成,每个位表示1Byte里面的1bit)。这528 Bytes按功能分为两大部分,分别是Data FieldSpare Field,其中Spare Field528 Bytes里的16 Bytes, 16 Bytes是用于在读写操作的时候存放校验码用的,一般不用做普通数据的存储区,除去这16Bytes, 剩下的512Bytes便是我们用于存放数据用的Data Field,所以一个Page上虽然有528Bytes,但我们只按512Bytes进行容量的计算。Data Field按位置关系又可分为两个部分,分别称为1st half2nd half,每个half各占256bytes。或许你会感到纳闷,为什么要把DataField分为两个部分?把他们看做一个整体进行操作不就好了吗?呵呵,凡事都有因果关系,这么分块自然有它的道理所在,但现在还不是告诉你答案的时候。我们还是先讨一下它的操作吧。K9F1208U0B的操作是通过向Nand Flash命令寄存器(对于s3c2410来说此寄存器为NFCMD,内存映射地址为0x4e000004)发送命令队列进行的,为什么说是命令队列?就是因为要完成某个操作的时候发送的不是一条命令,而是连续几条命令或是一条命令加几个参数。

下面是K9F1208U0B的操作命令集:

读命令有两个,分别是 Read1Read2其中Read1用于读取Data Field的数据,而Read2则是用于读取Spare Field的数据。对于Nand Flash来说,读操作的最小操作单位为Page,也就是说当我们给定了读取的起始位置后,读操作将从该位置开始,连续读取到本Page的最后一个Byte为止(可以包括Spare Field)。

Nand Flash的寻址:Nand Flash的地址寄存器把一个完整的Nand Flash地址分解成Column AddressPage Address 进行寻址。Column Address: 列地址。Column Address其实就是指定Page上的某个Byte,指定这个Byte其实也就是指定此页的读写起始地址。Page Address:页地址。由于页地址总是以512Bytes对齐的,所以它的低9位总是0。确定读写操作是在Flash上的哪个页进行的。Read1命令:当我们得到一个Nand Flash地址src_addr时,我们可以这样分解出Column AddressPage Address

column_addr=src_addr%512;                         // column address

page_address=(src_addr>>9);                         // page address

也可以这么认为,一个Nand Flash地址的A0~A7是它的column_addrA9~A25是它的Page Address(注意地址位A8并没有出现,也就是A8被忽略,在下面你将了解到这是什么原因)Read1命令的操作分为4Cycle,发送完读命令00h01h00h01h的区别请见下文描述)之后将分4Cycle发送参数,1st.Cycle是发送Column Address2nd. Cycle, 3rd. Cycle4th. Cycle则是指定Page Address(每次向地址寄存器发送的数据只能是8位,所以17Page Address必须分成3次进行发送)。

4Cycle见下图所示:

你可能感兴趣的:(s3c2410 NandFlash K9F1208U0A /K9F1208U0B的读取操作1 (转))