日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iap升级问题 stm32f103r8_STM32的基于串口的IAP固件升级与加密

發布時間:2024/10/12 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iap升级问题 stm32f103r8_STM32的基于串口的IAP固件升级与加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是川楠,最近,在問答頻道上看到有人對IAP升級心存疑惑。恰好,我本人在這方面的做過功課,也實戰使用到很多的項目上,所以我就來為大家做個拋磚引玉吧。

???????? 本次例程,我用的是STM32F103VET6單片機開發板,這個是我2012年買的,有沒有人和我用的一樣的呢?

? ? ? ? ??

???????? 所謂的IAP( InApplication Programming)即在線應用編程。其主要的應用就是對程序的在線升級更新。比如,我們開發的產品,在已經大量出貨的情況下,突然發現我們產品的程序有個BUG,在這種情況下,總不能把所有的產品都召回吧,這樣成本太高了。IAP就可以很好避免這個問題。

???????? 如果你的設備上有IAP功能,你可以要求把你的產品接到網口、USB、插個有新程序的TF卡、或者串口等等,就能對產品設備進行固件升級。就像我們的手機刷機一樣。

IAP升級原理

???????? STM32單片機,根據BOOT電平的設置,其上電啟動的地址也是不一樣的,常用的是從Flash啟動。對應的BOOT電平設置如下:

? ? ? ? ?

在FLASH啟動模式下,上電的啟動地址是:0x0800 0000,也是FLASH的起始地址。

???????? 比如,本次使用的STM32F103VET6單片機,其FLASH大小為512K,RAM尺寸為64K。這里我將程序設計成兩個BOOT程序和APP程序。

BOOT程序:位于FLASH的起始地址,及0x08000000.主要進行對后面APP程序的FLASH扇區進行編程,上電默認執行。

APP程序:位于FLASH的后半段,為用戶實現功能的程序。

???????? 所以這里將512K的FLASH分成了兩部分從0x0800000 -0x0800 FFFF 為BOOT程序區,合計64K;剩下的從0x0801 0000-0x0808 0000為用戶APP程序區,合計448K。

程序的啟動流程是:

單片機上電之后,首先從0x08000000啟動,運行BOOT程序,在BOOT程序中檢測是否需要進行固件升級:

如果需要升級,則按照規定的方式,從串口接收數據對單片機的FLASH進行改寫,改寫完成之后,需要對改寫的固件進行校驗。校驗通過后,則進行程序跳轉。

如果不需要升級,則判斷APP程序的起始地址是否正常,若正常,則進行程序跳轉,運行APP即可。

說了這么多,下面開始實操。

BOOT程序設計

BOOT程序的核心功能有兩個:

1、程序跳轉

2、對APP程序的FLASH扇區內容進行改寫

程序跳轉很簡單,也就幾句話:

其中的 APP_START 就是我們APP程序的起始地址:0x0801 0000

而FLASH的改寫稍微麻煩些,需要將0x0801 0000 后面的FLASH扇區進行擦除和重寫。重寫的類容為我們新的APP程序類容。

???????? 這里說明下,新的APP程序數據,有多種來源方式:可以將新的APP程序的BIN文件放到TF卡中,BOOT程序根據TF卡的BIN文件,去改寫APP扇區。也可以用過CAN、RS485、串口、USB等串行接口接收新的APP程序數據包,并把數據包依次寫到APP扇區。本次使用的是串口。

配置工程:默認的是ROM1的起始地址為0x0800 0000 SIZE 為0x8 0000

而本次我們分配的BOOT程序為64K,所以需要修改SIZE為0x1 0000

其他的地方編程和我們平時編程是一樣的。

程序編寫成功之后,點擊“LOAD”下載就可以了。

這里需要主要的是:

1、每個單片機的FLASH大小和扇區是不一樣的,兩個程序的分割點,一定要選擇某個扇區的起始地址。

2、本次是使用的單片機有256個扇區,每個扇區為2K,但是并不是所有單片機的PAGE都是一樣大小的,比如STM32F407的扇區就不是平均分配的。

3、BOOT的功能建議設計為越簡單越好,其主要功能就是為了下載程序。所以,越簡單,其可能出問題的幾率就越小。如果BOOT程序出了問題,那一般只能進行產品召回了。

4、安全很重要。在BOOT程序里,一定要記得,要將其他的控制引腳保持在合適的電平。比如:做小車控制板,在BOOT程序升級的時候,忘記了把運動控制引腳的電平拉低,導致在升級的時候,小車亂跑,容易撞到東西。

========================示例:我設計的BOOT程序升級流程=====================

正常情況下,程序上電啟動之后從MCU起始地址0x0800 0000直接啟動,讀取BKP_DR1寄存器,判斷是否需要固件升級,如果不要升級,則進入固件跳轉,運行APP程序。

當需要更新固件的時候,需要嚴格按照如下的步驟和通訊要求進行操作,具體操作如下:

l ?目標設備上電之后(程序已經完成了跳轉),上位機發送“固件更新命令”,目標設備重新復位啟動,在這個過程中目標設備不能斷電(此時固件更新命令將保存到BKP_DR1備份寄存器中)。

l ?上位機可以使用相關的命令獲取設備的MCU型號、內存、ID、版本、固件起始地址(主要是固件起始地址參數,如果知道可以跳過此步驟)等相關信息。

l ?上位機發送“開始更新固件”命令,該命令包含固件的起始地址,目標設備收到后需要應答。

l ?上位機開始分包發送固件數據幀,目標設備校驗并保存固件數據,同時需要應答上位機;如果數據校驗失敗,可以要求上位機重傳。

l ?上位機收到應答數據幀之后,才能繼續發送固件數據幀。當上位機發送完整個固件數據幀之后,上位機需要發送固件數據更新完畢命令,目標設備應答,開始重啟,此刻目標設備固件更新完成。

具體流程如下圖所示:

??? 在BootLoader程序中,固件的起始地址、BootLoader版本都在程序的代碼中固化好了;CPUID、內存尺寸直接讀取MCU相關的寄存器即可...

點擊文末“閱讀原文”,查看完整文章!

↓↓↓?爆品推薦:安信可WiFi模塊 ESP8266,僅售4.99

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的iap升级问题 stm32f103r8_STM32的基于串口的IAP固件升级与加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。