【u-boot-2016到s5pv210】2.7 uboot NandFlash驱动
本章的问题:
1 nandflash是flash吗?
2 nandflash的常用接口
3 nandflash的特性是什么?
4 ok210上s5pv210是怎么控制nandflash的
5 u-boot-2016.09.01中,nandflash的流程
6 nandflash在u-boot驱动中的关注点是什么?
7 uboot中nandflash驱动的实现
8 nandflash的分区、启动
一 Flash
1 nandflash是flash吗?
Nand Flash是Flash在存储结构上的一种分类,如下图所示,其中:
nor flash:像访问SDRAM一样,按照数据/地址总线直接访问, 可写的次数较少,速度也慢,由于其读时序类似于SRAM,读地址是线性结构,多用于程序代码的存储.
而nand flash:只有8位/16位/32位甚至更多位宽的总线,每次访问,都要将长地址分为几部分,一点点的分布传入才能访问nand flash。Nand Flash相比其余的几种flash优势在于可擦写次数多,擦写速度快,但是在使用以及使用过程中会出现坏块因此需要做特殊处理才可以使用。其主要用于数据存储,大部分U盘都是Nand Flash。Nand和Nor的使用寿命,块擦除的速度,数据存储的出错几率等,都有很大区别。
2 nandflash的常用接口
如上所述,nandflash常用的有8位、16、32位等,我们以三星K9K8G08U0E为例进行说明,
(1)三星nandflash的命名规则
第N位 |
内容 |
1 |
Memory (K) |
2 |
NAND Flash : 9 |
3 |
Small Classification SLC : Single Level Cell, MLC : Multi Level Cell, SM : SmartMedia, S/B : Small Block) 1 : SLC 1 Chip XD Card; 2 : SLC 2 Chip XD Card; 4 : SLC 4 Chip XD Card; A : SLC + Muxed I/ F Chip; B : Muxed I/ F Chip; D : SLC Dual SM; E : SLC DUAL (S/ B); F : SLC Normal; G : MLC Normal; H : MLC QDP; J : Non-Muxed OneNand; K : SLC Die Stack; L : MLC DDP; M : MLC DSP; N : SLC DSP; Q : 4CHIP ; SM: SLC 4DIE STACK (S/ B); S : SLC Single SM; T : SLC SINGLE (S/ B); U : 2 STACK MSP; V : 4 STACK MSP; W : SLC 4 Die Stack |
4~5 |
Density(单位是bit) |
6~7 |
Technology organization 00 : NONE; 08 : x8; 16 : x16 |
8 |
Vcc A : 1.65V~3.6V; B : 2.7V (2.5V~2.9V); C : 5.0V (4.5V~5.5V); D : 2.65V (2.4V ~ 2.9V); E : 2.3V~3.6V; R : 1.8V (1.65V~1.95V); Q : 1.8V (1.7V ~ 1.95V); T : 2.4V~3.0V; U : 2.7V~3.6V; V : 3.3V (3.0V~3.6V); W : 2.7V~5.5V, 3.0V~5.5V; 0 : NONE |
9 |
Mode |
10 |
Generation |
(2)K9F4G08U0D外部接口
从芯片手册中,可以得到如下引脚图,其实每片nandflash,引脚类型差不多,具体如下:
【1】8个IO引脚,可以传输命令、地址、数据
【2】当ALE为高电平时,传输的是地址;当CLE为高电平时,传输的是命令;当ALE和CLE同时为低时,传输的是数据
【3】CS为片选引脚,低电平有效,用来控制nandfalsh是否被选中
【4】WE和RE表示写使能和读使能
【5] R/B就绪与忙状态检查
3 nandflash的特性是什么?
【1】K9K8G08U0E内存芯片的结构如下图所示:
即它有8192个块,每个块64页,每个页2K个字节,即它的总大小为
8192 x 64 x(2K+64)=8448Mb=1056M=1G+56M(oob)
【2】块擦除,页读写
即擦除(erase)的最小单元是块,即128K+4K字节,读(read)和写(program)的最小单元是页,即2K+64字节
二 OK210中S5PV210的nandflash控制器实现
1 ok210上s5pv210是怎么控制nandflash的
主要关注3个地方
【1】主要特点
1)支持nandflash芯片的页大小有:512B,2K,4K,8K,K9K8G08U0E页大小为2K;
2)可以直接
3)支持8位IO总线接口,K9K8G08U0E是8位的
4)支持硬件ECC
5)支持SLC和MLC
6)分别支持1、4、8、12位ECC
7)特殊功能寄存器接口
【2】读写时序
读写时序图,主要关注三个参量,这三个量具体的值,参考具体的nandflash芯片时序图获得
TACLS:表示当CLE和ALE拉高后,再过多长时间,发送使能信号(nWE或nRE)
TWRPH0:表示使能信号(nWE或nRE)的保持时间,即他们被拉低的时间
TWRPH1:表示使能信号拉高后,开始发送数据时间,即数据起作用的时间
【3】寄存器配置
1)保留
2)地址周期数,由具体的芯片决定,K9K8G08U0E有如下图示,故应为选1
3)页大小,要根据MCLFlash的选项决定,K9K8G08U0E是SLC,2K页大小,故选 0
4)类型,0
5)TWRPH1
6)TWRPH0
7)TACLS
参考:Tiny210(S5PV210) U-BOOT(五)----Nand Flash源码分析
2 u-boot-2016.09.01中,nandflash的流程
board_init_r COFNIG_CMD_NAND common/board_r.c
initr_nand common/board_r.c
nand_init driver/mtd/nand.c
nand_init_chip dirver/mtd/nand.c
board_nand_init driver/mtd/nand/s5pv210.c
nand_scan driver/mtd/nand/nand_base.c
nand_register dirver/mtd/nand.c
3 nandflash在u-boot驱动中的关注点是什么?
【1】定义相关宏
【2】实现s5pv210.c的相关函数
三 驱动实现
1 uboot中nandflash驱动的实现
2 nandflash的分区、启动