IAP是什么
有時項目上需要遠程升級單片機程序,此時需要接觸到IAP編程。
IAP即為In Application Programming,解釋為在應用中編程,用戶自己的程序在運行過程中對User Flash的部分區(qū)域進行燒寫。即是一種對單片機Flash擦寫的一種編程方案。
通常情況下,一片STM32單片機的Flash只有一個用戶程序,而IAP編程則是將單片機的Flash分成至少兩大區(qū)域,一部分叫做bootloader區(qū),一部分叫做app用戶代碼區(qū),還可留出一部分區(qū)域為代碼備份區(qū)。
IAP的應用場所
通常情況下我們給STM32單片機燒錄更新程序時是通過SWD、J-link或者通過設(shè)置BOOT引腳后,使用串口進行程序下載,這樣的方式直接一次性將程序文件下載到單片機的Flash中,比較適合絕大部分的應用。
但是當產(chǎn)品投入實際應用時,封裝完成后在后期的使用過程中遇到某些程序上的bug或者是根據(jù)客戶需求需要增加一些功能的時候,使用傳統(tǒng)代碼燒錄的方法就可能需要拆除封裝,而使用IAP編程在bootloader區(qū)提前寫入與外部通信的接口用于升級單片機代碼,使得我們不用對已完成包裝的產(chǎn)品進行拆除既可以更新代碼,這樣既節(jié)約了成本,也更加方便快捷。
IAP編程的流程
IAP編程將Flash區(qū)分成的兩個區(qū)域,bootloader區(qū)和app用戶代碼區(qū)具有截然不同的功能。
bootloader區(qū),主要實現(xiàn)接收程序文件,并將該程序?qū)懹谔囟ㄎ恢玫腇lash區(qū)域。而這里接收外部程序文件,就需要實時和外部通信了。STM32單片機與外部通信大多是通過自身的串口接收和發(fā)送數(shù)據(jù),不過STM32單片機的串口可以外接多種通訊接口。
例如422、485、GPRS及ESP8266等。即我們可以通過串口外接藍牙模塊、WiFi模塊或者是其他網(wǎng)絡模塊,就可以實現(xiàn)遠程的文件傳送更新單片機程序了。
app用戶代碼區(qū)則是主要實現(xiàn)我們所需要的功能操作,除此之外app用戶代碼區(qū)還需要實時檢查代碼運行情況,通過判斷更新程序的標志位來判斷是否需要升級程序。若是需要升級程序則進入bootloader區(qū)進行代碼更新;若不需要則繼續(xù)運行功能函數(shù)代碼即可。
根據(jù)運行流程,我們可以總結(jié)出簡單幾條bootloader設(shè)計過程中需要注意的地方:
精簡、程序盡可能精簡。在單片機Flash有限的情況下,bootloader代碼占用Flash的空間越小,則APP程序代碼就可占用更多,實現(xiàn)更多功能函數(shù)。
標志位不受復位的影響。
Bootloader中盡量不使用中斷。
編輯:jq
-
編程
+關(guān)注
關(guān)注
88文章
3521瀏覽量
93268 -
IAP
+關(guān)注
關(guān)注
2文章
163瀏覽量
24138 -
單片機程序
+關(guān)注
關(guān)注
1文章
12瀏覽量
9530
原文標題:STM32代碼遠程升級之IAP編程
文章出處:【微信號:gh_94c30763133f,微信公眾號:FPGA那點事兒】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論