ARM_s5pv210_arm_4
来源:互联网 发布:软件开发相关书籍 编辑:程序博客网 时间:2024/06/15 01:01
Nand Flash
’
K9K8G08U0B.pdf
1.什么是Nand Flash
存储设备,用于存储整个系统,相当于PC的硬盘
2.TPAD采用了什么Nand Flash
三星的K9K8G08U08 型号的Nand Flash
3.如何才能操作Nand Flash ,主要是对它进行读操作,写操作,校验操作
需要阅读nand flash的数据手册,该手册会详细描述如何操作Nand Flash的正确方法。
4.Nand Flash主要指标参数:
(1)工作电压:3.3v
(2)存储容量:(1G+32M)*8bit
(3)写操作:按页(2k+64)Byte
擦除操作:按块(128k+4k)Byte
nand erase 0x0 0x10000
nand write 20008000 0x10000
(4)页大小:(2k+64)Byte
(5)管脚复用:命令、地址、数据复用IO口
(6)Nand Flash可以有100k次的写和擦除。ECC校验(1bit/528Byte)(528字节中发现1bit数据)
数据保存时间:10年
(7)通过命令来操作Nand Flash
(8)Nand Flash存在唯一的ID号
(9)Nand Flash的封装形式
5.Nand Flash特性:
(1)在没写数据之前,Nand flash都是1
(2)写数据之前,是把1改成0,不能把0改成1
(3)已经写数据,再要写数据,必须要擦除。
(4)Nand Flash存在位翻转
(5)Nand Flash在出厂时,可能存在坏块,但不影响使用,但是保证第0块一定是好的
(6)擦写次数有限。
Nand Flash有48个管脚,并不是每个管脚都用了。
N.C:没有使用,无连接的管脚。
Vcc:电源
Vss:接地
nCE:(n表示上划线),片选信号,低电平有效。
I/O0~7:8个IO管脚,传输命令、地址、数据。(复用)
CLE:高电平有效,命令锁存信号,IO0~IO7传输是命令
ALE:高电平有效,地址锁存信号,IO0~IO7传输是地址
当CLE、ALE都为低电平时,IO0~IO7传输是数据
CLE ALE
0 0 数据
1 0 命令
0 1 地址
nWE:写使能,低电平有效
nRE:读使能,低电平有效
nWP:写保护,低电平有效
R/nB:当前Nand Flash的状态:
R:高电平,Ready,准备就绪。
nB:低电平,busy,忙。
Nand Flash的各个管脚实际上与S5PV210处理器中的Nand Flash控制器相连(Nand Flash控制器从表现形势看,也就是一些S5PV210上一些管脚,只是这部分管脚的主要功能是用来控制Nand Flash的),因此,不用直接去操作Nand Flash的管脚,而是通过操作Nand Flash控制器中的寄存器来实现对Nand Flash操作。
Nand Flash寄存器地址:
Nand Flash内部结构图:
1页:构成Nand Flash基本单位,页大小固定。
1page=(2k+64)Bytes
每一页又分为main区和spare区,
main区:用于普通数据的存储。
spare区:用于存放附加信息,如:坏块标志,块的逻辑地址,ECC校验信息。
2.块:由若干页构成,块大小固定,64页构成一块
1block = (2k+64)Bytes*64 = (128k + 4k)Bytes
3.device:有若干块构成,8192块
1device = 8192block = (128k + 4k)Bytes * 8192 = (1G + 32M)Bytes = (1024M + 32M)bytes
8448Mbits = 1056Mbytes = (1024M+32M)bytes
Nand Flash (1G + 32M)Bytes
1G字节:存放主数据
32M字节:存放附加信息
块号:8192块,0~8191块
页号:524288页,0~524287页
表示Nand Flash容量,需要多少bit表示一个字节的地址?
(1)页内地址:2112 0~2111 12bit
(2)页号:524288 0~524287 19bit
要表示Nand Flash的一个字节的地址总共需要31bit
31bit地址如何发送?
由于Nand Flash是I/O接口,复用的,只能用8根IO线来发送地址。
一次只能传8bit,共分5个周期(由Nand Flash datasheet定义)
5个周期:
1周期:A0~A7(页内地址)(列地址)
2周期:A8-A11 0000(页内地址)(列地址)
3周期:A12~A19(页号地址)(行地址)
4周期:A20~A27(页号地址)(行地址)
5周期:A28~A30 00000(页号地址)(行地址)
由Nand Flash的datasheet可知,Nand Flash是通过命令来操作的,命令集如下:
参考S5PV210 datasheet692页
Nand FLash控制器:
1.支持的页数:512Bytes,2KB,4KB,8KB
2.可以通过软件编程的方式对Nand Flash进行操作,读写擦除。
3.支持8位IO口的Nand Flash。
4.支持ECC校验,硬件产生,监测ECC校验码。软件纠错。
5.同时支持SLC和MLC工艺的Nand Flash。(此处SLC)
6.ECC校验:支持1bit/4bit/8bit/12bit/16bit
7.特殊功能寄存器的访问方式:
Data数据寄存器(NFDATA)和ECC Data数据寄存器,可以采用字节,半字,字的方式访问,其余寄存器采用字方式访问。
如何通过软件编程方式操作Nand Flash(P695)
1.向命令寄存器(NFCMMD)写入操作Nand Flash的命令。
2.向地址寄存器(NFADDR)写入要操作的Nand Flash的具体地址。
3.向数据寄存器(NFDATA)写入要向Nand FLash写入的数据。
4.从数据寄存器(NFDATA)读出Nand Flash中的数据。
5.读取main区和spare区的ECC校验信息,进行数据校验。
NFCONF 配置寄存器
NFCONT 控制寄存器
NFCMMD 命令寄存器
NFADDR 地址寄存器
NFDATA 数据寄存器
NFSTAT 状态寄存器
TACLS:表征的是从CLE或者ALE命令锁存信号/地址锁存信号有效,到nWE写使能信号有效经过的时间
HCLK = 7ns
Duration = HCLK * TACLS >= tCLS - tWP = 0;
TACLS 设置为15 F
TWRPH0:表征的是写使能信号有效时间。
Duration = HCLK * (TWRPH0 + 1) >= tWP = 12ns
TWRPH0 设置为15 F
TWRPH1:表征的是写使能信号无效之后,CLE/ALE信号还要持续的时间。
Duration = HCLK * (TWRPH1 + 1) >= tCLH = tALH = 5ns
TWRPH1 设置为15 F
以上三个时间看Nand Flash datasheet 24页
Reg_nCEn:都是片选信号,s5pv210提供了4个片选信号,这里只用到了Reg_nCE0.
编程:读Nand Flash ID的程序。
Nand FLash控制器:
NFCONF : 页大小(2k),SLC,时序值(计算时间),5个周期
NFCONT : 使能Nand Flash控制器,片选信号
NFCMMD : 命令寄存器
NFADDR : 地址寄存器
NFDATA : 数据寄存器
NFSTAT : 状态寄存器
当RnB信号由低电平跳变到高电平时,该bit位会被自动置1
表示FLASH可以读,读NFDATA
若要是该bit位清零则需要写1清零。
/******************************************************/
利用读页函数实现加载Linux内核文件到内存中,并运行Linux内核。
1.将Linux内核(Image文件)拷贝到/tftpbo ot/
2.启动开发板u-boot界面并烧写Image内核文件到nandflash中
(1)tarena#tftp 20008000 Image
(2)tarena# nand erase 0x600000 0xc00000/擦除这段内存/
(3)tarena# nand write 0x20008000 0x600000 0xc00000/将内存中的Image写入到NandFlash中0x600000 0xc00000中/
/坏块处理/
原则:
Nand Flash 8192块
64页
main区
spare区 坏块的标志
判断坏块就读每一块的第0页第2048字节(spare区 的第一个字节),如果不是0xFF则是坏块,如果是0xFF则是坏块
读第1页,第2048个字节(spare区的第一个字节),如果是0xFF,坏块。
好块:
第0页,第2048字节,0xFF
&&
第1页,第2048字节,0xFF
坏块:
第0页,第2048字节,不是0xFF
||
第1页,第2048字节,不是0xFF
- ARM_s5pv210_arm_4
- net.sf.hibernate.PropertyNotFoundException
- C#学习之路,学习笔记 第八章 8.4重载
- Qt创建不重复随机数
- WPF程序
- Parallel dev: .NET SynchronizationContext 二三事
- ARM_s5pv210_arm_4
- Android自定义ViewGroup工具类ViewDragHelper分析
- JS获取EL表达式的值
- IOS基础UI之(十) UIPickerView和UIDatePicker详解
- python的str,unicode对象的encode和decode方法
- Java并发的四种风味:Thread、Executor、ForkJoin和Actor
- 映射文件xxx.hbm.xml下的各元素结构
- org.hibernate.id.IdentifierGenerationException
- 【Android】ArrayList通过remove方法删除元素对象源码分析