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

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

在这里插入图片描述
在这里插入图片描述
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”:
在这里插入图片描述
“读 ID 操作”
0,CE 为低电平,选中此 NAND 设备:
在这里插入图片描述
1,CLE 为高电平,在数据线“I/Ox”上发出“90h”。
发出“90h”命令,就是在这个 8 条数据线上"DATA0-7"发出“90h”值。如何知道它是“命令”?则往纵轴看,"90h"这一列上面“CLE”为“高电平”了。(在上面的 NAND 与 2440连接引脚中知道:当 CLE 为高电平时传输的是命令。)
在这里插入图片描述
2,再给一个“写脉冲 - WE”。
在“WE”的上升沿,NAND 就把“I/Ox”数据线上输入的“90h”存进来。
在这里插入图片描述
3,"I/Ox"数据线上接着发出一个“0 地址 - 00h”(Address 1cycle).
在这里插入图片描述
4,读数据,从"I/Ox"这 8 条数据线上读到第一个数据是“ECh”。
第二个值是一个“设备 ID - Device Code”
在这里插入图片描述

2.2440如何操作Nand Flash各个操作
2440 内部集成了一个 NAND 控制器
在这里插入图片描述
3.用uboot来体验nand flash的操作
3.1.读ID
在这里插入图片描述
u-boot 中有些命令可以读内存,“md.l 0x4E000004 1”是指从地址“0x4E000004 -NFCONT 地址”读“1”次。不写次数时,会读 16 次,即是读诸如这种间格的地址“0x4E000010 -> 0x4E000011 -> … ->0x4E00001F”.

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

mw: 写内存。
在这里插入图片描述
在这里插入图片描述
以上先“mw.l 0x4E000004 1”选中了 NAND .写数据时是“ec”和“da”.看 NAND 芯片手册的时序图
在这里插入图片描述

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
在这里插入图片描述
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地址的内容
查看时序图
在这里插入图片描述
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 时,“地址线”要多少条?
在这里插入图片描述
M 是 2 的 20 次方,256M 至少需要 2 的 28 条,至少需要 28 位的数据表示这个地址值。
28 除以 8 差不多为 4 个周期,为了兼容更大容量的 FLASH.对 NAND 规定了要发出 5 个周期 的地址。
发完 5 个周期的地址命令后,再发“30h”命令(确定)命令。接着就可以读了
即:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值