自動引導(dǎo)方式綜述
處理器復(fù)位后可以自動從外部設(shè)備加載程序,稱為引導(dǎo)。TI公司的新一代數(shù)字處理器TMS320C6701提供了一系列外部引腳BOOTMODE[4:0]來完成芯片的狀態(tài)設(shè)置。系統(tǒng)加電后,RESET信號有效,芯片復(fù)位。在RESET信號上升沿處鎖存BOOTMODE[4:0]信號,借以決定芯片的存儲器映射方式、地址0處的存儲器類型以及復(fù)位后芯片的自舉模式。復(fù)位結(jié)束后,芯片從存儲器的0地址開始執(zhí)行指令。總的來說,TMS320C6701有三種引導(dǎo)方式,其詳細(xì)描述如下:
不加載:CPU直接從存儲器的0地址處開始執(zhí)行指令。如果系統(tǒng)中使用的是SDRAM,則CPU會先掛起,等候SDRAM的初始化完成。
ROM加載:位于外部CE1空間的ROM中的程序首先通過DMA搬入地址0處。盡管加載過程是在芯片外部全部復(fù)位后才開始的,但是當(dāng)芯片仍處于內(nèi)部復(fù)位保持時,就開始了上述的傳輸過程了。用戶可以指定外部ROM的存儲寬度,外部存儲器接口EMIF會自動將相鄰的8bit/16bit數(shù)據(jù)合并成32bit。用DMA進(jìn)行的這一加載過程是一個單幀的數(shù)據(jù)塊傳輸。對于TMS320C6701,DMA從CE1空間中拷貝64KB數(shù)據(jù)到地址0處。傳輸過程完成之后,CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。
主機(jī)(HPI)引導(dǎo):CPU停留在保持狀態(tài),其余硬件部分均保持正常狀態(tài)。在這期間,外部主機(jī)通過主機(jī)口初始化CPU的存儲空間。主機(jī)完成所有的初始化工作后,將主機(jī)口控制寄存器中的DSPINT位設(shè)置為1,結(jié)束引導(dǎo)過程。此時CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。在主機(jī)引導(dǎo)過程中,主機(jī)可以對DSP所有的存儲空間進(jìn)行讀和寫。
自動引導(dǎo)的軟件設(shè)計實現(xiàn)
從軟件角度看,所謂復(fù)位引導(dǎo)就是在系統(tǒng)上電后,將生成的可執(zhí)行文件的代碼和數(shù)據(jù)按照對系統(tǒng)存儲空間的分配裝載到指定的地方,并接著依據(jù)規(guī)定的順序來執(zhí)行程序。為了設(shè)計這一過程的軟件,首先必須了解TMS320C6701的軟件設(shè)計流程。
TI公司為DSP軟件的設(shè)計提供了一個功能強(qiáng)大的開發(fā)平臺Code Composer Studio(CCS),主要包括:C編譯器、匯編器、匯編優(yōu)化器、連接器和十六進(jìn)制轉(zhuǎn)換工具等。TMS320C6701的程序設(shè)計流程如圖1所示。
圖1 TMS320C6701的程序設(shè)計流程圖
ROM引導(dǎo)方式實現(xiàn)
在TI-DSP的應(yīng)用程序開發(fā)中,程序的代碼和數(shù)據(jù)總是保存在ROM、FLASH等非易失存儲器中,以保證掉電時代碼仍存在。這就需要在運行前將代碼從FLASH中加載到DSP內(nèi)部,ROM引導(dǎo)就是用來實現(xiàn)這一過程。一般來說,ROM引導(dǎo)應(yīng)用程序的開發(fā)分以下幾個步驟:
生成目標(biāo)文件(.out文件)
在CCS環(huán)境中,編寫應(yīng)用程序ues.c,通過編譯、連接查找、修正程序的錯誤,利用仿真器加載軟件程序到硬件系統(tǒng)中調(diào)試,直至程序無錯誤。然后編寫相應(yīng)的命令文件Link(.cmd),Link命令文件是以文件的方式定義鏈接參數(shù),描述系統(tǒng)生成的程序代碼段、初始化數(shù)據(jù)段、未初始化數(shù)據(jù)段的段名及映射的目標(biāo)板物理空間。
ROM引導(dǎo)過程表明,復(fù)位后系統(tǒng)自動將CE1 FLASH空間的64KB數(shù)據(jù)到地址0處。DSP 0地址開始的64KB存儲空間是內(nèi)部程序存儲器,程序代碼占據(jù)這一區(qū)域。因此,需將外部CE1 FLASH空間分段,程序代碼段占據(jù)FLASH的前64KB空間,數(shù)據(jù)段分配在FLASH開始64KB后的地址空間。這樣,ROM引導(dǎo)實現(xiàn)程序代碼段的自動加載,但數(shù)據(jù)段不能自動加載,需要使用load/run來定義數(shù)據(jù)段的裝載地址和運行地址于不同空間,保證變量的正確初始化和數(shù)據(jù)定位。
Link命令文件的正確編寫是極其重要的,它決定著能否生成正確的COFF格式目標(biāo)文件。實際ROM引導(dǎo)過程中,往往都是由于Link文件編寫的不正確而造成引導(dǎo)失敗。如圖2所示為一正確的Link命令文件,將應(yīng)用程序和此命令文件編譯鏈接生成目標(biāo)文件use.out。
圖2 ROM引導(dǎo)的Link命令文件
文件格式的轉(zhuǎn)換
目標(biāo)文件use.out的格式是COFF文件格式,F(xiàn)LASH不支持這種格式,所以不能直接寫入FLASH中,必須對該文件進(jìn)行轉(zhuǎn)換,提取其中的數(shù)據(jù)部分,形成數(shù)據(jù)文件。
利用TI公司CCS自帶的轉(zhuǎn)換工具h(yuǎn)ex6x.exe可以實現(xiàn)將目標(biāo)文件轉(zhuǎn)換成十六進(jìn)制的.hex輸出文件,如圖3所示。
圖3 ROM引導(dǎo)的轉(zhuǎn)換格式命令文件
燒寫FLASH
在CCS中編寫FLASH燒寫程序,通過JTAG口加載運行,把數(shù)據(jù)文件code.bot和data.bot分別寫入FLASH相應(yīng)的存儲區(qū)內(nèi)。注意程序?qū)懭隖LASH存儲器時,要把CE1空間寄存器設(shè)計為32位寬度存儲器接口方式。
通過以上步驟,當(dāng)系統(tǒng)再次加電時,即可實現(xiàn)ROM引導(dǎo)方式加載DSP。
HPI引導(dǎo)方式實現(xiàn)
HPI引導(dǎo)程序設(shè)計與ROM引導(dǎo)程序設(shè)計類似,同樣需要先生成.out目標(biāo)文件,再進(jìn)行文件格式轉(zhuǎn)換,提取出程序代碼段數(shù)據(jù)和數(shù)據(jù)段數(shù)據(jù)形成數(shù)據(jù)文件code.bot和data.bot。,編寫HPI燒寫程序。
需要注意的是,HPI引導(dǎo)程序中的Link命令文件和轉(zhuǎn)換格式命令文件與FLASH引導(dǎo)程序中的有所不同:
由于程序代碼段數(shù)據(jù)和數(shù)據(jù)段數(shù)據(jù)都是通過HPI口直接寫到DSP內(nèi),因此Link命令文件中無需用到load/run。.vectors和.text直接存放到VECS和PMEM空間,.cinit直接存放到DMEM空間即可。
目標(biāo)文件中程序代碼段的起始地址是0x0,數(shù)據(jù)段的起始地址是0x80000000。因此轉(zhuǎn)換格式命令文件的起始地址有所改變,如圖4所示。
圖4 HPI引導(dǎo)轉(zhuǎn)換格式命令文件
并行DSP實時信號處理機(jī)的自動引導(dǎo)方案
某雷達(dá)動目標(biāo)檢測系統(tǒng)中,由于運算量巨大,經(jīng)過分析需要四片TMS320C6701并行處理才能滿足實時檢測的要求,因此設(shè)計了如圖5所示的多DSP并行實時信號處理機(jī)。
圖5 多DSP并行實時信號處理機(jī)互連方案
其中:DSP1作為主機(jī),其EMIF與DSP2、DSP3、DSP4的HPI相連,同時DSP1的EMIF還與一塊FLASH相連。FLASH用于存放四片TMS320C6701要運行的程序。系統(tǒng)的結(jié)構(gòu)決定了其復(fù)位引導(dǎo)方案為:DSP1從FLASH加載程序,加載完成后,再通過HPI口加載DSP2、DSP3和DSP4。加載完成后,四片TMS320C6701都正常執(zhí)行各自的程序。即DSP1為ROM引導(dǎo)方式、其余各片DSP為HPI引導(dǎo)方式,具體步驟為:按照HPI引導(dǎo)程序設(shè)計的步驟,將DSP2、DSP3、DSP4的目標(biāo)文件進(jìn)行格式轉(zhuǎn)換,分別生成程序代碼段文件和數(shù)據(jù)段文件。
按照FLASH引導(dǎo)程序設(shè)計的步驟,同樣將DSP1的目標(biāo)文件進(jìn)行格式轉(zhuǎn)換,生成程序代碼段文件和數(shù)據(jù)段文件
。DSP1的源程序不僅要包括本DSP需要運行的應(yīng)用程序,還應(yīng)包括通過HPI口將其余各片DSP的程序代碼段和數(shù)據(jù)段分別寫入其相應(yīng)DSP內(nèi)的HPI加載程序。
設(shè)計燒寫系統(tǒng)所用FLASH的程序,然后通過JTAG口將8個文件(code1~4.bot和data1~4.bot)燒寫到系統(tǒng)的FLASH存儲器相應(yīng)的空間中,從而完成了整個過程。
結(jié)語
從實際的應(yīng)用中證明了上述引導(dǎo)方式的軟件設(shè)計是方便可靠的。需要指出的是,如果深入理解了DSP的啟動過程和程序開始執(zhí)行前的初始化過程,還可以設(shè)計出其它軟件實現(xiàn)方法。此外,上述方法并沒有對燒寫進(jìn)FLASH中的程序進(jìn)行加密,因此,我們可以在燒寫FLASH的過程中對關(guān)鍵代碼進(jìn)行加密處理。