文獻標識碼: B
文章編號: 0258-7998(2012)11-0026-02
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.