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