彭 云,孫志鵬
(1.中國電子科技集團(tuán)公司第二十六研究所,重慶400060;2.愛立信(西安)信息通信技術(shù)服務(wù)有限公司大連分公司,大連116023)
在傳統(tǒng)的傳感器設(shè)備中,設(shè)備程序的燒寫一般用JTAG接口來進(jìn)行。這種方式的特點(diǎn)是可以用芯片廠商提供的燒寫軟件和燒寫器進(jìn)行程序的燒寫,節(jié)省人力和資金成本。但當(dāng)傳感器產(chǎn)品最后出廠時(shí),這種燒寫方式的缺點(diǎn)就非常突出了——JTAG接口不利于更新程序,因?yàn)樵诙鄶?shù)情況下,需要打開設(shè)備的蓋子,然后進(jìn)行程序的燒寫[1-3]。
TI F2812DSP的Boot啟動模式選擇有很多種,詳見表1[4]。
在DSP編程中,大部分都采用Jump to Flash/ROM模式,這種模式啟動方便,利于程序控制?;诖朔N啟動方式,設(shè)備能通過串口進(jìn)行硬件DSP程序的更新。
TI F2812DSP的Flash大小是12K×16,分為10個(gè)Sector,每個(gè)Sector有其各自的大小。
F2812 Flash Sector地址區(qū)域劃分的詳細(xì)信息見表2[4]。
表1 TI F2812DSP啟動模式
表2 F2812 Flash Sector地址區(qū)域劃分
從表2可以看出,位置為0x3F7FF6~0x3F7FF7處為Boot-to-Flash的跳轉(zhuǎn)入口,并且由于F2812的每個(gè)Sector大小固定,所以可以靈活的在程序中加以設(shè)計(jì)。研究中,將Flash區(qū)域進(jìn)行如表3所示劃分,可以實(shí)現(xiàn)由Bootloader啟動后進(jìn)入原始程序,或者新程序,并且在Bootloader過程中可以對設(shè)備進(jìn)行更新。
存儲區(qū)實(shí)現(xiàn)主要是靠修改.cmd文件來完成[5]。其中位于程序空間(Page 0)可進(jìn)行如下設(shè)置:
表3 F2812 Flash重新設(shè)計(jì)
在進(jìn)行如上設(shè)計(jì)后,即可實(shí)現(xiàn)Flash區(qū)域劃分的實(shí)現(xiàn)。最后,通過對Section的設(shè)計(jì)即可確定Flash程序燒寫的位置:
研究所實(shí)現(xiàn)的bootloader中,更新數(shù)據(jù)類型采用Intel HEX文件。Intel HEX文件是由一行行符合Intel HEX文件格式的文本所構(gòu)成的ASCII文本文件。在Intel HEX文件中,每一行包含一個(gè)HEX記錄。這些記錄由對應(yīng)機(jī)器語言碼和(或)常量數(shù)據(jù)的十六進(jìn)制編碼數(shù)字組成。Intel HEX文件通常用于傳輸將被存于ROM或者EPROM中的程序和數(shù)據(jù)。大多數(shù)EPROM編程器或模擬器使用Intel HEX文件[6]。
下面是生成的一段HEX文件:
以第一行為例,冒號后的數(shù)據(jù)的作用是:
20是這行數(shù)據(jù)的字節(jié)數(shù)(0x20);
0000是數(shù)據(jù)將被下載到存儲器當(dāng)中的位置(在本研究中不使用此參數(shù));
00是數(shù)據(jù)記錄的類型;
AA08……00020001是數(shù)據(jù),0x20個(gè)字節(jié);
AF是校驗(yàn)和。
詳細(xì)的數(shù)據(jù)分析通過之后更新數(shù)據(jù)分析函數(shù)來實(shí)現(xiàn)。
生成更新程序的HEX文件需要TI提供的hex2000.exe工具和一個(gè)自己編寫的CMD批處理文件。批處理文件內(nèi)容如下:
將批處理文件(例如build2812hex.cmd)和TI提供的工具(hex2000.exe)放在同一路徑下,然后命令行中進(jìn)入該路徑輸入:hex2000.exe build2812hex.cmd即可生成更新需要的HEX文件[7]。
程序運(yùn)行的主要流程如圖1所示。
圖1 程序運(yùn)行流程圖
Flash燒寫主要用到TI公司提供的API函數(shù)。首先需要將用于燒寫的Lib庫函數(shù)載入,具體可以通過修改.cmd文件來實(shí)現(xiàn),如下所示:
之后即可調(diào)用Flash_Program(Flash_ptr,array,Length,&ProgStatus)和Flash_Verify(Flash_ptr,array,Length,&VerifyStatus)來進(jìn)行 Flash的燒寫[8]。
正如前面所提到的,對于更新數(shù)據(jù)的分析應(yīng)該分多種情況加以考慮,本研究中實(shí)現(xiàn)了DataAnalyse(Uint16*data)函數(shù),函數(shù)實(shí)現(xiàn)的主要算法如下:
這個(gè)通過串口進(jìn)行程序更新的方法,可以廣泛運(yùn)用于嵌入式芯片F(xiàn)lash的讀寫。這種方法可以克服傳統(tǒng)的JTAG帶來的不便。另外,HEX文件格式也被大多數(shù)編程器和解釋器所使用,通過掌握這種文件格式,可以更好的對更新程序進(jìn)行設(shè)計(jì),以滿足不同開發(fā)人員的需求。
特別地,這種對Bootloader的程序的設(shè)計(jì),可以方便的與上位機(jī)配合使用。比如通過適當(dāng)?shù)木幊陶Z言,實(shí)現(xiàn)上位機(jī)的圖形化界面操作,就可以實(shí)現(xiàn)通過圖形化界面對DSP Flash進(jìn)行程序的燒寫和升級。
[1]王薇.基于嵌入式Linux的BootLoader的設(shè)計(jì)與應(yīng)用[D].成都:西南交通大學(xué),2006.WANG Wei.Design and application of Bootloader based on embed Linux system[D].Chengdu:Southwest Jiaotong University,2006.
[2]戴衛(wèi)彬.基于JTAG的在系統(tǒng)編程和硬件調(diào)試研究與應(yīng)用[D].昆明:昆明理工大學(xué),2005.DAI Weibin.Research and application of JTAG in system programming and hardwaredebugging[D].Kunming:Kunming University of Science and Technology,2005.
[3]鄧啟輝.用JTAG燒寫Flash的方法[J].兵工自動化,2005,24(1):86-87.DENG Qihui.A method to use JTAG to write Flash[J].Ordnance Industry Automation,2005,24(1):86-87.
[4]TEXAS INSTRUMENTS.Digital Signal Processors Data Manual.Apirl 2001.http://www.ti.com/lit/ds/symlink/tms320f-2810.pdf
[5]陳娟,戴文進(jìn).一種燒寫TMS320LF240xA的新方法[J].通信電源技術(shù),2007,24(2):49-51.CHEN Juan,DAI Wenjin.A new way to write TMS320LF2-40xA[J].Telecom Power Technology,2007,24(2):49-51.
[6]邢矯健.如何在單片機(jī)上調(diào)試Hex文件的程序[J].電子世界,2003(11):31-32.XING Jiaojian.How to debug HEX file in DSP[J].Electronics World,2003(11):31-32.
[7]何艷麗.TMS320F2812在線編程中的文件格式轉(zhuǎn)換[J].煤炭技術(shù),2012,31(2):228-230.HE Yanli.Online programing file format translation in TMS-320F2812[J].Coal Quality Technology,2012,2:220-222
[8]楊東軍,方偉,葉新.TMS320C30外部FLASH在線燒寫及代碼搬移的實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2011,19(9):2227-2229.YANGDongjun,FANGWei,YEXin.Implementationof external flash online writing and code migration in TMS320C30[J].Computer Measurement&Control,2011,19(9):2227-2229.