一种数据存储模块的实现方法转让专利

申请号 : CN201510158753.X

文献号 : CN106155947B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 管雪元高杨李文胜

申请人 : 南京理工大学

摘要 :

本发明公开了一种数据存储模块的实现方法,它以意法半导体的STM32F407和三星公司K9MDG08U5M构成的存储模块为基础,首先通过ARM使能NAND FLASH片选信号并判断状态信号,将外围设备传输的数据通过串口中断方式接收,最终经过二级缓存之后存入NAND FLASH。本发明通过自定义片选解决了FSMC(可变静态存储控制器)中NAND FLASH片选不足的问题,保证大容量NAND FLASH可以充分使用;通过定义最大容忍时间来判断是否填充不足一页的数据,解决了NAND FLASH不足一页数据无法存储的问题;而且通过实时更新并存储NAND FLASH操作地址来保证存储模块重新上电之后可以继续存储。

权利要求 :

1.一种数据存储模块的实现方法,其特征在于具体步骤如下:步骤1:将ARM处理器(1)上NAND FLASH(2)片选信号和状态信号对应相连的引脚设置为输出和输入模式,通过输出使能NAND FLASH(2),通过输入判断NAND FLASH(2)的状态;

步骤2:ARM处理器(1)接受外围设备采集的数据,存入第一级数据缓存,当存入的数据量不足NAND FLASH(2)的一页时,将第一级数据缓存填充至一页大小;

步骤3:当数据存储量满NAND FLASH(2)的一页大小后,将所有数据传递至第二级数据缓存;

步骤4:地址缓存通过可变静态存储控制器FSMC(7)读出地址存储空间(8)中的NAND FLASH(2)的操作地址,根据操作地址通过FSMC(7)将第二级数据缓存中的数据存入NAND FLASH(2)的数据存储空间,并更新该操作地址;地址更新完成后,将其存入地址存储空间(8)。

2.根据权利要求1所述的数据存储模块的实现方法,其特征在于:所述步骤2中,当存入的数据量不足NAND FLASH(2)的一页时,将第一级数据缓存填充至一页大小的具体步骤如下:步骤2.1:设置最大容忍时间,该时间大于外围设备传输数据的最大时间间隔;

步骤2.2:设置计时器,计时器初值大于最大容忍时间;

步骤2.3:当数据输入时,计时器归零,

步骤2.4:计时器计时;

步骤2.5:判断计时器值是否达到最大容忍时间,若达到,填充数据至NAND FLASH(2)的一页大小;若未达到,则返回步骤4。

3.根据权利要求1所述的数据存储模块的实现方法,其特征在于:所述步骤4中,在地址缓存(6)中实时更新NAND FLASH(2)操作地址,具体步骤如下:步骤4.1:页地址加一;

步骤4.2:判断页地址是否达到块大小,若达到,则页地址归零,块地址加一;若未达到,则返回步骤1;

步骤4.3:判断块地址是否达到片大小,若达到,则块地址归零,片选号加一;若未达到,则返回步骤1;

步骤4.4:判断片选号是否达到最大片选号,若达到,则提示超出范围并报错;若未达到,则返回步骤1。

4.根据权利要求1所述的数据存储模块的实现方法,其特征在于:所述NAND FLASH(2)选用四个片选的NAND FLASH。

说明书 :

一种数据存储模块的实现方法

技术领域

[0001] 本发明涉及数据存储领域,具体是一种ARM搭载大容量NAND FLASH构成存储模块的实现方法。

背景技术

[0002] 存储系统广泛应用于各类设备中,应用最广的存储器是NAND FLASH,但其内部没有独立的控制结构,所以要实现整个存储系统,就必须依赖其他控制芯片,主要的设计方案有:基于ARM、基于DSP和基于FGPA。其中DSP功耗较大,FPGA开发成本较高,与之相比ARM具有高性能、低功耗、低价格等特点,占有很大的市场份额。类似于K9MDG08U5M这种大容量NAND FLASH,片选信号有4个,也是目前片选信号最多的情况。对于不同型号的ARM或者是包含ARM内核的SoC来说,其涉及NAND FLASH的FSMC模块只有2个片选引脚,因此无法直接提供大容量NAND FLASH所需的4个片选信号。
[0003] NAND FLASH的操作主要包含擦除、编程和读取,最为关键的是编程操作,保证数据的可靠性和完整性是实现存储功能的最基本要求。由于内部物理结构的特点,NAND FLASH的读写以页为单位,而擦除则以块为单位。编程操作时,一般在控制器中开辟一页大小的缓存,待缓存中的数据收集满后再传输给NAND FLASH进行存储。在实际应用中,所采集的数据很难准确预测,更难以保证数据量正好等于页容量的整数倍,这样就不可避免的造成最后不够一页的数据无法存入NAND FLASH中,从而造成数据丢失。

发明内容

[0004] 本发明的目的在于提供一种数据存储模块的实现方法,本发明选择ARM搭载大容量NAND FLASH构成存储模块,通过自定义片选解决了FSMC(可变静态存储控制器)中NAND FLASH片选不足的问题,保证了大容量NAND FLASH可以充分使用;通过定义最大容忍时间来判断是否填充不足一页的数据,解决了NAND FLASH不足一页数据无法存储的问题;而且通过实时更新并存储NAND FLASH操作地址来保证系统重新上电之后可以继续存储。
[0005] 实现本发明目的的技术解决方案为:一种数据存储模块的实现方法,[0006] 步骤1:将ARM处理器(1)上NAND FLASH(2)片选信号和状态信号对应相连的引脚设置为输出和输入模式,通过输出使能NAND FLASH(2),通过输入判断NAND FLASH(2)的状态;
[0007] 步骤2:ARM处理器(1)接受外围设备采集的数据,存入第一级数据缓存,当存入的数据量不足NAND FLASH(2)的一页时,将第一级数据缓存填充至一页大小;
[0008] 步骤3:当数据存储量满NAND FLASH(2)的一页大小后,将所有数据传递至第二级数据缓存;
[0009] 步骤4:地址缓存通过可变静态存储控制器FSMC(7)读出地址存储空间(8)中的NAND FLASH(2)的操作地址,根据操作地址通过FSMC(7)将第二级数据缓存中的数据存入NAND FLASH(2)的数据存储空间,并更新该操作地址;地址更新完成后,将其存入地址存储空间(8)。
[0010] 所述步骤2中,当存入的数据量不足NAND FLASH(2)的一页时,将第一级数据缓存填充至一页大小的具体步骤如下:
[0011] 步骤1:设置最大容忍时间,该时间大于外围设备传输数据的最大时间间隔;
[0012] 步骤2:设置计时器,计时器初值大于最大容忍时间;
[0013] 步骤3:当数据输入时,计时器归零,
[0014] 步骤4,:计时器计时;
[0015] 步骤5:判断计时器值是否达到最大容忍时间,若达到,填充数据至NAND FLASH(2)的一页大小;若未达到,则返回步骤4。
[0016] 所述步骤4中,在地址缓存(6)中实时更新NAND FLASH(2)操作地址,具体步骤如下:
[0017] 步骤1:页地址加一;
[0018] 步骤2:判断页地址是否达到块大小,若达到,则页地址归零,块地址加一;若未达到,则返回步骤1;
[0019] 步骤3:判断块地址是否达到片大小,若达到,则块地址归零,片选号加一;若未达到,则返回步骤1;
[0020] 步骤4:判断片选号是否达到最大片选号,若达到,则提示超出范围并报错;若未达到,则返回步骤1。
[0021] 所述NAND FLASH(2)选用四个片选的NAND FLASH。
[0022] 本发明与现有技术相比,其显著优点:1、本发明通过放弃ARM引脚复用功能,自定义FLASH状态信号,很好的解决了片选不足的问题;2、通过自定义最大容忍时间,并对不足一页的数据填充至一页,保证了不足一页的数据也可以进行存储;3、对NAND FLASH操作地址实时更新,并将操作地址进行存储,重新上电后读出地址继续操作。

附图说明

[0023] 图1是本发明的总体结构示意图。
[0024] 图2是本发明的STM32F407和K9MDG08U5M连接框图。
[0025] 图3是二级数据缓存工作示意图。
[0026] 图4是地址更新流程图。
[0027] 图5是数据填充流程图。

具体实施方式

[0028] 本发明以意法半导体的STM32F407和三星公司K9MDG08U5M构成的存储模块为基础,首先通过ARM使能NAND FLASH片选信号并判断状态信号,将外围设备传输的数据通过串口中断方式接收,最终经过二级缓存之后存入NAND FLASH。
[0029] 采用本发明方法实现的数据存储模块,包括ARM处理器和NAND FLASH,ARM处理器包括数据缓存、地址缓存、FSMC和FLASH状态,NAND FLASH包括地址存储空间、数据存储空间和状态)。数据缓存和地址缓存分别用于暂存数据信息和地址信息。ARM处理器通过FSMC与NAND FLASH进行数据传递,通过FLASH状态对NAND FLASH进行控制。地址存储空间和数据存储空间分别存放NAND FLASH操作地址和外围设备采集的数据。由ARM处理器控制外围设备的输入和NAND FLASH的存储。
[0030] 上述ARM选用意法半导体的STM32F407,这款微处理器具有NAND FLASH所需的FSMC。NAND FLASH选用容量较大的K9MDG08U5M,这款NAND FLASH是三星公司的8位存储芯片,容量高达16G Bytes。K9MDG08U5M内部包含4片,每片有8192块,每块有128页,存储以页为单位。
[0031] 上述ARM处理器包括两组APB总线:APB1和APB2,通过APB总线接收外围设备所采集的数据。ARM处理器将采集到的数据再经AHB总线临时存入数据缓存。通过FSMC把数据缓存中的数据存入NAND FLASH。数据缓存中定义二级缓存,第一级缓存直接接收外围设备的数据,其大小为2倍的NAND FLASH页大小;第二级缓存接收第一级缓存的数据,其大小为NAND FLASH页大小。根据外围设备传输情况定义最大容忍时间,当间隔达到最大容忍时间,数据不足一页时,数据缓存填充至一页大小,最终由NAND FLASH进行存储。
[0032] 上述NAND FLASH与FSMC相连的部分包括:I/O口、锁存信号和状态。状态包括和 为片选信号, 为状态位,高电平表示NAND FLASH空闲,低电平表示NAND FLASH忙碌。ARM处理器中定义地址缓存,用来实时更新NAND FLASH操作地址。为了使系统重新上电之后能继续对NAND FLASH接下来的地址操作,将地址缓存更新的地址也及时存入NAND FLASH固定的地址缓存区域内,并且操作前将地址读出。
[0033] 本发明数据存储模块的实现方法,实现步骤如下:
[0034] 步骤1、ARM处理器的引脚基本都具有复用功能,重新定义NAND FLASH的FLASH状态,放弃已定义好的复用功能。将NAND FLASH的 和 连接至ARM处理器的空闲引脚,即该引脚的复用功能不使用,把对应引脚分别定义成输出模式和输入模式。从而实现ARM处理器对NAND FLASH的控制;
[0035] 步骤2、外围设备将采集到的数据先传送至数据缓存中的第一级缓存,待第一级缓存中的数据达到NAND FLASH的一页大小,即4K Bytes之后,再将数据传递给第二级缓存。通过FLASH状态使能NAND FLASH需要操作的片选,当状态位表示空闲时,将第二级缓存数据存入NAND FLASH的数据存储空间。针对外围设备数据传输的最大时间间隔,定义一个最大容忍时间,在一帧数据接收的同时定时器归零并开始计时,下一帧数据接收时再次归零。如果定时器达到最大容忍时间,则认为数据采集结束,对数据缓存不足一页大小的数据进行填充,填充完成后再进行接下来的操作;
[0036] 步骤3、为了使NAND FLASH能够连续工作,地址缓存在每次NAND FLASH工作后都对当前地址进行更新,并将更新的地址存入NAND FLASH的地址存储空间内。在下一次NAND FLASH工作之前,再把地址读出,当作这次工作的操作地址。以这种形式,不但保证NAND FLASH可以连续工作,同时在重新上电之后,操作地址可以再从NAND FLASH的地址存储空间读出,从而继续工作。
[0037] 下面结合附图对本发明作进一步详细描述。
[0038] 结合图1,系统主要有ARM处理器、NAND FLASH和外围设备组成。外围设备采集的数据先暂存至数据存储空间内,待收集到一页数据量之后通过FSMC传送到NAND FLASH数据存储区内。NAND FLASH由FSMC和FLASH状态控制,完成存储操作。地址存储区用来存储NAND FLASH之前的操作地址,可读取至ARM的地址缓存并完成地址更新。当重新上电后,ARM可将地址从地址存储区读出,再次获得操作地址,继续存储。
[0039] STM32F407和K9MDG08U5M具体连接如图2。ALE和CLE分别为地址锁存和命令锁存,因为FSMC与NAND FLASH之间的所有通信都是通过8个I/O口进行的,为了区分通信的具体内容,需要判断ALE和CLE的状态。当ALE高电平时表示通信内容为地址信息,当CLE高电平时表示通信内容为命令,当两个都为低电平时则表示通信内容为数据。RE和WE分别为读写保护,低电平有效。由于FSMC自带的片选信号和状态信号数量不足,所以将这些信号分别连接至空闲的GPIO口,在软件配置时把片选配制成输出,状态配制成输入,通过输出使能对应片选,输入判断当前NAND FLASH的工作状态。
[0040] 如图3所示,外围设备采集的数据先暂存在数据缓存中,按照NAND FLASH按页存储的特点,当缓存中数据收集到一页时再进行最终存储。为了避免缓存中起始位置数据被新数据覆盖,第一级缓存定义为两页大小,第一页存满后,数据转移到第二级缓存进而传送至NAND FLASH。新采集的数据继续收集到第二页中,存满一页后指针跳回至第一页首,数据同样经第二级缓存存入NAND FLASH。
[0041] 结合图4,在使用时,当一个片选的容量存满之后,需要自动切换到下一个片选,进而继续工作。对NAND FLASH的每次操作都涉及到对应的操作地址,即页地址、块地址和片选号(从页首开始操作,不考虑页内地址)。一次操作完成后,应该更新操作地址并进行相应的判断。K9MDG08U5M内部包含4片,每片包含8192块,每块由128页构成,因此块大小为128,片大小8192,器件大小为4,初始地址都是从0开始。地址更新时,依次更新页地址、块地址和片选号,当一个地址达到最大值时,该地址归零同时高阶地址加一。
[0042] 结合图5,为了保证不足一页的数据也可以正常存入NAND FLASH,可以使用计时器进行判断,当时间达到了最大容忍时间,即认为不再有数据进入,将缓存填充0xFF至一页大小。计时器的初值并不等于零,而是定义为大于最大容忍时间的值。因为考虑到程序启动之后外围设备不一定立刻就产生数据,为了避免刚开始没有数据进入时也进行填充,所以计时器选择从较大的值开始计时。外围设备接收数据,当有数据进入时,产生中断,程序执行中断服务函数,同时计时器归零。当下一帧数据进入,再次产生中断,计时器再次归零。如果一定时间内没有数据进入,计时器的值达到最大容忍时间,即认为数据接受完毕,若缓存不够一页大小则填充数据至一页。