ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)

1. 组织结构:

ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
存储芯片有几个重要的单位 device block page ,在这个芯片中
1 Device = 2048 block = 2k block
1 block = 64 page
1 page = (2048 + 64) Byte
其中:
块Block,是Nand Flash的擦除操作的基本/最小单位。
页Page,是Nand Flash的读写操作的基本单位/最小单位。
共256M,也就是需要28根地址线来寻址,但是文档中是29根线,因为在寻址的时候,我们必须先找到page地址然后再找到页内地址。

页地址共有: 2048 * 64 page ,也就是2的(11+6)次方 ,即17跟地址线
页内地址: 2048 + 64 ,也就是2的(11 + 1)次方 ,即 12跟地址线,注意这里的64个字节是一段特殊的区域叫做OOB,用于数据的校验,只需要一根地址线标识

2. 寄存器说明

ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
只有数据线,没有地址线
8的数据线可以传输: 数据,地址和命令(功能),通过一些引脚来控制
但是CPU并不直接与Nand Flash交互,而是通过soc内的Nand Flash控制器来间接设置Nand Flash,其中含有很多的寄存器,CPU只需直接对这些寄存器进行操作就可以了
 I/O0 ~ I/O7 用于输入地址/数据/命令,输出数据
 CLE 则 数据线中是 命令
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
 ALE 则 数据线中是 地址
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
 WE 则 数据线中是 数据 方向是输入(从存储器角度)
 RE 则 数据线中是 数据 方向是输出(从存储器角度)
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
 CE 片选
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
 R/B 空闲状态或者是忙状态
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
 WP 写保护,使能后无法写入,由电路实现
除此以外还有一个配置寄存器,用来设置脉冲宽度
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)

3. 常见的Nand Flash操作

写入数据就是page program,因为page是写入的最小单位
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
从上图可以看到,如果要实现读一个页的数据,就要发送Read的命令,而且是分两个周期(Cycle),
即分两次发送对应的命令
,第一次是0x00h,第二次是0x30h,而两次命令中间,需要发送对应的你所要读取的页的地址,关于此部分详细内容,留待后表。对应地,其他常见的一些操作,比如写一个页的数据(Page Program),就是先发送0x80h,然后发生要写入的地址,再发送0x10h。

4. Nand Flash的地址

物理地址 =块大小×块号 + 页大小×页号 + 页内地址
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
此Nand Flash地址周期共有5个,2个列(Column)周期,3个行(Row)周期。

①.每个page的大小为(2048+64)KB,对应地,列地址A0~A10,就是页内地址,地址范围是从 0 到 2047。但是为何此处多出来个A11呢?实际上,由于我们访问页内地址,可能会访问到OOB的位置,即2048-2111这64个字节的范围内,所以,此处实际上只用到了2048~2111,用于表示页内的oob区域,其大小是64字节。

②.每个block有64个page,对应地,A12~A17,称作页号,可以定位到对应的块的哪一个页

③.每个device有2048个block,对应地,A18~A28,表示对应的块号,即属于哪个块

5. Nand Flash操作过程举例

以读操作为例,先发一个图中读命令的第一个阶段的0x00,表示,让硬件先准备一下,接下来的操作是读。发送两个周期的列地址。也就是页内地址,表示,我要从一个页的什么位置开始读取数据。接下来再传入三个行地址。对应的也就是页号。然后再发一个读操作的第二个周期的命令0x30。
接下来,Nand Flash内部硬件逻辑,负责去按照你的要求,根据传入的地址,找到哪个块中的哪个页,然后把整个这一页的数据,都一点点搬运到页缓存中去。而在此期间,你所能做的事,也就只需要去读取状态寄存器,看看对应的位的值,也就是R/B#那一位,是1还是0,如果是0的话,就表示,系统是busy,仍在”忙“(着读取数据),如果是1,就说系统活干完了,忙清了,已经把整个页的数据都搬运到页缓存里去了,你可以接下来读取你要的数据了。
ARM的Nand Flash入门使用手册(以K9F2G08X0M为例)
https://www.cnblogs.com/shangdawei/archive/2013/05/14/3077018.html