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

0 0