馬喜強,劉維亞 ,鄭喜鳳
(1.中國科學(xué)院長春光學(xué)精密機械與物理研究所,長春130033;2.中國科學(xué)院研究生院,北京100039)
現(xiàn)代商業(yè)及工業(yè)嵌入式電力電子產(chǎn)品出于美觀、安全和可維護性方面的考慮,對系統(tǒng)維護的時效性和便攜性要求越來越高?;贒SP 開發(fā)的野外及外場數(shù)字設(shè)備程序維護困難,已安裝的設(shè)備若用戶提出新需求,需要對內(nèi)部程序進行脫機更新[1]。
針對DSP 在線編程問題,張謙等提出的基于硬件標志位控制的方法,編寫了文件轉(zhuǎn)換工具,實現(xiàn)了DSP 在兩套程序之間的選擇加載,避免了對FLASH的反復(fù)燒寫[2];王宏義等提出了基于PCI 總線使用單個FLASH 存儲器同時實現(xiàn)DSP 引導(dǎo)加載和FPGA 配置的方法[3];劉鐵提出的基于CAN 總線程序在線升級的方法,使DSP 代碼的更新可以脫離仿真器,大大提高了DSP 系統(tǒng)程序升級的效率[4];沈軍等提出了基于RS422 串行通信遠程更新DSP 程序的方法,在系統(tǒng)不掉電的情況下實現(xiàn)了DSP 程序的遠程更新與自啟動[5];陶維青等提出了基于TMS320F2812 DSP的軟件更新方法[6],但通過串口實現(xiàn)的4 kbyte/min的更新速度顯然不能滿足野外系統(tǒng)的要求。以上方法都具有一定的局限性:通信方式單一,不能滿足野外數(shù)字設(shè)備復(fù)雜性及多變性的要求。
針對上述問題,本文提出了一種基于多通信方式的DSP 程序更新方法,介紹了方案的實現(xiàn)要點,本方法已經(jīng)成功應(yīng)用于某型數(shù)字測風(fēng)經(jīng)緯儀系統(tǒng)中。
系統(tǒng)的MCU 選用的是TI 公司的TMS320C6747(以下簡稱C6747),C6747 是業(yè)界功耗最低的浮點DSP,C6747 自帶USB、串口、網(wǎng)絡(luò)和CAN 總線等接口,無需外擴芯片。第一次更新程序時,需要使用仿真器將目標程序更新至FLASH 分區(qū)1 中,此時系統(tǒng)即可運行。系統(tǒng)需要更新程序時,系統(tǒng)首先響應(yīng)中斷并讀取多通信模塊信息,然后等待用戶按鍵選擇需要更新的程序,接著從相應(yīng)通信設(shè)備中讀入目標程序及其大小數(shù)值,放到內(nèi)部RAM 緩存中,然后系統(tǒng)判斷當(dāng)前程序的入口地址,如為FLASH 分區(qū)1,則把目標程序更新至FLASH 分區(qū)2 中,并把程序的入口地址設(shè)置為FLASH 分區(qū)2;反之則對FALSH 分區(qū)1 采取相同操作。系統(tǒng)通信設(shè)備的信息讀取由多通信模塊完成。這樣就實現(xiàn)了程序更新并且保存了更新前的原程序。系統(tǒng)程序在線編程的軟件流程圖如圖1 所示。
圖1 系統(tǒng)程序在線編程的軟件流程圖
目前工業(yè)界通信協(xié)議具有復(fù)雜性和多樣性的特點,傳統(tǒng)的多種通信功能的實現(xiàn)僅僅致力于通信方式接口的開發(fā)與實現(xiàn)[7-10],可移植性差,并且遠遠不能滿足復(fù)雜環(huán)境下的需求。本文多通信模塊的設(shè)計思想:將數(shù)據(jù)收發(fā)的過程與數(shù)據(jù)內(nèi)部表示的信息分離。數(shù)據(jù)收發(fā)由抽象的收發(fā)器接口表示,在硬件中具體實現(xiàn),比如基本TCP/IP、無線網(wǎng)絡(luò)接口、RS232,485 接口等。協(xié)議也具備可擴展性。協(xié)議的可擴展性由專門的協(xié)議管理層實現(xiàn),管理層具有協(xié)議注冊和匹配功能。協(xié)議層由一組平等的協(xié)議集合構(gòu)成。當(dāng)需要添加新協(xié)議時,在協(xié)議層實現(xiàn)協(xié)議并向協(xié)議管理層注冊。
基于模塊化設(shè)計方法,提出了可擴展多通信方式模塊如圖2 所示。本模塊主要由五個部分組成,協(xié)議層、協(xié)議管理層、數(shù)據(jù)收發(fā)層、傳輸層和接口層,同時具備有線、無線多種通信能力,可以根據(jù)具體環(huán)境靈活選擇。使用可擴展通信協(xié)議棧,支持對通信接口和通信協(xié)議的擴展。下面分別對各個層進行介紹。
圖2 可擴展多通信方式模塊圖
接口層和傳輸層主要對應(yīng)于硬件設(shè)備,每種接口對應(yīng)于某類傳輸層,如RS232、RS422、RS485 均屬于串口傳輸層。數(shù)據(jù)收發(fā)層主要負責(zé)底層設(shè)備的數(shù)據(jù)接收和發(fā)送,采用數(shù)據(jù)統(tǒng)一收發(fā)的協(xié)議方式,可以有效地實現(xiàn)應(yīng)用程序與底層接口驅(qū)動的隔離。協(xié)議管理層主要負責(zé)協(xié)議的匹配,并對已收到和待發(fā)送的指令幀的指令類型、目的地址和包數(shù)據(jù)幀數(shù)進行解析。協(xié)議層主要負責(zé)數(shù)據(jù)幀和應(yīng)答幀的分類處理和編制。軟件流程圖如圖3 所示。
圖3 通信模塊軟件流程圖
DSP/BIOS 是一個用戶可剪裁的實時操作系統(tǒng),主要由三部分組成:多線程實時內(nèi)核、實時分析工具、芯片支持庫。利用DSP/BIOS,可以方便快速的開發(fā)復(fù)雜的DSP 程序[11]。多線程實時內(nèi)核調(diào)度多線程的運行,將定制的系統(tǒng)算法作為一個嵌入系統(tǒng)線程。DSP/BIOS 以模塊化方式提供給用戶對線程、中斷、定時器、內(nèi)存資源、所有外設(shè)資源的管理能力都可以根據(jù)需要剪裁[12]。實際應(yīng)用時把相應(yīng)的算法作為一個線程插入DSP/BIOS 的調(diào)度隊列,由DSP/BIOS 進行調(diào)度。本設(shè)計是基于DSP/BIOS RTFS(The DSP/BIOS Real-Time File System)開發(fā)實現(xiàn)的。
為了能夠使用RTFS API 函數(shù),應(yīng)首先向目標工程中加入環(huán)境變量,主要需要修改兩部分內(nèi)容:Project-Build 和Options-Compiler。修 改 方 法 參 見RTFS 相關(guān)文檔。然后需要編寫DSP/BIOS 配置文件,配置文件的關(guān)鍵配置程序為:bios.ECM.ENABLE=1;bios.GBL.C64PLUSMAR128to159=0x0000ffff。
CCS 編譯生成的* .Out 需要通過AISgen 軟件轉(zhuǎn)化為* . AIS 文件才能為DSP 所識別,AISgen for D800K003 軟件在產(chǎn)生AIS 文件時需要根據(jù)需要對時鐘管理器、EMIFB 管理器、系統(tǒng)上電管理器以及引腳復(fù)用管理器進行配置,具體配置方法如圖4 所示。
圖4 AIS 文件生成配置圖
AIS 文件生成后需要對其進行解析和修改以確定上電boot 后對加載程序分區(qū)定位,AIS 文件是一個二進制文件,其基本架構(gòu)為:4 字節(jié)命令頭+命令+……+結(jié)束跳轉(zhuǎn)指令。對AIS 文件的修改主要包含對段連接命令地址內(nèi)容和跳轉(zhuǎn)結(jié)束命令地址內(nèi)容的修改。段連接命令的作用是段入口點的指定,其形式為:0x58535901+段連接地址+段大小+段數(shù)據(jù)。在AIS 文件中找到0x58535901,修改其后面的段連接地址為程序在FLASH 中的存放地址。跳轉(zhuǎn)結(jié)束命令的作用是AIS 文件結(jié)束的標志并跳轉(zhuǎn)到用戶應(yīng)用程序(此處為已更新程序的地址),其形式為:0x58535906+跳轉(zhuǎn)地址。修改其跳轉(zhuǎn)地址為已更新程序的存放地址。至此AIS 文件修改完畢。
本設(shè)計程序更新方式在程序更新過程中采用雙緩沖方式處理數(shù)據(jù),在對程序數(shù)據(jù)進行搬移時,由EDMA方式控制時序,不占用CPU 資源,實現(xiàn)無開銷地交換內(nèi)外存數(shù)據(jù),從而減輕了CPU 的運行負擔(dān),增加了程序的并行性,從而實現(xiàn)程序數(shù)據(jù)傳輸和FLASH 寫入處理的同步進行,提高效率并且使系統(tǒng)可以處理流水式輸入的目標程序數(shù)據(jù)。其具體實現(xiàn)流程如下:
(1)在內(nèi)存中設(shè)置雙緩沖區(qū),分別為A 和B;
(2)將一幀目標程序數(shù)據(jù)(大小為1 kbyte)從通信模塊中搬到緩沖區(qū)A;
(3)對緩沖區(qū)A 中的數(shù)據(jù)進行FLASH 寫入的同時,將后續(xù)的一幀數(shù)據(jù)從通信模塊中搬到緩沖區(qū)B;
(4)將緩沖區(qū)B 中的數(shù)據(jù)寫入FLASH 的同時,將后續(xù)的一幀數(shù)據(jù)從通信模塊中搬到緩沖區(qū)A。
如此循環(huán)進行,可以使數(shù)據(jù)的搬移與處理實現(xiàn)并行,極大地提高程序更新的執(zhí)行效率。
數(shù)字測風(fēng)經(jīng)緯儀系統(tǒng)主要由3 部分組成:數(shù)字測風(fēng)經(jīng)緯儀、計算機計算平臺和手持計算器。在使用時,氣象員通過經(jīng)緯儀的光學(xué)望遠鏡跟蹤測風(fēng)氣球,測風(fēng)經(jīng)緯儀使用光電碼盤自動記錄時間、仰角、方位角信息,然后把測風(fēng)數(shù)據(jù)傳送給計算機平臺或手持計算器,計算機或手持計算器便計算出各種氣象通報。測風(fēng)經(jīng)緯儀的某些參數(shù)會隨時間而改變,高空風(fēng)計算模型種類繁多,每種模型計算非常復(fù)雜,需要定時標定和驗證,及時修改某些參數(shù)。升級程序時,用戶借助計算機終端通過CAN 總線、485 總線或者網(wǎng)絡(luò)遠程向經(jīng)緯儀發(fā)送代碼數(shù)據(jù)(需要編寫上位機在線升級模塊),也可以現(xiàn)場直接使用U 盤更新程序,即可完成測風(fēng)經(jīng)緯儀的程序升級工作。該程序功能穩(wěn)定可靠,對幾種高空風(fēng)計算模型的程序更新測試結(jié)果如表1 所示。
表1 3 種方法程序更新效率比較
本文針對現(xiàn)有單通信方式程序更新的不足,提出了基于可擴展多通信方式的DSP 程序在線編程方法,該方法將數(shù)據(jù)收發(fā)的過程與數(shù)據(jù)內(nèi)部表示的信息分離,同時具備有線、無線多種通信能力,可以根據(jù)具體環(huán)境靈活選擇,并支持對通信接口和通信協(xié)議的擴展。本文還對DSP6747 可執(zhí)行AIS 文件進行了深入的分析,提出了EDMA 方式實現(xiàn)程更新。實踐表明,本方法具有更好的可擴展性和可維護性,使DSP 在線編程脫離仿真器,能夠適用于更廣泛的應(yīng)用場合。
[1] 楊力波,潘志鉑.用DSP 軟件編程實現(xiàn)的引導(dǎo)裝載系統(tǒng)[J].國外電子元器件,2003,15(5):15-19.
[2] 張謙,李世杰,李紅波,等.TMS320C6000 系列DSP 可選擇引導(dǎo)加載方式的設(shè)計與實現(xiàn)[J].電子測量技術(shù),2009,32(7):81-84.
[3] 王宏義,董文娟,黃宗福,等. DSP 和FPGA 共用Flash 進行配置的方法[J].微計算機信息,2008,24(9):101-102.
[4] 劉鐵.基于CAN 總線實現(xiàn)DSP 程序的在線升級[J]. 紡織機械,2010,5(1):8-11.
[5] 沈軍,繆玲娟,張高安. 基于串行通信的DSP 程序遠程更新[J].微計算機信息,2010,26(3):4-5.
[6] 陶維青,任謙.通過串口通訊實現(xiàn)TMS320F2812 的軟件更新[J].合肥工業(yè)大學(xué)學(xué)報(自然科學(xué)版),2008,4(31):570-572.
[7] 朱景福,池俊亞,丁國超. 多種通信功能農(nóng)田數(shù)據(jù)采集傳輸裝置的研制[J].農(nóng)機化研究,2009,3(3):83-85.
[8] 程雪,侯思祖,王彬. 具有多種通信功能的數(shù)據(jù)采集裝置的實現(xiàn)[J].工業(yè)控制計算機,2006,19(12):16-19.
[9] 肖雋,丁艷軍,呂震中.具有多種通信協(xié)議接口的通用數(shù)據(jù)采集裝置[J].東南大學(xué)學(xué)報(自然科學(xué)版),2000,30(2):121-124.
[10] 白文保,馬旭東,丁志穩(wěn). 支持多種通信模式的遠程抄表系統(tǒng)采集終端設(shè)計[J].儀器儀表與分析監(jiān)測,2010,1(1):6-8.
[11] 丁宜棟,華蕓.基于DSP/BIOS 的軟件系統(tǒng)設(shè)計[J].艦船電子工程,2001,5(1):52-55.
[12] 李方慧,王飛,何佩琨. TMS320C6000 系列DSPs 原理與應(yīng)用[M].2 版.北京:電子工業(yè)出版社,2003:141-190.