摘要:機(jī)載衛(wèi)星通信機(jī)箱中的嵌入式模塊通常具有拆卸外殼不便、難以通過(guò)外接仿真器來(lái)進(jìn)行STM32應(yīng)用程序升級(jí)更新的問(wèn)題。針對(duì)該問(wèn)題,文章提出一種基于TMS320F28335的STM32應(yīng)用軟件在線升級(jí)方法。該方法具有較好的穩(wěn)定性和可靠性,在不拆卸模塊外殼的情況下可實(shí)現(xiàn)STM32應(yīng)用軟件的在線升級(jí)。
關(guān)鍵詞:TMS320F28335;STM32;在線升級(jí)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)志碼:A
0 引言
機(jī)載衛(wèi)星通信機(jī)箱中的嵌入式模塊須要經(jīng)常更新修改其中的嵌入式軟件程序,傳統(tǒng)的軟件升級(jí)方法是將模塊從機(jī)箱中取出,打開(kāi)模塊蓋板后接入仿真器連接芯片,再通過(guò)電腦燒寫(xiě)軟件進(jìn)行程序升級(jí)。在該方法中,模塊的多次插拔容易造成機(jī)箱和模塊的結(jié)構(gòu)損壞,甚至還會(huì)出現(xiàn)仿真器無(wú)法連接芯片的情況,增加了開(kāi)發(fā)人員的調(diào)試工作量。有時(shí)為了升級(jí)程序,專業(yè)技術(shù)人員還須奔赴外場(chǎng),這提高了產(chǎn)品的維護(hù)成本。
目前,針對(duì)嵌入式軟件的在線升級(jí)也得到了廣泛的研究[1-6]。針對(duì)傳統(tǒng)軟件升級(jí)問(wèn)題,本文提出了一種基于“上位機(jī)+DSP+SPI-Flash+STM32”架構(gòu)的在線升級(jí)方法。該方法將STM32應(yīng)用軟件數(shù)據(jù)通過(guò)上位機(jī)發(fā)送給數(shù)字信號(hào)處理器(Digital Signal Processor,DSP);在DSP接收數(shù)據(jù)并校驗(yàn)后,將STM32應(yīng)用軟件數(shù)據(jù)存儲(chǔ)在DSP外掛的SPI-Flash相應(yīng)扇區(qū)中;再?gòu)腟PI-Flash中讀取保存的數(shù)據(jù)并燒寫(xiě)到STM32內(nèi)部的Flash中;進(jìn)而完成STM32應(yīng)用程序的升級(jí)。
1 總體方案
本文提出的STM32應(yīng)用程序在線升級(jí)方法架構(gòu)主要包括上位機(jī)和嵌入式模塊,其中嵌入式模塊主要由DSP芯片、W25Q64芯片、STM32芯片組成,DSP軟件與上位機(jī)通過(guò)CAN接口交互,與W25Q64通過(guò)SPIA接口交互,與STM32自舉程序通過(guò)SCIC接口交互。
當(dāng)STM32進(jìn)行在線升級(jí)時(shí),開(kāi)發(fā)人員在上位機(jī)軟件中選擇待升級(jí)的STM32應(yīng)用程序文件,由上位機(jī)將文件數(shù)據(jù)進(jìn)行分包,按照特定的幀格式發(fā)送給DSP;DSP根據(jù)幀格式中的程序代碼編號(hào),將收到的數(shù)據(jù)存儲(chǔ)到W25Q64的相應(yīng)扇區(qū)中;當(dāng)W25Q64收到最后一包數(shù)據(jù)時(shí),系統(tǒng)對(duì)所收的全部應(yīng)用程序數(shù)據(jù)進(jìn)行校驗(yàn);校驗(yàn)成功后先將STM32切換到自舉程序模式,然后將應(yīng)用程序數(shù)據(jù)從W25Q64中讀出并寫(xiě)入STM32的內(nèi)部FLASH;待所有數(shù)據(jù)寫(xiě)完后再將STM32切換到應(yīng)用程序模式,即可運(yùn)行升級(jí)后的應(yīng)用程序。
2 芯片存儲(chǔ)空間
2.1 W25Q64芯片的Flash空間分配
DSP外掛的SPI-Flash選用W25Q64芯片,該存儲(chǔ)器共有2048個(gè)扇區(qū),每個(gè)扇區(qū)大小為4096個(gè)字節(jié),共有8 MB的存儲(chǔ)空間。開(kāi)發(fā)人員根據(jù)實(shí)際STM32應(yīng)用程序的bin格式文件大小進(jìn)行存儲(chǔ)空間的分配,將第1000~1499個(gè)扇區(qū)用來(lái)存儲(chǔ)常規(guī)模式的STM32應(yīng)用程序,將第1500~1999個(gè)扇區(qū)用來(lái)存儲(chǔ)抗干擾模式的STM32應(yīng)用程序,其余扇區(qū)可作他用。
2.2 STM32芯片的內(nèi)部Flash空間及自舉模式
STM32選用STM32F429芯片,其內(nèi)部Flash存儲(chǔ)空間共有2 MB,地址為 0x8000000—0x8200000。自舉程序存儲(chǔ)在STM32的內(nèi)部自舉ROM存儲(chǔ)器中,其通過(guò)一種可用的串行外設(shè)將STM32應(yīng)用程序下載到芯片內(nèi)部Flash中。研發(fā)人員將STM32的BOOT0配置為1、BOOT1配置為0,再執(zhí)行RESET即可激活自舉程序;將BOOT0配置為0、BOOT1配置為0,再執(zhí)行RESET即可運(yùn)行STM32應(yīng)用程序。
3 軟件實(shí)現(xiàn)
3.1 STM32的bin格式文件生成
當(dāng)通過(guò)仿真器燒寫(xiě)STM32應(yīng)用軟件時(shí),研發(fā)人員選擇Keil集成開(kāi)發(fā)環(huán)境編譯生成的hex文件,在本文的在線升級(jí)方法中寫(xiě)入STM32內(nèi)部Flash的文件是二進(jìn)制bin格式文件,Keil集成開(kāi)發(fā)環(huán)境自帶的fromelf.exe工具軟件可生成bin格式文件。
3.2 在線升級(jí)工作流程
上位機(jī)軟件的工作流程如圖1所示。上位機(jī)軟件選擇待升級(jí)的STM32應(yīng)用程序的bin格式文件,按照已定義的程序更新指令幀格式對(duì)bin格式文件進(jìn)行分包發(fā)送給DSP;待收到DSP應(yīng)答的程序加載回傳成功指令后,再繼續(xù)發(fā)送下一包數(shù)據(jù);待所有分包數(shù)據(jù)均發(fā)送完成后,會(huì)收到DSP應(yīng)答的程序加載結(jié)果回傳;待程序燒寫(xiě)完成后,若收到DSP應(yīng)答的程序燒寫(xiě)結(jié)果回傳指令后,則在界面中顯示燒寫(xiě)成功,否則顯示燒寫(xiě)失敗。
DSP軟件的工作流程如圖2所示。DSP軟件接收上位機(jī)軟件分包(每包128字節(jié),最后一包按實(shí)際剩余字節(jié)數(shù))發(fā)送的程序更新指令,只有程序代碼編號(hào)字段為STM32應(yīng)用程序,才能保存程序代碼編號(hào)并進(jìn)行之后的升級(jí)步驟。當(dāng)收到開(kāi)始幀時(shí),系統(tǒng)需要保存校驗(yàn)值,若后續(xù)收到的數(shù)據(jù)包幀序號(hào)與上一幀不連續(xù),則此次升級(jí)結(jié)束;若連續(xù),則計(jì)算每包幀格式數(shù)據(jù)部分的累加和,將數(shù)據(jù)存入W25Q64的相應(yīng)存儲(chǔ)區(qū)域。當(dāng)收到最后一包時(shí),系統(tǒng)將所有分包數(shù)據(jù)部分的總累加和與保存的校驗(yàn)值進(jìn)行比較,若相等則表明收到的數(shù)據(jù)正確,可進(jìn)行后續(xù)STM32應(yīng)用程序的擦除和更新操作。STM32應(yīng)用程序的在線升級(jí)需要將STM32從正常啟動(dòng)應(yīng)用程序模式切換到自舉模式;在完成與自舉程序的握手后,可將STM32內(nèi)部Flash的內(nèi)容全局擦除;擦除成功后可從W25Q64相應(yīng)地址讀取出程序數(shù)據(jù)的總長(zhǎng)度,按照每次128字節(jié)進(jìn)行分次讀取并寫(xiě)入STM32內(nèi)部Flash;當(dāng)所有程序數(shù)據(jù)都被寫(xiě)入后,可將STM32重新切換到正常啟動(dòng)應(yīng)用程序模式,此時(shí)運(yùn)行程序即為在線升級(jí)后的STM32應(yīng)用程序。
3.3 上位機(jī)軟件
上位機(jī)軟件是“CAN總線測(cè)試軟件”。該軟件既可實(shí)現(xiàn)bin格式文件的分包組幀發(fā)送,又可實(shí)現(xiàn)特定指令的發(fā)送以及接收DSP軟件回傳的指令。STM32應(yīng)用程序的在線升級(jí)需要使用上位機(jī)軟件發(fā)送程序更新指令,接收程序加載應(yīng)答回傳指令、程序加載結(jié)果回傳指令、程序燒寫(xiě)結(jié)果回傳指令。
3.4 DSP軟件
DSP軟件與上位機(jī)軟件通過(guò)CAN接口交互,上位機(jī)軟件將bin格式文件按照程序更新指令幀格式進(jìn)行分包組幀發(fā)送給DSP軟件,程序更新指令幀格式如表1所示。在開(kāi)始幀中,數(shù)據(jù)字段的內(nèi)容由校驗(yàn)字(4字節(jié))+基線版本號(hào)(3字節(jié))+程序固化時(shí)間(7字節(jié))+可執(zhí)行程序數(shù)據(jù)組成,后續(xù)幀的數(shù)據(jù)字段僅為可執(zhí)行程序數(shù)據(jù)。校驗(yàn)字的獲取是將“基線版本號(hào)”“程序固化時(shí)間”和所有“可執(zhí)行程序數(shù)據(jù)”按字節(jié)進(jìn)行累加,累加和的長(zhǎng)度為32位,在累加時(shí)不進(jìn)行數(shù)據(jù)截?cái)嘧優(yōu)閷?shí)際的累加值;按大段序處理,基線版本號(hào)和程序固化時(shí)間采用BCD碼格式。DSP軟件每收到上位機(jī)發(fā)送的程序更新指令后,須向上位機(jī)發(fā)送程序加載響應(yīng)回傳指令(包含應(yīng)答結(jié)果和幀序號(hào)),只有上位機(jī)收到DSP軟件的程序加載響應(yīng)回傳指令后,才能繼續(xù)發(fā)送下一包的程序更新指令。當(dāng)DSP軟件收到結(jié)束幀時(shí),既要發(fā)送程序加載響應(yīng)回傳指令,又要發(fā)送程序加載結(jié)果指令(包含加載結(jié)果),待STM32應(yīng)用軟件燒寫(xiě)完成后,DSP軟件應(yīng)向上位機(jī)發(fā)送程序燒寫(xiě)結(jié)果回傳指令(包含燒寫(xiě)結(jié)果)。
DSP軟件與W25Q64通過(guò)SPIA接口交互,讀寫(xiě)該SPI-Flash芯片前,可先讀取器件ID號(hào),確保交互正常。DSP軟件與W25Q64交互使用的基本命令如表2所示。
DSP軟件與STM32自舉程序通過(guò)SCIC接口交互,通過(guò)配置STM32的BOOT0、BOOT1引腳以及RESET引腳,將STM32切換到自舉模式。DSP軟件向STM32自舉程序發(fā)送0x7F;自舉程序向DSP軟件應(yīng)答0x79,表明STM32已準(zhǔn)備好接收命令;之后便可進(jìn)行數(shù)據(jù)擦除和數(shù)據(jù)寫(xiě)入操作。DSP軟件與STM32自舉程序交互使用的基本命令如表3所示。
4 結(jié)語(yǔ)
本文提出了一種基于TMS320F28335的STM32應(yīng)用軟件在線升級(jí)方法,在不拆卸嵌入式模塊的外殼、不使用仿真器連接芯片情況下,該方法可實(shí)現(xiàn)在線升級(jí)STM32芯片的應(yīng)用程序,升級(jí)成功后上位機(jī)軟件界面會(huì)彈出燒寫(xiě)成功的窗口。通過(guò)實(shí)際項(xiàng)目的驗(yàn)證,該方法具有良好的可行性、穩(wěn)定性和可靠性,使STM32應(yīng)用程序升級(jí)更加便捷高效,既減少了嵌入式模塊硬件結(jié)構(gòu)的磨損,又降低了軟件維護(hù)的成本,提升了工作效率。
參考文獻(xiàn)
[1]王濤,錢(qián)昀瑩,張鉚,等.基于DSP28335的FPGA軟件在線升級(jí)方法[J].電子設(shè)計(jì)工程,2024(3):17-21.
[2]趙飛.一種基于DSP+FPGA架構(gòu)的軟件在線升級(jí)實(shí)現(xiàn)[J].現(xiàn)代導(dǎo)航,2021(6):462-465.
[3]龔行梁,周強(qiáng),趙天恩,等.CAN總線實(shí)現(xiàn)的ZYNQ-7000程序在線升級(jí)方法[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2018(11):63-66.
[4]倪慶生,倪云龍,潘曉洋,等.基于CAN總線的TMS320F28335遠(yuǎn)程在線升級(jí)方法設(shè)計(jì)[J].電子與封裝,2021(11):31-35.
[5]呂春燕,靳占軍,張樂(lè)君,等.STM32單片機(jī)在線升級(jí)設(shè)計(jì)及實(shí)現(xiàn)[J].信息通信,2017(6):462-465.
[6]羅成娥,任海強(qiáng).基于CAN總線的在線升級(jí)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].數(shù)字通信,2013(6):28-32.
(編輯 王永超編輯)
Online upgrade method of STM32 application software based on TMS320F28335
WU Bixia, XU Liang, WU Jiajia
(Nanjing Panda Handa Technology Co., Ltd., Nanjing 210001, China)
Abstract: It is inconvenient for embedded modules in airborne satellite communication cabine to remove the module shell, and it is difficult to upgrade STM32 application program through external emulators. In order to solve this problem, this paper proposes an online upgrade method of STM32 application software based on TMS320F28335. This method has good stability and reliability, and can realize the online upgrade of STM32 application software without disassembling the module shell.
Key words: TMS320F28335; STM32; online upgrade