摘要:介绍了ATMEL公司低电压AT29LV系列存储器的结构、特点及性能。同时结合TI公司DSP芯片TMS320VC5402的并行装载方式,给出了AT29LV256在实际应用中的硬件原理图和在线编程注意事项。以亮灯程序为例,给出了AT29LV256在线编程的关键程序。
Flash存储器是一种高密度、非易失的电可擦写存储器。它具有功耗低、容量大、速度快等特点,而且单位存储比特的价格比传统的EPROM要低,因而大量应用于数字信号处理系统中。Flash 可分为并行Flash和串行Flash。串行Flash与外围芯片连接简单,可节约印制板空间,但存储量相对较小且成本高。同时串行通信速度较慢,编程也比较复杂。并行Flash芯片则具有存储量大、速度快、使用方便等优点。ATMEL公司生产的AT29LV系列低电压存储器就是一种并行、高性能、可支持3V在线编程的Flash存储器。对Flash编程除了可以采用专用的硬件编程器把程序代码烧写到Flash中外,还可利用DSP的开发系统通过软件编程来实现同样的功能。
TMS320VC5402(以下简称C5402)是美国德州仪器公司(TI)推出的一款性价比极高的定点数字信号处理器(DSP)。该芯片内置4k×16bit片内屏蔽式ROM(F000-FFFF),且在4kB ROM资源里包含了Bootloader程序。C5402的Bootloader在系统加电时会把外部源程序传送到内部存储器或内部程序空间。它允许程序放在外部较慢的存储器或微处理器中,并将其调到高速的DRAM存储器中运行,从而大大减小了对C5402内部掩膜的需要,降低了电路的设计成本。
本文在笔者实际使用经验的基础上,详细介绍了AT29LV256在C5402并行引导装载模式下的软件编程技术,给出了并行装载的数据流和系统的硬件设计,以亮灯程序为例给出了对AT29LV256编程时的具体步骤及方法。
1 AT29LV256编程技术
AT29LV256是ATMEL公司生产的容量为32k×8bit、可支持3V在系统编程的Flash存储器。AT29LV256将存储空间分成512个独立的扇区,每个扇区有64个字节,其中A6~A14用来选择扇区地址,A0~A5选择字节地址。每个扇区的编程操作长需要20ms,而其读操作与一般的SRAM相同,时间为70ns 。AT29LV256在编程之前,片内对应扇区会自动擦除,因而不需要额外的擦除命令。同时芯片还提供了六个软件控制字以用于完成对整片的擦除,其整片擦除命令见表1所列。
表1 AT29LV256全片擦除命令
次 序 | 1st | 2nd | 3rd | 4th | 5th | 6th |
地 址 | 5555H | 2AAAH | 5555H | 5555H | 2AAAH | 5555H |
命令字 | 5555h | AAh | 2AAAh | 55h | 5555h | 90h |
AT29LV256的编程操作是以扇区为单位进行的。它内部有64字节的数据缓冲器。如果写入缓冲器的字节数不足64字节,则编程时自动将未写入的字节擦除为FFH。一旦某一扇区中的字节被装入,这些字节将同时在内部编程时间进行编程,此时若有数据装入,则会产生不确定的数据。每一个新装载的数据若要被编程,必须有WE由高到低的跳变,这一跳变需要在150μs内完成,如果超过150μs,器件会自动进入扇区内部编程方式。为了防止意外的编程操作,AT29LV256提供有软件保护编程功能,在对Flash 的每个扇区进行编程时,必须先将3个命令字正确地写入到对应的地址单元,然后才能向片内编写程序。在对每一个扇区编程之前,都要执行相同的三字节指令序列,采用软件保护编程的具体流程如图1所示。
通过AT29LV256提供的软硬件操作可识别芯片的系列号和型号。当按图2顺序写入控制字后,即可读到产品识别码1F和器件识别码BC。器件识别完成后,若需开始编写程序,则应退出器件识别,并延时20ms,为了减小编程的等待时间,AT29LV256提价有下列两种检测编程周期是否结束的方式:
(1) 循环检测方式。该方式首先读出写入本扇区一个单元的内容,若其I/O7位是写入该单元真实值的反码,则表明编程周期没有结束;若为实际值,则表明编程结束。
(2) 检测I/O6方式。该方式在扇区编程期间将连续读出任意单元地址的内容,若I/O6在连续读出时状态不一样,说明编程没有结束,若相同,则表明编程周期已经结束。
2 C5402的自引导装载模式
C5402上电后,通常首先检查MP/MC引脚的状态:如果为高电平,说明DSP处于微处理器工作模式,此时便可从外部程序存储器0FF80h地址处开始执行用户程序;若为低电平,说明DSP被设置为微计算机模式,此时则从片内ROM的0FF80h地址开始执行程序。另外,在C5402的0FF80h地址处存放着一条跳转至0F800h处执行DSP自行引导装载(Bootloader)程序的指令。
当C5402执行Bootloader程序时,将会按HPI引导装载模式→串行EEPROM引导装载模式→并行引导装载模式→标准串行口引导装载模式→I/O口引导装载模式的顺序循环检测,以决定执行哪种启动模式。
C5402的并行引导装载模式是将程序代码数据从外界EEPROM或Flash的相应DSP数据寻址区中加载到片内DARAM或系统的扩展存储器SRAM内。由于C5402的数据区寻址范围为64k 字 ,因此在不自行编写Bootloader程序的情况下,并行引导装载模式只能装载32k字的程序或数据。当程序数据大于32k时可将自己编写的并行装载内核程序通过片内装载程序传送到片内DRAM中,然后再运行转载内核程序以将大于32k字的程序数据送到片外SRAM中。
若采用并行装载模式对程序进行加载,则应根据并行装载的格式来配置Flash的程序数据存储空间。可先在DSP对应的数据空间FFFEH和FFFFH地址内写入要存放程序的地址,然后根据并行装载的数据流将标识控制字、各个寄存器的初始化值、装载后的起始运行地址、程序段的大小和装载地址依次写入Flash的存放程序地址中,再写入所编写的程序,表2所列是Flash中的并行引导源程序数据流。其程序段的大小以及起始运行地址可根据系统仿真时生成的.MAP文件来确定。
表2 Flash中的并行引导源程序数据流
数据区地址(H) | 内容(H) | 含 义 |
8000 8001 | 08 AA | 8位并行引导标志 |
8002 8003 | 88 06 | SWWSR寄存器初值 |
8004 8005 | 00 00 | BSCR寄存器初值 |
8006 8007 | 00 00 | 程序入口XPC |
8008 8009 | 00 80 | 程序入口地址 |
800A 800B | 00 0B | 程序段长度 |
800C 800D | 00 00 | 存放目标XPC |
800E 800F | 00 80 | 存放目标地址 |
8010 8011 | F6 BD | 程序代码1 |
…… | …… | …… |
801F 801F | FC 00 | 程序代码N |
8020 8021 | 00 00 | 程序块结束标志 |
…… | …… | …… |
FFFE FFFF | 80 00 | 程序存储首地址 |
3 基于AT29LV256和DSP的硬件设计
下面以AT29LV256与C5402组成的硬件系统为例对Flash在并行装载模式中的应用进行详细说明,其硬件系统原理框图如图3所示。因为AT29LV256为32k×8Bit存储器,因此不需要扩展外部SRAM。本系统采用Altera公司的EPM3064来完成C5402与AT29LV256之间的逻辑转换,EPM3064内部的编程逻辑如图4所示。
当C5402上电复位装载时,由于Bootloader程序在初始化时,XF被设置为高电平,因此,C5402可以通过EPM3064总的逻辑,将AT29LV256 08000h—0FFFFh单元中的数据读到C5402对应于0000h—3FFFh寻址区的片内DARAM中。在系统进入并行引导装载模式后,C5402会从数据寻址为0FFFFh的单元(A15=1,选中Flash)中读取将要载入的程序存储区的首地址,然后从程序存储首地址处将标识控制字、各个寄存器的初始化值、装载后的起始运行地址、程序段的大小以及装载地址依次装载到片内DRAM中。在EPM3064逻辑控制中使用XF是为了在bootload之后释放Flash所占用的数据空间。当主处理程序的条语句为RSBX XF,也就是置XF引脚为低电平时,CE将输出片选无效信号,从而可以让出数据空间。
4 系统软件设计
该系统软件编程的在于按照并行装载数据流格式对Flash进行编程。下面以向AT29LV256烧写一个简单的亮灯程序为例来说明对Flash进行软件编程时应注意的问题和关键步骤。
程序如下:
.mmregs
.data
kaishi: .word 08AAh,7FFFh,8806h,0000h,0080h,000bh,0000h,0080h ;并行装载数据流中的各数据参数
.global_c_int00
.text
_c_int00: ;这里还应有必要的初始化
stm #100h,ar1
stm #0fffeh,ar2 ;将8000入口地址写到FFFeH和FFFFH中
st #8000h,*ar1
call prog0 ;开始烧写需要先写入命令字
call prog1 ;将16位数据分成两个8位烧写到Flash中
stm #kaishi,ar1 ;将并行数据流各参数写到8000h开始的单元
stm #8000h,ar2
stm #07h,brc
rptb loopa
call prog1
loopa: nop
stm #qq,ar1 ;将亮灯程序数据接着并行参数烧写到Flash中
stm #0bh,br ;程序大小为0bh
rptb loopb
call prog1 ;因为总共烧写没超过64字节,因此不用执行命令字
looopb: nop
;prog0为软件保护模式下写控制字子程序,每编程64字节执行
prog0: stm #0d555h,ar3
st #0aah,*ar3
stm #0aaaah,ar3
st #55h,*ar3
stm #0d555h,ar3
st #0a0h,*ar3
ret
; prog1为16位数分成8位数据烧写子程序
prog1: ld *ar1,-8,a
and #0ffh,a
stl a,*ar2+
ld *ar1+,a
and #0ffh,a
stl a,*ar2+
ret
;以下一小段为亮灯程序,通过设置XF引脚的高低电平可使灯闪烁!
.sect "chengxu"
qq: rsbx xf
rpt #0ffffh
nop
ssbx xf
b qq
ret
.end
5 结束语
本文介绍的基于AT29LV256编程技术的TMS320VC5402并行引导装载方案,可以在没有专用烧写器的情况下对Flash进行编程,从而实现了DSP的脱机独立运行。实践表明:该系统稳定可靠,具有较高的应用价值。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。