一、Nand_Flash工作原理
Nand flash芯片型号为Samsung K9F1208U0B,数据存储容量为64MB,采用块页式存储管理。8个I/O
引脚充当数据、地址、命令的复用端口。
芯片内部存储布局及存储操作特点:
一片Nand flash为一个设备(device), 其数据存储分层为:
1 (Device) = 4096 (Blocks)
1 (Block) -= 32 (Pages/Rows) 页与行是相同的意思,叫法不一样
1 (Page) = 528 (Bytes) = 数据块大小(512Bytes) + OOB 块大小(16Bytes)
在每一页中,最后16个字节(又称OOB)用于Nand Flash命令执行完后设置状态用,剩余512个字节又
分为前半部分和后半部分。可以通过Nand Flash命令00h/01h/50h分别对前半部、后半部、OOB进行定位通过
Nand Flash内置的指针指向各自的首地址。
存储操作特点:
1. 擦除操作的最小单位是块。
2. Nand Flash芯片每一位(bit)只能从1变为0,而不能从0变为1,所以在对其进行写入操作之前要一定将相应块擦除(擦除即将相应块得位全部变为1).
3. OOB部分的第六字节(即517字节)标志是否是坏块,如果不是坏块该值为FF,否则为坏块。(转载注:应该是每块的第一页的第六个字节。)
4. 除OOB第六字节外,通常至少把OOB的前3个字节存放Nand Flash硬件ECC码
NAND FLASH 是一种大容量、高速的存储技术。
其接口较为简单,如果没有专门的nand flash控制器,甚至可以用io口与之对接。
其编程也相对简单,只要了解如下关键概念就可以:
1.nand flash内部有管理单元,管理单元负责对nand flash的实际单元的操作。
2.我们使用nand flash其实只需要和管理单元通信即可,主要是发送相关的命令给管理单元。
3.类似磁盘的管理制度,nand flash也是由若干bit构成一个page,若干page构成一个block,若干block构成一个plane,我们在操作的时候往往以page为基本的操作对象。
4.nand flash的page单元有可能是有错误的,因此需要对存入的数据加上错误识别,以辨别某个page单元是坏的。请注意,一个page单元往往最多仅有两个bit错误,所以对于错误识别算法要求不是很高,只要能识别1,2个bit的算法即可。使用阵列奇偶校验很容易实现此算法。nand flash控制器其实只是集成了相关的控制时序,在使用时通过操作nand flash控制器的相关寄存器就可以实现相应的时序,但很多芯片本身不带nand flash控制器,此时可以用io口与之对接,用软件来模拟硬件时序也可以操作nand flash。此处的关键是从nand flash的数据手册上得到时序图。进而确定软件的设计。在此, 以Samsung公司的K9F1208 为例来探讨。K9F1208 是以page(页)为基本的操作单位的,一个page包含512 byte. 加16byte的校验码。32个page构成一个block。1k个block构成一个plane.整个K9F1208 包含4个plane,每个plane可以支持1个读写操作,因此最多可以有4个并发的读写操作.