文獻(xiàn)標(biāo)識(shí)碼: B
文章編號(hào): 0258-7998(2012)11-0026-02
TMS320C6455(以下簡(jiǎn)寫(xiě)為C6455)是德州儀器(TI)公司的高性能數(shù)字信號(hào)處理芯片(DSP),在我國(guó)很多行業(yè)都得到了大規(guī)模的應(yīng)用。在絕大多數(shù)應(yīng)用中,都需要將C6455應(yīng)用程序燒寫(xiě)到Flash中以實(shí)現(xiàn)系統(tǒng)自啟動(dòng)。系統(tǒng)上電后,C6455會(huì)自動(dòng)將Flash起始位置的1 KB的代碼加載到內(nèi)部RAM[1],而對(duì)于C6455這種高性能的DSP,應(yīng)用程序代碼會(huì)遠(yuǎn)遠(yuǎn)大于1 KB,為此,TI公司提供了二級(jí)加載的解決方案。二級(jí)加載就是在前1 KB空間中存儲(chǔ)EMIF配置和程序拷貝代碼,用于將應(yīng)用程序從片外Flash搬移到片內(nèi)RAM或片外RAM。搬完后,再跳轉(zhuǎn)到應(yīng)用程序的起始地址,執(zhí)行應(yīng)用程序[2]。二級(jí)加載解決大尺寸應(yīng)用程序代碼的加載問(wèn)題,主要應(yīng)用于程序代碼在RAM中的地址連續(xù)或者接近連續(xù)的情況。
1 新問(wèn)題
在實(shí)際的典型應(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公司提供的二級(jí)加載,理論上可以有兩種實(shí)現(xiàn)方案:
(1)方案1:直接移植TI的 BootLoader的示例程序。TI公司的BootLoader示例程序采用匯編代碼編寫(xiě),主要分為EMIF初始化、代碼搬移和程序跳轉(zhuǎn)三部分。代碼搬移是從Flash搬移到片內(nèi)RAM,而本應(yīng)用還需要搬移一部分代碼到DDR,需要增加PLL和DDR初始化代碼。其程序流程如圖2所示。
(2)方案2:重寫(xiě)B(tài)ootLoader代碼。重寫(xiě)B(tài)ootLoader程序代碼,依據(jù)存儲(chǔ)器分段情況進(jìn)行分段加載。首先初始化PLL、EMIF和DDR;然后將應(yīng)用程序代碼搬入內(nèi)部RAM、把協(xié)議棧和用戶(hù)數(shù)據(jù)搬入DDR;最后跳轉(zhuǎn)到C代碼的入口地址開(kāi)始執(zhí)行。其程序流程如圖3所示。
方案1實(shí)現(xiàn)起來(lái)軟件更改較少,實(shí)現(xiàn)較容易,但需要的Flash存儲(chǔ)器的資源比較多,按照?qǐng)D1所示的分配,0xE4000000-0x810000=0xE37F0000,需要3.8 GB的Flash來(lái)存儲(chǔ)代碼,顯然是不合理的;方案2需要大于60 MB的Flash資源,存儲(chǔ)器資源開(kāi)銷(xiāo)可以接受,但是由于限制在1 KB的程序空間,受在1 KB程序空間內(nèi)要實(shí)現(xiàn)PLL初始化、EMIF初始化、DDR2初始化以及分段拷貝功能空間的限制,代碼優(yōu)化難度巨大。
由此可見(jiàn),方案1除了對(duì)硬件資源非常浪費(fèi)外,由于加載的無(wú)效代碼量大,加載速度很慢;方案2雖然對(duì)Flash資源的消耗大大降低,啟動(dòng)速度也會(huì)相應(yīng)加快,但是代碼本身的開(kāi)發(fā)難度比較大,而且沒(méi)有可擴(kuò)展性。因此,本文提出三級(jí)加載的方法。
2 三級(jí)加載方案
三級(jí)加載Flash空間分配如圖4所示,總共需要用到的Flash空間資源為20 MB多。DSP代碼分為三級(jí)結(jié)構(gòu):第一級(jí)是TI公司提供的二次加載BootLoader解決方案;第二級(jí)是3次加載的管理程序manager;第三級(jí)為應(yīng)用程序代碼app。
(1)第一級(jí)加載
系統(tǒng)上電后,6455自動(dòng)加載1 KB的BootLoader代碼到0x00800000~0x00800400內(nèi)部RAM中,開(kāi)始執(zhí)行BootLoader代碼。
(2)第二級(jí)加載
BootLoader配置EMIF,將manager代碼加載到0x00800400~0x00810000內(nèi)部RAM中,開(kāi)始執(zhí)行manager代碼。BootLoader程序流程如圖5所示。
(3)第三級(jí)加載
Manager代碼初始化PLL、EMIF和DDR,接著將應(yīng)用程序代碼搬入內(nèi)部RAM,再把協(xié)議棧和用戶(hù)數(shù)據(jù)搬入DDR,最后跳轉(zhuǎn)到應(yīng)用程序的入口開(kāi)始執(zhí)行,如圖6所示。
介紹了一種基于TMS320C6455的大尺寸非連續(xù)的代碼加載方法,較傳統(tǒng)的二級(jí)加載方式有更大的靈活性和更高的Flash利用率。連續(xù)加載只是分段加載的特殊情況(即分段數(shù)為1),該加載方法對(duì)于連續(xù)代碼加載同樣適用。雖然該加載方法是基于C6455設(shè)計(jì)實(shí)現(xiàn)的,但是對(duì)于TI公司的其他型號(hào)DSP也有很好的借鑒作用。這種三級(jí)加載方法已在航空電子系統(tǒng)上得到應(yīng)用,實(shí)踐證明該方法是一種使用可靠的加載方法。
參考文獻(xiàn)
[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.