賀翔,陳崇森
(廣州海格通信集團(tuán)股份有限公司,廣州 510000)
?
基于WiFi的車載終端遠(yuǎn)程軟件升級(jí)方法
賀翔,陳崇森
(廣州海格通信集團(tuán)股份有限公司,廣州 510000)
為克服車載嵌入式設(shè)備難以集中回收進(jìn)行軟件升級(jí)的缺點(diǎn),提出了一種基于WiFi通信的遠(yuǎn)程軟件升級(jí)方法。該方法對(duì)微控制器FLASH存儲(chǔ)空間進(jìn)行有效分配,設(shè)計(jì)IAP功能,利用WiFi通信接口采用TFTP協(xié)議下載新軟件到FLASH,實(shí)現(xiàn)嵌入式軟件在線升級(jí)。給出了升級(jí)方法的詳細(xì)設(shè)計(jì)和程序流程,升級(jí)速度快,受環(huán)境影響小。該方法可應(yīng)用于移動(dòng)分布式嵌入式設(shè)備中。
嵌入式設(shè)備;在線升級(jí);自舉; IAP; STM32;WiFi
隨著對(duì)系統(tǒng)功能、性能要求的不斷提高,或?yàn)榱讼毕?,用戶常常需要?duì)嵌入式終端設(shè)備軟件進(jìn)行升級(jí)。目前嵌入式終端軟件升級(jí)方法有專用工具燒寫、在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)等[1]。前兩種方式需要專門的人員到達(dá)現(xiàn)場(chǎng)、甚至拆卸設(shè)備才能進(jìn)行軟件升級(jí)。IAP方式可由開發(fā)人員根據(jù)實(shí)際應(yīng)用進(jìn)行靈活設(shè)計(jì),例如使用串口升級(jí)、USB升級(jí)等[2-3]。
圖1 系統(tǒng)結(jié)構(gòu)圖
由于車載終端具有移動(dòng)性、分布廣泛、無法集中召回等特點(diǎn),傳統(tǒng)軟件升級(jí)方案顯得束手無策。遠(yuǎn)程軟件升級(jí)方案能夠?yàn)橄到y(tǒng)維護(hù)提供極大的方便,目前主流使用基于GPRS的IAP方式,但通常需要支付給運(yùn)營商一定的費(fèi)用。
根據(jù)某單位車輛管理系統(tǒng)的實(shí)際情況,本文設(shè)計(jì)出一種基于WiFi的遠(yuǎn)程軟件升級(jí)方法。具有簡單、便捷、可靠、成本低等優(yōu)點(diǎn)。
系統(tǒng)結(jié)構(gòu)如圖1所示。該單位有若干分部,每個(gè)分部獨(dú)立管轄所屬的車輛,每個(gè)車輛裝載一套終端,用于記錄車輛行駛信息。當(dāng)車輛外出執(zhí)行任務(wù)及返回經(jīng)過車場(chǎng)門口時(shí),與車場(chǎng)門口的數(shù)據(jù)采集設(shè)備通過WiFi進(jìn)行數(shù)據(jù)交互。各分部數(shù)據(jù)采集設(shè)備連接至互聯(lián)網(wǎng)與總部進(jìn)行數(shù)據(jù)交互[4]。
終端設(shè)備MCU采用STM32F107芯片,該芯片是意法半導(dǎo)體公司基于ARM Cortex-M3的32位嵌入式處理器,主頻達(dá)72 MHz、90 DMIPS。它具有256 KB閃存程序存儲(chǔ)器、20 KB的數(shù)據(jù)存儲(chǔ)器及64 KB RAM[5]。外圍接口豐富,價(jià)格僅與8位單片機(jī)相當(dāng),性價(jià)比極高。
WiFi模塊采用RedPine公司的RS9110-N-11-02模塊,該模塊通過SPI接口與MCU通信。RS9110-N-11-02模塊為IEEE 802.11b/g/n WLAN設(shè)備,集成MAC、基帶處理器、幅值可調(diào)RF收發(fā)器、頻率參考和天線等。硬件模塊嵌入了網(wǎng)絡(luò)協(xié)議棧、WLAN協(xié)議和配置功能,構(gòu)成一個(gè)完整的802.11n WLAN解決方案。
系統(tǒng)軟件升級(jí)工作過程如下:
① 通過以太網(wǎng)把編譯好的新軟件傳輸?shù)礁鞣植繑?shù)據(jù)采集設(shè)備上;
② 車輛外出或返回時(shí)途經(jīng)車場(chǎng)門口數(shù)據(jù)采集設(shè)備WiFi網(wǎng)絡(luò)覆蓋區(qū)域;
③ 車輛終端設(shè)備通過WiFi網(wǎng)絡(luò)連接到數(shù)據(jù)采集設(shè)備,如需要?jiǎng)t進(jìn)行新軟件下載;
④ 車輛終端執(zhí)行新軟件。
圖3 軟件升級(jí)流程
圖2 FLASH存儲(chǔ)空間劃分
STM32F107內(nèi)部FLASH存儲(chǔ)器地址以0x08000000開始,共256K。為了在線升級(jí),將該FLASH存儲(chǔ)器如圖2所示劃分為BOOT區(qū)、應(yīng)用程序區(qū)、臨時(shí)區(qū)、參數(shù)存儲(chǔ)區(qū)[7]。
其中BOOT區(qū)用于存放系統(tǒng)自舉程序,應(yīng)用程序區(qū)用于存放用戶應(yīng)用軟件,臨時(shí)區(qū)用于臨時(shí)存儲(chǔ)正在下載的軟件,參數(shù)存儲(chǔ)區(qū)用于存儲(chǔ)程序升級(jí)時(shí)所使用的標(biāo)志及其他系統(tǒng)參數(shù)。
軟件升級(jí)標(biāo)志定義如下:正常模式、升級(jí)模式及拷貝模式。正常模式標(biāo)志著無需進(jìn)行軟件升級(jí),直接跳轉(zhuǎn)到應(yīng)用程序區(qū)執(zhí)行;升級(jí)模式標(biāo)志著終端需要下載新的應(yīng)用程序;拷貝模式用于在軟件下載完畢后拷貝到應(yīng)用程序區(qū),將該部分功能獨(dú)立出來是為了在軟件下載完畢后拷貝到應(yīng)用程序區(qū)時(shí)出現(xiàn)突然斷電等故障時(shí)進(jìn)行故障恢復(fù)。
終端處于WiFi信號(hào)范圍時(shí),接入WiFi網(wǎng)絡(luò)與數(shù)據(jù)采集設(shè)備進(jìn)行信息交互。如圖3所示,軟件升級(jí)流程如下:
① 接收到版本號(hào)查詢指令,回復(fù)本終端軟件版本號(hào)給數(shù)據(jù)采集設(shè)備;
② 若版本號(hào)為最新,流程結(jié)束,否則會(huì)接收到數(shù)據(jù)采集設(shè)備發(fā)來的軟件升級(jí)指令;
③ 修改參數(shù)存儲(chǔ)區(qū)存儲(chǔ)的軟件升級(jí)標(biāo)志為升級(jí)模式,復(fù)位MCU;
④ MCU從BOOT區(qū)啟動(dòng);
⑤ 讀取軟件升級(jí)標(biāo)志,如是“正常模式”,判斷應(yīng)用程序區(qū)是否有應(yīng)用程序,若有則跳轉(zhuǎn)到應(yīng)用程序區(qū)執(zhí)行,若無則置軟件升級(jí)標(biāo)志為“升級(jí)模式”,復(fù)位MCU,跳轉(zhuǎn)到步驟④;
⑥ 若軟件升級(jí)標(biāo)志是“拷貝模式”,拷貝臨時(shí)區(qū)軟件到應(yīng)用程序區(qū),修改軟件升級(jí)標(biāo)志為正常模式,復(fù)位MCU,跳轉(zhuǎn)到步驟④;
⑦ 若軟件升級(jí)標(biāo)志是“升級(jí)模式”,則掃描并接入WiFi網(wǎng)絡(luò);
⑧ 使用TFTP協(xié)議下載新軟件到臨時(shí)區(qū);
⑨ 校驗(yàn)新軟件是否正確,若不正確則跳轉(zhuǎn)到步驟⑧,若正確則執(zhí)行下一步;
⑩ 修改軟件升級(jí)標(biāo)志為“拷貝模式”,復(fù)位MCU,跳轉(zhuǎn)到步驟④。
升級(jí)軟件主要由版本號(hào)比較、軟件復(fù)位、軟件下載及校驗(yàn)、拷貝軟件到應(yīng)用程序區(qū)、軟件跳轉(zhuǎn)到應(yīng)用程序區(qū)幾部分組成。
(1) 版本號(hào)比較
每個(gè)版本的軟件需要有不同的版本號(hào),按照一定規(guī)則遞增,如數(shù)據(jù)采集設(shè)備上有2.0版本軟件比本終端1.0版本高,則據(jù)此進(jìn)行軟件升級(jí)。
(2)軟件復(fù)位
根據(jù)本設(shè)計(jì),軟件需要復(fù)位進(jìn)入BOOT區(qū)進(jìn)行一系列操作。通過使STM32內(nèi)部中斷應(yīng)用和復(fù)位控制寄存器中的SYSRESETREQ位置1,即可實(shí)現(xiàn)軟件復(fù)位。
(3)軟件下載及校驗(yàn)
采用TFTP協(xié)議下載應(yīng)用軟件到MCU臨時(shí)區(qū)。TFTP用于發(fā)送較小的文件時(shí)實(shí)現(xiàn)簡單,可靠性高。其下層使用UDP協(xié)議,發(fā)送使用UDP 69端口,每次發(fā)送的最大分組為512字節(jié)。發(fā)送雙方采用超時(shí)重傳機(jī)制。數(shù)據(jù)傳輸模式可選為octet模式(二進(jìn)制模式)。
TFTP支持6種類型的數(shù)據(jù)包,分別是:
① Read request (RRQ);
② Write request (WRQ);
③ Data (DATA);
④ Acknowledgment (ACK);
⑤ Error (ERROR);
⑥ OACK。
目前常用的是前5種。由于系統(tǒng)只需實(shí)現(xiàn)終端從數(shù)據(jù)采集設(shè)備上下載軟件文件,無需實(shí)現(xiàn)完整的TFTP協(xié)議,僅實(shí)現(xiàn)上述第1、3、4、5類數(shù)據(jù)包功能即可。主要定義以下4個(gè)接口函數(shù):
① RRQ發(fā)送接口函數(shù)定義:
void tftpReadQuerry(void);
該函數(shù)用于終端發(fā)送讀文件請(qǐng)求,數(shù)據(jù)采集設(shè)備收到該包將發(fā)送文件數(shù)據(jù)包給終端;
② 數(shù)據(jù)包接收接口函數(shù)定義:
void tftp_recvpacket(void);
該函數(shù)用于接收數(shù)據(jù)采集設(shè)備發(fā)送到的包,根據(jù)包類型分別對(duì)ERROR包、DATA包進(jìn)行處理。如果是ERROR包則需要重新傳輸文件,本次傳輸失敗。如果是DATA包,則校驗(yàn)后根據(jù)包號(hào)存儲(chǔ)到FLASH指定位置,然后調(diào)用發(fā)送ACK函數(shù)回復(fù)ACK。掉包、錯(cuò)包等的錯(cuò)誤處理也在該函數(shù)執(zhí)行;
③ ACK發(fā)送接口函數(shù)定義:
void tftpSendAck(unsigned charBlockNo[2]);
該函數(shù)用于根據(jù)接收到的包的編號(hào)回復(fù)ACK。
④ ERROR包接口函數(shù)定義:
void tftpSendErr(unsigned char BlockNo[2]);
該函數(shù)用于返回傳輸錯(cuò)誤信息。
文件傳輸實(shí)現(xiàn)流程如下:
① 數(shù)據(jù)采集設(shè)備在端口為69的UDP上等待終端發(fā)出讀文件請(qǐng)求包;
② 終端通過UDP發(fā)送符合TFTP請(qǐng)求格式的RRQ包給數(shù)據(jù)采集設(shè)備;
③ 數(shù)據(jù)采集設(shè)備收到終端的這個(gè)請(qǐng)求包后,將直接發(fā)送DATA包給終端,這個(gè)DATA包中含數(shù)據(jù)采集設(shè)備選擇的TID作為UDP的源端口和終端的TID作為UDP目標(biāo)端口,起始包號(hào)為1,往后包號(hào)逐次加1。
④ 終端接收來自數(shù)據(jù)采集設(shè)備的DATA包并回復(fù)ACK。直到請(qǐng)求完成。
傳輸過程中的掉包或包錯(cuò)誤會(huì)導(dǎo)致重傳,重傳不超過三次,否則認(rèn)為傳輸失敗。傳輸過程中的錯(cuò)誤,會(huì)觸發(fā)發(fā)送ERROR包。ERROR包的錯(cuò)誤代碼值供程序員分析使用。
(4) 拷貝軟件到應(yīng)用程序區(qū)
軟件正確的下載到臨時(shí)區(qū)后,需要拷貝到應(yīng)用程序區(qū)。該部分關(guān)鍵部分在于STM32內(nèi)嵌FLASH的擦除與讀寫。
STM32F107內(nèi)嵌FLASH是通過分頁機(jī)制來實(shí)現(xiàn)對(duì)尋址空間的擴(kuò)展和FLASH頁面的使用和管理的。所以對(duì)FLASH的擦除操作需要按頁進(jìn)行擦除。即擦除FLASH不能擦除某一字節(jié)或一次擦除小于一頁(2 048字節(jié))。
FLASH擦除的具體步驟:
① 解鎖FLASH編程控制寄存器;
② 定位要擦除的扇區(qū);
③ 寫扇區(qū)擦除命令;
④ 等待命令執(zhí)行完成;
⑤ 鎖定FLASH編程控制寄存器。
對(duì)FLASH執(zhí)行寫操作步驟如下:
① 解鎖FLASH編程控制寄存器;
② 向指定的地址寫若干字?jǐn)?shù)據(jù);
③ 等待上一條命令執(zhí)行完成;
④ 如果未寫完數(shù)據(jù),則遞增源地址和目標(biāo)地址,重復(fù)步驟②和③;
⑤ 鎖定FLASH編程控制寄存器。
(5)軟件跳轉(zhuǎn)應(yīng)用程序區(qū)
應(yīng)用程序準(zhǔn)備好后,程序需要從BOOT區(qū)跳轉(zhuǎn)到應(yīng)用程序區(qū)首地址處執(zhí)行應(yīng)用程序。這里分為兩步:
① 修改中斷向量表位置。由于STM32F107采用ARM Cortex-M3內(nèi)核,該內(nèi)核的系統(tǒng)控制空間中寫中斷向量表的寄存器地址NVIC_VectTab_Addr為0xE000ED08,在該地址寫入應(yīng)用程序起始地址即可,本程序應(yīng)用程序起始地址APP_START_ADDRESS為0x08005000。設(shè)計(jì)如下:
ldrr0, =0x08005000
ldrr1, =0xe000ed08
strr0, [r1]
② 跳轉(zhuǎn)到應(yīng)用程序首地址處執(zhí)行應(yīng)用程序。該步驟完成堆棧指針和程序指針(PC)的修改。在上述匯編代碼之后,通過以下方式實(shí)現(xiàn):
; 從應(yīng)用程序向量表中載入堆棧指針
ldrr1, [r0]
mov sp, r1
;從應(yīng)用程序向量表中初始化程序指針(PC),并跳轉(zhuǎn)到應(yīng)用程序
;入口
ldrr0, [r0, #4]
bxr0
為保證軟件升級(jí)錯(cuò)誤不導(dǎo)致系統(tǒng)崩潰,將終端程序隔離為引導(dǎo)程序(BOOT區(qū)程序)及應(yīng)用程序兩部分,如單次軟件升級(jí)失敗仍可進(jìn)行再次升級(jí)。兩部分程序分別在Keil中編譯,并把BOOT區(qū)程序燒寫在FLASH首地址0x08005000處,以便終端啟動(dòng)直接進(jìn)入BOOT區(qū)。用于應(yīng)用程序編譯時(shí)需設(shè)定燒寫地址為應(yīng)用程序區(qū)首地址,并生成bin文件以便直接下載到FLASH中即可運(yùn)行。
該方法實(shí)現(xiàn)了采用WiFi通信方式,通過TFTP協(xié)議將編譯后的軟件文件下載到終端設(shè)備,完成軟件升級(jí)的功能。在嵌入式系統(tǒng)領(lǐng)域,程序升級(jí)可以方便地對(duì)程序缺陷進(jìn)行彌補(bǔ)和修改,或?qū)Τ绦蚬δ苓M(jìn)行擴(kuò)充,運(yùn)用該方法可極大提高產(chǎn)品的生存周期,節(jié)省對(duì)項(xiàng)目的維護(hù)成本和提高了開發(fā)效率。
[1] 孟志強(qiáng),朱良焱,石瑜. 基于IAP和USB技術(shù)的嵌入式程序升級(jí)方法[J]. 湖南大學(xué)學(xué)報(bào), 2009, 36(6): 41-44.
[2] 趙會(huì)賓,田慶春. 利用LPC2214 的IAP 功能實(shí)現(xiàn)程序遠(yuǎn)程更新[J]. 無線電工程, 2006, 36(7): 53- 55.
[3] 施文灶,王平,黃晞,等. 基于USB的便攜式設(shè)備固件升級(jí)程序的設(shè)計(jì)[J]. 電子設(shè)計(jì)工程, 2009, 17(11): 4-6.
[4] 高時(shí)兵,馬宏平,陳建福. C8051F130的遠(yuǎn)程在線升級(jí)程序設(shè)計(jì)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2008(9): 27-30.
[5] STMicroelectronics Inc. STM32F107XX DataSheet, 2009.
[6] RedPine Inc. RS9110-N-11-22 DataSheet 2.0, 2012.
[7] 葉子健,王健. 一種新的程序在線升級(jí)的實(shí)現(xiàn)[J]. 電子器件, 2011, 34(1): 108-111.
賀翔(助理工程師),主要從事嵌入式系統(tǒng)方案的設(shè)計(jì)與開發(fā);陳崇森(中級(jí)工程師),主要從事嵌入式硬件及驅(qū)動(dòng)程序開發(fā)。
Remote Software Upgrade Method Based on WiFi for Vehicle Terminal
He Xiang,Chen Chongsen
(Guangzhou Haige Communications Group Incorporated Company, Guangzhou 510000, China)
To overcome the difficulty of gathering all automotive embedded devices to upgrade software, this paper proposes a remote software upgrade method based on WiFi Communication. The method allocates the microcontroller FLASH memory space effectively, and designs IAP function by using WiFi communication interface to download new software to FLASH memory. This article gives a detailed design and program flow method. This method can be applied to distributed embedded mobile devices.
embedded device; online upgrade; Bootstrap program; IAP; STM32;WiFi
TP311
A
珍
2013-12-14)