冀云
(重慶電子工程職業(yè)學(xué)院 重慶401331)
基于FLASH的TMS320C6416自啟動(dòng)實(shí)現(xiàn)方法
冀云
(重慶電子工程職業(yè)學(xué)院 重慶401331)
介紹了一種通過自己編寫的燒寫FLASH的程序以及二次引導(dǎo)程序?qū)崿F(xiàn)DSP上電自啟動(dòng)的方法。當(dāng)DSP復(fù)位時(shí)內(nèi)部引導(dǎo)裝載程序會(huì)裝載位于FLASH的前1KB的二次引導(dǎo)程序。裝載成功后DSP從0x00地址開始執(zhí)行二次引導(dǎo)程序;二次引導(dǎo)程序的作用就是完成加載用戶應(yīng)用程序,并且加載完成后跳到C程序入口點(diǎn)c_int00處,執(zhí)行用戶程序,實(shí)現(xiàn)用戶程序的FLASH自啟動(dòng)。
FLASH自啟動(dòng);TMS320C6416;二次引導(dǎo);燒寫FLASH
近年來隨著數(shù)字信號(hào)處理器(DSP)技術(shù)的迅猛發(fā)展,其越來越廣泛地應(yīng)用于生產(chǎn)生活的各個(gè)領(lǐng)域。其中,TMS320C6000系列TI公司推出的最新DSP型號(hào),其性能得到了很大的提升,核心頻率最高達(dá)到1GHz。在許多需要進(jìn)行大量數(shù)字信號(hào)處理運(yùn)算并兼顧高實(shí)時(shí)性要求的場(chǎng)合得以廣泛應(yīng)用。TI公司的C6x1x產(chǎn)品的內(nèi)部BOOT只能加載1K的程序,如果應(yīng)用程序大于1K則無法實(shí)現(xiàn)自啟動(dòng)。在TMS320C6000系列DSP的系統(tǒng)設(shè)計(jì)應(yīng)用過程中,DSP器件的啟動(dòng)加載設(shè)計(jì)是最關(guān)鍵的技術(shù)之一,這就需要用戶自己編寫一個(gè)二次引導(dǎo)程序。本文針對(duì)這一問題提出一種有效解決的方法。
TMS320C6416是TI公司最新推出的高性能定點(diǎn)DSP,其時(shí)鐘頻率可達(dá)1GHz,采用兩級(jí)緩存結(jié)構(gòu),一級(jí)緩存 (L1)由128Kbit的程序緩存和128Kbit的數(shù)據(jù)緩存組成,二級(jí)緩存 (L2)為8Mbit;有2個(gè)擴(kuò)展存儲(chǔ)器接口(EMIF),一個(gè)為 64bit(EMIFA),一個(gè)為 16bit(EMIFB),可以與異步存儲(chǔ)器 (SRAM、EPROM)或同步存儲(chǔ)器(SDRAM、SBSRAM、ZBTSRAM、FIFO)實(shí)現(xiàn)無縫連接。本系統(tǒng)就是DSP通過外部存儲(chǔ)接口EMIFB來外掛FLASH芯片,F(xiàn)LASH采用的是8位數(shù)據(jù)線接法。
在通過DSP對(duì)FLASH操作編程時(shí),F(xiàn)LASH數(shù)據(jù)寬度為16bit時(shí),DSP地址要左移 1bit;數(shù)據(jù)寬度為 8bit時(shí),DSP地址要左移2Bit。有些FLASH資料已經(jīng)分別將寫操作命令在8位和16位的不同命令時(shí)序給出,這種情況下就不需要再進(jìn)行移位。
本系統(tǒng)采用的 FLASH芯片是 AMD公司推出的AM29LV400BT,存儲(chǔ)容量是4M Bit。用戶可根據(jù)需求配置成 512K x 8-Bit或者 256K x 16-Bit兩種形式。由于TMS320C64x支持16bit的FLASH讀寫操作,但是只支持8-bit的FLASH加載;為了方便后面燒寫FLASH,本系統(tǒng)采用的是512K x 8-Bit形式。
DSP通過EMIFB控制FLASH的讀寫和擦除;存儲(chǔ)空間分配在EMIFB的CE1內(nèi),占用DSP內(nèi)部地址范圍是64000000-643FFFFF。其中A0-A19作為地址線,D0-D7作為數(shù)據(jù)線,CE為片選信號(hào),WE是寫選通信號(hào),OE為使能信號(hào),BYTE為8位或16位數(shù)據(jù)模式選擇 (BYTE接地時(shí)是8位模式)。
如前面所說因?yàn)門I公司的C6x1x產(chǎn)品的內(nèi)部BOOT只能加載1K的程序,而用戶的應(yīng)用程序往往遠(yuǎn)大于1K,所以必須通過用戶自己編寫二次引導(dǎo)程序才能實(shí)現(xiàn)FLASH自啟動(dòng)。DSP上電后內(nèi)部BOOT自動(dòng)加載FLASH前1K數(shù)據(jù),用戶要編寫的二次引導(dǎo)程序最終將寫入FLASH的前1K存儲(chǔ)空間,且該空間的剩余部分不能再用來存儲(chǔ)其他程序。二次引導(dǎo)程序的作用就是按照一定的參數(shù)將存儲(chǔ)在FLASH中的其他用戶程序數(shù)據(jù)搬移到DSP內(nèi)存空間,并且搬移完成后,要跳轉(zhuǎn)到用戶程序的C語(yǔ)言的入口地址c_int00處,開始執(zhí)行用戶程序。
本系統(tǒng)的二次引導(dǎo)程序采用匯編程序編寫,其中主要代碼如下:
以上程序中0x64000400可根據(jù)自己的FLASH地址而改變;而C語(yǔ)言程序入口地址,各段在RAM中起始地址以及段的字節(jié)長(zhǎng)度都可以在用戶工程的MAP文件中得到。
以下是一個(gè)工程的MAP文件部分內(nèi)容:
上面分別顯示了C語(yǔ)言入口地址以及各段在內(nèi)存中的起始地址和字節(jié)長(zhǎng)度。燒寫FLASH的時(shí)候需用到這些參數(shù),二次引導(dǎo)程序加載用戶程序的時(shí)候也會(huì)用到這些參數(shù)。
對(duì)FLASH的擦除和寫操作都要按照一定的時(shí)序進(jìn)行,不同的芯片可能稍微有所不同,這里首先按照芯片資料做如下定義:
以上程序分別定義了擦除燒寫FLASH的命令內(nèi)容以及地址。
下面定義擦除整片F(xiàn)LASH函數(shù):
下面是燒寫單字節(jié)到FLASH的函數(shù)內(nèi)容:
下面是燒寫一段數(shù)據(jù)到FLASH的函數(shù)部分內(nèi)容:
首先將.boot_load段寫入FLASH的前1k空間,然后在0x400地址處寫用戶應(yīng)用程序的入口地址數(shù)據(jù),最后依次寫數(shù)據(jù)段的長(zhǎng)度以及本段在RAM中的起始地址和本段數(shù)據(jù)。如果是多段,則按照第一段規(guī)則依次寫入。需要注意的是,寫FLASH的寫入順序要和二次引導(dǎo)程序相對(duì)應(yīng),不同的二次引導(dǎo)程序?qū)?yīng)的寫入順序和內(nèi)容不同。
用戶將應(yīng)用程序編寫好后,只要簡(jiǎn)單地把編寫的匯編二次引導(dǎo)程序添加到用戶工程,同時(shí)要更改工程的CMD文件,將boot_load段編譯到DSP內(nèi)部RAM的前1k空間,即0-0x400內(nèi),然后重新編譯工程即可。
利用上面燒寫FLASH函數(shù),建立一個(gè)工程FlashBurn.prj的工程,其作用是用將用戶工程的內(nèi)容從內(nèi)存中讀出來并燒寫到FLASH中。首先查看前面編譯好的用戶應(yīng)用程序工程里的MAP文件;MAP文件是CCS軟件編譯后產(chǎn)生的有關(guān)DSP用到所有程序、數(shù)據(jù)及IO空間的在內(nèi)存映射文件。按照MAP文件把各需要寫進(jìn)FLASH的非初始化段的起始地址以及段長(zhǎng)度參數(shù)設(shè)置好,然后設(shè)置本工程各代碼以及數(shù)據(jù)段分配的CMD文件。需要注意的是一定要將FlashBurn工程的內(nèi)存空間分配和用戶應(yīng)用程序的內(nèi)存空間分配分開,不能重疊,以免相互覆蓋。設(shè)置完成后編譯工程。
最后將用戶程序生成的.out文件通過 JTAG下載到DSP內(nèi)部RAM中,但不要運(yùn)行;接著將FlashBurn.prj的工程的.out文件用同樣的方法下載到DSP內(nèi)部RAM中并運(yùn)行。這個(gè)程序完成的任務(wù)就是將先前載到片內(nèi)RAM的用戶工程數(shù)據(jù)寫進(jìn)FLASH。寫完成后斷電重啟,DSP就會(huì)自動(dòng)執(zhí)行用戶程序,實(shí)現(xiàn)用戶程序自啟動(dòng)。
本文以TMS320C6416為例闡述了用戶自己編寫燒寫FLASH程序?qū)崿F(xiàn)自啟動(dòng)功能,已經(jīng)在工程中得到了應(yīng)用。TI公司提供了一個(gè)燒寫FLASH的工具FlashBurn,但是這種力法的缺點(diǎn)是需要將程序編譯后生成的.out文件再轉(zhuǎn)換成.hex文件;轉(zhuǎn)換過程的同時(shí),需要一個(gè)cmd文件。并且 FlashBurn工具運(yùn)行時(shí)需要下載 FBTC(FlashBurn Target Component)到DSP系統(tǒng)中,然后由上位PC機(jī)通過仿真器發(fā)送指令和數(shù)據(jù)給下位DSP,具體對(duì)FLASH的操作由FBTC執(zhí)行。然而,這個(gè)FBTC一般是針對(duì)TI公司提供的DSP專門編寫的,與板上使用的FLASH的接口寬度、操作關(guān)鍵字都有關(guān),對(duì)用戶自己制作的硬件不一定適合。與FlashBurn工具相比較,本方法更為靈活,只要按照MAP文件更改下FlashBurn.prj工程中各段的參數(shù)就可以適用于其他DSP和工程,并且避免了文件格式轉(zhuǎn)換的繁瑣。
[1]汪安民,張松產(chǎn),常春藤.TMS320C6000DSP實(shí)用計(jì)數(shù)與開發(fā)案例[M].北京:人民郵電出版社,2008.
[2]TMS320C6x Assembly Language Tools User’s Guide.1999
[3]CreationCreating a Second-Level Bootloader for FLASH.2006
責(zé)任編輯 王榮輝
The Self-implementation Method Based on TMS320C6416 of FLASH
JI Yun
(Chongqing College of Electronic Engineering,Chongqing 401331,China)
This paper introduces the self-implementation methods of the secondary bootloader and the flash burning in DSP in detail.After the resetting of DSP,the inner initial program loader would load the secondary bootloader of 1KI in FLASH.And then DSP executes the secondary bootloader from 0x00,which accomplishes the user's application program,after that,it jumps to the entry point c_int00 in C program and executes user program.Finally,the self-implementation f FLASH can be achieved.
FLASH self-implementation;TMS320C6416;secondary bootloader;flash burning
TP39
A
1674-5787(2010)05-0144-03
2010-08-22
冀云,男,重慶電子工程職業(yè)學(xué)院電子信息系,助理工程師。