一、简介
K9F1208U0B是Samsung生产的64M ×8 Bit,备用位为16Mbit Nand flash。工作电压为2.7~3.6V。内部存储结构为528Byte * 32page *4096block。8bit的I/O引脚作为命令、地址、数据复用脚。Nand flash只能按page写,按block擦写;写操作只能在空或已擦除的单元内进行;block擦除时间与page读写时间相比要长;并且出厂时可能存在坏块,使用过程中也会出现坏块。 二、 引脚简介
I/O0 ~ I/O7 : 命令、地址输入,数据输出复用; CLE: COMMAND LATCH ENABLE命令锁存使能 ALE: ADDRESS LATCH ENABLE 地址锁存使能 nCE: CHIP ENABLE芯片使能 nRE: READ ENABLE 读使能 nWE: WRITE ENABLE 写使能 nWP: WRITE PROTECT 写保护 R/nB: 就绪/忙
8 bit I/O为地址数据复用引脚。nCE为低电平,nWE为低时,命令、地址、数据全部通过I/O引脚写入。数据在nWE上升沿时锁存。64MB的存储空间需要26根地址线来寻址,而只有8 bit的I/O口,所以需要四个周期来传送26bit的地址。Page读取和Page编程同样需要四个周期传送,但Block的擦写操作只需要三个周期。 三、 存储结构 Device, Block, Page 之间的关系: 1 Device = 4,096 Blocks = 4096*32 Pages = 128K Pages 1 Block = 32 Page 1 Page = 528 Byte = 512 Byte + 16 Byte
其中1 Page中包含有数据寄存器512 Byte 和 16 Byte的备用位用于ECC校验存储。所以有528 columns * 128K rows(Pages) 。1 Page中的512 Byte的数据寄存器又分为两个部分1st 256 Bytes和 2nd 256 Bytes 。
用于数据存储的单元有 512 Bytes * 32 Pages * 4096 Blocks = 64 MB,用于ECC校验单元有16 Bytes * 32 Pages * 4096 Blocks = 2MB 。 四、nand flash寻址
由于寻址需要26bit的地址,该26bit地址通过四个周期发送到nand flash,如下图所示:

Read 1操作:该操作是对512 Bytes * 32 Pages * 4096 Blocks = 64 M的数据寄存器进行寻址。
第一个周期发送A7~A0 的8bit Column地址,8bit的寻址范围是0 ~ 255,只能对1st 256 Bytes部分进行寻址。00h命令是1st 256 Bytes部分寻址。当发送01h命令时,A8将会被置1,此时寻址范围变成了256 ~ 511了,所以01h命令是对2nd 256 Bytes部分进行寻址。
(*注意:A8在发送00h命令后被清0,在发送01h命令后被置1,并且在发送01h对2nd寻址完毕后,A8会自动清0,指针会自动地指向1st)
第二个周期的A9 ~ A13的5bit是对 Page进行寻址(因为1 Block = 32 Pages ,5bit的寻址范围是0~31,可以对1 Block里面的所有Page进行寻址)。
A14 ~ A25的12bit则是对Block进行寻址,12bit的寻址范围是0 ~ 4095,对整个Device的4096个Blocks进行寻址。
Read 2操作:该操作是对 16 Bytes * 32 Pages * 4096 Blocks =2MB的备用位(ECC)进行寻址。
50h命令为 Read2操作,对1 Page里面的后16 Byte寻址。
这样,通过四个周期的发送即可对整个Device的所有存储单元进行寻址。
 五、关于坏块 由于nand flash有擦写寿命限制,所以在使用中不可避免地会出现坏块。但nand flash的前4K会由厂商保证不是坏块,不需要进行ECC校正。这同时保证了ARM从nand flash启动时把nand flash的前4K代码自动复制到ARM的内部的4K RAM中的正确性。
坏块的识别: 芯片的擦除操作是把所有的位变成1。而坏块的状态标记位由page内的第261个Byte进行标记。
|