首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

闪存28F016S5(INTEL)及其在DSP仿真环境下的编程![转帖]

闪存28F016S5(INTEL)及其在DSP仿真环境下的编程![转帖]

1. 闪存28F016S5的特点及接口信号

1.1 特点
  28F016S5是Intel公司最近推出的2MB闪烁存储器,它具有以下特点;
  ●采用灵巧电压技术,5V Vcc和5V Vpp;
  ●85ns的读取速度;
  ●增强的数据保护特性。当Vpp=GND时,完全保护;还可以进行灵活的块保护,电源变动过程中停止块写入;
  ●增强的自动延时选项。编程时延时读;块擦除时编程延时和读延时;
  ●具有高密度64kB对称擦除块结构,16Mbit 32块;
  ●高循环使用能力,可擦除10万次;
  ●低电源管理,完全休眠模式;自动节电模式,在静态模式中降低Icc。
  ●自动编程和块擦除,提供命令接口和状态寄存器;
  ●具有与SRAM兼容的写入接口;
  ●采用了ETOXTMV非易失性闪存技术。
1.2 引脚排列和功能
  28F016S5有40脚TSOP和44脚PSOP两种封装形式,其引脚图如图1所示。
  引脚功能分别说明如下:
  A0~A20:21根地址线,输入信号,寻址范围2M;
  DQ0~DQ7:8根双向输入/输出数据线,同时存取一个字节;
  CE:片选信号,输入,低电平有效;
  RP:复位/休眠信号,输入,低电平时处于休眠状态;
  OE:输出使能信号,输入,低电平有效;
  WE:写有效信号,输入,低电平有效;
  RY/BY:准备好/忙信号,输出“1”为准备好,“0”为忙;
  Vpp:编程电压,5V或12V;
  Vcc:工作电压,5V;
  GND:数字地。
1.3 读和写*作时序图
  28F016S5的读、写*作时序图如图2所示。
  依据时序图,在读闪存数据时,可将CE信号同OE信号相连,接系统地址译码输出线;WE与系统读/写控制线相连;RP接高电平;Vpp接地;地址线、数据线分别与系统的地址线、数据线相连。当对闪存进行写入时,可将CE信号同系统地址译码输出线相连;WE与系统读/写控制线相连;RP接高电平;Vpp接Vcc;RY/BY接系统的某一输入口,系统通过此信号口检测闪存的内部状态,以匹配系统处理器与闪存的时序;OE接系统的某一输出口,当对闪存进行写*作时,系统输出高电平。
  28F016S5闪存内部提供了一个用户命令接口(CUI),这是系统处理器与闪存内部*作的接口。同时,它还有内部写状态机(WSM),能够识别系统处理器命令实现块擦除、写入等*作。另外,还提供了状态寄存器,用于标识各种*作的结果。

2. 对28F016S5编程的硬件连接

  一般地,对闪存的编程是通过通用编程器来实现的。作者在日前开发的TMS320C32 DSP图像处理板上,使用了一片闪存28F016S5用于存储图像处理程序,利用该板及仿真软件直接对28F016S5编程,获得了成功。这不仅节省了购买通用编程及接插件的费用,还减少了对用户程序进行格式转换的麻烦,节省了系统开发的时间。在28F016S5 DSP仿真环境下直接对28F016S5进行编程的系统硬件原理图如图3所示。
  仿真器一端通过仿真信号线与图像处理板上的TMS320C32 DSP芯片相接,另一端通过接口板与PC机相接;地址译码电路由PLD实现;图像处理板上扩充的32位RAM是由4片8位的RAM芯片组成,其中RAM0的数据线接DSP的D0~D7;OE接DSP的STRB0_B0;RAM1的数据线接DSP的D8~D15;OE接DSP的STRB0_B1;RAM2的数据线接DSP的D16~D23,OE接DSP的STRB0_B2;RAM3的数据线接DSP的D24~D31;OE接DSP的STRB0_B3;RAM0RAM3上的地址直接与DSP的地址线相接,写信号WE与DSP的R/W信号相接;片选信号CE与地址译码电路某输出线相接。本图像处理板上扩充的32位RAM的地址为:100000H~17FFFFH。
  闪存28F016S5的地址线A0~A20直接与DSP相应的地址线相接,数据线D0~D7直接与DSP的D0~D7相接,写信号WE接DSP的R/W信号。RP、Vpp两信号直接与电源Vcc相接,片选信号CE接地址译码电路某一输出线,在本图像处理板上闪存28F016S5的地址范围为:900000H~AFFFFFH。RY/BY与DSP的XF0相接(XF0应设置为输入口),输出使能信号OE与DSP的XF1相接(XF1应设置为输出口)。

3. 在DSP仿真环境下对28F016S5的软件编程

  对闪存28F016S5编程的基本思想是:将用户程序(如图像处理程序)编译链接生成OUT目标文件后,在DSP仿真环境下,装载到本图像处理板上的RAM中的某区域,如起始地址为100000H的区域;然后将写入控制程序装载到RAM的另一个区域,如起始地址为170000H的区域,应保证两个程序没有重叠(只需在这两个程序的链接命令文件中定义好装载起始地址即可)。最后运行该写入控制程序,从RAM中100000H单元开始,逐字地将用户程序写入闪存28F016S5中。
  需要说明的是,在对闪存28F016S5写入之前,应对其原有内容进行擦除,擦除是以块为单位进行的,64kB为一块,2MB共32块。只需对某块中某任意单元先后写入20H和D0H两数即可将该块擦除。另外,对闪存28F016S5中任一单元写入数据,均应先写入10H或40H。尤其应该注意的是DSP与闪存28F016S5的时序匹配问题,因此,在对闪存28F016S5任一单元写入前,都必须先判断RY/BY的状态,当它为高电平时,表示闪存28F016S5已准备好,可以向它写入数据,低电平时则不能写入。从RAM单元中取出的数据为32位,而闪存28F016S5的数据宽度为8位,其数据线与DSP低8位数据线相连,因此,从RAM中取出的每一个数据需要通过移位的办法向闪存28F016S5写4次。
  对闪存28F016S5编程进行控制的程序并不复杂,源程序如下:
   ·DATA ;定义数据段
OFFSET·WORD 10000H ;擦除时,地址的增量为64k(每块为64k)
ADDR_S ·WORD 100000H ;用户程序存放的起始地址
ADDR_F ·WORD 900000H ;闪存28F016S5的起始地址
LENGTH· WORD 20H ;用户程序长度-1,这里假定为20H
     ·TEXT ;定义代码段
   LDI 20H,IOF ;设置XF0为输入口,XF1为输出口
;对闪存28F016S5原有内容进行擦除
   LDI @ADDR_F,AR0 ;闪存28F016S5起始地址赋给AR0
     LDI @OFFSET,IR0 ;地址增量赋给IR0
     LDI 31,RC ;共擦除32块
     RPTB CLEAR ;重复执行到CLEAR处,共执行RC+1次
     CALL XF0 ;调用子程序XF0
     LDI 20H,R0; 向28F016S5中AR0所指单元送第一个数20h
     STI R0,*AR0;
     CALL XF0 ;
     LDI 0D0H,R0 ;送第二个数D0h
CLEAR: STI R0,*AR0++(IR0);地址值增加64k,指向下一块
;将用户程序逐字写入闪存28F016S5中
   LDI 10H,R1;对28F016S5单元写入数据前,先写入10H
    LDI @ADDR_F,AR1;闪存28F016S5起始地址赋给AR1
    LDI @ADDR_S,AR0;用户程序存放的起始地址赋给AR0
    LDI @LENGTH,RC;程序长度-1值赋给RC
    RPTB WRITE;重复执行到WRITE处,共执行RC+1次
    CALL XF0;
    STI R1,*AR1;写数据前,先写入10H
    CALL XF0;
    LDI *AR0++,R0;取用户程序一个字(32位),地址值加1指向下一字
    STI R0,*AR1++;将低8位写入闪存28F016S5,闪存地址加1
    CALL XF0;
    STI R1,*AR1;先写入10H
LSH -8,R0 ;右移8位
    CALL XF0
    STI R0,*AR1++;将次低8位写入闪存28F016S5,闪存地址加1
    CALL XF0
    STI R1,*AR1;先写入10H
    LSH -8,R0;右移8位
    CALL XF0
    STI R0,*AR1++;将次高8位写入闪存28F016S5,闪存地址加1
    CALL XF0
    STI R1,*AR1;先写入10H
    LSH -8,R0;右移8位
    CALL XF0
WRITE: STI R0,*AR1++;将高8位写入闪存28F016S5,闪存地址加1
  RETS
; 判断XF0输入是否为高电平的子程序
XF0: AND 0FFFFFFBFH,I0F;使XF1输出低电平
LOP: TSTB 08H,I0F;XF0为高电平吗?
   BZ LOP ;若低,跳至LOP继续查询
   OR 40H,I0F ;若高,使XF1输出高电平
   RETS;子程序返回
   ·END ;程序结束

4. 结束语

  本文论述的虽然是对28F016S5闪存在TMS320C32 DSP仿真环境条件下的编程方法,但可作为在单片机、微处理器及PC机等其它多种应用系统中对闪存编程的直接参考。
返回列表