SST28SF040与高速数字处理器的接口设计及编程技巧

时间:2007-04-29

SST28SF040与高速数字处理器的接口设计及编程技巧

武汉高压研究所华电公司 张蓬鹤
湖南大学电气与信息工程学院 邵 霞

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)A18-A8:行地址输入引脚。行地址决定每个段的地址。

(2)A7-A0:列地址输入引脚。用列地址来选择在每个段内的具体地址。

(3)DQ7-DQ0:数据输入/输出引脚。

(4)CE:使能信号输入端,低电平有效。

(5)OE:输出使能信号,低电平有效。

(6)WE:写使能信号,控制芯片的写入。

(7)VDD:工作电源,接5V。

(8)VSS:工作地。


操作命令序列概要介绍

SST28SF040操作指令序列的具体情况如表1所示

在表1中,PA为要写入数据信息的存储器地址,PD为要在地址PA处写入的数据信息。


操作命令及时序详解

字节编程命令

编程命令要以一个建立命令来开始,一旦建立命令被执行,则在下一个WE信号脉冲到来时,就执行编程命令,该命令仅占用2个总线操作周期。采用WE信号控制的编程命令的时序图如图2所示。

复位命令


复位命令使存储器复位,且进入读数据状态。向任何一个的地址写入FFH就能使存储器复位,该命令占有1个总线操作周期。

擦除命令

擦除命令包括段擦除命令和整片擦除。段擦除命令将擦除整个段内的所有字节(一个段包含256个字节),需要用一个建立命令和一个执行命令来初始化,占有2总线周期的操作。整片擦除命令同段擦除命令基本相似。

读命令

当CE、OE信号为低电平,WE信号为高电平时,芯片就进入读状态,并不需要特定的操作命令代码,只需给出要读取的地址,即可迅速读出该地址的内容。

读ID号命令

当向器件写控制字90H时,读地址0000H将输出厂家编号“BFH”;读地址0001H将输出器件编号04H。任何一个有效的命令都将终止这种操作。


应用举例

硬件接口

利用闪存在线可编程的特点,笔者在开发基于DSP的信号处理板时,在存储采样数据时用了一片SST28SF040,并利用这套硬件系统和仿真软件直接对SST28SF040进行了在线编程,具体的硬件接口电路图如图3所示。

在该系统中采用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,并取得了很好的存储效果。




  
上一篇:SPMC65P2404A在智能电饭煲中的应用
下一篇:基于双DSP的磁悬浮控制器的设计

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料