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