《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于TMS320C6455的大尺寸非连续代码加载方法
基于TMS320C6455的大尺寸非连续代码加载方法
来源:电子技术应用2012年第11期
邵 龙1,刘金山2
1.中国电子科技集团公司第十研究所,四川 成都610036; 2.中国人民解放军95899部队,北京100085
摘要: 在分析传统加载方法加载大尺寸非连续代码存在的缺陷的基础上,提出了三级加载方法,并详细介绍了该方法在TMS320C6455平台上的设计与实现。三级加载方法很好地解决了大尺寸非连续的代码加载中Flash存储空间利用率低、代码通用性差的问题,已在重大工程项目中得到应用。
中图分类号: TP399
文献标识码: B
文章编号: 0258-7998(2012)11-0026-02
The loader method for large-size non-continuous code based on TMS320C6455
Shao Long1,Liu Jinshan2
1.The 10th Institute of China Electronic Technology Group Corporation, Chengdu 610036,China; 2.The Chinese PLA No95899 Troops,Beijing 100085,China
Abstract: Based on the analysis of the drawbacks of the conventional boot loader to load large-size non-continuous code, the paper creatively advances the tertiary boot loader, and describes in detail the design and implementation of this boot loader method in the TMS320C6455 platform. In the case of large-size non-contiguous code is loaded, the tertiary boot loader is a very good method to improve the low utilization of the Flash storage space and bad universalization of the boot loader code, and has been applied in major projects.
Key words : TMS320C6455;Flash;large-size non-continuous code;tertiary boot loader

    TMS320C6455(以下简写为C6455)是德州仪器(TI)公司的高性能数字信号处理芯片(DSP),在我国很多行业都得到了大规模的应用。在绝大多数应用中,都需要将C6455应用程序烧写到Flash中以实现系统自启动。系统上电后,C6455会自动将Flash起始位置的1 KB的代码加载到内部RAM[1],而对于C6455这种高性能的DSP,应用程序代码会远远大于1 KB,为此,TI公司提供了二级加载的解决方案。二级加载就是在前1 KB空间中存储EMIF配置和程序拷贝代码,用于将应用程序从片外Flash搬移到片内RAM或片外RAM。搬完后,再跳转到应用程序的起始地址,执行应用程序[2]。二级加载解决大尺寸应用程序代码的加载问题,主要应用于程序代码在RAM中的地址连续或者接近连续的情况。

1 新问题
    在实际的典型应用中,C6455将外接64 MB的DDR,其基地址为0xE0000000。应用程序一部分置于内部RAM中,还有一部分(如通信协议)则置于DDR中,如图1所示。

    应用程序代码存放在0x00810000~0x009FFFFF的片内RAM中,协议栈的堆(HEAP)空间则放在0xE0000000~0xE27FFFFF的DDR中,协议栈代码空间被分配在0XE2800000~0XE3FFFFFF的DDR内。按照TI公司提供的二级加载,理论上可以有两种实现方案:
    (1)方案1:直接移植TI的 BootLoader的示例程序。TI公司的BootLoader示例程序采用汇编代码编写,主要分为EMIF初始化、代码搬移和程序跳转三部分。代码搬移是从Flash搬移到片内RAM,而本应用还需要搬移一部分代码到DDR,需要增加PLL和DDR初始化代码。其程序流程如图2所示。

    (2)方案2:重写BootLoader代码。重写BootLoader程序代码,依据存储器分段情况进行分段加载。首先初始化PLL、EMIF和DDR;然后将应用程序代码搬入内部RAM、把协议栈和用户数据搬入DDR;最后跳转到C代码的入口地址开始执行。其程序流程如图3所示。
    方案1实现起来软件更改较少,实现较容易,但需要的Flash存储器的资源比较多,按照图1所示的分配,0xE4000000-0x810000=0xE37F0000,需要3.8 GB的Flash来存储代码,显然是不合理的;方案2需要大于60 MB的Flash资源,存储器资源开销可以接受,但是由于限制在1 KB的程序空间,受在1 KB程序空间内要实现PLL初始化、EMIF初始化、DDR2初始化以及分段拷贝功能空间的限制,代码优化难度巨大。
    由此可见,方案1除了对硬件资源非常浪费外,由于加载的无效代码量大,加载速度很慢;方案2虽然对Flash资源的消耗大大降低,启动速度也会相应加快,但是代码本身的开发难度比较大,而且没有可扩展性。因此,本文提出三级加载的方法。
2 三级加载方案
    三级加载Flash空间分配如图4所示,总共需要用到的Flash空间资源为20 MB多。DSP代码分为三级结构:第一级是TI公司提供的二次加载BootLoader解决方案;第二级是3次加载的管理程序manager;第三级为应用程序代码app。

    (1)第一级加载
    系统上电后,6455自动加载1 KB的BootLoader代码到0x00800000~0x00800400内部RAM中,开始执行BootLoader代码。
    (2)第二级加载
    BootLoader配置EMIF,将manager代码加载到0x00800400~0x00810000内部RAM中,开始执行manager代码。BootLoader程序流程如图5所示。
    (3)第三级加载
    Manager代码初始化PLL、EMIF和DDR,接着将应用程序代码搬入内部RAM,再把协议栈和用户数据搬入DDR,最后跳转到应用程序的入口开始执行,如图6所示。

 

 

    介绍了一种基于TMS320C6455的大尺寸非连续的代码加载方法,较传统的二级加载方式有更大的灵活性和更高的Flash利用率。连续加载只是分段加载的特殊情况(即分段数为1),该加载方法对于连续代码加载同样适用。虽然该加载方法是基于C6455设计实现的,但是对于TI公司的其他型号DSP也有很好的借鉴作用。这种三级加载方法已在航空电子系统上得到应用,实践证明该方法是一种使用可靠的加载方法。
参考文献
[1] TMS320C6455 fixed-point digital signal processor[S].Literature Number:SPRS276C,March,2006.
[2] Texas Instruments.Using the TMS320C6452 bootloader[S]. Literature Number:SPRAAW2A,June,2009.

此内容为AET网站原创,未经授权禁止转载。