一种基于AMBA总线的 NAND FLASH控制接口电路设计
- 格式:pdf
- 大小:215.37 KB
- 文档页数:6
Design of NAND FLASH Control Interface Based on AMBA General Bus
TANG Yu-Guang,WANG Zhen,LING Ming
(National Engineering Research Center for ASIC System,Nanjing210096,China)
Abstract:NAND FLASH uses8I/O signallines to complicated transmit control,address and data information.so the interface is special.This design based on the ARM7TDMI core,AMBA AHB general bus,supports1bit ECC verification and1bit width conversion.The state machine consists of four state mand state group fulfills the function of sending command to NAND FLASH.Address state group fulfills the function of sending address to NAND FLASH.Read state group fulfills reading function.Write state group fulfills writing function.After simulation and real chip function test,all functions accord with the NAND FLASH specification.
Key words:NAND FLASH;AHB;interface module;ECC
EEACC:1130B;1265B
一种基于AMBA总线的NAND FLASH控制接口电路设计
唐宇光,王镇,凌明
(东南大学国家专用集成电路系统工程技术研究中心,南京210096)
摘要:NAND FLASH采用8根I/O信号线复杂的传送控制、地址和数据信息,其控制逻辑需要专门设计。
该接口设计基于ARM7TDMI核,AMBA AHB总线结构,支持1bit ECC校验和位宽转换。
接口设计中的状态机由命令字发送状态组完成对NAND FLASH命令字发送,地址发送状态组完成写地址发送,读状态组完成读操作,写状态组完成写操作。
该设计已通过仿真和芯片验证测试,功能符合NAND FLASH操作规范。
关键词:NAND FLASH;AHB;接口模块;ECC校验
中图分类号:TN79文献标识码:A文章编号:1005-9490(2004)02-0306-06
NAND FLASH作为主流内存,具有存储密度高,擦除和读出数据快的特点,每单位存储价格低,在嵌入式系统中适合大容量数据存储。
但是应用NAND FLASH必须提供专用的接口控制时序,因此目前设计主流的嵌入式SOC芯片如果要提供对NAND FLASH的支持,就需要设计一个NAND FLASH控制模块电路。
我们设计的32bit嵌入式SOC芯片,支持ROM,SRAM,SDRAM,NOR FLASH,NAND FLASH 的读写。
其中对NAND FLASH提供了一个片选。
本文中将首先介绍NAND FLASH的操作方法,基于此操作方法,详细介绍该接口电路的结构,读写数据流。
重点介绍了NAND FLASH的详细操作,ECC 校验原理,和状态机控制。
在文章最后,将是该模块在SUN服务器上的仿真时序图。
1NAND FLASH操作详细介绍
当前的Flash主要有三种,包括NOR FLASH,NAND FLASH,AND FLASH。
其中NAND FLASH性能较之NOR FLASH,AND FLASH优越。
NAND的写入速度更快,擦除速度只有4ms,读出速度稍慢。
第27卷第2期2004年6月
电子器件
Chinese Journal of Electron Devices
Vol.27,No.2
June.2004
①收稿日期:2004-04-06
作者简介:唐宇光(1977-),男,天津人,硕士研究生,现在东南大学国家专用集成电路系统工程中心从事数字专用集成电路设计研究,dragon182cn@.
NAND 器件使用I /O 口来串行地存取数据,
共有8根I /O 信号线用来传送控制、地址和数据信息。
读和写操作采用512byte 的块操作,称之为整页操作。
在NAND 闪存中每个块的最大擦写次数是一百万次,寿命很长。
同时在器件尺寸上NAND 尺寸要比NOR 器件小8倍,非常适合嵌入式系统的小型化。
为了解决NAND FLASH 操作的位反转问题,通常在使用NAND 闪存的时候,同时使用EDC /ECC 算法对反转位鉴别。
在NAND FLASH 的代码执行操作上,必须有内存软件支持,即所谓的MTD 技术。
下面我们用Sandisk SDTNF-256为例子,对该
256MB 的NAND FLASH 的读写波形,
以及部分操作命令加以介绍。
在该芯片每次操作前,必须首先发出命令字,NAND FLASH 的命令字寄存器接收到
命令后,控制逻辑做出相应的操作。
最常见的三种命令字:x00H 读命令字,x80H 写命令字,x10H 编程命令字。
在NAND FLASH 中除了命令字寄存器,在NAND FLASH 中还包括两个主要寄存器,
地址寄存器和配置寄存器。
分别用来保存操作地址和配置读写时序。
图1是NAND FLASH 的标准读时序。
从图中可以看到七根信号线,还有一根WRITE PROTECT 信号线,作为写保护信号线,这就是NAND FLASH 的全部信号线。
具体的读操作如下:发命令阶段,在片选信号CE 有效的情况下,首先命令允许信号CLE 有效,
此时写入信号WE 有效,芯片准备好信号R /B 置高,
表示准备好。
同时向I /O 口发送x00H 命令,表示是读操作。
发地址阶段,此时片选有效,地址允许信号线有效,写入信号WE 保持有效,连续发送三个地址,地址N 选中存储区中的page 页,地址M 再从这个page 页中选中起始地址。
三个地址全部输入NAND FLASH 后,此时R /B 信号将维持
busy 状态一段时间,
此后
R/B 变为准备好状态。
最WE 在数据输入阶段低有效,RE 此时为
高,
其他控制信号线与读操作时的控制信号线状态相同。
控制接口电路设计
卷
序列
Byte No.1bit7bit6bit5bit4bit3bit2bit1bit0 Byte No.2bit7bit6bit5bit4bit3bit2bit1bit0………………………Byte No.2bit7bit6bit5bit4bit3bit2bit1bit0 Byte No.2bit7bit6bit5bit4bit3bit2bit1bit0
我们将512个bytes按序排列,计算校验码p
1,p
2
,
p4,计算公式如下:
p1=bit6(+)bit4(+)bit2(+)bit0(+)p1
p2=bit5(+)bit4(+)bit1(+)bit0(+)p2
p4=bit7(+)bit6(+)bit5(+)bit4(+)p4903
第2期唐宇光,王镇等:一种基于AMBA总线的NAND FLASH控制接口电路设计
方程式右边的px 由上一个byte 产生,从第一个byte 做起,一直做到512个。
通过比较数据输出前后的p 1,p 2,p 4,可查出具体翻转的这一位的列位置。
Bit6,bit4,bit2,bit0中只要有一位翻转,p 1就会翻转,同理,p 2,p 4也是相同。
如果p 1和p 2都翻转,则可能是第4列或者是第0列翻转出错。
如果此时p 4翻转,则一定可鉴别出第4列翻转。
如果p 4不翻转,
则可推出是第0列翻转出错。
同理在行上面,计算p 8,p 16,p 32,p 64…p 2048。
可判断出是哪一行产生了翻转出错。
本模块支持一位数据的翻转检验,从而对数据进行校正提供了定位。
6状态机模块部分
状态机部分包括21个状态,用以发出对NAND FLASH 读写控制操作信号。
根据NAND FLASH 读写操作规范,
这21个状态分成四个主要状态组。
这四个状态组包括命令字发送状态组,地址发送状态组,读状态组,写状态组。
分别完成对NAND FLASH 命令字发送的操作,读写地址发送操作,读NAND FLASH 操作,写NAND FLASH 操作。
这四个状态组分别包括三个状态,以发控制字状态组为例:mand -cle -s 表示发命令建立状态,nand -cle 表示发命令状态,nand -cle -h 表示发命令保持状态。
整个状态机状态翻转图如图6
所示:
R/B 线拉
低,表示当前忙,状态机跳到nand -rd -wait ,经过一个Tr 的等待时间,NAND FLASH 准备好数据,同时将R/B 线拉高,NAND FLASH 控制器就可以开始真正的读取数据了。
对应的状态机就是在nand -read -s ,nand -read ,nand -read -h 顺序跳转。
读出的数据是8bit 的,将每4个数据组成32bit 的宽度,然后送入FIFO ,当FIFO 满的时候,状态机发起一次总线DMA 请求,请求DMA 通过总线将FIFO 中的数据搬出。
这样经过32次DMA 的传输,就完成了一个整页的读。
当系统发起对NAND FLASH 的写访问时,首先配置地址寄存器,将要写入的外部NAND FLASH 内的地址写入。
然后配置操作字寄存器,将读操作的状态字0x80H 写入,同时将配置寄存器中有效位置有效,使NAND FLASH 控制器开始进行译码工作。
13电子器件第27卷
这时,NAND FLASH 控制器判断命令字,看看当前要进行的那种类型的操作,我们写入的0x80H ,也就是写命令,NAND FLASH 控制器就会启动状态机,将其从初始的nand -idle 顺序跳到nand -cle -s ,nand -cle ,nand -cle -h ,
从而将写操作的命令字送入NAND FLASH 。
然后顺序跳到nand -ale -s ,nand -ale ,nand -ale -h ,将地址寄存器中的地址送出,也就是将要读取的NAND FLASH 的page 地址送到NAND FLASH 。
然后在nand -write -s ,nand -write ,nand -write -h 这几个状态之间跳转,将FIFO 中的一个32bit 数据分成4个8bit ,4次写入NAND FLASH 中,FIFO 为空时状态机发起一个DMA 请求,请求DMA 将所要写入的数据搬入FIFO 中。
经过32次DMA 总线传输,一个page 的内容就写入了。
再将ECC 的检验码写入page 后面的备用存储空间。
状态机跳回nand -cle -s ,nand -clel ,nand -cle -h ,
发出编程指令0X10H 。
NAND FLASH 会把R
B
线拉低,表示当前忙,开始将写入的数据搬到指定的page 中。
状态机跳到nand -write -wait ,经过一个
TPROG 的等待时间,NAND FLASH 完成操作,同时将
R
B
线拉高。
NAND FLASH 控制器需要检验这次写入操作是否正确。
主要是通过将NAND FLASH 的状态字读出,判断其中的信息,假如有错,发出中断,通知CPU CORE 。
以上所述,就是NAND FLASH 控制模块的基本读写操作中,寄存器堆控制状态机操作的详细内部流程。
7时序图
该设计verilog 代码编写完成后,进行了仿真,其功能是完全可以实现的。
图7是截取的写操作实际波形。
波形图图7是是截取写入数据操作仿真的前半段波形。
NAND FLASH 控制模块的写命令和写地址的输出信号图,完全符合控制逻辑。
波形图图8是截取写入数据操作仿真的后半段波形。
这两张图连接起来完全符合图2的写入操作流程,证明
了
NAND FLASH 控制模块设计的正确性。
控制接口电路设计。