摘 要:文中介绍了TMS320VC5402系列DSP的各种自举引导、启动加载方法,分析了各种方法的整个跟踪过程,并结合实例着重研究了C5402的FLASH加载方式和实现过程以及在线烧写FLASH的技巧,并提出了开发DSP应用系统中应注意的一些问题。另外,也对16位并口FLASH加载过程及自举表作了详细的介绍。
关键词:DSP;Bootloader;FLASH
引言
DSP芯片(数字信号处理器)已成为人们日益关注并得到迅速发展的具有前沿尖端技术的一种集成电路,并且得到越来越广泛的应用。TI公司推出的5000系列DSP具有高性能、低功耗等优良性能,一推出就受到了用户的欢迎。正由于其快速的数字信号处理能力,5000系列DSP被广泛应用于电信、雷达、仪器仪表、图像处理等许多方面,与单片机一起完成数字信号的处理和控制。其应用范围的广泛性决定了必须有灵活多样的加载方式与之相适应。正因为如此,它的加载方式也较单片机的加载要复杂得多。
本文立足实际经验,对DSP的各种加载方法进行了阐述,并较为详细地介绍了FLASH并行加载方法,研究了在线烧写应用程序的方法以及应用中的注意事项。
DSP芯片的Bootloader
从表1可以看出TMS320VC5402的片内ROM区(F800h~FBFFh)是片内自引导程序区,片内自引导就是利用片内ROM中的引导程序将程序从外部(FLASH)加载到程序存储器中运行,TMS320VC5402片内掩模ROM中固化的引导装载(Bootloader)程序用于在上电复位时把用户程序从外部引导到片内RAM或片外高速RAM中,以保证其全速运行。TMS320VC5402提供的片内引导方法有:主机口HPI模式、8位串口EEPROM模式、8位或16位并口模式、8位或16位I/O模式和8位或16位串口模式等。
表1:片内ROM(略)
(1) 主机端口(HPI)加载:程序的执行代码由主机通过主机接口(HPI)加载到DSP的片内存储器;
(2) 并行加载:加载程序通过外部并行总线从数据空间读取自举表,自举表内包含有程序代码部分、每部分代码的目的地址、加载成功后程序的执行地址以及其它一些配置信息;
(3) 标准串口加载:加载程序通过多通道缓冲串口(MBSP)来接收自举表,并根据自举表中的信息来加载代码。MBSP0支持16位的串行接收方式,MBSP1支持8位的串行接收方式;
(4) 8位或16位I/O加载:加载程序通过使用异步握手协议从I/O的0H口读取自举表;
(5) 8位EEPROM串口加载:加载程序从一个连接到MBSP1的串行EEPROM来接收数据。
DSP的自引导和在线烧写
图1表示了整个DSP引导过程。首先判断DSP芯片的MP/MC是否为0,然后检测INT2信号、INT3信号,执行各自的引导程序等。
图1 自引导过程(略)
BOOT在自引导之前,首先进行初始化:
0000:F800:
SSBX INTM; INTM=1,中断关闭
STM #0FFFFh,IFR; 清除中断标志
LD #0h,DP; 数据存储页指针为0
ORM #02B00h,ST1; 状态寄存器1初始化
ORM #0020h,PMST; OVLY置1
STM #07FFFh,SWWSR; 置总线等待周期为最大值
初始化工作包括:使中断无效(INTM=1),内部RAM映射到程序/数据区(OVLY=1),对程序和数据区均设置7个等待状态。初始化结束后就进入DSP自引导程序。
根据实际需要,我们采用了16位的并口模式,具体的连接图如图2所示。上电前设置MP/MC=0,上电后,首先置DSP的IS引脚为低电平,读取I/O空间地址0FFFFh单元的值,接着判断数据空间的0FFFFh单元的值,判断是8位BOOT还是16位BOOT模式,然后根据EPROM的数据组织结构进行读取认可,把片外数据的内容BOOT到DSP片内的程序区,根据程序的跳转指令执行相应的程序。表2是FLASH上的存储单元数据值的结构表。
图2 DSP与FLASH的连接图(略)
根据表2 FLASH的数据存储结构设计,把应用程序通过CCS软件(TI公司的DSP开发软件)在线烧入程序存储器。TMS320VC5402芯片的4000h~0FFFFh存储单元是可以通过DSP的PMST寄存器的DROM位来设置成片外存储单元,这样就通过设置DROM位把4000h~0FFFFh设置成DSP的片外存储单元,应用程序就烧录到存储器SST39VF400A的4000h~0FFFFh单元中,上电后自动执行Bootloader,把SST39VF400A中的应用程序调入到DSP的片内存储单元,以便高速运行。下面是根据表2
FLASH的数据结构进行烧写程序的部分内容。
表2:FLASH的数据结构表(略)
flashprog: stm #0ffffh,ar2
ssbx xf
stm #5555h, ar4
ld #0aah,a
stl a,*ar4
stm #0aaaah,ar4;first
ld #55h,a
stl a,*ar4
stm #5555h,ar4;two
ld #0a0h,a
stl a,*ar4 ;three
rpt #3
ld *ar3+,a
st #4000h,*ar2
rpt #3;four:load data
rpt #200 ;delay 20us
stm #flashdata,ar2
stm #flashword,ar3
stm #7h,brc
rptb endprog1-1
ssbx xf;;
stm #5555h, ar4
ld #0aah,a
stl a,*ar4
stm #0aaaah,ar4;first
ld #55h,a
stl a,*ar4
stm #5555h,ar4 ;two
ld #0a0h,a
stl a,*ar4 ;three
rpt #3;
nop
mvdd *ar3+,*ar2+
rpt #3;four:load data
nop
rpt #200;delay 20us
nop
在整个程序烧录到FLASH过程中严格遵守SST39VF400A(FLASH)的读写时序,在往FLASH上写数据时,首先必须进行有效的擦除,同时要满足SST39VF400A的写时序。SST39VF400A的写数据时间至少为90ns,由于DSP的频率很高,单周期指令为10ns,这样,在连续写数据时,中间应该插入多个等待状态,否则会出现时序冲突,不能正确的写入数据。整个烧写过程要根据SST39VF400A的读写过程进行,先连续写入几个命令字,然后才能写入程序。表3是SST39VF400A的几个命令时序表。
表3:SST39VF400A的命令字时序(略)
上面的烧写程序就是表3的命令时序的各个格式完成的:1)在5555h地址单元写入数据0AAh;2)在2AAAh地址单元写入数据55h;3)在5555h地址单元写入数据0A0h;4)接着在0FFFFh地址单元写入数据4000h;5)完成第一个数据的写入,插入等待,重复1~3三步过程;6)接着在地址单元4000h处写入数据10AAh,完成第二个数据的写入,这样不断的重复,写入所有要写入的数据。在烧写程序过程中,可以把需烧写的程序以数据的格式存储到DSP的片内存储单元,然后执行烧写程序,根据表3中的SST39VF400A的数据存储结构格式,把需要烧写的数据(即应用程序)搬移到FLASH上。整个烧写过程可以在TI公司的CCS软件中进行,不需要另外的烧写器进行程序的烧写。
结束语
本文介绍了C5402芯片的Bootloader过程、各种引导方式,详细分析了在线烧写FLASH的实际应用,实践证明在线烧写FLASH(通过TI公司的CCS软件)是一种低成本、简捷、有效的方法。
|