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

?

基于STM32的設(shè)備固件升級功能實(shí)現(xiàn)

2020-08-27 07:38:36李玉秋吳玲玲
關(guān)鍵詞:固件指針串口

李玉秋,吳玲玲

(亳州職業(yè)技術(shù)學(xué)院,安徽 亳州 236800)

嵌入式系統(tǒng)是以應(yīng)用為中心,根據(jù)實(shí)際應(yīng)用需求軟硬件可裁剪的計(jì)算機(jī)系統(tǒng),但又不同于通用的計(jì)算機(jī),適用于對成本、功能、體積等有嚴(yán)格要求的場合。嵌入式設(shè)備在數(shù)字通信、家用電器、交通運(yùn)輸、醫(yī)療設(shè)備、工業(yè)控制等各種智能控制的場合無處不在[1-3]。由于嵌入式設(shè)備的種類繁多,設(shè)計(jì)者很難滿足每一位客戶的需求,可以根據(jù)客戶的實(shí)際需要,把設(shè)備升級作為附加值給用戶。通過IAP(in-application programming)技術(shù),嵌入式設(shè)備可以重新獲取新代碼并對用戶程序重新編程,即用程序來改變程序,完成設(shè)備的固件升級[4]。本文采用了在嵌入式設(shè)備中應(yīng)用較多的ARM Cortex-M3 內(nèi)核的32位微控制器STM32F103為硬件,以keil為開發(fā)環(huán)境,利用IAP技術(shù),實(shí)現(xiàn)嵌入式設(shè)備的固件升級。設(shè)備的固件升級可以在智能家居產(chǎn)品、汽車導(dǎo)航、智能醫(yī)療設(shè)備產(chǎn)品、工業(yè)過程控制等領(lǐng)域中應(yīng)用。

1 硬件平臺(tái)

設(shè)備硬件平臺(tái)為STM32F103,ARM Cortex-M3 內(nèi)核的32位微控制器,高性能、低功耗;嵌套矢量中斷控制器,對中斷事件快速響應(yīng);多個(gè)標(biāo)準(zhǔn)的通信接口,支持I2C,CAN,USB,USART等多種通信協(xié)議,便于選擇多種數(shù)據(jù)傳輸手段;內(nèi)置flash為512 k,RAM空間64 k,最高工作頻率76 MHz。

2 Flash存儲(chǔ)區(qū)劃分

IAP是指MCU可以在系統(tǒng)中獲取新代碼并對APP區(qū)重新編程,即可用程序來改變程序。IAP技術(shù)從結(jié)構(gòu)上將flash存儲(chǔ)器分為兩個(gè)存儲(chǔ)空間,整個(gè)系統(tǒng)程序拆分成boot(引導(dǎo)加載程序)和APP(用戶應(yīng)用程序)兩層程序,分別運(yùn)行于flash的不同位置[5]。STM32 flash基于映射起始地址是0x08000000, Boot運(yùn)行于 0x08000000—0x08020000區(qū)域,大小為128 k;APP運(yùn)行于0x08020000—0x08040000區(qū)域,大小為128 k。后備程序存放于0x08040000—0x08060000區(qū)域,以便及時(shí)跳轉(zhuǎn)到備份程序區(qū)域,防止整個(gè)系統(tǒng)運(yùn)行死機(jī),最大程度地維護(hù)系統(tǒng)穩(wěn)定性。STM32F103RF內(nèi)置flash為512 k,對flash空間進(jìn)行劃分(見圖1)。

圖1 flash的分區(qū)

由圖1可見boot區(qū)和用戶程序APP區(qū)運(yùn)行在flash的不同區(qū)域,彼此互不干擾。STM32程序flash起始地址0x08000000[6],上電系統(tǒng)取址0x08000000,對應(yīng)的是boot區(qū)程序;boot區(qū)可以執(zhí)行擦除、燒寫APP區(qū),從而實(shí)現(xiàn)對APP區(qū)的升級。

3 軟件流程

3.1 程序配置

開發(fā)環(huán)境選用keil實(shí)現(xiàn)boot和APP的分區(qū)。Boot區(qū)正常配置,APP區(qū)配置如下:打開keil軟件,點(diǎn)擊options for target(見圖2)。

圖2 APP的配置

IROM1代表程序起始地址,keil會(huì)通過編譯,鏈接確定程序的起始地址為0x08020000,配置后形成鏈接腳本。在APP區(qū)已下載的前提下,為了確保從boot區(qū)跳轉(zhuǎn)到APP區(qū)需要確認(rèn)幾個(gè)條件:

(1)需要判斷PC指針是否位于Code區(qū),超過該區(qū)域則表明指針越界,該APP程序不可用。

(2)判斷棧頂指針是否位于0x20000000—0x3FFFFFFF區(qū)域,超過該區(qū)域則表明指針越界,該APP程序不可用。

程序先判斷PC指針,再去判斷棧頂指針,以確定程序是否正確,指針是否越界。這兩步由boot完成后,便可跳轉(zhuǎn)到APP區(qū)。如果上述兩步出錯(cuò),則程序跳轉(zhuǎn)至備用程序區(qū),保證系統(tǒng)正常運(yùn)行,以便進(jìn)行下一次升級操作。APP區(qū)因?yàn)檫\(yùn)行地址已經(jīng)被改變,需要在程序里面指定中斷向量表的起始地址,程序默認(rèn)可通過中斷向量表去尋址PC指針和棧頂指針[4],在程序里體現(xiàn)如下:

#define APPLICATION_ADDRESS 0x080200000

if(((*(vu32*)(APPLICATION_ADDRESS+4))&0xFF000000)=0x08000000)//判斷PC指針

if(((*(vu32*)APPLICATION_ADDRESS)&0x2FFE0000)=0x20000000)// 判斷MSP指針

APP:設(shè)置中斷向量表地址

#define FLASH_BASE((uint32_t)0x08000000)

SCB->VTOR=FLASH_BASE|0X20000; //gy for iap updata

中斷向量見表1所示,至此,從boot跳轉(zhuǎn)APP步驟結(jié)束。由上可知,0x08020000地址存放是APP區(qū)的中斷向量表[7]。

表1 中斷向量表

由表1可知從0x08020004的地址中取出復(fù)位向量,取出PC指針,PC指針對應(yīng)于程序當(dāng)前的指向,判斷PC指針無誤以后[8],boot進(jìn)入跳轉(zhuǎn)APP層操作,否則APP區(qū)程序?qū)懭氤鲥e(cuò),打印出錯(cuò)信息。參數(shù)appxaddr是0x08020000,下面代碼表示從APP區(qū)取出MSP的初始值。

void iap_load_app(u32 appxaddr)

{

if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)

{

jump2app=(iapfun)*(vu32*)(appxaddr+4);

__set_MSP(*(__IO uint32_t *)appxaddr);

jump2app();

}

}

RAM的起始地址是0x20000000,是由STM32尋址決定的。STM32劃分了不同區(qū)域用于尋址不同的內(nèi)容。由上述代碼可知,boot先判斷棧頂指針值是否正確,如不正確,中斷操作,打印錯(cuò)誤信息,視為APP區(qū)程序燒寫不成功;如果MSP指針位于RAM區(qū)域,設(shè)置棧頂指針,跳轉(zhuǎn)到PC指針上,就能跳轉(zhuǎn)到APP區(qū)。

設(shè)置MSP指針

__ASM void __set_MSP(uint32_t mainStackPointer)

{

msr msp, r0

bx lr

}

3.2 升級流程

升級方式可以用串口升級,也可以用網(wǎng)絡(luò)升級。兩者區(qū)別在于下載方式的不同。網(wǎng)絡(luò)升級通過HTTP協(xié)議獲取FTP服務(wù)器上的數(shù)據(jù),本方案采用串口升級,串口傳輸文件常用的協(xié)議有xmodem、ymodem、zmodem這三種協(xié)議,在PC端使用這些協(xié)議傳輸文件只需要PC的超級終端或者終端工具SecureCRT即可[9-10]。方案測試用按鍵是否按下來表示是否需要升級提示,采用ymodem協(xié)議接收工程中生成的bin文件,bin文件包含文件大小等信息,通過串口接收到的bin文件信息判斷需要接收文件大小,然后根據(jù)文件大小判斷需要下載多少包數(shù)據(jù),分包獲取數(shù)據(jù)寫入flash,直至整個(gè)文件全部燒寫到APP區(qū)flash中,燒寫完畢以后從boot區(qū)跳轉(zhuǎn)到新APP區(qū),設(shè)備升級流程圖(見圖3)。

圖3 升級流程圖

4 結(jié)語

基于STM32的嵌入式設(shè)備固件升級方案,利用IAP技術(shù)可以方便快捷的實(shí)現(xiàn)用戶程序更新升級。相比傳統(tǒng)的固件升級方式,不需要拆卸設(shè)備,通過串口(串口不是遠(yuǎn)程方式)、以太網(wǎng)等遠(yuǎn)程方式解決。

嵌入式設(shè)備一般固件比較小,通過串口或者無線方式獲取升級包,串口和無線(比如4G)速率較快,下載時(shí)間較短。本方案由于固件采用加密方式,MCU性能有限,硬件AES解密需要花費(fèi)時(shí)間,升級過程3 min左右,升級期間不能進(jìn)行任何其他操作,不能斷電。

隨著萬物互聯(lián)的智慧生活漸行漸近,智能家居、智能車載、移動(dòng)醫(yī)療設(shè)備、可穿戴設(shè)備等嵌入式智能設(shè)備走進(jìn)人們?nèi)粘5纳?,那么在不需要拆卸設(shè)備僅通過遠(yuǎn)程加載軟件就能實(shí)現(xiàn)用戶功能的更新,維護(hù)方便,有較好的實(shí)用價(jià)值。

猜你喜歡
固件指針串口
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
偷指針的人
為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動(dòng)
基于固件的遠(yuǎn)程身份認(rèn)證
USB接口的多串口數(shù)據(jù)并行接收方法探索
基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無線通信
地礦測繪(2015年3期)2015-12-22 06:27:26
基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
電測與儀表(2015年5期)2015-04-09 11:30:42
提取ROM固件中的APP
電腦愛好者(2015年7期)2015-04-09 08:54:02
ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
一種通過USB接口的可靠固件升級技術(shù)
蓬莱市| 长海县| 沾化县| 垦利县| 兰溪市| 壶关县| 习水县| 仪陇县| 镇赉县| 岳池县| 集安市| 水富县| 蒲江县| 全椒县| 和田市| 凌源市| 工布江达县| 晋中市| 廊坊市| 棋牌| 阿克陶县| 凌源市| 孝义市| 任丘市| 皮山县| 凤庆县| 虞城县| 丹东市| 新营市| 深泽县| 屯门区| 上林县| 绥滨县| 红原县| 法库县| 九寨沟县| 乐山市| 湟源县| 会昌县| 合山市| 青岛市|