當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]前沿:最近在做STM32的USB Bootlader/IAP功能,也就是通過USB實現(xiàn)固件升級,本文介紹下實現(xiàn)的基本思路,希望對實現(xiàn)IAP的同學一個參考,改方法已經(jīng)在產(chǎn)品中得到實際應(yīng)用并驗證是比較合理,穩(wěn)定可靠的。程序空間劃分:

前沿:
最近在做STM32的USB Bootlader/IAP功能,也就是通過USB實現(xiàn)固件升級,本文介紹下實現(xiàn)的基本思路,希望對實現(xiàn)IAP的同學一個參考,改方法已經(jīng)在產(chǎn)品中得到實際應(yīng)用并驗證是比較合理,穩(wěn)定可靠的。

程序空間劃分:
在單片機的程序Flash中分兩個區(qū),分別存儲Bootloader代碼和App代碼,Bootloader放到代碼起始地址,也就是0x08000000,App放到0x8020000地址,中間預(yù)留了很多的地址空間,主要是為了用來存儲一些需要掉電保存的數(shù)據(jù),比如我在0x0800C000地址就存放了App程序運行后寫入該地址的標志數(shù)據(jù)。

啟動流程:
上電后自然是運行Bootloader程序,Bootloader運行后,做的第一件事情如下所示


01

02

03

if((*((uint32_t*)EXE_FLAG_ADDR))==0x12345678){

JumpToApplication(APP_START_ADDR);

}


也就是判斷App運行標志是否有效,這個標志是存放到EXE_FLAG_ADDR地址的,若有效就直接跳轉(zhuǎn)到App程序運行,這個時間很短,所以用戶看不到有Bootloader執(zhí)行的效果,感覺就是直接運行的App程序,進入App程序后,App程序第一件事情如下


01

02

03

04

05

06

07

if((*((uint32_t*)EXE_FLAG_ADDR))==0xFFFFFFFF){

uint32_tExeFlag = 0x12345678;

__set_PRIMASK(1);//禁止全局中斷

FLASH_Unlock();

ProgramDatatoFlash(EXE_FLAG_ADDR,(uint8_t*)(&ExeFlag),4);

FLASH_Lock();

}


也就是判斷App標志是否有效,若有效則直接執(zhí)行后面的程序,若無效則需要在EXE_FLAG_ADDR地址寫入執(zhí)行標志。
Bootloader程序判斷App標志若無效,那么Bootloader就不會直接跳轉(zhuǎn)到App,因為這個時候是需要進行升級App的操作,所以程序就進入Bootloader的正常工作流程,也就是等待升級App的各種命令,比如擦出固件,燒寫固件,校驗固件等。當固件成功寫入并校驗通過之后,PC端就可以發(fā)送一個程序跳轉(zhuǎn)命令跳轉(zhuǎn)到App執(zhí)行。

PC端操作流程:
PC端和單片機是通過USB進行數(shù)據(jù)交換的,當然用其他方式也可以,基本流程都是差不多的。
PC程序首先當然是掃描設(shè)備,打開設(shè)備,然后調(diào)用獲取固件信息的函數(shù),調(diào)用該函數(shù)后可以得知當前固件的名稱,版本號,固件類型(Bootloader還是App),若發(fā)現(xiàn)當前固件不是Bootloader,那么就得通過USB給固件發(fā)送一個程序跳轉(zhuǎn)命令,也就是跳轉(zhuǎn)到Bootloader代碼執(zhí)行,當然App在跳轉(zhuǎn)到Bootloader的時候必須把EXE_FLAG_ADDR地址的標志數(shù)據(jù)擦出掉,這樣Bootloader才能進入正常的升級流程。
控制固件程序進入Bootloader之后,PC端程序?qū)⒋蜷_App固件程序文件,然后根據(jù)文件大小,發(fā)送擦出App代碼存儲區(qū)域Flash的數(shù)據(jù),然后再分包將固件發(fā)送給單片機,單片機端Bootlader程序接收到數(shù)據(jù)后將數(shù)據(jù)寫入App的Flash區(qū)域,數(shù)據(jù)寫完之后再進行校驗,我是通過計算CRC16的方式進行校驗的,校驗通過之后就可以發(fā)送跳轉(zhuǎn)命令控制程序跳轉(zhuǎn)到App運行了,到此升級流程完畢。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉