Mini2440裸机开发之Nand Flash

一、Nand Flash介绍

目前的NOR Flash 存储器价格较高,相对而言SDRAM 和Nand Flash 存储器更经济,这样促使了一些用户 在Nand Flash 中执行引导代码,在SDRAM 中执行主代码。

NAND Flash是一种非易失存储介质(掉电后数据不会丢失),常见的U盘、TF卡/SD卡,以及大部分SSD(固态硬盘)都是由它组成的。

常见的flash厂商有:Micron(镁光)、Toshiba(东芝)、Samsung(三星)、MXIC(旺宏)、dosilicon(东芯),(Winbond)华邦、ESMT等。

1.1 Nand Flash原理图

Mini2440开发板就是将采用了的256MB的Nand Flash(型号K9F2G08U0C)

Mini2440裸机开发之Nand Flash

1.2 K9F2G08U0C芯片介绍

下图的信息来是官方手册:

Mini2440裸机开发之Nand Flash

  • 可以看出此款Nand Flash容量为256M,外加8M的冗余oob存储区;

  • page大小为2K,block大小为128K;

  • 读一个page时顺序读取至少25*2048ns(数据可以每字节25ns的循环时间读出),随机读取不超过40us;

  • 写一个page一般为250us;

  • 擦除一个block一般为2ms

  • 封装上分为TSOP分装和FBGA封装(TSOP是指引脚在侧面,FBGA是引脚封在芯片底部,更能保障数据安全,有些客户为了保障数据安全性,防止被飞线进行数据破解,会要求用FBGA封装的flash)

引脚信息如下:

Pin Name Pin Function
I/O0 ~ I/O7

DATA INPUTS/OUTPUTS
The I/O pins are used to input command, address and data, and to output data during read operations. The I/O pins float to
high-z when the chip is deselected or when the outputs are disabled.

数据输入输出(命令、地址、数据公用数据总线)

CLE

COMMAND LATCH ENABLE
The CLE input controls the activating path for commands sent to the command register. When active high, commands are
latched into the command register through the I/O ports on the rising edge of the $\overline{WE}$ signal.

命令使能,高电位有效

ALE

ADDRESS LATCH ENABLE
The ALE input controls the activating path for address to the internal address registers. Addresses are latched on the rising
edge of $\overline{WE}$ with ALE high.

地址使能,高电位有效

$\overline{CE}$

CHIP ENABLE
The $\overline{CE}$ input is the device selection control. When the device is in the Busy state, $\overline{CE}$high is ignored, and the device does
not return to standby mode in program or erase operation.

片选信号,低电位有效

$\overline{RE}$

READ ENABLE
The $\overline{RE}$input is the serial data-out control, and when active drives the data onto the I/O bus. Data is valid tREA after the falling
edge of RE which also increments the internal column address counter by one.

写使能,低电位有效

$\overline{WE}$

WRITE ENABLE
The $\overline{WE}$ input controls writes to the I/O port. Commands, address and data are latched on the rising edge of the $\overline{WE}$ pulse.

读使能,低电位有效

$\overline{WP}$

WRITE PROTECT
The $\overline{WP}$pin provides inadvertent program/erase protection during power transitions. The internal high voltage generator is
reset when the $\overline{WP}$ pin is active low.

写保护,读使能,低电位有效

$R/\overline{B}$

READY/BUSY OUTPUT
The $R/\overline{B}$ output indicates the status of the device operation. When low, it indicates that a program, erase or random read
operation is in process and returns to high state upon completion. It is an open drain output and does not float to high-z condition
when the chip is deselected or when outputs are disabled.

就绪/忙输出信号(低电平表示操作还在进行中,高电平表示操作完成)

VCC

POWER
VCC is the power supply for device.

VSS GROUND
NC

NO CONNECTION
Lead is not internally connected.

1.3 内部存储结构

 Mini2440裸机开发之Nand Flash

我们常见的Nand Flash,内部只有一个chip,每个chip只有一个plane。但也有些复杂的,容量更大的Nand Flash,内部有多个chip,每个chip有多个plane,这类的Nand Flash,其实就是多了一个主控将多块flash叠加在一起,如下图:

Mini2440裸机开发之Nand Flash

  • Block块:一个Nand Flash由很多个块(Block)组成,块的大小一般有64K,128KB,256KB,512KB,Block是Nand Flash的擦除操作的基本/最小单位。Nand Flash中,一个块中含有1个或多个位是坏的,就称为其为坏块Bad Block。
  • Page页:每个块里面又包含了很多页(page)。每个页的大小,对于现在常见的Nand Flash多数是2KB,当然也有的Nand  Flash的页大小为4KB、8KB等。页Page,是读写操作的基本单位

  •  oob ( Spare Area):每一个page页,对应还附加了一块区域,一般为64byte,叫做空闲区域(spare area)/oob区域(Out Of Band),由于nandflash在操作过程中容易产生位反转,这是nandflash的物理特性决定的,所以必须要有对应的检测和纠错机制,这种机制被叫做Error Checking and Correcting,所以设计了多余的oob区域,用于放置数据的校验值。oob的读写操作,一般是随着页的操作一起完成的,即读写页的时候,对应地就读写了oob。 关于oob具体用途,总结起来有:

    • 标记是否是坏快;
    • 存储ECC数据;
    • 存储一些和文件系统相关的数据。如jffs2就会用到这些空间存储一些特定信息;

K9F2G08U0C为例:

页--Page: (2K + 64)Byte , 每页有2048个字节,需要2^11==2048,即11位地址;    

块--Block: (128K + 4K)Byte, 每块有64页,需要2^6=64,即6位地址;

256M/128K = 2048Block, 芯片一共有2048块,需要2^11 = 2048,即11位地址

现在以第25块的30页中的24byte为例:

 物理地址 = 块大小×块号 + 页大小×页号 + 页内地址

                 = 128K x 25 + 2K x 30 + 24B

                 = 3338264(10)

                 = 32F018 (16)

0x32F018 = 0011 0010 1111 0000 0001 1000;

由此可得到实际发送的数据

  •  A7  - A0  =  0001 1000
  • A10  - A8  =  0000 0000  (A11没用到)
  • A19  - A12 =  0010 1111
  • A27  - A20 =  0000 0011
  • A28 = 0000 0000

二、S3C2440 Nand Flash控制器

我们知道Nand Flash没有独立地址线,CPU无法直接访问Nand Flash上的指令,所以Nand Flash不能片上执行。那么为何程序还能支持Nand Flash启动的呢? 为了支持Nand Flash启动,S3C2440A配备了一个称为“ Steppingstone”的内部SRAM缓冲区,容量为4K。 开机时,Nand Flash中的前4K数据将被加载到Steppingstone中,而引导代码将被加载到SRAM中将被执行,如下图所示:

Mini2440裸机开发之Nand Flash

我们知道s3c2440支持2种boot方式,Nand Flash或者Nor Flash,那么需要配置OM引脚来设置引导方式,OM[1:0] = 00:使能Nand Flash 存储器引导启动。

内存控制器的地址映射表如下:

Mini2440裸机开发之Nand Flash

2.1 引脚配置

当上电启动时,Nand Flash 控制器将通过下面的引脚配置来获取连接的 Nand Flash 的信息。

(1) NCON:Nand Flash 存储器选择(普通/先进)

  • 0:普通 Nand Flash(256 字或 512 字节页大小,3 或 4 个地址周期)
  • 1:先进 Nand Flash(1K 字或 2K 字节页大小,4 或 5 个地址周期)

(2) GPG13:Nand Flash 存储器page size选择

  • 0:页=256 字(NCON=0)或页=1K 字(NCON=1)
  • 1:页=512 字节(NCON=0)或页=2K 字节(NCON=1)

(3) GPG14:Nand Flash 存储器地址周期选择

  • 0:3 个地址周期(NCON=0)或 4 个地址周期(NCON=1)
  • 1:4 个地址周期(NCON=0)或 5 个地址周期(NCON=1)

(4) GPG15:Nand  Flash 存储器总线宽度选择

  • 0:8 位宽度
  • 1:16 位宽度

如下表所示更直观:

Mini2440裸机开发之Nand Flash

三  Nand Flash控制器时序配置

Nand Flash访问时需要遵循一定的时序才能完成命令、地址、数据的发送。以8位宽数据总线为例,那么没有地址线它是怎么和cpu通信的呢?

1) Nand Flash是DATA0~DATA7上既传输数据,又传输地址,又传输命令; ①当ALE为高电平时传输的是地址; ②当CLE为高电平时传输的是命令; ③当ALE,CLE都为低电平表示传输的是数据 ;

2) 先发送片选CS和WE/RE信号;

3) 再发送CLE;

4) 再发送ALE;

5) 最后发送数据;

下面分别介绍命令、地址、数据的发送过程。

3.1 命令/地址锁存序号(写命令/地址)

Mini2440裸机开发之Nand Flash

1)首先看时钟,Nand Flash控制器的时钟源采用的是HCLK, 也就是AHB高速总线模式,假设HCLK=100Mhz, 则T=1/HCLK=10ns;

2)从上图可知命令、地址锁存的时序是一样的,复用一个时序图,当到达①的位置时,CLE/ALE=0;

3)当到达位置②时,CLE/ALE=1,表示命令/地址信号拉高,命令/地址开始使能,然后往数据总线DATA上放入命令或地址;

4)经过TACLS时间,到达位置③时,拉低nWE引脚,这时数据总线DATA上的命令/地址开始被锁存,锁存需要一定的时间,所以经过TWRPH0时间后,数据总线DATA上的命令/地址锁存完成;

5)到达位置④,此时释放nWE信号,nWE=1,这时还需要经过TWRPH1时间后,释放CLE/ALE,此时一个完整的命令/地址锁存过程完成。

上面分析了命令/地址的锁存时序过程,下面详细解释下上面几个时间参数的含义:

  • TACLS:CLE/ALE使能信号发送多久后才可以发送nWE信号;
  • TWRPH0:nWE信号发送多久后数据(commamd/addr)才会被锁存成功 ;
  • TWRPH1:nWE信号释放多久后才能释放CLE/ALE。

那么这些时间参数要怎么配置呢?

这个需要根据我们实际使用的具体Nanf Flash型号和性能来配置我们的Nand Flash控制器。我们以K9F2G08U0C这款Nand Flash为例进行讲解,手册上命令和地址锁存周期如下:

Mini2440裸机开发之Nand Flash

和Nand Flash控制器的命令/地址锁存时序图对比发现:

TACLS = max(tCLS,tALS) - tWP;
TWRPH0 = tWP;
TWRPH0 = max(tCLH,tALH);

我们知道2440 nand控制器把命令、地址锁存时序复用成了一个时序图,其实命令和地址锁存时序参数基本一致,只不过发命令只需要一个周期就OK了,发地址需要5个时钟周期,为什么?

你想,命令多简单,无非就是读写擦,像我们这款nand数据位宽8bit,一个周期绰绰有余。但地址就不一样了,比如此款nandflash容量256M = 2^28,那么需要28根数据线来传输才能一个周期传输完,但这款nandflash的数据总线位宽只有8bit, 只有8根数据线,所以需要把地址拆分成多次发送,先发送col地址,再发送row地址,此款nandflash是用了5个周期发送地址。

3.2 数据锁存时序(写数据)

从前面的命令地址锁存时序图中我们得知,CLE信号拉高,ALE信号拉低时,表示发送的命令;当CLE信号拉低,ALE信号拉高时,表示发送的地址;那么当CLE、ALE都拉低时,表示发送的数据,如下图,nCE, CLE, ALE都拉低了,表示传输的是数据。

Mini2440裸机开发之Nand Flash

1) 当到达①时,nWE还是高电平,写使能没有开启;

2) 当到达②,③时,那么经过了tWP时间(TDS时间),数据开始被锁存;

3) 到达④,经过tDH时间,数据锁存完成;

4) 到达⑤,也就是数据开始锁存后再过了tWH时间后释放nWE信号;

5) 重复②③④⑤过程。

根据上面这三个图(手册上的命令、地址、数据锁存时序图),下面详细解释各个时间参数的含义:

Mini2440裸机开发之Nand Flash

 3.3 顺序访问周期(读数据)

Mini2440裸机开发之Nand Flash

1)①处,表示要过tRR后才能发送读使能信号nRE进行访问(上一次的访问结束后,需要等待ready状态稳定后才可以进行下一次访问);

2)当到达②,需要经过rREA时间后nRE信号才有效(待nRE稳定);

3)当到达③,DATA总线上的读取被读取;

4)当到达④,nRE释放tREH时间后才允许下一次读使能

我们看到连续顺序访问时,单次访问的时间为tRC,那么这些时间参数的值也可以从K9F2G08U0C datasheet中找到:为25ns
Mini2440裸机开发之Nand Flash

参考文章:

[1] s3c2440裸机-nandflash编程(一. nandflash原理及结构简介)

[2]s3c2440裸机-nandflash编程(二. nand控制器和nand访问时序)

Mini2440裸机开发之Nand Flash

上一篇:Redis内存淘汰


下一篇:ES--ids查询