沈 潤 張 喆 徐 瓊 戴桂木
(東南大學(xué)電氣工程學(xué)院,南京 210096)
TMS320F28335數(shù)字信號處理器是TI公司推出的一款浮點DSP控制器。相比以往的DSP,該器件是目前專門用于控制領(lǐng)域的最高性能的芯片,該器件具有精度高、成本低、功耗小、外設(shè)集成度高、數(shù)據(jù)和程序存儲空間大及AD轉(zhuǎn)換更精確快速等特點。很容易將系統(tǒng)的多種控制功能集中在一個芯片上完成,目前已廣泛應(yīng)用于電機控制、儀器及儀表等工業(yè)。
TMS320F28335內(nèi)嵌256KB的Flash和34KB的SRAM,用于用戶存放程序代碼和運行數(shù)據(jù)。但對于大部分控制系統(tǒng)而言,需要升級和完善程序,通常Flash寫入的方法有:通過編程器寫入,這種方法簡單快捷,但是對于貼片F(xiàn)lash,器件一旦焊上,不便再取下來使用編程器寫入程序;在研發(fā)階段,TMS320F28335的應(yīng)用程序通常都是通過仿真器和CCS集成開發(fā)環(huán)境來下載到DSP的內(nèi)部Flash單元。而利用仿真器的方式下載程序,對升級環(huán)境要求較多:計算機上必須安裝專業(yè)的CCS開發(fā)環(huán)境,必須配置仿真器,并需要安裝仿真器的驅(qū)動程序。需要專業(yè)技術(shù)人員才能完成,所以當需要修改程序時,往往需要技術(shù)人員到設(shè)備的現(xiàn)場進行操作,顯然,這種方式工作量極大,費時費力,增加了設(shè)備的維護成本[1,2]。
為了解決這個問題,就需要嵌入式系統(tǒng)具有軟件的在線升級功能。方案是使用DSP系統(tǒng)的外部接口,用PC機,通過RS232標準串口將升級軟件轉(zhuǎn)換成的二進制文件傳輸給DSP的外部RAM,這里選擇外部RAM,因為大多數(shù)情況下,程序的數(shù)據(jù)量比較大,內(nèi)部RAM空間一般不足,然后再由外部RAM燒寫到內(nèi)部Flash,實現(xiàn)DSP的在線升級。
利用TI公司的DSP集成軟件開發(fā)環(huán)境對用戶程序進行編譯和連接生成的是通用目標文件格式(COFF)的文件。這種格式的目標文件結(jié)構(gòu)復(fù)雜,不僅包含了程序代碼,還包含了頭文件、符號表、段地址及初始化段入口等其他的信息,而且不能用常規(guī)方法打開為用戶可讀的形式[3]。COFF文件不能通過串口傳輸,因此必須轉(zhuǎn)換成普通的bin文件。方法是使用hex2000.exe將COFF文件轉(zhuǎn)化為hex文件,然后采用hex2bin.exe轉(zhuǎn)換為bin文件。
TI公司提供的hex2000工具可以將COFF格式的目標文件轉(zhuǎn)化成常見的16進制格式的數(shù)據(jù)流文件,包括ASCII-Hex、Intel MCS-86、Motorola-S、TI-Tagged及Tektronix等類型。hex200的使用方式有命令行方式和批處理方式:
命令行方式 hex2000 [options] filename
批處理方式 hex2000 command_filename
批處理方式可以多次使用,比較方便,本項目中使用的批處理文件內(nèi)容為:
TestPrj.out -boot -order MS -sci8 -map TestPrj.map -o TestPrj.hex -I
具體命令含義如下:
-boot 轉(zhuǎn)換所有段為可啟動形式
-order MS 指定輸出文件為大模式
-ci8 通過SCI啟動,8位模式
-map 創(chuàng)建映射文件
-o 指定一個輸出文件名
-I 指定輸出文件為Intel格式
通過上面的處理可以得到TestPrj.hex的16進制文件。此時hex文件的內(nèi)容就包括要燒寫到Flash的代碼數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)見表1,為了便于通過串口傳輸可以通過hex2bin得到TestPrj.bin文件。
表1 hex文件內(nèi)容
hex文件內(nèi)容根據(jù)批處理文件內(nèi)命令的不同略有不同。
上位機端程序首先讀取數(shù)據(jù)流文件,按照數(shù)據(jù)流文件格式和DSP端程序的通信協(xié)議將數(shù)據(jù)流的段部分分解成多幀數(shù)據(jù),并給每幀數(shù)據(jù)加上協(xié)議的報頭等信息,上位機端的程序與DSP端核程序通過RS232總線方式進行通信。上位機軟件用于選擇升級的文件,其界面如圖1所示。
圖1 上位機升級界面
針對上述串口數(shù)據(jù)流,在SCI的中斷函數(shù)中將串口接收到的數(shù)據(jù)分別存放在外部RAM空間中。新代碼下載到DSP的RAM后調(diào)用TI對Flash的接口函數(shù)庫中的函數(shù),將新代碼燒寫到指定的Flash區(qū)域中,從而實現(xiàn)在線升級,其程序流程如圖2所示。
圖2 串口接收中斷流程
能否成功調(diào)用Flash_API是在線升級的關(guān)鍵所在,TI公司提供了專用的Flash庫文件,用于在線燒寫Flash。由于DSP芯片只有一個Flash區(qū)域,而Flash的結(jié)構(gòu)體系限制了同一時刻Flash只能執(zhí)行一個操作,同時Flash的庫函數(shù)對時序的要求比較嚴格,這兩個因素要求必須把Flash的API函數(shù)拷貝到內(nèi)部RAM運行,為了提高各個部分的運行速度,把整個程序都拷貝到內(nèi)部RAM運行,同時也滿足了Flash API的運行環(huán)境。存儲與運行空間的分布在cmd文件中有所體現(xiàn),.text段放在內(nèi)部RAM運行,具體代碼如下:
.text: LOAD = FLASHA, PAGE = 0
RUN=RAM_L0L1L2L3,PAGE=0
LOAD_START(_text_loadstart),
RUN_START(_text_runstart),
SIZE(_text_size)
同樣的方法把.bss、.cinit、.const及.econt等段都下載到Flash內(nèi),但都是從RAM區(qū)域運行。Flash API除了在RAM運行外,在調(diào)用相關(guān)函數(shù)前還需進行一些初始化,如添加庫文件初始化PLL等常規(guī)操作。同時對于Flash_CPUScaleFactor和Flash API回調(diào)函數(shù)的初始化也應(yīng)注意,即使不使用回調(diào)函數(shù),也應(yīng)進行初始化,防止程序陷阱。
Flash使用的庫函數(shù)有:Flash_Erase,Flash_Program和Flash_Verify。為處理方便,定義了結(jié)構(gòu)體變量供函數(shù)使用,定義的結(jié)構(gòu)體struct HEADER{ Uint32 BlockSize; Uint32 DestAddr; } BlockHeader,升級函數(shù)通過BlockHeader結(jié)構(gòu)體,將升級程序?qū)戇MFlash內(nèi)。
升級程序燒寫完成以后,利用TMS320F28335自帶的軟件看門狗實現(xiàn)軟件復(fù)位重啟,TMS320F28335的看門狗框圖(WDRST方式)如圖3所示。
TMS320F28335的看門狗有兩種方式:WDINT的中斷喚醒方式和WDRST方式,可以在SCSR寄存器中選定其中一種[4]。這里是要求系統(tǒng)復(fù)位重啟,而WDINT是實時監(jiān)控系統(tǒng)的,并不能按要求實現(xiàn)軟件復(fù)位,所以需要WDRST。復(fù)位模式下,當看門狗計數(shù)器達到最大計數(shù)值時,WDRST信號將會持續(xù)拉低XRS引腳512個信號周期,從而使得控制器復(fù)位[4]。
圖3 TMS320F28335的看門狗框圖(WDRST方式)
用筆者提供的方法生成bin文件,使用編寫的上位機軟件,通過串口向DSP燒寫更新程序,升級成功界面如圖4所示。
圖4 升級實驗效果
經(jīng)實驗驗證,通信穩(wěn)定,升級效果較好。
介紹了基于串口通信的DSP程序升級方法,產(chǎn)品安裝到現(xiàn)場后,程序的升級和維護可以通過串口方式來完成,簡單明了的升級界面給用戶良好的使用體驗,給產(chǎn)品的升級和維護帶來了極大的方便,提高了系統(tǒng)可維護性、可擴展性和靈活度,具有較好的使用價值,在其他系列的DSP上也有很強的通用性。對于不便到達現(xiàn)場的設(shè)備,如果加上GPRS模塊或者網(wǎng)絡(luò)接口可以實現(xiàn)遠程升級,更加提高了工作效率,給維護升級帶來極大便利。
[1] 吳小朦,李正宇,周進松.通過RS232串口實現(xiàn)DSP并行FLASH程序升級[J].通信技術(shù),2012,45(1):141~143.
[2] 王敏,黃戰(zhàn)華,孫秋實,等.DSP系統(tǒng)程序遠程更新的研究與實現(xiàn)[J].計算機工程與應(yīng)用,2012,48(8):109~111.
[3] 苗軍,倪奇志.COFF文件分析提取器的實現(xiàn)及其應(yīng)用[J].現(xiàn)代電子技術(shù),2009,32(2):42~44.
[4] 蘇奎峰,呂強,常天慶,等.TMS320C281x原理及C程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2008.