7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作

一,NANA 接线图 上相关的 引脚含义:

7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
A:地址线,数据线,命令 与 ALE,CLE 信号
问 1. 原理图上 NAND FLASH 和 S3C2440 之间只有数据线(LDATA0~7),没有看到地址引脚。怎么传输地址(如何将地址信号告诉 NAND)?答案:复用。
答 1.在 DATA0~DATA7 上既传输数据,又传输地址。用一个信号 ALE 分辨是“地址”还是“信号”,当 ALE 为高电平时传输的是地址。当 ALE 为低电平是传输的是数据。

问2.从Nand Flash芯片手册可知,要操作Nand Flash需要先发出命令,只有8条数据线,如何传输命令?
答2.在DATA0~7上即传输数据,有传输地址,也传输命令。
当ALE为高电平时,传输地址,
当CLE为高电平时,传输命令,
当ALE,CLE都为低电平时,传输数据。

以上变清楚了ALE,CLE.

B.片选信号“CE”
原理图上还有个“CE - 片选信号”,如何理解“片选信号”:
查 DATA0 接有哪里:
LDATA0 还有接到“NOR flash”上,LDATA 0 还有接到“内存”上,其实 LDATA0 还有接到如网卡等设备上。

问 3. 数据线既接到 NAND FLASH,也接到 NOR FLASH,还接到 SDRAM、DM9000 等等,那么怎么避免干扰?
答 3. 这些设备,要访问之前必须"选中",没有选中的芯片不会工作,相当于没接一样。要“选中”这就是它们都有“片选”信号
比如 NAND,要让引脚“nFCE”变成低电平选中。
内存, 则片选引脚“nSCS”要变成低电平。
NOR 是“nCE”片选信号变成低电平选中。

C:RnB - 状态引脚
问 4. 假设烧写 NAND FLASH,把命令、地址、数据发给它之后,
NAND FLASH 肯定不可能瞬间完成烧写的,
怎么判断烧写完成?
答 4. 通过状态引脚 RnB 来判断:它为高电平表示就绪,它为低电平表示正忙。

D,nFRE nFWE 这是读写信号。

二:如何操作 NAND FLASH:

1.
问 5. 怎么操作 NAND FLASH 呢?
答 5. 根据 NAND FLASH 的芯片手册,一般的过程是:
a.CE 为低电平,选中此 NAND 设备
b.发出命令
c.发出地址
d发出数据 或 读数据

看“命令”不容易看,就看“时序图”,比如命令表格中的“read ID”.所谓“时序图”,就是“横轴”是时间。纵轴上各“信号”为不同电平时,横轴上相同“列–纵轴”所对应的功能动作。
“Read ID Operation”:
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
“读 ID 操作”
0,CE 为低电平,选中此 NAND 设备:
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
1,CLE 为高电平,在数据线“I/Ox”上发出“90h”。
发出“90h”命令,就是在这个 8 条数据线上"DATA0-7"发出“90h”值。如何知道它是“命令”?则往纵轴看,"90h"这一列上面“CLE”为“高电平”了。(在上面的 NAND 与 2440连接引脚中知道:当 CLE 为高电平时传输的是命令。)
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
2,再给一个“写脉冲 - WE”。
在“WE”的上升沿,NAND 就把“I/Ox”数据线上输入的“90h”存进来。
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
3,"I/Ox"数据线上接着发出一个“0 地址 - 00h”(Address 1cycle).
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
4,读数据,从"I/Ox"这 8 条数据线上读到第一个数据是“ECh”。
第二个值是一个“设备 ID - Device Code”
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作

2.2440如何操作Nand Flash各个操作
2440 内部集成了一个 NAND 控制器
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
3.用uboot来体验nand flash的操作
3.1.读ID
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
u-boot 中有些命令可以读内存,“md.l 0x4E000004 1”是指从地址“0x4E000004 -NFCONT 地址”读“1”次。不写次数时,会读 16 次,即是读诸如这种间格的地址“0x4E000010 -> 0x4E000011 -> … ->0x4E00001F”.

“md” : 显示内存。需要一个地址。[一个可选的数字]。
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
因为寄存器是 4 字节 长度,故这里以“md.l”。从 u-boot 读寄存器 NFCONT(0x4E000004)的结果
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
读出是“0x3”。查 2440 手册
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
上面通过“md.l 0x4E000004 1”读出的结果是“0x3”,进制即“10”,即
“Reg_nCE”位此时为“1”,是没选中的。要操作 NAND,则要把“NFCONT”寄存器的“Reg_nCE”位设置为“0”。即对寄存器“NFCONT”写入“0x1”也就是把“Reg_nCE”位置为“0”了,片选选中。

mw: 写内存。
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
以上先“mw.l 0x4E000004 1”选中了 NAND .写数据时是“ec”和“da”.看 NAND 芯片手册的时序图
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作

3.2. 读内容: 读 NAND 中 0 地址 的数据
1.用 UBOOT 命令读 NAND 中 0 地址 的数据:
nand dump 0
Page 00000000 dump:
17 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
nand dump [addr] [size]
调用过程:
nand dump 不管你的addr和size有多大,至少会dump出一个page的大小:
例如K9F2G08X0A Nand Flash
1 Page = (2K + 64)Bytes=(12816 + 88)Byte。
则。地址0x00000000 的数据为0x17
地址0x00000001 的数据为0x00
地址0x00000002的数据为0x00
地址0x00000003的数据我0xea

2.使用寄存器读0地址的内容
查看时序图
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
I/Ox 从“列”轴上看到“CLE”高电平(CLE 为高电平时,数据线发“命令”)发出“00h”命令,之后“CLE”成为“低电平”,而“ALE”变成高电平(ALE 为高电平时,数据线发送地址),所以"I/Ox"接着发出地址“Col. Add1、Col. Add2、Row Add1、Row Add2、Row Add3”5 个地址“0
这里需要发 5 个地址,因为这个 NAND 是 256 M。要多少个地址位。
若“地址线”只有一条,则只能表示“1”或“0”,即表示 2 个地址。
若“地址线”有两条,则能表示 2 次方 “00”“01”“10”“11”4 个地址。
当 容量为 256M 时,“地址线”要多少条?
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作
M 是 2 的 20 次方,256M 至少需要 2 的 28 条,至少需要 28 位的数据表示这个地址值。
28 除以 8 差不多为 4 个周期,为了兼容更大容量的 FLASH.对 NAND 规定了要发出 5 个周期 的地址。
发完 5 个周期的地址命令后,再发“30h”命令(确定)命令。接着就可以读了
即:
7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作