『壹』 單片機的IAP是什麼意思
AP是In Application Programming的首字母縮寫,IAP是用戶自己的程序在運行過程中對User Flash的部分區域進行燒寫,目的是為了在產品發布後可以方便地通過預留的通信口對產品中的固件程序進行更新升級。 通常在用戶需要實現IAP功能時,即用戶程序運行中作自身的更新操作,需要在設計固件程序時編寫兩個項目代碼,第一個項目程序不執行正常的功能操作,而只是通過某種通信管道(如USB、USART)接收程序或數據,執行對第二部分代碼的更新;第二個項目代碼才是真正的功能代碼。這兩部分項目代碼都同時燒錄在User Flash中,當晶元上電後,首先是第一個項目代碼開始運行,它作如下操作:
1)檢查是否需要對第二部分代碼進行更新
2)如果不需要更新則轉到4)
3)執行更新操作
4)跳轉到第二部分代碼執行
第一部分代碼必須通過其它手段,如JTAG或ISP燒入;第二部分代碼可以使用第一部分代碼IAP功能燒入,也可以和第一部分代碼一道燒入,以後需要程序更新是再通過第一部分IAP代碼更新。
對於STM32來說,因為它的中斷向量表位於程序存儲器的最低地址區,為了使第一部分代碼能夠正確地響應中斷,通常會安排第一部分代碼處於Flash的開始區域,而第二部分代碼緊隨其後。
在第二部分代碼開始執行時,首先需要把CPU的中斷向量表映像到自己的向量表,然後再執行其他的操作。
如果IAP程序被破壞,產品必須返廠才能重新燒寫程序,這是很麻煩並且非常耗費時間和金錢的。針對這樣的需求,STM32在對Flash區域實行讀保護的同時,自動地對用戶Flash區的開始4頁設置為防寫,這樣可以有效地保證IAP程序(第一部分代碼)區域不會被意外地破壞。
IAP與ISP的區別
在線編程目前有兩種實現方法:在系統編程(ISP)和在應用編程(IAP)。ISP一般是通過單片機專用的串列編程介面對單片機內部的Flash存儲器進行編程,而IAP技術是從結構上將Flash存儲器映射為兩個存儲體,當運行一個存儲體上的用戶程序時,可對另一個存儲體重新編程,之後將控制從一個存儲體轉向另一個。ISP的實現一般需要很少的外部電路輔助實現,而IAP的實現更加靈活,通常可利用單片機的串列口接到計算機的RS232口,通過專門設計的固件程序來編程內部存儲器。