摘 要:基于TI公司的高速数字信号处理器芯片,详细描述SST公司推出的28SF040闪存芯片的 性能特点、引脚功能,同时给出用其扩展DSP芯片的数据存储器空间的硬件设计电路及相应的软件编程方法。
DSP具有先进的并行处理结构,特别适合于信号处理,已经越来越多的应用于工业控制领域和各类仪器仪表的开发设计。TMS320F206是TI公司生产的16位定点DSP,它有1条程序总线和3条数据总线,采用了改进的哈佛结构,内含高度并行的32位算术逻辑单元、16
16位并行硬件乘法器、片内存储器、片内外设,并配备了高度专业化的指令集,而且功耗相当低,特别适合于信号处理。由于闪存能在不脱离系统的情况下修改其存储单元中的内容,且断电后仍能保持存储的片内信息,故在DSP处理器中的应用愈来愈广泛。本文即结合DSP处理器的特点,详细介绍SST公司的SuperFlashEEPROM的硬件电路设计方法及编程技巧。
SST28SF040是SST公司(Silicon Storage Technology)推出的高速可编程闪存。它具有512K 8的存储结构;芯片擦除及写入的时间快,整片擦除只需20秒,段擦除只需2毫秒,字编程写入时间仅为35微秒;可靠性高,能够重复写100,000次,数据可以保存100年不丢失;低功耗,在激活状态下仅需15mA的电流(5V工作电压),备用状态时仅需5uA的电流;具有32脚的PLCC/TSOP封装和PDIP封装SOI封装,在多功能的精密测试仪中具有广阔的前途。
引脚及功能
引脚分配情况如图1所示
图1 SST28SF040的32pin_PLCC封装引脚分配图(略)
引脚功能
(1)A18-A8:行地址输入引脚。行地址决定每个段的地址。
(2)A7-A0:列地址输入引脚。用列地址来选择在每个段内的具体地址。
(3)DQ7-DQ0:数据输入/输出引脚。
(4)CE:使能信号输入端,低电平有效。
(5)OE:输出使能信号,低电平有效。
(6)WE:写使能信号,控制芯片的写入。
(7)VDD:工作电源,接5V。
(8)VSS:工作地。
操作命令序列概要介绍
SST28SF040操作指令序列的具体情况如表1所示
表1 SST28SF040操作指令序列表(略)
在表1中,PA为要写入数据信息的存储器地址,PD为要在地址PA处写入的数据信息。
操作命令及时序详解
字节编程命令
编程命令要以一个建立命令来开始,一旦建立命令被执行,则在下一个WE信号脉冲到来时,就执行编程命令,该命令仅占用2个总线操作周期。采用WE信号控制的编程命令的时序图如图2所示。
图2 用WE信号控制的编程命令时序图(略)
复位命令
复位命令使存储器复位,且进入读数据状态。向任何一个的地址写入FFH就能使存储器复位,该命令占有1个总线操作周期。
擦除命令
擦除命令包括段擦除命令和整片擦除。段擦除命令将擦除整个段内的所有字节(一个段包含256个字节),需要用一个建立命令和一个执行命令来初始化,占有2总线周期的操作。整片擦除命令同段擦除命令基本相似。
读命令
当CE、OE信号为低电平,WE信号为高电平时,芯片就进入读状态,并不需要特定的操作命令代码,只需给出要读取的地址,即可迅速读出该地址的内容。
读ID号命令
当向器件写控制字90H时,读地址0000H将输出厂家编号“BFH”;读地址0001H将输出器件编号04H。任何一个有效的命令都将终止这种操作。
应用举例
硬件接口
利用闪存在线可编程的特点,笔者在开发基于DSP的信号处理板时,在存储采样数据时用了一片SST28SF040,并利用这套硬件系统和仿真软件直接对SST28SF040进行了在线编程,具体的硬件接口电路图如图3所示。
图3 SST28SF040与DSP系统的硬件接口示意图(略)
在该系统中采用TMS320F206作为中央信号处理器,用74LS245实现对超过64K的存储器地址空间进行选择。
软件程序
TMS320F206的用户可以用汇编语言或C语言进行源程序的编写,而C语言开发出的系统易于维护,可靠性高,可移植性好,故下面介绍用C语言编写的SST28SF04的开发程序。这里仅给出段擦除和字节编程程序,对于整片擦除的程序可以参看段擦除程序。
ioportunsigned intport1823; #defineioadr0port1823
ioportunsigned intport1820; #defineioadr1port1820
ioportunsigned intport1822; #defineioadr2port1822
ioportunsigned intport0418; #defineioadr3port0418
ioportunsigned intport041b; #defineioadr4port041b
ioportunsigned intport0419; #defineioadr5port0419
ioportunsigned intport040a; #defineioadr6port040a
ioportunsigned intport041a; #defineioadr7port041a
ioportunsigned intporta000; #defineRegCsporta000
void FlashSDP()/*存储器软件数据保护程序*/
{ioadr0=0; ioadr1=0; ioadr2=0;
ioadr3=0; ioadr4=0; ioadr5=0;ioadr6=0;
} /*共需7个总线操作周期*/
void UnFlashSDP() /*存储器软件数据不保护程序*/
{ ioadr0=0; ioadr1=0; ioadr2=0;
ioadr3=0; ioadr4=0; ioadr5=0;ioadr7=0;
} /*共需7个总线操作周期*/
int EraseFlashSector(int Cs,unsigned int *Adr)
{ int m; /*开始段擦除程序*/
for(m=0;m<3;m++)
{*Adr=0xffff;
UnFlashSDP();
RegCs=Cs; *Adr=0x20; *Adr=0xd0;
}
FlashSDP(); *Adr=0xffff;
} /*段擦除程序结束*/
int WrFlashByte(int *DataIn,int Cs,int *AdrIn,int Len)
{inti; int b; int *Data,*Adr; /*写入字节编程程序开始*/
Data=DataIn;Adr=AdrIn; *Adr=0xffff;
UnFlashSDP(); RegCs=Cs;
for(i=0;i<Len;i++,Adr++,Data++)
{ if(*Data==0xffff)continue;
*Adr=0x1010; *Adr=*Data;
}
FlashSDP();
*(int *)0xffff=0xffff; RegCs=Cs;
}/*写入字编程程序结束*/
结束语
本文详细论述了SST28SF040的引脚功能、操作命令和使用方法,这些同样可以作为单片机、微处理器及PC机等其他应用系统对于闪存编程的直接参考。笔者在GKNDC-H型高压开关特性精密测量仪中就使用了SST28SF040,并取得了很好的存储效果。
|