黃震,劉亞斌
(北京航空航天大學北京100191)
TMS320C6000系列DSP程序固化的研究
黃震,劉亞斌
(北京航空航天大學北京100191)
針對TMS320C6000系列DSP程序固化困難的問題,從DSP的啟動方式出發,闡述了TMD320C6000系列DSP 3種啟動方式的基本原理,詳細說明了EMIF boot方式的啟動過程,分析了在EMIF boot啟動方式下的程序固化方法,通過多種不同的固化程序的試驗,研究了使用編程器燒寫、使用CCS提供的FlashBurn工具燒寫和在線燒寫等方法在固化程序方面的優點與不足,得出了在線燒寫簡單易行、通用性強的結論,可作為TMS320C6000系列DSP程序代碼固化設計的參考。
DSP;啟動方式;EMIF引導;程序固化;在線燒寫
近年來,數字信號處理器(DSP)發展迅速,在涉及到嵌入式領域和數字信號處理領域等方面的應用取得了很大的進展,其中TI公司推出的TMS320C6000系列DSP器件以其高實時性和高速大數據量數字信號處理運算的特點得以廣泛的應用[1]。在TMS320C6000系列DSP的系統設計過程中,DSP器件的程序固化是較難解決的問題之一,為此,本文立足于實踐,以TMS320C6416為例,詳細闡述了DSP固化程序的幾種實現方法。
TMS320C6000系列DSP的啟動方式包括無引導[No boot]、主機引導[Host boot]和EMIF引導[EMIF boot]3種。
無引導[No boot]:DSP上電復位后,先執行地址0x00000000處的指令,這種方式僅限于存儲器0地址不是必須映射到Ram空間的器件,否則在Ram空間初始化之前CPU會讀取無效的代碼而導致錯誤,并且該方式只能用于仿真運行;主機引導[Host boot]:DSP上電復位后,CPU保持復位狀態,外部主機通過主機接口將程序寫到DSP內部存儲器,并配置相應的寄存器,完成后設置DSPINT標志位,該標志位會清除DSP復位狀態,然后DSP從地址0x00000000開始運行,該方式要求必須有一外部主機控制DSP的初始化,這將增加系統的成本和復雜度,實現難度較大;EMIF引導[EMIF boot]:DSP在外部Rom中固化了程序,復位后通過EMIF從CE1存儲空間首地址拷貝一部分代碼到內部Ram的零地址中,接著從零地址開始執行,DSP與外部Rom接口較為自由,但DSP內部的Bootloader工具自動加載的代碼量有限(1 kB/64 kB)[2]。
DSP通過器件引腳配置的方式選擇使用何種引導方式啟動程序。當復位完成后,DSP通過讀入外圍的引腳配置信息,確定具體的引導啟動方式。
本文中將主要研究EMIF boot啟動方式下的程序固化方法。當前常用的程序固化方法主要有以下幾種:使用編程器燒寫、使用CCS提供的FlashBurn工具燒寫、在線燒寫。
實際應用中,DSP通常采用的是EMIF boot啟動方式。通過編寫二級Bootloader的方法,可以改善EMIF boot過程中片上Bootloader工具加載的代碼量有限的弊端;并且該方式實現簡單,通用性好,無需使用外部主機配合,簡化了系統的結構,降低了系統的成本。因此,EMIF boot啟動方式的應用場合更加的廣泛。
DSP的EMIF boot啟動過程分為兩部分:一級加載和二級加載。一級加載是復位后,DSP通過EMIF將固化在CE1空間Rom中的代碼搬入內部Ram零地址處,然后從內部零地址開始執行的過程;二級加載是在一級加載的基礎上,通過一級加載的程序代碼,實現將用戶應用程序由外部Rom拷貝到內部運行地址的過程[3]。
對于C6416來說,片上的Bootloader工具只能將1 kB的代碼搬入內部Ram。通常情況下,用戶應用程序的大小都會超過這個限制。所以,需要在外部Rom的前1 kB范圍內預先存放一小段程序,待片上Bootloader工具把此段代碼搬入內部并開始執行后,由這段代碼實現將外部Rom中剩余的應用程序加載到內部Ram。此段代碼被稱作二級Bootloader[4]。
通用編程器具有方便用戶使用的菜單式界面,能夠自動檢測芯片插錯、管腳接觸不良及芯片內部短路等功能,能夠自動識別存儲器廠家和型號,可修改編程參數,可根據芯片的具體情況確定編程參數。但是,通用編程器只適用于未焊接到板卡上的外部Flash芯片,而且芯片的型號受到編程器的局限,通用性不好。
使用通用編程器固化程序,要配置好對應外部存儲器芯片的燒寫配置文件,并且由于通用編程器的輸入文件主要是.hex和.bin類型的文件,用戶需要將.out類型的目標工程文件轉化成為.hex或.bin類型的文件,才能進行程序下載。
使用通用編程器將用戶程序固化到Flash中的操作步驟:
1)將含有二級加載程序的Bootloader.asm文件加入到用戶工程中,其地址空間分配為0x00~0x400;
2)編寫分配程序地址空間的CMD文件;
3)使用Hex6x.exe工具,將.out類型的目標文件,轉換成為.hex類型的二進制文件;
4)使用編程器將轉化后的二進制文件寫入到Flash中。
FlashBurn是TI為DSP用戶設計的Flash燒寫工具,安裝后可以作為CCS的一個插件使用。FlashBurn工具以CCS為基礎,運行時需要先下載一個.out類型的鏡像文件FBTC(FlashBurn Target Component)到DSP中,這個FBTC就是一個執行程序,通過運行FBTC,DSP可以與FlashBurn交互,接收FlashBurn的指令,用戶可以通過FlashBurn提供的圖形界面對Flash執行擦除、編程和查看內容等操作,簡單方便的將程序固化到DSP中。
Flashburn的操作界面簡潔,人機交互簡單,使用戶可以快速方便的燒寫程序,并且可以通過修改FBTC工程文件的參數和函數來適應不同型號DSP的燒寫需求;但是,TI公司提供的FBTC的源代碼結構復雜,內容繁多,用戶需要先去了解FBTC的運行機制及其與上位機的通信協議,才可能對Flash燒寫函數進行正確的修改,這就給用戶開發帶來了不便。另外,由于FlashBurn和FBTC的定制特性使得它的應用只能局限在一些特定的場所。
使用CCS提供的FlashBurn工具將用戶程序固化到Flash中的操作步驟:
1)將能夠正常的仿真運行的程序進行編譯,生成.out目標文件;
2)在已調試好的工程項目中加入包含二級加載程序的文件bootloader.asm,同時修改CMD文件,在CMD文件中添加一個名為boot的段,位置是0x000,長度為0x400,bootloader. asm文件中的二級加載程序儲存在該段中。然后,重新編譯工程,生成新的.out目標文件。
3)利用Hex6x.exe把編譯生成的新.out目標文件轉化為. hex文件,用于燒到Flash中。
4)連接CCS與DSP后,啟動FlashBurn。在file菜單里面新建配置,分別選擇好合適的Processor Type和FBTC program file,然后點擊programdownload FBTC。
5)把FBTC下載到板子上以后,就可以對Flash進行擦除(erase flash)、查看(show memory)和編程(program flash)操作,這些功能在program菜單下。對Flash進行編程時,FlashBurn只支持.hex類型的文件。
以上兩種方法,都需要對目標文件進行格式轉化,過程比較麻煩且容易出錯,而使用在線燒寫的方法,可以直接將目標文件寫入到Flash中。在線燒寫即使用自己編寫的燒寫代碼進行燒寫。這種方法需要編寫兩個工程,一個是實現用戶功能的目標工程,另一個是燒寫工程。在線燒寫時,首先要將目標工程的.out文件通過仿真器下載到DSP的內部Ram中,之后將燒寫工程的.out文件也下載到DSP中,并且要保證這兩個.out文件在DSP的Ram區中占有不同的區域,之后運行燒寫工程,即可將目標工程的代碼數據燒寫到Flash中[5]。這種燒寫方法的好處是燒寫過程清晰明了,操作簡單,目標工程和燒寫工程單獨編寫,不易搞混;同時燒寫工程具有很好的通用性,稍微修改后就可用于其他型號DSP的燒寫。
使用在線燒寫將用戶程序固化到Flash中的操作步驟:
首先,對正常仿真運行的目標工程做兩個方面的修改:編寫包含二級加載程序的文件bootloader.asm,并將該文件加入到目標工程中去,這個加載程序一般采用匯編語言實現;修改目標工程的CMD文件,將二級加載程序的代碼指向片內RAM的首地址,長度是1 k,目標工程中其他的程序代碼放在其后。修改完成后,將新工程編譯生成的.out文件通過JTAG下載到DSP的內部Ram中,不要運行。新目標工程的CMD文件如下所示:


然后,將燒寫工程的.out文件也加載到DSP的內部RAM中,運行燒寫工程將目標工程的程序代碼燒寫進Flash中。
燒寫工程完成的功能就是將剛下載到片內Ram的目標工程的代碼寫進Flash中。因為前面目標文件已經下載到片內Ram的開始位置,占用了片內Ram的一部分空間,因此修改燒寫工程的CMD文件,將該工程在片內Ram的存儲位置與前面已下載工程的存儲位置分開,避免發生內存沖突。
用戶可以打開前面下載的目標工程的Map文件查看其占用了多少空間,如下所示:

從Map文件中可以看出,BOOT用了0x2c8字節,而其他代碼用了0x4aec字節。為了保險,把燒寫工程的代碼放在內部Ram中離目標工程較遠的位置。這樣燒寫工程的.out文件下載之后就不會把前面下載的目標工程的.out文件覆蓋[6]。燒寫工程的CMD文件如下所示:


實質上,燒寫程序的過程也就是將程序從Ram中拷貝到Flash中的過程。已經得知Bootloader程序的大小是0x2c8字節,目標工程的大小是0x4aec字節。所以,拷貝時先拷貝Bootloader程序的0x2c8字節數據,從Ram地址0x00000000拷貝到Flash地址0x64000000;然后再拷貝目標工程文件的0x4aec字節數據,從Ram地址0x00000400拷貝到Flash地址0x64000400。燒寫工程的關鍵代碼如下:

文中討論了TI的C6000系列DSP的啟動方式及程序固化方式,介紹了使用編程器燒寫、使用CCS提供的FlashBurn工具燒寫和在線燒寫等3種程序固化方法,并重點說明了在線燒寫固化程序的方法和步驟。該方法通用性強,可移植性好,實現簡單,適用于TI的C6000系列中大部分型號DSP程序的固化,可作為該系列DSP程序代碼固化設計的參考。
[1]段榮行,鄭國蘭.TMS320C6711的Flash引導裝載系統研究與設計[J].電子設計工程,2004(12):55-58.
[2]夏爽.DSP的二級加載及Bootloader研究[J].電腦編程技巧與維護,2009(2):8-11.
[3]鐘俊,呂盼稂,王歡,等.TMS320C672x DSP引導程序設計[J].計算機工程,2010,36(4):267-270.
[4]郎巖梅,唐文彥,趙軍.基于DSP的嵌入式系統中BOOTLOADER程序的設計方法[J].電測與儀表,2003,40(438):35-37.
[5]孫照宇,張公禮.TI 6000系列DSP引導裝載方式的研究[J].電子器件,2005,28(1):176-179.
[6]王碩果,肖強.TMS320C6701 DSP自動加載研究[J].現代電子技術,2009,32(19):72-75.
Study on the program download of TMS320C6000 DSP
HUANG Zhen,LIU Ya-bin
(Beihang University,Beijing 100191,China)
Aiming at the problem of the difficulty in TMS320C6000 series DSP program download,From the start mode of the DSP,this article explains the basic principle of three start modes of TMS320C6000 Series DSP,introduces start-up process of EMIF boot in detail,analyses the methods of downloading program in EMIF boot start mode,does a variety of different tests of downloading program,studies the advantages and disadvantages of using programmer,using the CCS FlashBurn tool and online writing in the downloading program,gets the conclusion that the online writing is simple and easy to operate.It can be used as the reference of code downloading of TMS320C6000 series DSP.
DSP;start mode;EMIF boot;program download;online download
TN47
A
1674-6236(2016)12-0026-03
2015-06-18稿件編號:201506191
黃震(1990—),男,山東煙臺人,碩士。研究方向:控制工程與控制科學。