一种基于AMBA总线的 NAND FLASH控制接口电路设计
- 格式:pdf
- 大小:215.37 KB
- 文档页数:6
DesignofNANDFLASHControlInterfaceBasedonAMBAGeneralBus
TANGYu-Guang,WANGZhen,LINGMing(NationalEngineeringResearchCenterforASICSystem,Nanjing210096,China)
Abstract:NANDFLASHuses8I/Osignallinestocomplicatedtransmitcontrol,addressanddatainformation.so
theinterfaceisspecial.ThisdesignbasedontheARM7TDMIcore,AMBAAHBgeneralbus,supports1bitECC
verificationand1bitwidthconversion.Thestatemachineconsistsoffourstategroups.Commandstategroupfulfills
thefunctionofsendingcommandtoNANDFLASH.Addressstategroupfulfillsthefunctionofsendingaddressto
NANDFLASH.Readstategroupfulfillsreadingfunction.Writestategroupfulfillswritingfunction.Aftersimulation
andrealchipfunctiontest,allfunctionsaccordwiththeNANDFLASHspecification.
Keywords:NANDFLASH;AHB;interfacemodule;ECC
EEACC:1130B;1265B
一种基于AMBA总线的NANDFLASH控制接口电路设计
唐宇光,王镇,凌明
(东南大学国家专用集成电路系统工程技术研究中心,南京210096)
摘要:NANDFLASH采用8根I/O信号线复杂的传送控制、地址和数据信息,其控制逻辑需要专门设计。该接口设计基于ARM7TDMI核,AMBAAHB总线结构,支持1bitECC校验和位宽转换。接口设计中的状态机由命令字发送状态组完成对NANDFLASH命令字发送,地址发送状态组完成写地址发送,读状态组完成读操作,写状态组完成写操作。该设计已通过仿真和芯片验证测试,功能符合NANDFLASH操作规范。关键词:NANDFLASH;AHB;接口模块;ECC校验中图分类号:TN79文献标识码:A文章编号:1005-9490(2004)02-0306-06
NANDFLASH作为主流内存,具有存储密度
高,擦除和读出数据快的特点,每单位存储价格低,
在嵌入式系统中适合大容量数据存储。但是应用
NANDFLASH必须提供专用的接口控制时序,因此
目前设计主流的嵌入式SOC芯片如果要提供对
NANDFLASH的支持,就需要设计一个NAND
FLASH控制模块电路。
我们设计的32bit嵌入式SOC芯片,支持
ROM,SRAM,SDRAM,NORFLASH,NANDFLASH的读写。其中对NANDFLASH提供了一个片选。
本文中将首先介绍NANDFLASH的操作方法,基于此操作方法,详细介绍该接口电路的结构,读写数
据流。重点介绍了NANDFLASH的详细操作,ECC校验原理,和状态机控制。在文章最后,将是该模
块在SUN服务器上的仿真时序图。
1NANDFLASH操作详细介绍
当前的Flash主要有三种,包括NORFLASH,
NANDFLASH,ANDFLASH。其中NANDFLASH性
能较之NORFLASH,ANDFLASH优越。NAND的写
入速度更快,擦除速度只有4ms,读出速度稍慢。第27卷第2期2004年6月电子器件ChineseJournalofElectronDevicesVol.27,No.2June.2004
①收稿日期:2004-04-06作者简介:唐宇光(1977-),男,天津人,硕士研究生,现在东南大学国家专用集成电路系统工程中心从事数字专用集成电路设计研究,dragon182cn@seu.edu.cn.
NAND器件使用I/O口来串行地存取数据,共有8根I/O信号线用来传送控制、地址和数据信息。读
和写操作采用512byte的块操作,称之为整页操
作。在NAND闪存中每个块的最大擦写次数是一
百万次,寿命很长。同时在器件尺寸上NAND尺寸
要比NOR器件小8倍,非常适合嵌入式系统的小
型化。为了解决NANDFLASH操作的位反转问题,
通常在使用NAND闪存的时候,同时使用EDC/ECC算法对反转位鉴别。在NANDFLASH的代码执行
操作上,必须有内存软件支持,即所谓的MTD技
术。
下面我们用SandiskSDTNF-256为例子,对该
256MB的NANDFLASH的读写波形,以及部分操
作命令加以介绍。在该芯片每次操作前,必须首先
发出命令字,NANDFLASH的命令字寄存器接收到
命令后,控制逻辑做出相应的操作。最常见的三种
命令字:x00H读命令字,x80H写命令字,x10H编程
命令字。在NANDFLASH中除了命令字寄存器,在
NANDFLASH中还包括两个主要寄存器,地址寄存
器和配置寄存器。分别用来保存操作地址和配置
读写时序。
图1是NANDFLASH的标准读时序。从图中
可以看到七根信号线,还有一根WRITEPROTECT信号线,作为写保护信号线,这就是NANDFLASH的全部信号线。具体的读操作如下:发命令阶段,在片选信号CE有效的情况下,首先命令允许信号
CLE有效,此时写入信号WE有效,芯片准备好信号
R/B置高,表示准备好。同时向I/O口发送x00H命令,表示是读操作。发地址阶段,此时片选有效,
地址允许信号线有效,写入信号WE保持有效,连续
发送三个地址,地址N选中存储区中的page页,地
址M再从这个page页中选中起始地址。三个地址
全部输入NANDFLASH后,此时R/B信号将维持
busy状态一段时间,此后R/B
变为准备好状态。最WE在数据输入阶段低有效,RE此时为
高,其他控制信号线与读操作时的控制信号线状态
相同。控制接口电路设计卷序列
ByteNo.1bit7bit6bit5bit4bit3bit2bit1bit0ByteNo.2bit7bit6bit5bit4bit3bit2bit1bit0………………………ByteNo.2bit7bit6bit5bit4bit3bit2bit1bit0ByteNo.2bit7bit6bit5bit4bit3bit2bit1bit0
我们将512个bytes按序排列,计算校验码p1,p2,
p4,计算公式如下:
p1=bit6(+)bit4(+)bit2(+)bit0(+)p1p2=bit5(+)bit4(+)bit1(+)bit0(+)p2p4=bit7(+)bit6(+)bit5(+)bit4(+)p4903第2期唐宇光,王镇等:一种基于AMBA总线的NANDFLASH控制接口电路设计
方程式右边的px由上一个byte产生,从第一
个byte做起,一直做到512个。通过比较数据输出
前后的p1,p2,p4,可查出具体翻转的这一位的列位
置。Bit6,bit4,bit2,bit0中只要有一位翻转,p1就会
翻转,同理,p2,p4也是相同。如果p1和p2都翻
转,则可能是第4列或者是第0列翻转出错。如果
此时p4翻转,则一定可鉴别出第4列翻转。如果
p4不翻转,则可推出是第0列翻转出错。
同理在行上面,计算p8,p16,p32,p64…p2048。可
判断出是哪一行产生了翻转出错。本模块支持一
位数据的翻转检验,从而对数据进行校正提供了定
位。
6状态机模块部分
状态机部分包括21个状态,用以发出对
NANDFLASH读写控制操作信号。根据NAND
FLASH读写操作规范,这21个状态分成四个主要
状态组。这四个状态组包括命令字发送状态组,地
址发送状态组,读状态组,写状态组。分别完成对
NANDFLASH命令字发送的操作,读写地址发送操
作,读NANDFLASH操作,写NANDFLASH操作。
这四个状态组分别包括三个状态,以发控制字状态
组为例:mand-cle-s表示发命令建立状态,nand-cle表示发命令状态,nand-cle-h表示发命令保持
状态。
整个状态机状态翻转图如图6所示:
R/B线拉
低,表示当前忙,状态机跳到nand-rd-wait,经过一
个Tr的等待时间,NANDFLASH准备好数据,同时将R/B线拉高,NANDFLASH控制器就可以开始真
正的读取数据了。对应的状态机就是在nand-read-s,nand-read,nand-read-h顺序跳转。读出
的数据是8bit的,将每4个数据组成32bit的宽
度,然后送入FIFO,当FIFO满的时候,状态机发起
一次总线DMA请求,请求DMA通过总线将FIFO中的数据搬出。这样经过32次DMA的传输,就完
成了一个整页的读。
当系统发起对NANDFLASH的写访问时,首先
配置地址寄存器,将要写入的外部NANDFLASH内
的地址写入。然后配置操作字寄存器,将读操作的
状态字0x80H写入,同时将配置寄存器中有效位置
有效,使NANDFLASH控制器开始进行译码工作。013电子器件第27卷
这时,NANDFLASH控制器判断命令字,看看当前
要进行的那种类型的操作,我们写入的0x80H,也
就是写命令,NANDFLASH控制器就会启动状态
机,将其从初始的nand-idle顺序跳到nand-cle-s,
nand-cle,nand-cle-h,从而将写操作的命令字送
入NANDFLASH。然后顺序跳到nand-ale-s,
nand-ale,nand-ale-h,将地址寄存器中的地址送
出,也就是将要读取的NANDFLASH的page地址
送到NANDFLASH。然后在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。NANDFLASH会把RB线拉低,表示当前忙,开始将写入的数据搬到指定
的page中。状态机跳到nand-write-wait,经过一个TPROG的等待时间,NANDFLASH完成操作,同时将RB线拉高。NANDFLASH控制器需要检验这次
写入操作是否正确。主要是通过将NANDFLASH的状态字读出,判断其中的信息,假如有错,发出中
断,通知CPUCORE。
以上所述,就是NANDFLASH控制模块的基本
读写操作中,寄存器堆控制状态机操作的详细内部
流程。
7时序图
该设计verilog代码编写完成后,进行了仿真,
其功能是完全可以实现的。图7是截取的写操作
实际波形。
波形图图7是是截取写入数据操作仿真的前
半段波形。NANDFLASH控制模块的写命令和写
地址的输出信号图,完全符合控制逻辑。波形图图
8是截取写入数据操作仿真的后半段波形。这两
张图连接起来完全符合图2的写入操作流程,证明
了NANDFLASH
控制模块设计的正确性。控制接口电路设计