《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于TMS320C6455的大尺寸非連續(xù)代碼加載方法
基于TMS320C6455的大尺寸非連續(xù)代碼加載方法
來源:電子技術(shù)應(yīng)用2012年第11期
邵 龍1,劉金山2
1.中國電子科技集團公司第十研究所,四川 成都610036; 2.中國人民解放軍95899部隊,北京100085
摘要: 在分析傳統(tǒng)加載方法加載大尺寸非連續(xù)代碼存在的缺陷的基礎(chǔ)上,提出了三級加載方法,并詳細(xì)介紹了該方法在TMS320C6455平臺上的設(shè)計與實現(xiàn)。三級加載方法很好地解決了大尺寸非連續(xù)的代碼加載中Flash存儲空間利用率低、代碼通用性差的問題,已在重大工程項目中得到應(yīng)用。
中圖分類號: TP399
文獻標(biāo)識碼: 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)公司的高性能數(shù)字信號處理芯片(DSP),在我國很多行業(yè)都得到了大規(guī)模的應(yīng)用。在絕大多數(shù)應(yīng)用中,都需要將C6455應(yīng)用程序燒寫到Flash中以實現(xiàn)系統(tǒng)自啟動。系統(tǒng)上電后,C6455會自動將Flash起始位置的1 KB的代碼加載到內(nèi)部RAM[1],而對于C6455這種高性能的DSP,應(yīng)用程序代碼會遠(yuǎn)遠(yuǎn)大于1 KB,為此,TI公司提供了二級加載的解決方案。二級加載就是在前1 KB空間中存儲EMIF配置和程序拷貝代碼,用于將應(yīng)用程序從片外Flash搬移到片內(nèi)RAM或片外RAM。搬完后,再跳轉(zhuǎn)到應(yīng)用程序的起始地址,執(zhí)行應(yīng)用程序[2]。二級加載解決大尺寸應(yīng)用程序代碼的加載問題,主要應(yīng)用于程序代碼在RAM中的地址連續(xù)或者接近連續(xù)的情況。

1 新問題
    在實際的典型應(yīng)用中,C6455將外接64 MB的DDR,其基地址為0xE0000000。應(yīng)用程序一部分置于內(nèi)部RAM中,還有一部分(如通信協(xié)議)則置于DDR中,如圖1所示。

    應(yīng)用程序代碼存放在0x00810000~0x009FFFFF的片內(nèi)RAM中,協(xié)議棧的堆(HEAP)空間則放在0xE0000000~0xE27FFFFF的DDR中,協(xié)議棧代碼空間被分配在0XE2800000~0XE3FFFFFF的DDR內(nèi)。按照TI公司提供的二級加載,理論上可以有兩種實現(xiàn)方案:
    (1)方案1:直接移植TI的 BootLoader的示例程序。TI公司的BootLoader示例程序采用匯編代碼編寫,主要分為EMIF初始化、代碼搬移和程序跳轉(zhuǎn)三部分。代碼搬移是從Flash搬移到片內(nèi)RAM,而本應(yīng)用還需要搬移一部分代碼到DDR,需要增加PLL和DDR初始化代碼。其程序流程如圖2所示。

    (2)方案2:重寫B(tài)ootLoader代碼。重寫B(tài)ootLoader程序代碼,依據(jù)存儲器分段情況進行分段加載。首先初始化PLL、EMIF和DDR;然后將應(yīng)用程序代碼搬入內(nèi)部RAM、把協(xié)議棧和用戶數(shù)據(jù)搬入DDR;最后跳轉(zhuǎn)到C代碼的入口地址開始執(zhí)行。其程序流程如圖3所示。
    方案1實現(xiàn)起來軟件更改較少,實現(xiàn)較容易,但需要的Flash存儲器的資源比較多,按照圖1所示的分配,0xE4000000-0x810000=0xE37F0000,需要3.8 GB的Flash來存儲代碼,顯然是不合理的;方案2需要大于60 MB的Flash資源,存儲器資源開銷可以接受,但是由于限制在1 KB的程序空間,受在1 KB程序空間內(nèi)要實現(xiàn)PLL初始化、EMIF初始化、DDR2初始化以及分段拷貝功能空間的限制,代碼優(yōu)化難度巨大。
    由此可見,方案1除了對硬件資源非常浪費外,由于加載的無效代碼量大,加載速度很慢;方案2雖然對Flash資源的消耗大大降低,啟動速度也會相應(yīng)加快,但是代碼本身的開發(fā)難度比較大,而且沒有可擴展性。因此,本文提出三級加載的方法。
2 三級加載方案
    三級加載Flash空間分配如圖4所示,總共需要用到的Flash空間資源為20 MB多。DSP代碼分為三級結(jié)構(gòu):第一級是TI公司提供的二次加載BootLoader解決方案;第二級是3次加載的管理程序manager;第三級為應(yīng)用程序代碼app。

    (1)第一級加載
    系統(tǒng)上電后,6455自動加載1 KB的BootLoader代碼到0x00800000~0x00800400內(nèi)部RAM中,開始執(zhí)行BootLoader代碼。
    (2)第二級加載
    BootLoader配置EMIF,將manager代碼加載到0x00800400~0x00810000內(nèi)部RAM中,開始執(zhí)行manager代碼。BootLoader程序流程如圖5所示。
    (3)第三級加載
    Manager代碼初始化PLL、EMIF和DDR,接著將應(yīng)用程序代碼搬入內(nèi)部RAM,再把協(xié)議棧和用戶數(shù)據(jù)搬入DDR,最后跳轉(zhuǎn)到應(yīng)用程序的入口開始執(zhí)行,如圖6所示。

 

 

    介紹了一種基于TMS320C6455的大尺寸非連續(xù)的代碼加載方法,較傳統(tǒng)的二級加載方式有更大的靈活性和更高的Flash利用率。連續(xù)加載只是分段加載的特殊情況(即分段數(shù)為1),該加載方法對于連續(xù)代碼加載同樣適用。雖然該加載方法是基于C6455設(shè)計實現(xiàn)的,但是對于TI公司的其他型號DSP也有很好的借鑒作用。這種三級加載方法已在航空電子系統(tǒng)上得到應(yīng)用,實踐證明該方法是一種使用可靠的加載方法。
參考文獻
[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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。