摘要:介绍了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的脱机独立运行。实践表明:该系统稳定可靠,具有较高的应用价值。 |