是In Application Programming的首字母縮寫,IAP是用戶自己的程序在運(yùn)行過程中對User Flash的部分區(qū)域進(jìn)行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預(yù)留的通信口對產(chǎn)品中的固件程序進(jìn)行更新升級。 通常在用戶需要實(shí)現(xiàn)IAP功能時(shí),即用戶程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫兩個(gè)項(xiàng)目代碼,第一個(gè)項(xiàng)目程序不執(zhí)行正常的功能操作,而只是通過某種通信管道(如USB、USART)接收程序或數(shù)據(jù),執(zhí)行對第二部分代碼的更新;第二個(gè)項(xiàng)目代碼才是真正的功能代碼。這兩部分項(xiàng)目代碼都同時(shí)燒錄在User Flash中,當(dāng)芯片上電后,首先是第一個(gè)項(xiàng)目代碼開始運(yùn)行,它作如下操作: 1)檢查是否需要對第二部分代碼進(jìn)行更新 2)如果不需要更新則轉(zhuǎn)到4) 3)執(zhí)行更新操作 4)跳轉(zhuǎn)到第二部分代碼執(zhí)行 第一部分代碼必須通過其它手段,如JTAG或ISP燒入;第二部分代碼可以使用第一部分代碼IAP功能燒入,也可以和第一部分代碼一道燒入,以后需要程序更新是再通過第一部分IAP代碼更新。 對于STM32來說,因?yàn)樗闹袛嘞蛄勘砦挥诔绦虼鎯ζ鞯淖畹偷刂穮^(qū),為了使第一部分代碼能夠正確地響應(yīng)中斷,通常會安排第一部分代碼處于Flash的開始區(qū)域,而第二部分代碼緊隨其后。 在第二部分代碼開始執(zhí)行時(shí),首先需要把CPU的中斷向量表映像到自己的向量表,然后再執(zhí)行其他的操作。 如果IAP程序被破壞,產(chǎn)品必須返廠才能重新燒寫程序,這是很麻煩并且非常耗費(fèi)時(shí)間和金錢的。針對這樣的需求,STM32在對Flash區(qū)域?qū)嵭凶x保護(hù)的同時(shí),自動(dòng)地對用戶Flash區(qū)的開始4頁設(shè)置為寫保護(hù),這樣可以有效地保證IAP程序(第一部分代碼)區(qū)域不會被意外地破壞。 ST的網(wǎng)站上有使用USART實(shí)現(xiàn)IAP的例子,各位可以參考這個(gè)例子和相應(yīng)的手冊。 應(yīng)用筆記 AN2557 - STM32F10xxx in-application programming using the USART 例程:AN2557 - STM32F10xxx in-application programming using the USART 最初發(fā)表日期:2008-7-30 |