您的位置:首页 > 其它

NAND Flash硬件读写原理

2017-03-29 10:59 323 查看
1.nand接口

s3c2440板的Nand Flash模块由两部分组成:Nand Flash控制器(集成在s3c2440)和Nand Flash存储芯片(K9F1208U0B)两大部分组成。当要访问Nand Flash中的数据时,必须通过Nand Flash控制器发送命令序列才能完成。所以, Nand Flash相当于s3c2440的一个外设,而不位于它的内存地址区.。

Samsung的 K9F1208U0B,数据存储容量为64MB ,采用块页式存储管理。8 个I/O引脚充当数据、地址、命令的复用端口。

2. 重要芯片引脚功能
I/O0-7:复用引脚。可以通过它向nand flash 芯片输入数据、地址、nand flash 命令以及输出数据和操作状态信息。
CLE(Command Latch Enable): 命令锁存允许
ALE(Address Lactch Enable): 地址锁存允许
-CE: 芯片选择
-RE: 读允许
-WE: 写允许
-WP: 在写或擦除期间,提供写保护
R/-B: 读/忙输出

3.芯片内部存储布局



一片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 内置的指针指向各自的首地址。

4.寻址方式
Samsung K9F1208U0B Nand Flash 片内寻址采用26 位地址形式。从第0 位开始分四次通过I/O0 -I/O7 进传送,并进行片内寻址。具体含义如下:
0-7 位:字节在上半部、下半部及OOB 内的偏移地址
8 位:值为0 代表对一页内前256 个字节进行寻址
值为1 代表对一页内后256 个字节进行寻址
9-13位:对页进行寻址
14-25 位:对块进行寻址
当传送地址时,从位0 开始
5.存储操作特点:

①擦除操作的最小单位是块,读写的最小的单位是页
②Nand Flash 芯片每一位(bit)只能从1 变为0 ,而不能从0 变为 1,所以在对其进行写入操作之前要一定将相应块擦除(擦除即是将相应块得位全部变为 1).
③OOB部分的第六字节(即517 字节)标志是否是坏块,如果不是该值为FF ,否则为坏块。
④除OOB 第六字节外,通常至少把OOB 的前3 个字节存放Nand Flash 硬件ECC 码
6. Nand flash工作原理及主要命令

Nand Flash 控制器通过将Nand Flash 芯片的内设命令写到其特殊功能寄存器中,从而实现对Nand flash 芯片读、检验和编程控制的。特殊功能寄存器有:NFCONF 、NFCMD 、NFADDR 、NFDATA 、NFSTAT 、NFECC 。

主要命令如下

①.Read 1:
功能:表示将要读取Nand flash 存储空间中一个页的前半部分,并且将内置指针定位到前半部分的第一个字节。
命令代码:00h
②.Read 1:
功能:表示将要读取Nand flash 存储空间中一个页的后半部分,并且将内置指针定位到后半部分的第一个字节。
命令代码:01h
③.Read ID:
功能:读取Nand flash 芯片的ID 号
命令代码:90h
④.Reset:
功能:重启芯片。
命令代码:FFh
⑤.Page Program:
功能:对页进行编程命令, 用于写操作。
命令代码:首先写入00h(A 区)/01h(B 区)/05h(C 区), 表示写入那个区; 再写入80h 开始编程模式(写入模式) ,接下来写入地址和数据; 最后写入 10h 表示编程结束.
⑥.Block Erase
功能:块擦除命令。
命令代码:首先写入60h 进入擦写模式,然后输入块地址; 接下来写入D0h, 表示擦写结束.
⑦.Read Status
功能:读取内部状态寄存器值命令。
命令代码:70h
7.Nand Flash 控制器中的硬件 ECC 介绍

①ECC产生方法
ECC 是用于对存储器之间传送数据正确进行校验的一种算法,分硬件ECC 和软件ECC 算法两种,在S3C2410 的Nand Flash 控制器中实现了由硬件电路 (ECC 生成器)实现的硬件ECC 。
②ECC生成器工作过程
当写入数据到Nand flash 存储空间时, ECC 生成器会在写入数据完毕后自动生成ECC 码,将其放入到ECC0 -ECC2 。当读出数据时Nand Flash 同样会在读数据完毕后,自动生成ECC 码将其放到ECC0 -ECC2 当中。
③ECC 的运用
当写入数据时,可以在每页写完数据后将产生的ECC 码放入到OOB 指定的位置(Byte 6)去,这样就完成了ECC 码的存储。这样当读出该页数据时,将所需数据以及整个OOB 读出,然后将指定位置的ECC 码与读出数据后在ECC0 -ECC1 的实际产生的ECC 码进 对比,如果相等则读出正确,若不相等则读取错误需要进行重读。
8.NAND Flash的读写操作:

①设置NFCONF,NFCONT寄存器,配置NANDFLASH。NFCONF中的TACLS,TWRPH0,TWRPH1字段与Flash访问时序有关。

②选择芯片,NAND片选

③向NFCMD写入命令

④向NFADDR写入地址

⑤等待数据就绪,

⑥读/写数据,通过寄存器NFSTAT检测NAND Flash的状态,检测R/nB信号以确认操作是否完成。

⑦取消片选





9.NAND启动
当CPU启动方式设置为NAND启动时,上电开机,S3C2440的内部boot code执行,自动把nand flash的最开始4K数据拷贝到s3c2440内部RAM,并且从这部分代码偏移0处开始执行。s3c2440内部RAM映射地址为0,所以u-boot可以认为是是从内存的0地址开始执行。


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>

阅读(2077) | 评论(4) | 转发(7) |

0
上一篇:Linux的启动SD卡的格式化方法

下一篇:NAND Falsh驱动分析

相关热门文章

linux 常见服务端口

xmanager 2.0 for linux配置

【ROOTFS搭建】busybox的httpd...

openwrt中luci学习笔记

什么是shell

linux dhcp peizhi roc

关于Unix文件的软链接

求教这个命令什么意思,我是新...

sed -e "/grep/d" 是什么意思...

谁能够帮我解决LINUX 2.6 10...

给主人留下些什么吧!~~



leon_yu2012-10-08 14:01:15
中兴的一哥们,还是比较牛的,可以买本看看,网上也有电子版
回复 | 举报



lmnos2012-10-08 09:44:26
leon_yu: 这个是看韦东山的书做的笔记.....韦东山,我怎么从没听说过啊
回复 | 举报



leon_yu2012-10-08 09:25:18
lmnos: 好东西,学习了.....这个是看韦东山的书做的笔记
回复 | 举报



lmnos2012-10-07 17:04:23
好东西,学习了
回复 | 举报

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: