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