首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

基于ARM的大容量NAND FLASH应用

作者:高杨 管雪元 来源:现代电子技术

摘 要: 针对基于ARM的大容量NAND FLASH应用中的问题进行研究,发现ARM的可变静态存储控制器模块只有2个NAND FLASH片选引脚,无法直接提供大容量NAND FLASH所需的4个片选信号;NAND FLASH存储以页为单位,对于不足1页的数据无法进行存储。通过对ARM的引脚复用功能和NAND FLASH的工作特点进行研究,提出了自定义NAND FLASH片选信号解决片选不足,通过对数据进行填充解决不足1页的数据无法存储的问题。最终通过实验进行验证,保证了基于ARM的大容量NAND FLASH可以充分有效的应用。

关键词: ARM处理器; 片选; 大容量存储; NAND闪存

中图分类号: TN710?34; TP333 文献标识码: A 文章编号: 1004?373X(2016)02?0065?04

Application on large capacity NAND FLASH based on ARM

GAO Yang, GUAN Xueyuan

(National Key Lab on Transient Physics, Nanjing University of Science and Technology, Nanjing 210094, China)

Abstract: The questions existing in application of the large capacity NANDFLASH based on ARM are researched, because flexible static memory controller (FSMC) module of ARM only has two pins for chip selection but can not provide four chip selection signals required by large capacity NAND FLASH, and the storage of FLASH NAND is based on the unit of page, which can not store the data of the insufficient page. By research on the multiplexing functions of ARM pin and working characteristics of NAND FLASH, the self?definition of NAND FLASH chip selection signal is proposed to solve the problem of pin insufficiency and the filling in data is adopted to settle the problem that the data insufficient as one page can not be stored. The method verified in experiments. It ensured the application of large capacity NAND FLASH based on ARM effectively.

Keywords: ARM; chip selection; large capacity memory; NAND flash

作为主流的存储器之一,NAND FLASH以其存储速度快、可靠性高、体积小、质量轻、功耗低、适应各种工作环境等特点,广泛应用于各类存储设备[1]。在处理器中,ARM具有高性能、低功耗、低价格等特点,占有很大的市场份额。随着信息行业的发展,各类信息的数据量越来越大,为了满足信息应用和处理的更高需求,增大相关设备的存储容量也就尤为重要。因此,本文主要针对基于ARM的大容量NAND FLASH在应用方面的主要问题进行分析。

1 大容量NAND FLASH应用中的问题

目前市面上的NAND FLASH型号众多,相应的容量、结构特点和操作方式上也各有差异,但每个厂商的不同型号除了容量上的差异,其余基本相同。本文以容量较大的K9MDG08U5M为例,这款NAND FLASH是三星公司的8位存储芯片,容量高达16 GB。K9MDG08U5M内部包含4片,每片有8 192块,每块有128页[2]。

1.1 NAND FLASH片选问题

在存储系统中,通过NAND FLASH完成存储功能,但其内部没有独立的控制结构,所以要实现整个存储系统,就必须依赖其他控制芯片。类似于K9MDG08U5M这种大容量NAND FLASH,片选信号有4个,也是目前片选信号最多的。对于不同型号的ARM或者是包含ARM内核的SoC来说,其涉及NAND FLASH的FSMC(可变静态存储控制器)模块只有2个片选引脚,因此无法直接提供大容量NAND FLASH所需的4个片选信号。

1.2 NAND FLASH编程操作问题

NAND FLASH的操作主要包含擦除、编程和读取,最为关键的是编程操作,保证数据的可靠性和完整性是实现存储功能的最基本要求。由于内部物理结构的特点,NAND FLASH的读/写以页为单位,而擦除则以块为单位[3]。编程操作时,一般在控制器中开辟1页大小的缓存,待缓存中的数据收集满后再传输给NAND FLASH进行存储。在实际应用中,所采集的数据很难准确预测,更难以保证数据量正好等于页容量的整数倍,这样就不可避免地造成最后不够1页的数据无法存入NAND FLASH中,这种数据丢失对于存储系统来说是不允许出现的。

2 应用中问题解决方法

前面叙述了大容量NAND FLASH在实际应用中的两个典型问题:一是大容量带来的多片选,造成ARM处理器片选不足的问题;二是容量越大,最后数据不满1页的可能性越高,造成数据丢失的问题也越严重。为了使这种大容量NAND FLASH能有更广泛的应用,就必须解决这两个问题。

2.1 解决片选

本文ARM以意法半导体的STM32F407为例,这款微处理器具有NAND FLASH所需的FSMC。FSMC能够连接同步、异步存储器和 16 位 PC 存储卡,数据总线位宽可根据需要配置成8位或16位,具有两个支持 ECC 硬件的 NAND FLASH存储区域,可检查多达 8 KB 的数据[4]。FSMC定义了两个NAND FLASH片选[5]FSMC_NCE[3:2],从FSMC的角度,外部存储器被划分为4个固定大小的存储区域,其中存储区域2和存储区域3用于连接NAND FLASH,每个存储区域只能连接一个器件。默认的情况下,FSMC可连接2个单片选NAND FLASH。4片选的K9MDG08U5M就需要另外定义其余片选。ARM的大多数引脚都具有复用功能,可以按照定义配置成不同的功能,但是一个引脚在同一时间只能配置成一种功能。每一个片选[CE]有效时,该片都有一个R/[B]状态输出,用于判断当前NAND FLASH的状态[6]。所以R/[B]信号与[CE]信号个数上是对应的,需要自己定义的也就是这两组引脚。既然重新定义,那就意味着引脚的复用功能无法使用,在硬件设计时应该将[CE][4:1]和R/[B][4:1]连接至ARM的空闲引脚(该引脚的复用功能不使用),其余引脚对应复用功能正常连接。硬件连接框图如图1所示。

在软件设计时,把[CE][4:1]和R/[B][4:1]相连的引脚分别配置成GPIO的输出功能和输入功能。由于片选低电平有效,初始化时将[CE][4:1]置高。在使用时,ARM输出低电平至需要操作的片选,使能该片NAND FLASH后,再判断R/[B]反馈的状态信号,如果高电平表示NAND FLASH处于空闲状态可以进行接下来的操作,低电平则表示NAND FLASH处于忙碌状态,ARM等待至信号变高[7]。

图1 连接框图

当一个片选的容量存满之后,需要自动切换到下一个片选,进而可以继续工作。对NAND FLASH的每次操作都涉及到对应的操作地址,即页地址、块地址和片选号(从页首开始操作,页内地址为0)。一次操作完成后,应该更新操作地址并进行相应的判断。前面介绍过K9MDG08U5M内部包含4片,每片包含8 192块,每块由128页构成,因此最大页地址为128,最大块地址为8192,最大片选号为4,初始地址都是从0开始。地址更新流程图如图2所示。

图2 地址更新流程图

2.2 解决数据不够1页

编程操作以页为单位,这是所有NAND FLASH共同的操作特点。由于内部物理结构,K9MDG08U5M写入数据过程分为两步:第一步,接收到第一周期编程命令(80H),将收集好的数据传输至NAND FLASH内部的缓存区,其大小与页的大小相等;第二步,接收到第二周期编程命令(10H),该命令确认写入,数据由缓存区真正存入至存储区一页中[8]。通过对数据写入过程的分析,可以看出每一次编程操作都是针对1页大小的数据进行的。这种操作方式可以提高写入的速度,因为每次写入数据都需要向NAND FLASH发送命令和操作地址,与单字节操作相比,减少了程序多次执行发送命令和地址的时间[9]。但当数据不够1页时,按页操作就成为一种束缚。这是所有NAND FLASH都会存在的问题,对于大容量NAND FLASH,页的大小也相应增加,这种问题所造成的影响就变得更加明显。

对于这个问题,首先想到的方法就是对数据进行填充,将不足1页的数据填充满1页,再完成接下来的存储操作。本文用到的也就是这种方法,填充数据需要考虑两个问题:一是什么时候填充;二是填充什么数据。

什么时候填充主要根据外围设备的数据传输间隔来判断,可以定义一个最大容忍时间。最大容忍时间可以根据实际情况适当的大些,因为过小会造成没有必要的填充,从而浪费存储资源,而容忍时间适当大些不会带来任何负面影响,定义的标准就是大于外围设备的最大传输间隔。

关于填充什么数据并没有特殊的限制,只需要不会对有效数据产生干扰即可。本文主要根据NAND FLASH内部特点来选择填充数据。由于NAND FLASH存储单元的物理特性,编程操作时存储单元的数据只能从1变成0,无法从0变成1,擦除的目的就是将所有存储位变为1。因此存储数据时,没有存入有效数据的空间内数据[10]应该都是0xFF。根据这一点,本文选择的填充数据就是0xFF,同时也满足不会对有效数据产生干扰的要求。

在实际设计中,可以使用计时器进行判断,当时间达到了最大容忍时间,即认为不再有数据进入,将缓存填充0xFF至1页。计时器的初值并不等于零,而是定义为大于最大容忍时间的值。因为考虑到程序启动之后外围设备不一定立刻就产生数据,为了避免刚开始没有数据进入时也进行填充,所以计时器选择从较大的值开始计时。串口采用中断方式接收数据,当有数据进入时,串口产生中断,程序执行中断服务函数,同时计时器归零。当下一帧数据进入,串口再次产生中断,计时器再次归零。如果一定时间内没有数据进入,计时器的值达到最大容忍时间,即认为数据接受完毕,若缓存不够1页大小则填充数据至1页。具体流程图如图3所示。

图3 填充流程图

3 实验验证

通过串口调试助手循环发送abcdefg至下位机,随机发送若干个字节后停止发送,将接收到的数据存入NAND FLASH第3片第2块第1页,最终再读出并通过串口助手显示。由图4和图5可知,循环发送出273 B,接收缓存最小编号为0,停止发送后,缓存中数据从第274个字节处开始填充为0xFF,显示出的4 096 B(1页大小)中,abcdefg后全为0xFF。实验结果达到预期效果,上述解决方法具有可行性。

图4 串口助手收发界面

4 结 语

本文主要分析解决了大容量NAND FLASH应用于ARM的两个主要问题。首先对于片选不足的问题,可以通过ARM自身引脚的复用功能进行解决,只需对片选及相应的状态信号重新定义,并注意操作地址的更新以保证NAND FLASH可以连续正常工作。其次解决了数据不够1页无法满足按页存储的问题,通过定义最大容忍时间来判断是否还有数据进入,当达到最大容忍时间即认为数据采集完成,如果数据不足1页则进行填充,从而保证有效数据完全存入NAND FLASH。这两个问题的解决,保证了基于ARM的大容量NAND FLASH可以充分有效的应用。尤其对于第二个问题,解决方法适用于所有由NAND FLASH构成的存储系统。

图5 Keil调试界面

参考文献

[1] 陈国,高杨.NAND FLASH在大容量存储技术中的应用[J].航空计算技术,2009,39(2):113?116.

[2] Samsung Corp. K9MDG08U5M?PCB0M datasheet [EB/OL]. [2011?02?28]. http://www.samsung.com.

[3] 邢亮,黄晖,田丹.机载系统NAND FLASH存储技术[J].航空计算技术,2014,44(1):123?125.

[4] 廖义奎.ARM Cortex?M4嵌入式实战开发精解:基于STM32F4[M].北京:北京航空航天大学出版社,2013.

[5] ST Corp. STM32F407xx datasheet[ EB/OL]. [2013?10?22].http://www.st.com.

[6] 舒文丽,吴云峰,孙长胜,等.基于NAND FLASH的海量存储器的设计[J].电子器件,2012,35(1):107?110.

[7] 朱知博.基于NAND FLASH的高速大容量存储系统设计[J].现代电子技术,2011,34(8):170?173.

[8] 雷磊,谢民,李先楚.基于NAND 型FLASH的海量存储板的设计与实现[J].测控技术,2007(z1):196?202.

[9] 郑文静,李明强,舒继武.FLASH存储技术[J].计算机研究与发展,2010,47(4):716?726.

[10] 晏敏,龙小奇,章兢,等.开放式大容量NAND FLASH数据存储系统设计与实现[J].微电子学与计算机,2009,26(11):13?16.