TMS320VC5402的并行引导装载方案的研究与设计

2024-05-09

TMS320VC5402的并行引导装载方案的研究与设计(精选2篇)

TMS320VC5402的并行引导装载方案的研究与设计 篇1

TMS320VC5402的并行引导装载方案的研究与设计

摘要:介绍了TMS320VC5402并行Bootloader的原理,分析了设计过程中需要考虑的重点问题并提出了解决问题的可靠的电路方案,设计的电路具有良好的可扩展性。

关键词:TMS320VC5402 Bootloader CPLD EPROM

TMS320VC5402(以下简称C5402)是德州仪器公司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方案。

(本网网收集整理)

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和外围芯片设计一个安全可靠的接口。

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让出数据空间。

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

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字,只能采用另外的替代方法。这是在一些电路方案论证时需要考虑的问题。

TMS320VC5402的并行引导装载方案的研究与设计 篇2

关键词:TMS320VC5509A,Flash,在线编程,二次引导,扩展地址总线件

0 引 言

本文以实际系统应用——基于DSP的音频处理系统为基础,在前期的开发中一直处在利用JTAG(Joint Test Action Group——联合测试行为组织的简称)口进行仿真的平台上,而我们的最终的目的当然是让其脱离PC 机和仿真环境而上电复位后自举运行。这一环节处于整个系统开发的最后一步,但却有着举足轻重的作用,如能熟练掌握,将会大大减少系统开发和产品问世的时间。为达此目的,我们就需要将用户程序保存在DSP内部或其外部非易失性存储器中。一般情况下,DSP 系统开发不选择将运行代码直接掩膜进其内部自带ROM 中,因为这将面临价格限制和系统升级难两方面的问题;也不采取直接从外部存储器解释、运行程序的方案,因为这对于DSP 这样高速微处理器来说简直是一种浪费;综合以上,多数开发者们会选择将运行代码(一般会很大)放在外部非易失性存储器中(如今多为Flash、EPROM 和EEPROM 等),然后系统上电时(脱离仿真环境)DSP会采用引导加载方式将用户程序搬运到DSP 内部的双存取RAM(DRAM)或单存取RAM(SRAM)或外部扩展RAM 这些高速存储器中,然后系统直接从后者读取程序并运行,实现真正高速的运行。

C55x 系列DSP提供了几种BOOT模式,其中:SPI或I2C的E2PROM自举方式下载程序长度有限,最大为32K,并且串行通信方式对主器件DSP与存储芯片双方的时序要求都非常严格,时序必须完全或接近吻合才能互相通信;Standard Serial Boot Mode方式则需要占用特定的串口通道;主机接口(HPI)的引脚都是与其他引脚复用的,它们已经被占用[1];本系统则选用目前广泛应用的闪存中的Flash作为外部存储器件,它具有可电擦除、寿命长、速度快、时序要求不是太严格及可在线编程ISP(In System Program)等优点,已成为众多系统中不可或缺的一员[2]。关于其烧写方面,首当其冲选择在线烧写方式,这样既能满足容易对对程序进行修改、对产品进行升级的要求,又能消除用编程器不能直接对表贴(SMT)封装的Flash进行的烧写的难题。

本文所述的基于C55x 系列DSP的二次Bootloader 方法、Flash地址总线的扩展方法具有举一反三的作用,不需要外扩诸如CPLD或者译码、锁存器等电路,且很方便在不同处理器及不同闪存之间进行移植。

1 系统硬件电路设计

图1只画出了系统中DSP 与外部Flash 的电路连接图,其余关于电源管理、USB 接口和音频处理等部分未画出。TMS320VC55x 数字信号处理器是在C54x的基础上发展起来的新一代低功耗、高性能数字信号处理器,与C54x 相比具有更高的性能和更低的功耗。本系统采用C55x DSP系列中的一款典型处理器——TMS320VC5509A作为系统的核心处理器。VC5509A 是VC5509 的改进版本,主频最高达200 MHz。在5509A 中集成了一个C55x 内核,128KB×16位片上RAM 存储器,并具有最大8MB×16位的外部寻址空间,片上还集成了USB总线、McBSP和I2C等外部接口。与本系统有关的片上外设主要是多通道缓冲串口和外部存储器接口(EMIF)。5509A有3个全双工McBSP0~2,每个串口接收和发送数据使用独立的时钟,支持连续传送。C54x DSP 的外部总线存在一些缺点,即连接外部存储器时无法做到无缝连接,往往需要添加额外的地址译码逻辑电路,而它在C55x 系列处理器中已得到了改善:C55x 中用片选信号取代了C54x 的空间选通信号,且每个片选信号分别占用不同的地址空间,这样就不需要外扩译码电路等[3]。由于DSP 中ROM 里固化的Bootloader在上电复位后总是从字地址为0x00200000 开始的地方加载程序,因此图1中Flash的片选信号(Chip Enable,#CE)必须接在DSP的#CE1引脚上。其余,A[18:0]为地址输入线,D[15:0]为数据输入/输出线。控制信号线中还有:#OE为输出使能引脚,#WE为写使能引脚,#BYTE为字/字节模式选择,这里接高电平,被选为字模式。至于扩展地址如何这样连接,下面还会详解。

2 Flash的操作

DSP在上电复位和执行一系列初始化(例如初始化兼容性配置、相关寄存器、中断和程序入口等过程)之后,会根据系统预先配置好的自举模式,通过芯片出厂时预先固化在DSP 内ROM 里的Bootloader程序进行程序引导[4]。根据文献[4]里现成的表格(由于篇幅原因这里就不在列出)可以清晰地看到VC5509A 有多种引导模式,都是通过GPIO[3:0](与BOOT[1,2,3]相连)在上电时的高低电平来设置,本系统采用并行EMIF引导模式(16位数据宽度),所以应使GPIO[3:0]=0111,即BOOT[3:0]=1011,为了位数匹配,图1中的Flash的#BYTE引脚就得拉高,选择字(16位)模式。

2.1 Flash扩展高位地址线

有几点很重要。① 5509A 在使用EMIF时应注意字寻址和字节寻址的区别。CPU 访问数据空间时用23bit 地址访问16位字,为使得与内部24bit 地址总线匹配,内部总线会自动将23bit地址左移一位(将地址总线LSB位置0),使得对数据空间或程序空间寻址时都传送24bit 地址,由此得知,DSP 与Flash (选用Byte模式)相连时地址总线应该错开一位,DSP的A1 与Flash 的A0 地址线相连,后面以此类推。② S29AL008D大小为512K×16bit=219KW ,有19 根地址线A0~A18,而PGE封装的5509A 的地址线只有14根A0~A13,因此A1~A13 这12根地址线能够访问Flash 的空间只有8K字。如何利用现有的资源来实现对S29AL008D 的高6位地址的访问,本系统将另辟蹊径,没有选择用CPLD 设计一6位锁存寄存器(多数开发者选用此方法)等,而是用5509A中现有的资源(不需外扩其他电路)——用其缓冲串口来扩展。③ 本音频处理系统中使用McBSP0与音频编解码芯片相连,使用McBSP2与MMC/SD卡相连,故用剩余的McBSP1与Flash高位地址相连。如图2所示,McBSP的6只引脚均可作为GPIO 引脚,但DR只能作为输入引脚,不能作为Flash地址线,故与S29AL008D的A18地址线相连的用McBSP2.CLKR来代替[5],这点在图1中有所显示。

根据图2,在对Flash进行操作前必须将相应McBSP 的引脚设为GPIO 口,并清零。设置及清零函数如下所示。

须注意另一点:DSP 在上电复位后从0x200000 处引导程序,那么必须保证此时6 位高位地址电平为0,为保证这一点,可在设计电路板时将这6 个引脚上拉一电阻。

2.2 Flash 的烧写

要将用户程序永久放在Flash中并引导加载,就必然涉及到S29AL008D 的读写和擦除等操作。S29AL008D 存储容量为8Mb,只需3V单电源就可完成读、编程和擦除操作[6]。在了解其操作之前先弄清:① S29AL008D 共有19个扇区,本系统所用的为Top Boot Devic (顶层引导设备),与Bottom 型不同的是,它的扇区地址遵循Top 排列方式,即前面15个扇区大小为32K字,后面4个扇区分别为16K、4K、4K、8K字,了解这一点会直接影响到后面对扇区各种操作的正确与否。② 对S29AL008D 进行操作之前先对DSP 相关寄存器特别是EMIF进行正确配置。EMIF为每个片选空间提供了独立的片选控制寄存器CEx_[1:3],通过它们可以设置存储器类型(这里得配置成16bit宽异步存储器)和读/写时序(包括建立时间、选通时间和保持时间)。时序配置采用保守的默认值(最大周期数)可正确的读写,或者参照S29AL008D的手册里的详细时序图来进行精确配置亦可。

在S29AL008D中,各种操作都是基于命令方式的,图3为部分常用操作命令的定义。

从图3中可看到,不同的操作访问周期是不一样的。对于将某个地址中的数据读取时,只需要找到Flash的具体地址,然后从这个地址中读取数据即可,不需要命令去控制读操作;对于芯片的编程操作,则必须先进行擦除操作,因为Flash“写”操作只能将“1”变成“0”,反之则不行,而“擦除”正是将各地址处数据变为“0xFFFF”。这里就列出其写操作的C代码:

程序的几点说明:① 程序里涉及到的所有地址都要加上DSP的#CE1空间的基址0x200000。② 可以看到程序是严格按照图3中编程操作的命令顺序写的,即分别写入解锁命令0xAA和0x55,然后向地址0x555写入Program命令0xA0,最后向欲编程地址单元PA写入数据PD。③ SetHighAddr()函数的完成:用实际地址和图2所列方法来设置高6位地址的值。④ Flash有多种方法来判断编程或擦除的结束,如软件方法、硬件方法等,它们在写或擦除时序最后一步时会自动嵌入,本程序使用判断其中的触发校验位的方法来判断操作是否完成,即函数Flash_Toggle()。

3 5509A的自举引导

下面的任务即是将用户程序烧写进Flash然后进行引导加载。

3.1 引导表

先编写一段简单的测试程序,在C语言中插入汇编语言,控制与DSP 101号引脚(XF)相连的LED灯间隔闪烁,关键的两句程序如下:

在CCSstudio 中将此工程命名为Test_LED.pjt,编译生成的可执行文件为LED.out,下面就要将它烧写进Flash的第0扇区(必须从此扇区的第一处地址开始),然而由于.out是AT&T的模块化的COFF 代码格式,与实际的外部存储器的存储空间不匹配,故不能直接写入到Flash中[7]。解决办法为:Hex conversion utility是CCS 中自带的数据转换工具,在CCSv3.3的安装文件里能找到hex55.exe 这个版本的工具,将它和LED.out 与自己制作的一个.cmd 文件(LED.cmd)放在同一文件夹里,在DOS环境下进入此文件夹,输入命令hex55.exe LED.cmd,运行后会生成一个名为Test_LED.hex 的文件。

LED.cmd 里关键命令及解释如图4所示。

然后再用VC 编写一个简单的C 语言转化程序,将其转换为可导入CCS 的数组头文件LED.h,通过写数组的方式将它写入Flash 中。可以查看生成的.hex 或.h 文件完全符合图5 中的引导表的格式。

程序代码以引导表格式存储在Flash中,它是独立于所选引导模式的一种特定的格式。引导表携带了可执行文件的所有信息,其中程序入口地址是加载结束后用户程序开始的地方,并且它是可编程的;16位延时标志恒为0xFFFF,以区别于16位寄存器地址;最后以32位个0作为引导表的结束标志。这样在重新上电后,Boot 程序将依次将各个区段搬移到内部RAM中,然后程序指针会跳转到程序入口地址处,DSP 进入工作状态,会看到LED 灯不停闪烁,引导成功。

3.2 二次引导

3.1节引导一段LED灯测试程序(不到1K)虽然成功,但是PGE封装的5509A只有14根地址线,其内部固化的Bootloader最多只能访问到16K×16bit地址空间,那么超过16K字的用户代码将不能被完全加载。因此若要加载超过16K字的用户代码(例如本音频处理系统Audio.pjt所生成代码大约为40K字),就必须进行二次引导。

二次Bootloader 的原理就是按照DSP内部固化的Bootloader 的格式自编的一个引导程序(称为MyBoot.c),将其烧写在Flash的第0扇区(即基址0x200000)的地方,在上电复位后,先使DSP进入自编的Bootloader状态,通过它,再去引导烧写在其他一个或多个扇区的大容量的用户代码,从而顺利加载、运行超过16K字长的程序。

编写二次引导程序MyBoot.c需注意几点:① 严格对照5509A的引导表(图5)进行编写,多次使用Flash的读操作FlashRead(Addr),读取的数据为16位,例如刚开始读出的32位为程序入口地址entry,然后继续对应图4按部就班的读取,对号入座。② 一定要分清程序里多次涉及到的字节、字和32位的数据。③ 加载结束后,需要把PC值置为新的程序入口地址entry,以启动运行。④ 还有一点很重要,二次引导程序MyBoot程序与用户程序Audio加载的空间不可以重叠,否则会加载失败。⑤ 另外,如果程序大于Flash一个扇区的长度,则程序中须加上跨扇区读写的相应操作。

然后将自编的二次引导程序和本系统实例例子音频处理程序分别烧写进Flash里进行引导,同样自举成功且系统运行稳定可靠。

4 结 语

本文首先从各个方面及多个细节详细介绍了基于VC5509A、采用并行EMIF引导模式成功实现外部Flash存储器的烧写过程。此方式与其他烧写方式相比,速度较快、缩短了系统开发周期、提高了程序的调试效率、增强了系统的灵活性和可移植性,具备相当的实用价值。其次介绍的二次引导加载方法克服了DSP固化引导加载程序的弊端,即解决了应用程序过长而不能被加载和Flash与DSP地址线不匹配的问题,达到芯片脱离仿真环境而运行复杂代码的目的。此外,此方法同样可移植到多种型号DSP芯片中,也对其他类似的高速微处理器系统引导加载方案具有较大的实际借鉴价值。

参考文献

[1]牛海涛,王志斌,张记龙.运用TMS320VC5509的SPI引导装载方法研究[J].中北大学学报,2005,26(6):439-442.

[2]刘伟,闫玉华.基于CPLD译码的DSP二次Bootloader方法[J].电子技术应用,2008,34(10):61-63.

[3]汪春梅,孙洪波.TMS320C55x DSP原理及应用[M].2版.北京:电子工业出版社,2008:126-137.

[4]TI Instruments.Using the TMS320VC5503/C5506/C5507/C5509/C5509A Bootloader,Application Rerort,SPRA375F[R].Texas:TI Corporation,2008.

[5]TI Instruments.TMS320VC5501/5502/5503/5507/5509/5510DSP Multic-hannel Buffered Serial Port(McBSP),Reference Guide,SPRU592E[M].Texas:TI Corporation,2005.

[6]Spansion.S29AL008D.Data Sheet,S29AL008D_00A3[R].Sunny-vale:Spansion Inc,2005.

上一篇:以微笑为题六年级作文下一篇:元旦佳节员工代表致辞