国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于WiFi的車載終端遠(yuǎn)程軟件升級方法

2014-09-06 10:49賀翔陳崇森
關(guān)鍵詞:應(yīng)用程序嵌入式終端

賀翔,陳崇森

(廣州海格通信集團(tuán)股份有限公司,廣州 510000)

?

基于WiFi的車載終端遠(yuǎn)程軟件升級方法

賀翔,陳崇森

(廣州海格通信集團(tuán)股份有限公司,廣州 510000)

為克服車載嵌入式設(shè)備難以集中回收進(jìn)行軟件升級的缺點(diǎn),提出了一種基于WiFi通信的遠(yuǎn)程軟件升級方法。該方法對微控制器FLASH存儲空間進(jìn)行有效分配,設(shè)計(jì)IAP功能,利用WiFi通信接口采用TFTP協(xié)議下載新軟件到FLASH,實(shí)現(xiàn)嵌入式軟件在線升級。給出了升級方法的詳細(xì)設(shè)計(jì)和程序流程,升級速度快,受環(huán)境影響小。該方法可應(yīng)用于移動分布式嵌入式設(shè)備中。

嵌入式設(shè)備;在線升級;自舉; IAP; STM32;WiFi

引 言

隨著對系統(tǒng)功能、性能要求的不斷提高,或?yàn)榱讼毕?,用戶常常需要對嵌入式終端設(shè)備軟件進(jìn)行升級。目前嵌入式終端軟件升級方法有專用工具燒寫、在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)等[1]。前兩種方式需要專門的人員到達(dá)現(xiàn)場、甚至拆卸設(shè)備才能進(jìn)行軟件升級。IAP方式可由開發(fā)人員根據(jù)實(shí)際應(yīng)用進(jìn)行靈活設(shè)計(jì),例如使用串口升級、USB升級等[2-3]。

圖1 系統(tǒng)結(jié)構(gòu)圖

由于車載終端具有移動性、分布廣泛、無法集中召回等特點(diǎn),傳統(tǒng)軟件升級方案顯得束手無策。遠(yuǎn)程軟件升級方案能夠?yàn)橄到y(tǒng)維護(hù)提供極大的方便,目前主流使用基于GPRS的IAP方式,但通常需要支付給運(yùn)營商一定的費(fèi)用。

根據(jù)某單位車輛管理系統(tǒng)的實(shí)際情況,本文設(shè)計(jì)出一種基于WiFi的遠(yuǎn)程軟件升級方法。具有簡單、便捷、可靠、成本低等優(yōu)點(diǎn)。

1 系統(tǒng)原理

系統(tǒng)結(jié)構(gòu)如圖1所示。該單位有若干分部,每個分部獨(dú)立管轄所屬的車輛,每個車輛裝載一套終端,用于記錄車輛行駛信息。當(dāng)車輛外出執(zhí)行任務(wù)及返回經(jī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閃存程序存儲器、20 KB的數(shù)據(jù)存儲器及64 KB RAM[5]。外圍接口豐富,價格僅與8位單片機(jī)相當(dāng),性價比極高。

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)成一個完整的802.11n WLAN解決方案。

系統(tǒng)軟件升級工作過程如下:

① 通過以太網(wǎng)把編譯好的新軟件傳輸?shù)礁鞣植繑?shù)據(jù)采集設(shè)備上;

② 車輛外出或返回時途經(jīng)車場門口數(shù)據(jù)采集設(shè)備WiFi網(wǎng)絡(luò)覆蓋區(qū)域;

③ 車輛終端設(shè)備通過WiFi網(wǎng)絡(luò)連接到數(shù)據(jù)采集設(shè)備,如需要則進(jìn)行新軟件下載;

④ 車輛終端執(zhí)行新軟件。

圖3 軟件升級流程

2 軟件升級方法及流程

圖2 FLASH存儲空間劃分

STM32F107內(nèi)部FLASH存儲器地址以0x08000000開始,共256K。為了在線升級,將該FLASH存儲器如圖2所示劃分為BOOT區(qū)、應(yīng)用程序區(qū)、臨時區(qū)、參數(shù)存儲區(qū)[7]。

其中BOOT區(qū)用于存放系統(tǒng)自舉程序,應(yīng)用程序區(qū)用于存放用戶應(yīng)用軟件,臨時區(qū)用于臨時存儲正在下載的軟件,參數(shù)存儲區(qū)用于存儲程序升級時所使用的標(biāo)志及其他系統(tǒng)參數(shù)。

軟件升級標(biāo)志定義如下:正常模式、升級模式及拷貝模式。正常模式標(biāo)志著無需進(jìn)行軟件升級,直接跳轉(zhuǎn)到應(yīng)用程序區(qū)執(zhí)行;升級模式標(biāo)志著終端需要下載新的應(yīng)用程序;拷貝模式用于在軟件下載完畢后拷貝到應(yīng)用程序區(qū),將該部分功能獨(dú)立出來是為了在軟件下載完畢后拷貝到應(yīng)用程序區(qū)時出現(xiàn)突然斷電等故障時進(jìn)行故障恢復(fù)。

終端處于WiFi信號范圍時,接入WiFi網(wǎng)絡(luò)與數(shù)據(jù)采集設(shè)備進(jìn)行信息交互。如圖3所示,軟件升級流程如下:

① 接收到版本號查詢指令,回復(fù)本終端軟件版本號給數(shù)據(jù)采集設(shè)備;

② 若版本號為最新,流程結(jié)束,否則會接收到數(shù)據(jù)采集設(shè)備發(fā)來的軟件升級指令;

③ 修改參數(shù)存儲區(qū)存儲的軟件升級標(biāo)志為升級模式,復(fù)位MCU;

④ MCU從BOOT區(qū)啟動;

⑤ 讀取軟件升級標(biāo)志,如是“正常模式”,判斷應(yīng)用程序區(qū)是否有應(yīng)用程序,若有則跳轉(zhuǎn)到應(yīng)用程序區(qū)執(zhí)行,若無則置軟件升級標(biāo)志為“升級模式”,復(fù)位MCU,跳轉(zhuǎn)到步驟④;

⑥ 若軟件升級標(biāo)志是“拷貝模式”,拷貝臨時區(qū)軟件到應(yīng)用程序區(qū),修改軟件升級標(biāo)志為正常模式,復(fù)位MCU,跳轉(zhuǎn)到步驟④;

⑦ 若軟件升級標(biāo)志是“升級模式”,則掃描并接入WiFi網(wǎng)絡(luò);

⑧ 使用TFTP協(xié)議下載新軟件到臨時區(qū);

⑨ 校驗(yàn)新軟件是否正確,若不正確則跳轉(zhuǎn)到步驟⑧,若正確則執(zhí)行下一步;

⑩ 修改軟件升級標(biāo)志為“拷貝模式”,復(fù)位MCU,跳轉(zhuǎn)到步驟④。

3 軟件實(shí)現(xiàn)

升級軟件主要由版本號比較、軟件復(fù)位、軟件下載及校驗(yàn)、拷貝軟件到應(yīng)用程序區(qū)、軟件跳轉(zhuǎn)到應(yīng)用程序區(qū)幾部分組成。

(1) 版本號比較

每個版本的軟件需要有不同的版本號,按照一定規(guī)則遞增,如數(shù)據(jù)采集設(shè)備上有2.0版本軟件比本終端1.0版本高,則據(jù)此進(jìn)行軟件升級。

(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臨時區(qū)。TFTP用于發(fā)送較小的文件時實(shí)現(xiàn)簡單,可靠性高。其下層使用UDP協(xié)議,發(fā)送使用UDP 69端口,每次發(fā)送的最大分組為512字節(jié)。發(fā)送雙方采用超時重傳機(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個接口函數(shù):

① RRQ發(fā)送接口函數(shù)定義:

void tftpReadQuerry(void);

該函數(shù)用于終端發(fā)送讀文件請求,數(shù)據(jù)采集設(shè)備收到該包將發(fā)送文件數(shù)據(jù)包給終端;

② 數(shù)據(jù)包接收接口函數(shù)定義:

void tftp_recvpacket(void);

該函數(shù)用于接收數(shù)據(jù)采集設(shè)備發(fā)送到的包,根據(jù)包類型分別對ERROR包、DATA包進(jìn)行處理。如果是ERROR包則需要重新傳輸文件,本次傳輸失敗。如果是DATA包,則校驗(yàn)后根據(jù)包號存儲到FLASH指定位置,然后調(diào)用發(fā)送ACK函數(shù)回復(fù)ACK。掉包、錯包等的錯誤處理也在該函數(shù)執(zhí)行;

③ ACK發(fā)送接口函數(shù)定義:

void tftpSendAck(unsigned charBlockNo[2]);

該函數(shù)用于根據(jù)接收到的包的編號回復(fù)ACK。

④ ERROR包接口函數(shù)定義:

void tftpSendErr(unsigned char BlockNo[2]);

該函數(shù)用于返回傳輸錯誤信息。

文件傳輸實(shí)現(xiàn)流程如下:

① 數(shù)據(jù)采集設(shè)備在端口為69的UDP上等待終端發(fā)出讀文件請求包;

② 終端通過UDP發(fā)送符合TFTP請求格式的RRQ包給數(shù)據(jù)采集設(shè)備;

③ 數(shù)據(jù)采集設(shè)備收到終端的這個請求包后,將直接發(fā)送DATA包給終端,這個DATA包中含數(shù)據(jù)采集設(shè)備選擇的TID作為UDP的源端口和終端的TID作為UDP目標(biāo)端口,起始包號為1,往后包號逐次加1。

④ 終端接收來自數(shù)據(jù)采集設(shè)備的DATA包并回復(fù)ACK。直到請求完成。

傳輸過程中的掉包或包錯誤會導(dǎo)致重傳,重傳不超過三次,否則認(rèn)為傳輸失敗。傳輸過程中的錯誤,會觸發(fā)發(fā)送ERROR包。ERROR包的錯誤代碼值供程序員分析使用。

(4) 拷貝軟件到應(yīng)用程序區(qū)

軟件正確的下載到臨時區(qū)后,需要拷貝到應(yīng)用程序區(qū)。該部分關(guān)鍵部分在于STM32內(nèi)嵌FLASH的擦除與讀寫。

STM32F107內(nèi)嵌FLASH是通過分頁機(jī)制來實(shí)現(xiàn)對尋址空間的擴(kuò)展和FLASH頁面的使用和管理的。所以對FLASH的擦除操作需要按頁進(jìn)行擦除。即擦除FLASH不能擦除某一字節(jié)或一次擦除小于一頁(2 048字節(jié))。

FLASH擦除的具體步驟:

① 解鎖FLASH編程控制寄存器;

② 定位要擦除的扇區(qū);

③ 寫扇區(qū)擦除命令;

④ 等待命令執(zhí)行完成;

⑤ 鎖定FLASH編程控制寄存器。

對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

為保證軟件升級錯誤不導(dǎo)致系統(tǒng)崩潰,將終端程序隔離為引導(dǎo)程序(BOOT區(qū)程序)及應(yīng)用程序兩部分,如單次軟件升級失敗仍可進(jìn)行再次升級。兩部分程序分別在Keil中編譯,并把BOOT區(qū)程序燒寫在FLASH首地址0x08005000處,以便終端啟動直接進(jìn)入BOOT區(qū)。用于應(yīng)用程序編譯時需設(shè)定燒寫地址為應(yīng)用程序區(qū)首地址,并生成bin文件以便直接下載到FLASH中即可運(yùn)行。

結(jié) 語

該方法實(shí)現(xiàn)了采用WiFi通信方式,通過TFTP協(xié)議將編譯后的軟件文件下載到終端設(shè)備,完成軟件升級的功能。在嵌入式系統(tǒng)領(lǐng)域,程序升級可以方便地對程序缺陷進(jìn)行彌補(bǔ)和修改,或?qū)Τ绦蚬δ苓M(jìn)行擴(kuò)充,運(yùn)用該方法可極大提高產(chǎn)品的生存周期,節(jié)省對項(xiàng)目的維護(hù)成本和提高了開發(fā)效率。

[1] 孟志強(qiáng),朱良焱,石瑜. 基于IAP和USB技術(shù)的嵌入式程序升級方法[J]. 湖南大學(xué)學(xué)報, 2009, 36(6): 41-44.

[2] 趙會賓,田慶春. 利用LPC2214 的IAP 功能實(shí)現(xiàn)程序遠(yuǎn)程更新[J]. 無線電工程, 2006, 36(7): 53- 55.

[3] 施文灶,王平,黃晞,等. 基于USB的便攜式設(shè)備固件升級程序的設(shè)計(jì)[J]. 電子設(shè)計(jì)工程, 2009, 17(11): 4-6.

[4] 高時兵,馬宏平,陳建福. C8051F130的遠(yuǎn)程在線升級程序設(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] 葉子健,王健. 一種新的程序在線升級的實(shí)現(xiàn)[J]. 電子器件, 2011, 34(1): 108-111.

賀翔(助理工程師),主要從事嵌入式系統(tǒng)方案的設(shè)計(jì)與開發(fā);陳崇森(中級工程師),主要從事嵌入式硬件及驅(qū)動程序開發(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)

猜你喜歡
應(yīng)用程序嵌入式終端
X美術(shù)館首屆三年展:“終端〉_How Do We Begin?”
通信控制服務(wù)器(CCS)維護(hù)終端的設(shè)計(jì)與實(shí)現(xiàn)
刪除Win10中自帶的應(yīng)用程序
TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
谷歌禁止加密貨幣應(yīng)用程序
GSM-R手持終端呼叫FAS失敗案例分析
搭建基于Qt的嵌入式開發(fā)平臺
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
倍福 CX8091嵌入式控制器
ABB Elastimold 10kV電纜終端及中間接頭
青阳县| 汽车| 乐安县| 镇坪县| 波密县| 萨嘎县| 剑阁县| 江山市| 高陵县| 河南省| 普定县| 临漳县| 九江县| 什邡市| 乌鲁木齐县| 库车县| 大城县| 穆棱市| 鹰潭市| 佳木斯市| 青浦区| 襄汾县| 大同县| 水城县| 延津县| 浑源县| 娱乐| 汉源县| 泽库县| 浏阳市| 额尔古纳市| 延庆县| 宁陕县| 柳林县| 安化县| 南充市| 固阳县| 绥芬河市| 宾阳县| 革吉县| 曲水县|