摘 要:TMS320VC54x系列DSP的内部ROM固化了一个称为Bootloader程序。在DSP上电时Bootloader将外部Flash中的用户程序搬移到DSP的片上RAM或片外RAM程序区中,并将程序指针指向用户程序运行时的首地址执行。在16 bit并行自举方式下,DSP提供的这个Bootloader程序要求用户程序代码长度不能超过32 KB。文介绍了一种用户Bootloader的设计方法,通过二次自举可实现对应用程序代码长度超过32 KB的加载。
关键词:TMS320VC54x;数字信号处理器;自举;二次自举
TMS320VC54x系列DSP上电时,需要通过掩膜在DSP片上ROM的Bootloader(自举)程序完成对用户应用程序的加载过程,即DSP上电后自动将固化在Flash中的应用程序读入到DSP的片上RAM或片外RAM映射成的存储区间的一个过程[1]。由于片上Bootloader程序在外扩Flash并行自举方式下,用户应用程序可执行代码长度不能超过32 KB,所以在实际应用中常常会遇到可执行代码超过32 KB的问题。因此,用户必须设计自己的Bootloader程序,通过二次自举的方法完成对应用程序的自举。
1 TMS320VC54x系列DSP的自举
1.1 自举方式
TI公司的TMS320VC54x系列DSP所提供的自举功能非常强大,它支持多种自举方式,可以满足用户多种不同的需求。
这些方式包括串行口(标准串口、时分串口、缓冲串口)输入方式、并行口输入方式、HPI口输入方式、I/O口等方式。此外,按照数据进入DSP时的字长又分为8 bit方式和16 bit方式[2]8-11。
1.2 自举过程
当MP/MC=0时,TMS320C54x被置于微计算机模式。上电或复位时,程序指针指向片内ROM区的0xff80单元。该单元放置了一条跳转指令,使程序跳转到0xf800单元,而0xf800单元的内容就是Bootloader引导程序的起始地址。Bootloader将存放在外部Flash中的应用程序搬移到DSP内部或外部的RAM区,搬移完成后跳转到该程序的入口处执行。存放在外部Flash的用户程序与一些必要的引导信号组合在一起称为自举表。自举表内容不仅包括了欲加载的各段代码,而且包括各段代码长度、各代码段存放的目标地址、程序入口地址等信息。TMS320VC54x 系列DSP的自举表结构[3]如表1所示。
2 用户Bootloader设计
2.1 外扩Flash并行自举的局限性及解决方法
采用外扩Flash的16 bit并行自举是一种比较方便的使用方式。由于TMS320VC54x DSP系列CPU的数据空间只有64 KB,其中低端32 KB(地址从0000h-7fffh)映射到内部,映射到外部数据空间的只有高端32 KB(地址从8000h-ffffh)。TI掩膜自举程序的处理方式是仅在这32 KB空间内进行寻址搬移[4]。如果用户应用程序超过了32 KB,则无法完成自举过程。
文中设计的TMS320VC5410A目标平台采用的Flash为39VF800,存储容量512 KB×16 bit,用来存储超过32 KB的用户主程序。由于TI的5410 ADSP的外部数据空间只有32 KB(地址从8000h-ffffh)。因此,将Flash分为16页,每页32 KB,重用8000h-ffffh地址空间。页编号从0开始,在访问Flash时需要先指定页号,然后读取数据。将用户自举程序放在Flash上电默认页(即第0页)的最后2 KB,因此需要在Flash的第0页的ffffh位置写上F800h。用户自举程序从F800h开始连续存放。fffdh中存放主程序常用区起始页,供Bootloader程序寻址,Flash资源分配示意如表2所示。
2.2 二次自举
所谓二次自举是指上电时CPU片上自举程序首先将用户的自举程序搬移到片内RAM中运行,用户自举程序取得控制权后,再将用户的应用程序自举到RAM中运行。由于用户自举程序是自己编制的,在需要时可以控制Flash换页,因此也就突破了32 KB的限制。
2.3 可自举文件的生成
用户的自举过程完全仿照TI的处理方法,只是增加了处理超过32 KB时的寻址切换问题。首先,利用CCS5000的集成开发环境编写调试自举程序和应用程序,并生成 .out文件[5]。然后利用TI公司提供的Hex转换工具Hex500.exe程序将.out文件转换为ASCII码文件,生成的ASCII码文件是一个严格按照自举表格式排列的可执行代码。同时生成的还有该文件的MAP文件,可以从MAP表中找到程序的入口地址[2]352-380,用户需将ASCII码文件进一步转换为二进制文件,最后,将二进制的用户自举程序和用户主程序分别烧写到Flash中相应的位置(如表1所示)即可。
可以利用编程器对Flash进行烧写。此外,CCS5000的集成开发环境提供了丰富的BIOS函数,使得文件读写变得极为方便。用户也可以自己编写Flash的文件烧结程序,并通过仿真器将用户程序烧制到Flash中。
2.4用户Bootloader实现
如图1所示,用户的自举程序需要完成CPU初始化、自举表格式实现、Flash读写操作、Flash分页切换等工作。当地址增加由0xffffh变为0x0000h时,则表明地址溢出,需要换页。自举程序从数据空间读取用户主程序数据写入到程序空间,搬移完毕后,用户自举程序将控制权交给用户主程序,从而完成自举过程。
TMS320VC54x系列DSP具有低功耗、高速度和多总线结构,在嵌入式开发中具有广泛的应用。本文介绍的二次自举方法,可以很好地解决用户程序代码超过32 KB的问题,这种方法具有较好的通用性和实用性,对DSP的技术开发人员有一定的参考启发。
参考文献
[1] 张勇,陈天麒.C/C++语言硬件程序设计——基于TMS320VC54x系列DSP[M].西安:西安电子科技大学出
版社,2003:205-207.
[2] 刘益成.TMS320VC54x DSP应用程序设计与开发[M]. 北京:北京航空航天大学出版社,2002.
[3] 自动化在线. TMS320VC54x DSP在线烧写Flash存储器并实现自举引导的方法[J/OL]. (2009-4-21)[2011-11-25].http://www.autooo.net/classid124-id45154.html.
[4] 郑红,吴冠.TMS320VC54x DSP应用系统设计[M].北京:北京航空航天大学出版社,2002.
[5] 尹勇,欧光军,关荣锋.DSP集成开发环境CCS开发指南[M].北京:北京航空航天大学出版社,2003.