馬維華 趙懷林 朱紀洪 華國琳 祝波
關(guān)鍵詞: 電推進系統(tǒng); 在線升級; TMS320F28377; 串口; Bootload; DSP程序
中圖分類號: TN409?34 ? ? ? ? ? ? ? ? ? ? ? 文獻標識碼: A ? ? ? ? ? ? ? ? ? ? ? ? 文章編號: 1004?373X(2019)06?0038?05
Abstract: During the engineering design study of the electric propulsion system, it was found that all the drives and control boards are sealed inside the electric propulsion system, except the commonly?used serial ports, which brings a lot of inconvenience to the optimization and upgradation of the entire electric propulsion system. Therefore, a system convenient for updating and upgradation is needed to be researched and designed. The hardware platform based on the TMS320F28377 is adopted for the electric propulsion system. The storage location of the DSP program is reasonably assigned by analyzing the program download process and FLASH_IAP library function of TIs TMS320F28377. The LabVIEW and Bootload programs are designed to upgrade and optimize the DSP program, so as to upgrade and optimize the entire electric propulsion system. The experimental results show that the online optimization and upgrading system is convenient, safe, and stable in operation.
Keywords: electric propulsion system; online upgradation; TMS320F28377; serial port; Bootload; DSP program
電推進系統(tǒng)[1]結(jié)構(gòu)精密而且空間緊湊。為了保證電推進系統(tǒng)的飛行平穩(wěn),考慮到空氣動力學(xué)因素,應(yīng)該讓飛機呈現(xiàn)流線型設(shè)計。而且為了保證系統(tǒng)的安全可靠,一般都會將一些硬件電路密封保存在電推進系統(tǒng)的內(nèi)部,僅僅留出少量的接口在外部。但通信串口往往會留出來,用于進行和外部設(shè)備的信息交流和數(shù)據(jù)的監(jiān)測,所以串口成了系統(tǒng)更新優(yōu)先考慮的方式。
在電機的控制系統(tǒng)中,為了滿足高能效和連通性設(shè)計的需求,開發(fā)出了DSP+FPGA架構(gòu),該結(jié)構(gòu)已成為電路設(shè)計的主流。其中DSP(TMS320F28377)作為主控制芯片,實現(xiàn)復(fù)雜的控制算法以及外部端口信號的監(jiān)測;FPGA(EP3C25E144C7N)利用其大規(guī)模硬件資源,實現(xiàn)接口擴展。在電推進系統(tǒng)中,主要需要給主控制器DSP進行在線優(yōu)化和升級。
通過對DSP的JTAG仿真器燒寫程序進行分析,DSP內(nèi)部的代碼儲存在代碼段,而數(shù)據(jù)則是儲存在數(shù)據(jù)段。程序通過下載器下載時,首先將程序下載到FLASH的一個片區(qū)中,當片區(qū)的空間不夠時,才會使用下一個片區(qū)。這樣當程序運行時,就會將FLASH中的代碼轉(zhuǎn)移到RAM中運行。當運行代碼需要調(diào)用到數(shù)據(jù)時,就會回到FLASH中去讀取,這樣就實現(xiàn)了整個程序的下載和運行流程。
TMS320F28377具有片內(nèi)的單口隨機儲存器SRAM、只讀儲存器ROM和FLASH儲存器[2]。在芯片出廠時,已經(jīng)在芯片的啟動ROM區(qū)集成了Bootloader程序,用于對DSP的相關(guān)引腳進行檢測,從而選擇不同的啟動模式。在DSP中有很多種啟動模式,在不同的模式下可以很方便地更新和升級程序,但是在一些特殊的場合,不可能手動切換系統(tǒng)的啟動模式。為了保障系統(tǒng)能夠穩(wěn)定安全的運行,一般將DSP的GPIO72和GPIO84引腳用上拉電阻設(shè)為高電平,這樣TMS320F28377就從FLASH中啟動。但是設(shè)置了啟動模式之后,DSP的系統(tǒng)更新和升級就有了很多限制,本文是基于這些種種限制的情況下,開發(fā)出的一套系統(tǒng)升級和優(yōu)化的系統(tǒng),方便在電推進系統(tǒng)等特殊的場合下進行的系統(tǒng)移植和優(yōu)化。
電推進系統(tǒng)主要包含提供動力的推進系統(tǒng)和提供電能保障的供電系統(tǒng),此外還需要儲能系統(tǒng)、保護系統(tǒng)等一系列輔助、支持系統(tǒng)等,整體設(shè)計框圖如圖1所示。電推進系統(tǒng)是為電動飛機提供動力,保障電動飛機的正常運行,其系統(tǒng)需要具備高可靠和便于維護的特點。而電推進系統(tǒng)控制器的在線優(yōu)化升級是屬于上位機中的一部分,主要是對主控器DSP進行程序的在線升級和優(yōu)化,為電動飛機提供了一套安全方便的系統(tǒng)更新方案。
在FLASH啟動模式下的在線優(yōu)化升級電推進系統(tǒng)如圖2所示。首先需要將啟動程序在升級CMD文件模式下編譯通過之后,通過JTAG仿真器下載到FLASH中;然后通過LabVIEW設(shè)計的升級服務(wù)軟件實現(xiàn)系統(tǒng)的升級與優(yōu)化。
在DSP上電之后,DSP會調(diào)到FLASH啟動的起始地址0x080000。這個地址存放著程序的codestart的起始地址。所以,只需修改0x080000存放的值,就能決定執(zhí)行那一段程序。當然也可以通過匯編指令跳轉(zhuǎn)到程序的codestart執(zhí)行。Bootload程序的功能就是在每一次啟動電推進系統(tǒng)時,程序指針會自動指向固化在控制器FLASH中的Bootload程序。Bootload程序運行后,首先把自己從FLASH H扇區(qū)中的程序搬移到DSP內(nèi)部的RAM程序區(qū)中運行,提高運行速度。然后進行串口的配置和等待串口更新指令,并為在線優(yōu)化升級系統(tǒng)做準備條件。如果沒有更新指令,會跳轉(zhuǎn)到FLASH E扇區(qū),進行原始程序的運行。在原始程序運行時,程序指針將重新跳轉(zhuǎn)到_c_int00中斷去執(zhí)行程序[3],初始化C運行環(huán)境。一旦運行環(huán)境初始化完成,就可以執(zhí)行原始程序中main()主函數(shù)。
如果接收到更新指令,則系統(tǒng)開始等待串口傳輸?shù)母鲁绦驍?shù)據(jù),并對串口傳輸?shù)某绦驍?shù)據(jù)進行分析和處理。然后通過FLASH_IAP庫函數(shù)將FLASH E扇區(qū)進行擦除,并且將已經(jīng)處理之后的更新程序數(shù)據(jù)拷貝到FLASH E扇區(qū)中,就完成了更新程序?qū)υ汲绦虻母采w。在下一次上電重啟,系統(tǒng)在沒有更新響應(yīng)時,就會把燒寫在FLASH中的更新程序和有用信息全部復(fù)制到DSP內(nèi)存空間中去執(zhí)行。
在電推進系統(tǒng)控制器在線優(yōu)化升級系統(tǒng)中,主要是對DSP內(nèi)部程序進行升級和優(yōu)化。升級和優(yōu)化系統(tǒng)的關(guān)鍵是需要設(shè)計一個Bootload啟動程序,用于對系統(tǒng)是否進行更新程序的選擇。而Bootload啟動程序應(yīng)該包括兩個部分:CMD文件的編寫和配置程序的編寫。CMD文件是用來指示存儲空間和分配段到存儲空間。在電推進優(yōu)化系統(tǒng)中需要設(shè)計兩個CMD文件:升級CMD和用戶CMD文件,主要進行不同程序的空間分配。升級CMD文件用于對Bootload程序分配固化儲存空間和分配裝載的FLASH_IAP庫函數(shù)空間,為更新程序準備更新環(huán)境。而用戶CMD文件用于對當前的用戶程序分配指定的FLASH扇區(qū),而且不能占用Bootload程序的空間,保障用戶程序能夠獨立的運行。
1.1 ?FLASH_IAP庫函數(shù)
FLASH_IAP是TI公司提供的編程算法。該算法主要實現(xiàn)用戶自己的程序在運行過程中對User FLASH的部分區(qū)域進行擦除和編程,目的是在產(chǎn)品發(fā)布后可以方便地通過預(yù)留的通信口對產(chǎn)品中的固件程序進行更新升級。FLASH_IAP定義了一系列的軟件外圍功能,可以完成對FLASH模塊的編寫和擦除。
使用FLASH_IAP完成FLASH編程[4]需要以下幾步:工程需要包含F(xiàn)LASH_IAP的頭文件和庫函數(shù); 匹配目標FLASH;擦除目標FLASH;編寫到目標FLASH;校驗?zāi)繕薋LASH。
TI公司提供的FLASH_IAP庫函數(shù)中以下三個函數(shù)[5]最為重要:
1) Flash_Erase(SectorMask,&FStatus)。其功能是在升級優(yōu)化系統(tǒng)之前,將控制器FLASH中指定扇區(qū)的程序或數(shù)據(jù)進行擦除并返回是否擦除成功的狀態(tài)。
2) Flash_Program(&FlashAddr,&BuffAddr,Length,&FStatus)。其功能是只需填寫儲存更新程序的起始地址,就能將程序燒寫到指定空間,且判斷操作是否成功。
3) Flash_Verify(&FlashAddr,&BuffAddr,Length,&FStatus)是校驗每條燒寫到指定儲存空間的主程序。
1.2 ?CMD文件的編寫
DSP控制器程序中的代碼和數(shù)據(jù)是以段的形式形成,不同的段存放不同類型的內(nèi)容。在使用時,需要通過編寫連接器命令文件(.cmd)將這些段正確地分配到DSP的地址空間。在生成Bootload程序時,需要加載CMD文件然后編譯通過。升級CMD文件在設(shè)計時,首先需要加載FLASH28377_API_V210.lib庫,把這個庫加載到FLASH中的一個片區(qū),之后主程序需要對FLASH28377_API_V210.lib搬移到RAM中,如果在FLASH中運行要比在RAM中運行速度慢70%~80%,顯然這樣的速度對于增強型的DSP不能滿足,于是需要將庫搬移到RAM中運行。而Bootload程序也需要進行同樣的操作搬移到RAM中,充分利用資源。加載完庫之后,還需要對.out文件中的不同段進行分配,對DSP中已初始化的段和未初始化的段進行分配。通過串口傳輸?shù)挠脩舸a,也需要分配一個空間進行存儲,可以在升級完成之后,讓程序能夠獨立運行。如果空間不夠,可以通過修改扇區(qū)地址進行擴充到其他扇區(qū)。升級CMD文件編寫見圖3。
在每次通過Bootload程序燒寫用戶程序時,編寫的用戶程序也需要一個用戶CMD文件。用戶CMD文件是一個獨立于Bootload程序的鏈接命令文件。讓儲存在控制器FLASH中指定扇區(qū)(FLASH E片區(qū))的用戶程序能夠獨立正常的運行。也就需要將這個扇區(qū)進行合理的分配,將所有的匯編指令和全局靜態(tài)變量都分配到這個扇區(qū)內(nèi),重新分配代碼的開始段,所有的段也需要分配這個指定扇區(qū)中。若空間不夠,可以擴充到其他扇區(qū),但升級CMD文件也要做同樣的修改。用戶CMD文件編寫見圖4。
1.3 ?Bootload程序的設(shè)計
在電推進系統(tǒng)控制器的在線優(yōu)化升級中,CMD文件是分配儲存空間,而Bootload程序是配置SCI串口和編寫升級代碼到指定的FLASH扇區(qū)。二者只有一起編譯才能生成固化到FLASH中的啟動程序。在主函數(shù)中,程序首先初始化PIE和串口,通過TI提供的CsmUnlock函數(shù)解鎖DSP,然后初始化FLASH和將FLASH_IAP庫函數(shù)加載到FLASH并初始化。這時只要上位機發(fā)送來數(shù)據(jù),串口接收到數(shù)據(jù),通過對數(shù)據(jù)幀的分析,按照HEX文件的格式,分析每一幀數(shù)據(jù),然后將每一幀數(shù)據(jù)按照地址寫入到內(nèi)存中。最后通過FLASH_Program函數(shù)將代碼寫入FLASH,就完成程序代碼的固化。流程圖見圖5。
電推進系統(tǒng)控制器的在線優(yōu)化升級是通過通信串口給控制器進行升級的。為了讓DSP能夠用串口進行數(shù)據(jù)的傳輸,需要將數(shù)據(jù)文件進行格式的轉(zhuǎn)換。TI公司提供DSP集成開發(fā)環(huán)境[6]。CCS對整個工程文件進行編譯、鏈接后生成的是模塊化文件:COFF格式,即.out文件[7]。它有著復(fù)雜的結(jié)構(gòu),不僅包含了以段的形式組織的代碼和數(shù)據(jù),而且還包含了文件頭、符號表、段地址、初始化段入口等信息,但是該文件格式的模塊化結(jié)構(gòu)不能用來進行串口數(shù)據(jù)的傳輸。于是需要轉(zhuǎn)換成串口能夠識別的數(shù)據(jù)類型。于是將需要將.out文件轉(zhuǎn)換成HEX文件。串口通信是串口數(shù)據(jù)按位發(fā)送和接收字節(jié),在DSP中,數(shù)據(jù)都是以二進制的形式存儲,在串口發(fā)送數(shù)據(jù)時首先將待發(fā)送的數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的ASCII碼,然后將這些ASCII碼按照二進制方式一位一位的發(fā)送。
2.1 ?COFF文件格式轉(zhuǎn)換
TI公司提供的開發(fā)環(huán)境CCS中也能實現(xiàn)HEX文件的轉(zhuǎn)換。只需要在Properties中,將Enable C2000 Hex Utility勾選,然后將Output Format Options中的Output format選擇為?intel,?i,同時還要設(shè)置輸入文件的格式,一般來說只要生成的輸入格式和Bootload程序中HEX文件的解析格式一致就可以被串口讀取和處理。這里設(shè)置為16 bit,而輸出格式的ROM的寬度為16,設(shè)置好之后,下次在運行CCS時,就可以生成HEX文件。
2.2 ?HEX文件格式
HEX文件[8]格式如圖6所示,以冒號開頭,第1字節(jié)是數(shù)據(jù)長度,第2,3字節(jié)是本行數(shù)據(jù)的起始地址。HEX文件中的第一幀數(shù)據(jù)是記錄基地址,而之后每一幀的數(shù)據(jù)是相對于基地址的偏移地址。若要計算出該幀數(shù)據(jù)的起始地址,只需要將第一幀的基地址左移16位,然后加上該幀的偏移地址。第4字節(jié)是數(shù)據(jù)類型,數(shù)據(jù)類型有:0x00?數(shù)據(jù)、0x01?文件結(jié)束、0x02?段地址標志、0x03?段地址開始、0x04?線性地址標志、0x05?線性地址開始。之后是數(shù)據(jù),最后一個字節(jié)是校驗和,是將本行記錄中除了冒號和最后一個字節(jié)之外的所有字節(jié)的累加和,校驗和等于0x100減去累加和。
電推進系統(tǒng)的上位機為了監(jiān)測電推進驅(qū)動控制系統(tǒng),將電推進系統(tǒng)的驅(qū)動電流和電壓,以及電機的轉(zhuǎn)速等參數(shù)通過串口反饋給上位機進行監(jiān)測,然后在將一些轉(zhuǎn)速,轉(zhuǎn)矩指令通過串口反饋給電推進系統(tǒng)進行調(diào)節(jié),讓系統(tǒng)能夠平穩(wěn)的運行。而電推進系統(tǒng)升級服務(wù)程序是上位機中的一部分,主要是利用上位機的通信串口給控制器進行升級和優(yōu)化,該設(shè)計簡單方便,不需要添加其他的硬件接口,充分利用串口資源。
為了輔助電推進系統(tǒng)控制器的在線優(yōu)化升級,需要在PC端設(shè)計一個上位機軟件,用于對串口的識別,數(shù)據(jù)的交流和燒寫程序的指示。LabVIEW是NI公司開發(fā)的一款可視化、跨平臺的虛擬儀器開發(fā)平臺,采用圖形化編輯語言G編程,產(chǎn)生的程序是框圖的形式[9]。LabVIEW提供了功能強大的VISA庫[10],VISA是一個I/O接口軟件庫及其規(guī)范的總稱。電推進系統(tǒng)升級服務(wù)程序如圖7所示。LabVIEW設(shè)計中首先通過調(diào)用VISA Configure Serial Port完成對端口號、波特率、數(shù)據(jù)位、校驗位、停止位和流控制的設(shè)定。完成了串口屬性接口的設(shè)置,就可以實現(xiàn)上位機與FLASH板子之間的數(shù)據(jù)傳輸,在接收數(shù)據(jù)之前需要通過VISA Set I/O Buffer Size設(shè)置串口接收/發(fā)送緩沖區(qū)的大小,然后在使用VISA Bytes at Serial Port查詢當前串口接收緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù)。如果VISA Read讀取到的字節(jié)大于串口接收緩沖區(qū)中的字節(jié)數(shù),那么VISA就會一直等待,直至Timeout或者緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù)達到要求的字節(jié)數(shù),才能接收到數(shù)據(jù)。
首先使用設(shè)計的上位機,配置好串口并打開,使LabVIEW上位機和電推進系統(tǒng)控制器進行連接,由于考慮到系統(tǒng)的安全性,在啟動系統(tǒng)之前需要設(shè)置解鎖密碼,而后每次升級優(yōu)化程序時,需要先輸入密碼進行確認。通信模塊中的串口發(fā)送模塊需要完成單次發(fā)送指令、單次文件發(fā)送指令。實現(xiàn)方法是將其放到不同線程中,在需要發(fā)送指令時開啟相關(guān)任務(wù)并關(guān)閉其他發(fā)送任務(wù):
1) 打開串口按鈕按下之后,在輸入框中輸入系統(tǒng)密碼,并按下發(fā)送鍵,輸入的密碼由VISA寫入到串口下載到板子中。
2) 對于程序文件的下載,先讀取所需打開的文件,將其轉(zhuǎn)換為文本文件后再寫入VISA由串口發(fā)送,并在發(fā)送完成后彈出對話框“文件發(fā)送完成”。
通信模塊中的串口接收模塊的方案是將從串口接收緩沖區(qū)讀取的數(shù)據(jù)進行讀取,并對其是否為空指令進行判斷后予以顯示。圖8是電推進系統(tǒng)控制器在線優(yōu)化升級的實驗結(jié)果。在實驗中,只需要匹配好串口和波特率,將上位機和控制器進行握手,然后通過發(fā)送指令和程序完成對控制器的升級和優(yōu)化,可以通過顯示界面反饋的彈窗和示波器檢測到串口波形。該系統(tǒng)成功地將新程序通過串口燒寫到了控制器的FLASH中。
本文提出一種借助于通信串口來實現(xiàn)內(nèi)部程序下載更新的方法。該系統(tǒng)通過和LabVIEW升級服務(wù)程序連接配合之后,使用DSP內(nèi)部固化好的Bootload程序,協(xié)助DSP完成串口下載,將串口傳輸?shù)男聰?shù)據(jù)進行處理和翻譯,覆蓋原始程序代碼區(qū),進而完成了程序的下載。從實驗測試的示波器波形和電推進系統(tǒng)的工作情況,證明了該方法可行性而且安全可靠,為一些特殊場合提供了可行的方法,提高了系統(tǒng)的可維護性。
參考文獻
[1] 張保平,王衛(wèi)國,王少寧,等.一種新型多路電源在空間電推進系統(tǒng)的應(yīng)用[J].電力電子技術(shù),2018,52(3):105?107.
ZHANG Baoping, WANG Weiguo, WANG Shaoning, et al. A novel topology of multiple output DC/DC power supply applied to the space electric propulsion system [J]. Power electronics, 2018, 52(3): 105?107.
[2] 陳惠綱,黎驅(qū).基于TMS320F28335的DSP/BIOS系統(tǒng)從FLASH到RAM運行[J].現(xiàn)代電子技術(shù),2015,38(2):65?68.
CHEN Huigang, LI Qu. TMS320F28335?based DSP/BIOS system running from FLASH to RAM [J]. Modern electronics technique, 2015, 38(2): 65?68.
[3] 劉芳,臧威.TMS320C672x DSP引導(dǎo)加載系統(tǒng)的設(shè)計與實現(xiàn)[J].微電子學(xué)與計算機,2013,30(10):46?49.
LIU Fang, ZANG Wei. The design and implementation of Bootloader system based on TMS320C672x DSP [J]. Microelectronics & computer, 2013, 30(10): 46?49.
[4] Texas Instruments. TMS320F28M35x and TMS320F28M36x Flash API: reference guide (Version 1.53) [EB/OL]. [2018?01?16]. http://www.ti.com.cn/cn/lit/ug/spnu595b/spnu595b.pdf.
[5] 符玉襄,孫德新,劉銀年.通過串口燒寫DSP片內(nèi)Flash的新方法[J].科學(xué)技術(shù)與工程,2013,13(24):7219?7222.
FU Yuxiang, SUN Dexin, LIU Yinnian. A new method of programming DSP′s on?chip Flash via SCI [J]. Science technology and engineering, 2013, 13(24): 7219?7222.
[6] Texas Instruments. TMS320C28x optimizing C/C++ compiler: user′s guide [EB/OL]. [2018?11?19]. http://www.ti.com/lit/ug/spru514r/spru514r.pdf.
[7] 李聲飛,代華山.基于串口通信的DSP程序動態(tài)加載技術(shù)[J].電訊技術(shù),2011,51(6):121?124.
LI Shengfei, DAI Huashan. Dynamic loading technology for DSP program based on serial communication [J]. Telecommunication engineering, 2011, 51(6): 121?124.
[8] 張偉,李文魁,陳永冰.基于GM814X的單片機串口擴展及其應(yīng)用[J].電子技術(shù)應(yīng)用,2012,38(9):96?99.
ZHANG Wei, LI Wenkui, CHEN Yongbing. Design and implementation of serial port extension based on GM814X [J]. Measurement control technology and instruments, 2012, 38(9): 96?99.
[9] ZHANG Z, CAI L X, WANG Y K. Implementation and application between high stability PC and FPGA serial communication [J]. Applied mechanics and materials, 2013, 331: 344?347.
[10] 張素萍.基于DSP和LABVIEW的串行通訊研究[J].電子器件,2017,40(2):380?385.
ZHANG Suping. Research of serial communication based on DSP and LabVIEW [J]. Chinese journal of electron devices, 2017, 40(2): 380?385.