闪存S29AL016D在数据处理系统中的应用
扫描二维码
随时随地手机看文章
0 引言
随着数据处理系统智能化程度的越来越高,经常需要在无人干预的情况下,自动加载某些数据或参数到系统工作单元,以保证系统的正常工作。这些数据或参数通常都以数据文件形式保存在大容量、低功耗、可快速重复擦写的存储器中,而且掉电后数据不丢失,以便用户根据需要随时读取。S29AL016D70能很好的满足这些需求。
1 闪存S29AL016D简介
1.1 主要性能
S29AL016D70是Spansion公司生产的容量为2Mx8 bit/1 Mx16 bit的闪存器件,该器件采用3 V供电,访问时间为70 ns,工作温度范围为-40℃~125℃,静态电流200 nA,读数据电流为9 mA,擦写数据电流为20 mA可擦写次数在一百万次以上,具有存储容量大,速度快,功耗低等优点。S29AL016D的芯片逻辑图如图1所示。其中,A0~A19和D0~D15分别为地址线和数据线,CE为片选信号,低有效;OE为输出使能信号,低有效;WE是写选通信号,低有效;BYTE为8位或16位数据模式选择端,低电平为8位,高电平为16位。采用8位模式时,DO~D7为有效数据线,D15为地址线:RY/BY为准备好和忙状态输出。S29AL016D70内部包括35个数据段(Sector),其中段0到段30为64 KB,段31为32KB,段32、33为8 KB,段34为16 KB。
1.2 操作模式
S29AL016D70的操作模式如表1所列,实际工作中,经常用到的操作包括片擦除、段擦除、写入数据、读出数据等。
2 应用设计
2.1 硬件设计
根据设计需要,可利用数字信号处理器DSP通过双口RAM和232串行通信获得数据,并将数据保存在FLASH对应地址。
FLASH的数据读写有8位数据读写和16位数据读写两种方式。
利用232串口通信时,收发的数据大多都是8位。若在16位数据工作模式下,直接写入要浪费一半存储区,否则需将两个8位字节数据拼成一个16位字数据再写入,也会消耗很多工作时间,而采用8位数据工作模式,则不需要进行数据拼接,使用比较方便。因此,实际工作中,大多采用8位数据工作模式。同样,双口RAM也采用8位数据的双口RAM,设计中可使用IDT7132。图2所示是其硬件连接原理图。
工作中,若采用16位数据工作模式,只需将FLASH芯片的BYTE脚接至高电平即可。
2.2 操作模式
要向FLASH写入数据,必须先对FLASH进行擦除操作。擦出操作可通过给FIASH芯片写入擦除指令时序来完成,擦除的结果是将FLASH存储区中所有数据变为0xff(8位)或0xffff(16位),这样,可以方便地写入数据。[!--empirenews.page--]
擦除操作分为片擦除和段擦除两种。片擦除为整片擦除,段擦除只擦除指定段。为使用方便,在擦除某段数据时,应保证其他段数据不受影响。因此,软件多采用段擦除模式。其代码如下:
段擦除函数(flash基地址为0xb0000000);
void erase_flash(unsigned int sector_num)//sector为段号片擦除函数可参照编写
{
将数据保存在FLASH中后,若要对擦除后的段数据地址执行写操作,也可以通过给芯片写入编程操作时序来完成。写操作的结果是将地址总线指定地址的数据相应位1变为0,通俗的说,就是擦除后的数据各位都为1,写操作是将待写入数据的不为1的位变为0。其写操作函数如下:
[!--empirenews.page--] |
进行擦除和写入操作时,应在进行写入时序操作时,对寄存器的偏移地址左移一位进行操作,这是因为8位数据工作模式下,芯片地址线的最低位为A-1,而处理器地址线的最低位为A0;若是16位数据操作模式,寻址寄存器时,则不需要进行移位操作。
此外,16位数据操作模式和8位数据操作模式在编写指令时序时也有区别,即写入寄存器的指令的位数要和数据位数相同,如8位指令为:*(int*)(Oxb0000000+(0x555<<1))=0x80,而16位指令应为:*(int*)(0xb0000000+0x555)=0x8080。
3 结束语
应用本文的设计可以成功地完成对FLASH的各种操作,实现向FLASH中保存数据的功能。事实上,各厂家生产的FLASH在性能上和使用方法都有所不同,S29AL016D除了速度快、容量大之外,还有一个特点就是可选择性地进行8位或16位数据操作。但在软硬件设计上要做些相应改变,笔者根据工作实践写出一点体会,希望能给同行提供帮助。