摘 要:在進行DSP產(chǎn)品化設計時,BootLoader是一項關鍵技術。為了更好地解決數(shù)字信號處理器應用程序的加載問題,以TI公司641X系列DSP為例,詳細論述了DSP的兩種引導方法:ROM引導和主機HPI引導,包括二次代碼編寫、存儲器空間分配、引導表生成和.hex文件的燒寫。經(jīng)某星載接收機系統(tǒng)實測驗證,所述方法同時適用于BIOS和No-BIOS兩種系統(tǒng),具有可靠性高、可行性強的優(yōu)點。
關鍵詞:BootLoader; 二次引導; HPI; 引導表
中圖分類號:TN919-34文獻標識碼:A
文章編號:1004-373X(2010)21-0207-03
Study of DSP Boot Methods for TMS320C641X
LIU Jing, HUANG Kang
(Shanghai Engineering Center for Micro-Satellites,Shanghai 200050, China)
Abstract: BootLoader is a key technology in designing DSP products. In order to better solve the loading problem of DSP application program, two bootload methods of DSP (ROM boot and host HPI boot) are introduced based on 641X. The second-level bootloader coding, memory assignment, copy table creation and .hex file burning are discussed. Experiments based on some onboard receiver system show that these approaches which are suitable for BIOS and No-BIOS system are simple and effective.
Keywords: BootLoader;second-level bootloader;HPI;copy table
0 引 言
近年來,以數(shù)字信號處理器(DSP)為基礎的通用信號處理模塊的研制受到人們的重視,它的研制成功滿足了信號處理系統(tǒng)實時性和通用性的要求,被廣泛應用于雷達、通信、電子測量和圖像等領域[1-3]。進行DSP開發(fā),最終的目標產(chǎn)品要脫離仿真器運行,在上電后可自行啟動程序代碼,這就需要一個能在斷電后保存程序的存儲器。對于C641X系列的DSP,內(nèi)部沒有供用戶使用的非易失性存儲器,只能將程序代碼存放在外部的非易失性存儲器中[4]。因此,通常需要在上電復位時,將存儲在外部速度較慢的存儲器的程序代碼搬移到片內(nèi)高速RAM中,這個過程被稱為BootLoader。因此,在設計通用信號處理模塊前,有必要研究DSP的多種引導方式。
1 C641X BootLoader方式和過程
C641X有三種Boot模式:不引導、ROM引導和主機引導[5]。第一種方式只能用于仿真運行;第二種方式利用片內(nèi)固化的BootLoader程序通過EDMA通道,從EMIF的CE1空間拷貝1 KB數(shù)據(jù)到地址0處,然后從地址0處開始執(zhí)行。這種方式只需一片非易失性存儲器,實現(xiàn)較為簡單;第三種方式是在DSP內(nèi)核處于復位時,由外部主機通過主機接口實現(xiàn)程序引導。這種方法雖然復雜度較前者高,但也被廣泛應用于一些具有抗空間輻射效應的星載平臺中[6]。
2 ROM BOOT實現(xiàn)
前面提到這種方式是在DSP上電復位后,由片內(nèi)固化的BootLoader代碼采用EDMA方式從CE1空間復制1 KB代碼到地址0處。但通常用戶程序都遠大于1 KB,這就需要編寫二次BootLoader代碼,將用戶程序搬移到DSP內(nèi)部RAM中[7]。下面介紹具體實現(xiàn)過程。
2.1 二次引導程序編寫
由于系統(tǒng)最初啟動時,C語言環(huán)境還沒有初始化,所以二次引導程序一般用匯編語言編寫。主要完成EMIF寄存器配置,程序搬移,最后跳轉(zhuǎn)到C程序入口函數(shù)。其中,程序搬移主要有兩種實現(xiàn)方式。一種方法無需Copy Table(引導表),而采用鏡像的方式將所有程序代碼看成是一個連續(xù)的數(shù)據(jù)段,二次引導時將片外存儲器的內(nèi)容鏡像到內(nèi)部RAM即可。這種方法雖然實現(xiàn)簡單,但存在占用空間資源大,引導效率低的問題。第二種方法是利用引導表實現(xiàn)。這種方法生成的引導文件是各段連續(xù)存放的,因而引導效率較前一種方法高。關于引導表的格式和生成參見2.4節(jié);兩種方法的二次裝載匯編程序可參見CCS燒寫工具FlashBurn提供的示例工程,這里不再詳述。
2.2 存儲空間分配
程序存儲空間可分為LOAD空間和RUN空間。前者保存程序代碼,物理介質(zhì)一般為片外FLASH或E2PROM;后者是程序代碼實際運行的空間,物理介質(zhì)一般是內(nèi)部RAM。通常,經(jīng)常訪問的程序和初始化變量的LOAD空間放在FLASH中,而RUN空間則放在內(nèi)部RAM中;對于只在初始化時使用的段,其LOAD和RUN空間都放在FLASH中;而對于非初始化變量,其LOAD和RUN空間都安排在內(nèi)部RAM中。當然,如果存儲空間充足時,也可統(tǒng)一將LOAD空間放在FLASH中,而把RUN空間放在內(nèi)部RAM中。根據(jù)上述內(nèi)容,可以將C64X存儲區(qū)作表1所示的安排。
表1 存儲區(qū)分配
存儲器名稱基地址長度
VECS0x00x200
BOOT0x2000x200
IRAM0x4000xffc00
其中,VECS用于存放中斷向量表,BOOT存放二次引導程序。
2.3 cmd文件
cmd文件的作用是實現(xiàn)前兩節(jié)所述的二次裝載代碼、中斷向量表等的存儲空間分配,其主要包含內(nèi)存的劃分以及各程序代碼段的load地址和run地址的分配。常見的cmd文件如下所示:
MEMORY
{
VECS:origin = 0x0,len = 0x200
BOOT:orgin = 0x200,len = 0x200
ISRAM:origin = 0x400,len = 0xffc00
}
SECTIONS
{
vectors > VECS
bootload >BOOT
.text> ISRAM
.bss> ISRAM
.cinit> ISRAM
.const > ISRAM
.far> ISRAM
.stack> ISRAM
.cio > ISRAM
.sysmem > ISRAM
}
其中,vectors是包含中斷向量表的段;BootLoad是包含二次裝載代碼的段。
2.4 引導表的生成
引導表的常用格式如下:
段1的大小
段1的目的地址
段1的內(nèi)容
段2的大小
……
0;
0;
0;
一種方便的生成引導表的方法是,當工程文件編譯生成.out文件后,用CCS自帶的hex6x可執(zhí)行程序?qū)⑵滢D(zhuǎn)化為用于程序引導的.hex文件[7]。這種方法需要編寫一個轉(zhuǎn)換命令文件作為hex6x命令的輸入?yún)?shù),具體如下:
.\\\\debug\\\\xx.out //指定要轉(zhuǎn)換的文件-a-memwidth 8 //設定存儲器寬度-image-map app.map //生成hex map文件-boot //生成copy table-bootorg 0x90000400 //設定copy table地址
ROMS
{
FLASH: org = 000h, len = 0x20000, romwidth = 8, files = {xx.hex}
}
SECTIONS
{
vectors
bootload
.text
.cinit
}
其中l(wèi)en的大小可以查看map文件,只要大于程序和數(shù)據(jù)的實際長度即可。
2.5 文件燒寫
將.hex文件燒入ROOM或FLASH中的方法有以下幾種[8-9]:
(1) 使用通用燒寫器寫入。
(2) 使用CCS自帶的燒寫工具FlashBurn。
(3) 用戶自己編寫燒寫FLASH的程序。
其中,使用通用燒寫器需要文件格式轉(zhuǎn)換且要求燒入的器件是可插拔的;而第三種方法又需要自己編寫代碼,費時費力;常用的是第二種方法,這種方法只需稍加改動,就可以運用于不同的目標系統(tǒng)中。這是因為這種方法需要首先下載FlashBurn提供的工程FBTC的.out文件到目標系統(tǒng)中。這個工程的代碼包含了系統(tǒng)中使用的存儲器的燒寫命令字,而對于不同的存儲器,該命令字是有差別的。這里要做的就是將工程的控制字宏定義改為自己目標系統(tǒng)芯片的控制字,重新編譯鏈接,然后在FlashBurn中選定新生成的FBTC.out文件和待燒入的.hex文件,就可完成文件燒寫。
3 外部主機HPI引導實現(xiàn)
選擇這種引導方式時,外部主機在DSP內(nèi)核處于復位狀態(tài),但芯片其他部分已經(jīng)脫離復位狀態(tài)時,通過HPI接口訪問DSP的全部存儲空間和外設寄存器。當主機完成代碼裝載和初始化后,置HPIC寄存器中的DSPNIT位為1使內(nèi)核脫離復位狀態(tài),然后從0地址處開始運行,具體流程如圖1所示[10]。
圖1 HPI引導流程圖
這種方式也需要如ROM BOOT方式一樣生成.hex文件,生成方法和上述大致相同,只是由于有了外部主機的參與,可以將程序代碼一次性裝載到片內(nèi)RAM中,沒有1 KB的限制,因而無需二次啟動代碼,
只需在0地址處添加跳轉(zhuǎn)指令,使得DSP內(nèi)核復位后
能從入口函數(shù)_c_int00處開始執(zhí)行即可。
4 結(jié) 語
本文詳細論述了TMS320C641X系列DSP上電自啟動的兩種方法,并通過某星載通信接收機系統(tǒng)的驗證,方法簡單可行。該方法論述時雖然是基于非DSP/BIOS框架,經(jīng)驗證也同樣適用于DSP/BIOS系統(tǒng)中。
參考文獻
[1]顧穎,張雪婷.基于ADSP-TS201S的通用雷達信號處理機的設計[J].現(xiàn)代雷達,2006,28(6):49-51.
[2]王會峰,汪大寶,劉上乾.激光光靶圖像識別和測量方法的DSP實時實現(xiàn)[J].光子學報,2008,37(1):206-208.
[3]郎巖梅,唐文彥,趙軍.基于DSP的嵌入式系統(tǒng)中BOOTLOADER程序的設計方法[J].電測與儀表,2003,40(4):35-37.
[4]江思敏,劉暢.TMS3206000 DSP應用開發(fā)教程[M].北京:機械工業(yè)出版社,2005.
[5]Texas Instruments. TMS320C6000 peripherals reference guide [M]. USA: Texas Instruments Incorporated, 2001.
[6]邢克飛,張傳勝,王京,等.數(shù)字信號處理器抗輻射設計技術研究[J].應用基礎與工程科學學報,2006,14(2):572-577.
[7]Texas Instruments. Creating a second-level bootloader for FLASH bootloading on C6000[M].USA: Texas Instruments Incorporated, 2006.
[8]韓紅霞,耿愛輝.DSP外部FLASH燒寫的兩種方法[J].微計算機信息,2007,23(8):170-171,185.
[9]Texas Instruments.FlashBurn: a DSK flash memory programmer [M]. USA: Texas Instruments Incorporated, 2002.
[10]Texas Instruments. TMS320C6000 DSP host port interface(HPI) reference guide[M].USA: Texas Instruments Incorporated, 2003.