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