具体实施方式
用于数字信号处理机实时数据记录的闪存阵列存储方法,
(1).数字信号处理机与用于数字信号处理机实时数据记录的模块之间的信息交换通道采用SHARC DSP芯片的链路口(Link Port);
(2).用于数字信号处理机实时数据记录的模块的闪存阵列的存储介质是NAND(NANDFlash Memory)闪存芯片。
由2-64片NAND闪存芯片组成NAND闪存阵列,把NAND闪存阵列进行分组,每组大小相同,每次使用前,根据数字信号处理机要求的记录量选取2-32个数目的分组用来记录数据,并查询NOR(NOR Flash Memory)闪存,找出所需数目的最久没有使用的分组用来记录数据,每组的使用情况保存在NOR闪存中,从而实现分组的循环使用。
图1是采用SHARC DSP、NAND闪存和NOR闪存构成用于数字信号处理机实时数据记录的模块的硬件原理框图。
用于数字信号处理机实时数据记录的模块,主要由控制电路、存储电路、接口电路和电源电路组成,电源电路提供电源;控制电路产生NOR闪存芯片和NAND闪存芯片的接口控制协议与之交换数据。
控制电路包括SHARC DSP芯片、复位控制芯片、可编程逻辑器件、总线电平转换芯片、时钟电路。
美国Analog Devices公司的SHARC DSP芯片具有六个4bit数据线的链路口,每路可达40Mbytes/sec,六路可达240 Mbytes/sec,链路口通信协议比较简单,既可以利用其它SHARC与存储模中的SHARC进行高速数据传输,也在数字信号处理机中利用FPGA实现链路口协议实现与本用于数字信号处理机实时数据记录的模块之间的数据交换。
复位控制芯片产生上电复位信号。
可编程逻辑器件产生SHARC DSP正常工作所需的控制信号和SHARC DSP访问存储电路所需的控制信号。
总线电平转换芯片将SHARC DSP芯片外部接口的TTL电平转换成NAND闪存芯片可以接收的LVTTL电平。如果所用的LVTTL电平的SHARC DSP芯片可以不用总线电平转换芯片。
时钟电路包括时钟发生芯片和时钟信号整形芯片。时钟发生芯片产生SHARC DSP芯片正常工作所需的时钟信号,经过整形之后送给SHARC DSP芯片和可编程逻辑器件。
存储电路包括1-2片NOR闪存芯片和NAND闪存阵列,NAND闪存阵列由2-64片NAND闪存芯片组成。NOR闪存芯片数量为1-2片,NOR闪存也可以用NVRAM代替。NAND闪存阵列以簇为单位,每簇由4片8位的NAND闪存芯片或者由2片16位的NAND闪存芯片扩展成32位构成。可以根据不同的应用情况,采用1个簇或多个簇组成NAND闪存阵列。NAND闪存阵列,简称闪存阵列。
接口电路包括SHARC DSP芯片的链路口插座和匹配电阻。每个链路口插座经过匹配电阻后在模块内部连接到SHARC DSP芯片的一个链路口。
电源电路包括电压转换芯片和电源插座,外接直流电源通过电源插座向本模块提供5V供电,电压转换芯片将5V电压转换成3.3V。如果所有的器件都是3.3V供电的,可以使用3.3V的外接直流电源,不用电压转换芯片。
下面介绍用于数字信号处理机实时数据记录的闪存阵列存储方法的工作流程。
首先介绍一下相关的NOR闪存芯片和NAND闪存阵列的存储芯片。
NOR闪存:
NOR闪存按照扇区进行管理,每个扇区分为若干单元,不同型号的NOR闪存芯片的扇区数不一定相同,每扇区的单元数也不一定一样。可以随机读取NOR闪存的任意单元,也可以对任意擦除过的单元编程,但是不能对已编程的单元再次编程。NOR闪存必须以扇区为单位进行擦除。NOR闪存不能对写入也可以用NVRAM代替NOR闪存保存闪存阵列参数。
NAND闪存:
NAND闪存芯片按块(block)、页(page)和单元(cell)进行组织,每片芯片有若干块,每块有若干页,每页有若干单元。不同型号的芯片,“块”、“页”与“单元”的数目不一定相同。NAND闪存芯片必须以块(block)为单位进行擦除,以页为单位写入。写入时可以不从该页的第一个单元开始,但是最后一个写入单元不得超越该页边界。每页分为存储区和备用区。
NAND闪存的第一块一定是有效块,而其它块可能为无效块(invalid block),出厂时就存在无效块,在使用过程中有效块也可能变无效块。对无效块的判定规则是,该块前两页备用区中某个单元的某个比特(不同的闪存芯片单元地址不同)为‘0’。为了记录的可靠,无效块是不能用来保存数据的。尽管NAND闪存可能出现无效块,由于每一块的结构都是相互独立的,所以只要对无效块加以识别,并不影响系统对有效块的操作。在使用的过程中必须在NAND闪存的备用区标记出擦除失败和编程失败所产生的无效块。
以下是实时数据记录过程介绍:
记录数据的软件原理框图见图2。
为了实现存储空间的循环使用,根据不同的使用情况将存储阵列以一定数量的块为单位划分成不同的组。初次使用存储阵列前,SHARC DSP芯片对存储阵列进行分组操作,生成分组记录表并保存在NOR闪存中。
上电之后,SHARC DSP芯片自动从NOR闪存中读取固化的软件开始执行。
SHARC DSP芯片等待数字信号处理机从链路口发来的命令,并判断内容。如果是实时数据记录请求就执行数据记录,否则执行其它软件功能模块。
SHARC DSP芯片进行实时数据记录首先读取NOR闪存中关于NAND闪存阵列的分组记录,如果没有就认为这个系统是一个新系统,重新生成分组记录,存入NOR闪存。组的大小以NAND闪存的块为单位,设计者要根据具体情况决定一个组的包含的块数。组的大小如果过大NAND闪存的利用率低,组的大小如果过小,组数过多使用的记录量大。
再等待数字信号处理机发来需记录的数据量。这个数据量既可以是精确的数据记录量,也可以是对所要记录数据量的一个估计。但是估计值不应该小于实际数据量,否则可能导致数据的丢失。如果组的大小比较小对估计的精度要求就比较高。
SHARC DSP芯片根据需记录的数据量决定所需的分组数目,设为N。然后读取NOR闪存中各组的历史使用情况,找出最久没有使用的N个分组,并在NOR闪存中记录。接着,对将要使用的N个分组进行擦除,为了避免破坏备用区的无效块记录,只擦除这些分组中的所有有效块,把所有的有效块依次记入NOR闪存。然后开始数据记录。如果擦除某块失败,在该块的备用区作标记,这一块将永远从有效块中剔除。如果记录中某块出现记录失败,SHARC DSP芯片也会在该块的备用区作标记。
记录数据时利用SHARC DSP芯片的链路口接收数据,然后查询NOR闪存中的有效块记录表,找到当前记录地址所对应的NAND闪存的块地址。写入时可以采用通用存储器或者芯片内存储器将小批量数据缓存起来累积到一页一次写入技术,也可以采用SHARC每收到一次记录数据,就记录一次的方法。
当记录的数据量达到本次记录的数据量后,数据记录结束。
以下是数据读出过程介绍:
读取数据的软件原理框图见图3。
上电之后,SHARC DSP芯片自动从NOR闪存中读取固化的软件开始执行。
SHARC DSP芯片等待链路口发来的命令,并判断内容。如果是数据读取请求就执行数据读出,否则执行其它软件功能模块。
SHARC DSP芯片执行数据读出前,首先从链路口获得所需读取数据的记录批次。记录批次一般使用相对编号。1表示上一次记录的分组,2表示上上次记录的分组,依次类推。也可以采用其它记录批次编号方式。SHARC DSP芯片然后读取NOR闪存中关于NAND闪存阵列的分组使用记录,找出该记录批次所用的分组。再查询NOR闪存获得该分组使用的所有有效记录块。SHARC DSP芯片把分组的数据读出通过链路口传给数字信号处理机或者其它处理设备。
本发明用于数字信号处理机实时数据记录的模块的电路原理图,如图4、图5、图6、图7所示。
DSP芯片采用美国Analog Devices公司推出的SHARC系列DSP中的ADSP-21060KS-160。闪存采用美国AMD公司的AM29F040 NOR闪存芯片和韩国三星公司的K9K4G08 NAND闪存芯片。AM29F040由8个扇区构成,每个扇区64KB,单片容量512KB。K9K4G08由4096块构成,每块64页,每页由2K字节加上64字节备用单元构成。K9K4G08的每个存储单元有8位,本实施例把4片K9K4G08扩展成512Mx32bit的存储簇,2个512Mx32bit的存储簇组成1Gx32bit的存储阵列,共4G字节。
控制电路包括SHARC DSP芯片U1(指实施例电路原理图中该芯片的编号为U1,下同)、复位控制芯片U3、总线电平转换芯片U8和总线电平转换芯片U9、可编程逻辑器件U5、时钟电路。其中时钟电路包括时钟发生芯片U2和时钟信号整形芯片U6。如果采用的SHARC DSP芯片的外部接口电平与NAND闪存芯片的外部接口电平相同可以不用总线电平转换芯片。
存储电路包括NOR闪存芯片U7和NAND闪存阵列。NAND闪存阵列有2个簇。第1簇由NAND闪存芯片U10、NAND闪存芯片U12、NAND闪存芯片U14、NAND闪存芯片U16组成,第2簇由NAND闪存芯片U11、NAND闪存芯片U13、NAND闪存芯片U15、NAND闪存芯片U17组成。
接口电路包括SHARC DSP芯片的链路口插座L1-L6、匹配电阻排PR2-PR10。
电源电路包括电压转换芯片U4和电源插座J2,外接直流电源通过J2向本模块提供5V供电,U2将5V电压转换成3.3V电压。
本发明模块实施例所用主要元器件型号与参数如下:
电路符号 |
名称 |
规格型号 |
U10-U17 |
NAND闪存芯片 |
K9K4G08UOM |
U1 |
SHARC DSP芯片 |
ADSP-21060KS-160 |
U7 |
NOR闪存芯片 |
AM29F040B |
U8、U9 |
总线驱动芯片 |
SN74LVT162245DL |
U6 |
反向器(非门) |
SN74AHC14 |
U2 |
时钟振荡器 |
40MHz |
U5 |
可编程逻辑器件 |
LC4128V-75T100C |
L1-L6 |
SHARC DSP链路口插座 |
|
U3 |
复位产生芯片 |
MAX811 |
U4 |
直流电压转换芯片 |
IB0503LD |
S1 |
复位按钮 |
|
可编程逻辑器件LC4128V用来配合SHARC DSP芯片产生各存储芯片的接口协议,使SHARCDSP可以读写存储电路的数据。以下是对LC4128编程的VHDL语言源代码。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity device is
port(
PWRESET:in std_logic;
RESET:out std_logic;
Addr:in std_logic_vector(2 downto 0);
RD:in std_logic;
WR:in std_logic;
BMS:in std_logic;
MS0:in std_logic;
MS2:in std_logic;
FLAG0:out std_logic;
FLAG1:out std_logic;
CE:out std_logic;
SSD_RB0:in std_logic;
SSD_RE0:out std_logic;
SSD_CE0_N:out std_logic;
SSD_WE0_N:out std_logic;4
SSD_RB1:in std_logic;
SSD_RE1:out std_logic;
SSD_CE1_N:out std_logic;
SSD_WE1-N:out std_logic;
SSD_WP_N:out std_logic;
SSD_CLE:out std_logic;
SSD_ALE:out std_logic;
SSD_OE_N:out std_logic;
SSD_DIR:out std_logic);
end;
architecture behav of device is
begin
RESET<=PWRESET;
FLAG0<=SSD_RB0;
FLAG1<=SSD_RB1;
CE<=BMS and MS2;
SSD_WP_N<=’1’;
SSD_RE0<=’0’when Addr=2 and MS0=’0’and RD=’0’else’1’;
SSD_RE1<=’0’when Addr=6 and MS0=’0’and RD=’0’else’1’;
SSD_CE0_N<=’0’when Addr(2)=’0’and MS0=’0’else’1’;
SSD_CE1_N<=’0’when Addr(2)=’1’and MS0=’0’else’1’;
SSD_WE0_N<=’0’when Addr(2)=’0’and MS0=’0’and WR=’0’else’1’;
SSD_WE1_N<=’0’when Addr(2)=’1’and MS0=’0’and WR=’0’else’1’;
SSD_ALE<=’1’when Addr(1 downto 0)=0 and MS0=’0’and WR=’0’else’0’;
SSD_CLE<=’1’when Addr(1 downto 0)=1 and MS0=’0’and WR=’0’else’0’;
SSD_OE_N<=MS0;
SSD_DIR<=RD;
end;
通过本段代码对LC4128编程后,SHARC DSP芯片上电之后可以读取固化在NOR闪存中的控制软件并执行,也可以通过外部存储区/MS2对应的地址访问NOR闪存。NAND闪存的访问地址如下:
地址单元 |
功能 |
400000H* |
只能写入,设置所要访问的第一簇NAND闪存的芯片内单元地址 |
400001H |
只能写入,向第一簇NAND闪存的芯片发访问命令 |
400002H |
可读写,读写第一簇NAND闪存的数据 |
400004H |
只能写入,设置所要访问的第二簇NAND闪存的芯片内单元地址 |
400005H |
只能写入,向第二簇NAND闪存的芯片发访问命令 |
400006H |
可读写,读写第二簇NAND闪存的数据 |
*后面加H,表示这个数字是16进制表示值。
SHARC DSP芯片通过读取FLAG引脚的状态获知NAND闪存是否“准备好”。FLAG0与第一簇NAND闪存对应,FLAG1与第二簇NAND闪存对应。FLAG为高电平表示“准备好”,低电平表示“忙”。