第七部分 Nand flash 驱动的编写与移植
1 Nand flash
工作原理
S3C2410 板的 Nand Flash 支持由两部分组成:Nand Flash 控制器(集成在 S3C2410 CPU)和 Nand Flash 存储
芯片(K9F1208U0B)两大部分组成。当要访问 Nand Flash 中的数据时,必须通过 Nand Flash 控制器发送命
令才能完成。所以, Nand Flash 相当于 S3C2410 的一个外设,而不位于它的内存地址区.
1.1 Nand flash 芯片工作原理
Nand flash 芯片型号为 Samsung K9F1208U0B,数据存储容量为 64MB,采用块页式存储管理。8 个 I/O
引脚充当数据、地址、命令的复用端口。
1.1.1
芯片内部存储布局及存储操作特点
一片 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 码(关于硬件 ECC 码请参看
Nandflash 控制器一节).
1.1.2
重要芯片引脚功能
I/O0-I/O7:复用引脚。可以通过它向 nand flash 芯片输入数据、地址、nand flash 命令以及输出数据和操作
状态信息。
CLE(Command Latch Enable): 命令锁存允许
ALE(Address Lactch Enable): 地址锁存允许
-CE: 芯片选择
-RE: 读允许
-WE: 写允许
-WP: 在写或擦除期间,提供写保护
R/-B: 读/忙输出
1.1.3
寻址方式
Samsung K9F1208U0B Nand Flash 片内寻址采用 26 位地址形式。从第 0 位开始分四次通过 I/O0-I/O7 进行
传送,并进行片内寻址。具体含义如下:
0-7 位:字节在上半部、下半部及 OOB 内的偏移地址
8 位:值为 0 代表对一页内前 256 个字节进行寻址
值为 1 代表对一页内后 256 个字节进行寻址
9-13 位:对页进行寻址
页
应该是这样.....
WrNFAddr(addr&0xff); //0-7 列地址...以下页地址
WrNFAddr((addr>>9)&0xff); //9-16
WrNFAddr((addr>>17)&0xff); //17-24
WrNFAddr((addr>>25)&0xff); //25