TMS320VC5402的并行引导装载方案的研究与设计
摘要:介绍了TMS320VC5402并行Bootloader的原理,分析了设计过程中需要考虑的重点问题并提出了解决问题的可靠的电路方案,设计的电路具有良好的可扩展性。
关键词:TMS320VC5402 Bootloader CPLD EPROM
TMS320VC5402(以下简称C5402)是德州仪器公司1999年10月推出的性价比极高的定点数字信号处理器(DSP)。与TMS32054X系列的其它芯片相比,C5402以其独有的高性能、低功耗和低价格特性,使得一推出就受到业内用户的欢迎。它大多应用在如机顶盒(STB)、数字无线通信等要求能脱机运行的内嵌式系统中。但它的内部结构和片内掩模的引导装载(Bootloader)程序与C54X系列的其它DSP处理器有较大差异。C5402为脱机运行提供了五种启动装载模式:HPI端口启动模式、标准串口启动模式、I/O口启动模式、串口EEPROM启动模式和并行启动方式。对于以C5402为核心的独立系统中,并口加载方案被认为是最佳的。因为前三种方案只适用于由其它处理器为C5402提供运行代码的多处理器系统中,后两种方案虽然都可以适应以C5402为核心的独立系统,但是串口EEPROM启动模式中只支持价格偏高的SPI端口EEPROM,而并口启动模式却可以采用EPROM,而且并行EPROM和FLASH种类很多,有的价格较低,因而可以充分体现系统的性价比优势。
基于实践经验,本文详细介绍并行Bootloader的实现方法和方案设计重点,并介绍一种方便可靠的可扩展EPROM Bootloader方案。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1 C5402的Bootloader原理
C5402的Bootloader在系统加电时把外部源程序传送到内部存储器或内部程序空间。它允许程序被存放在外部慢速的存储器中,并调到高速的存储器中运行。这可大大减小C5402内部RAM掩模的需要,降低电路设计的成本。C5402的内部ROM中有固化好的加载程序。如果DSP的MP/MC管脚接低,在DSP加电RESET时,程序就从内部ROM的FF80H地址开始行运行。在FF80H处,有一条跳转到BOOT程序的指令,执行内部固化好的BOOT程序。BOOT程序在运行搬移程序之前,首先进行初始化,工作包括关闭中断、将内部RAM映射在程序/数据空间,以及为访问数据和程序空间设置的七个软件等待等;然后根据设计完成不同方式下程序的搬移。C5402共有上面讲述的5种加载方式。这里只讨论并口加载方案的设计,其流程如图1所示。
在判断前几种加载方式无效后,Bootloader从I/O空间0FFFFH处读取一个16位的程序起始地址。然后根据这个地址从外部数据区读入一个字,判断是否为10AAH。如果是,就采用16位的搬移方式;否则,就判断读入的字的低位字节和下一个地址读入的字的低字节组成的16位字。如果是08AAH,就采用8位并行加载方式;否则,就在外部数据空间的0FFFFH读取一个16位的程序起始地址,然后重复上面的检测方法。本文采用在外部数据空间0FFFFH处存放程序起始地址的方案。
2 方案设计中需要考虑的重点问题
C5402并口Bootlader需要将映射在数据区的程序由慢速的EPROM搬到快速的RAM中运行,其设计主要需要考虑三个方面的问题。
2.1 速度匹配问题
C5402的工作频率可以达到100MHz。一般的并口EPROM是无法可靠工作的,如何使C5402顺利装载而又能使C5402达到最高的工作效率是要考虑的一个重点。
2.2 3.3V和5V混合逻辑设计
C5402的外围工作电压为3.3V,而它的外围器件包括EPROM一般工作在5V,必须为DSP和外围芯片设计一个安全可靠的接口。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2.3 高效协调地利用空间
如何高效方便地利用存储空间和I/O端口,例如重新利用并口EPROM在bootloader时占用的数据空间、如何协调外设和地址分配等都是需要考虑的问题。
3 系统硬件电路设计
图2为一种具有良好扩展性的C5402的Bootloader方案设计原理图。
图中,DVDD为3.3V供电。C5402的时钟输入为20MHz,此时系统工作频率就是CLKMD1、CLKMD2、CLKMD3组合产生的倍频系数和输入时钟的乘积。C5402的工作频率可达到100MHz。虽然C5402在RESET时自动插入7个软件延时,但这只能满足较贵的速度不低于70ns的EPROM接口,而一般的EPROM无法可靠工作。为了解决速度匹配问题,利用了C5402的倍频可以由硬件和软件两种方式设置的特性。在系统加电时将C5402的倍频选择为2,即将CLKMD1、CLKMD2、CLKMD3分别设置为1、0、0,让DSP工作在40MHz的频率,等加载完成之后再通过软件将C5402的工作频率调高到100MHz,使C5402达到最大的工作效率。实验证明这是可行而且可靠的。
C5402的地址总线和数据总线挂有两个164245,它是TI公司生产的3.3V和5V双向收发器,个164245可以看作两个8位收发器或一个16位收发器。它由3.3V和5V双电源供电,收发的方向由两个方向控制端管脚(DIR)控制。它串在地址总线和数据总线上,既可为DSP提供驱动5V数字电路的能力,也可为DSP提供5V信号读入的保护。对于地址总线,只是输出信号,所以将同地址总线相接的164245的DIR信号接高,使其只完成从3.3V到5V的转换。使用164245,总线就可以为扩展的多个外设提供可靠的接口,解决了3.3V和5V混合逻辑设计问题。
EPM7032用来提供整个系统需要的组合逻辑。它属于MAX7000系列,是Altera公司的基于第二代MAX结构的CPLD,可提供多达5000个可用门和在系统编程。其引脚到引脚延时快达5ns。可以容纳各种各样的独立的组合逻辑和时序逻辑功能。所有的驱动器均能配置在3.3V和5.5V电压下工作,允许用于混合电压系统中。EPM7032为Bootloader提供的内部组合逻辑电路如图3所示。
EPROM采用NS公司或ST公司的27C256。EPM7032的ROMCE接EPROM的CE管脚,使其映射在DSP的C000H-FFFFH的数据空间。DIR控制16245的转发方向。EPM7032共有36个I/O引脚可供编程使用,剩余的管脚可以用来接入PS、IS等管脚,方便系统扩展存储空间和外设。它同时方便了系统的调试,修改时只需重新编程,不用修改硬件电路,且延时非常小。可以方便地完成协调外设和存储空间的工作。
对于如何在Bootloader后释放EPROM占用的数据空间,可以通过软件可设置管脚XF解决,只需简单修改内部逻辑电路,如图4所示。RESET时,XF被置高,使EPROM能够映射在数据空间。RESET完成之后,可用软件设置XF为低,使CE输出的片选无效,从而让EPROM让出数据空间。
javascript:window.open(this.src);" style="cursor:pointer;"/>
4 系统软件设计
4.1 测试程序设计
由于Bootloader需要完成的是系统的脱机运行,因此可用一个简单可靠的测试程序验证硬件是否已经协调工作。下面是一个可行的方法,通过设置XF的电平高低,让XF输出不同频率的方波,或者在XF管脚外接一个发光二极管,就可以直观的看到系统有没有协调工作。
test:nop
rsbx,1,13 /*将XF管脚置为低电平*/
call delay /*调用延时子程序*/
ssbx 1,13 /*将XF管脚置为高电平*/
call delay /*调用延时子程序*/
b test /*循环运行*/
4.2 系统设置程序
加载完成之后,需要半DSP的频率调高,使DSP能高效运行。实际上就是用软件改变DSP内部的PLL来改变倍频系数。因为PLL是模拟的,在它锁定之前需要一定的锁定时间,在锁定时间内DSP不能使用PLL模式,必须把它调整到DIV模式。下面就是方案系统设置部分的子程序。
.mmregs
vCLKMD:.set 0x4007 /*5倍频的CLKMD值*/
.global sinitCLKMD
.sect "initCLKMD"
sinitCLKMD:
cmpm CLKMD,#0x1007 /*测试DSP是否工作在2倍频*/
nop
bc lretest,ntc
stm #0h,CLKMD /*将CLKMD寄存器设置为二分频,即关闭倍频电路*/
test: ldm 58h,A /*下面程序读取CLKMD的PLLSTAUS值
AND #0001h,A 如果PLLSTAUS值为0,则DIV状态
Bc test,aneq 设置成功。为1,等待再检测*/
Stm #vCLKMD,CLKMD /*将CLKMD设置为5倍频,DSP工作在100MHz/
Rpt #256 /*等待C5402工作频率稳定*/
Nop
EinitCLKMD:
Ret
.end
javascript:window.open(this.src);" style="cursor:pointer;"/>
5 将软件装入EPROM
要使在系统调试的程序能够脱机装载,需要hex500.exe把*.out文件转化为*.hex。一个名称为main的转换文件(CMD文件)例子如下:
syw.out /*syw.out是在系统调试生成的out格式的文件名。*/
-i /*-i选项决定了输出文件的格式*/
-memwidth 8 /*-memwidth选项决定产生的数据的位宽度,根据使用的EPROM具体情况设定,这里选8。如果采用16位的EPROM则应该为16*/
-romwidth 8 /*-romwidth选项决定于存储数据的EPROM的位宽度*/
-boot /*-boot选项用来说明产生一个boot表示*/
-bootorg 0xc000 /*-bootorg选项说明加载信息在DSP数据空间中的起始位置*/
-e 0080h /*-e选项时程序中断向量的入口点*/
-o syw.hex /*-o产生的文件的文件名。*/
在DOS环境下执行Hex500 main.cmd就可以完成转换。对应上面的地址分配,在烧录时同时在EPROM的7FFEH和7FFFH处烧处C000H的值。
6 方案性能分析
从上面的分析可以看出,方案实现方便可靠。但是采用外部并行BOOT方式时,BOOT的寻址区是在数据区,因而最大的范围是3FFF~FFFFH,共48KPB。而采用8位的EPROM,最大的程序代码长度仅为24K字。如果程序超过了48K字,只能采用另外的替代方法。这是在一些电路方案论证时需要考虑的问题。