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口,通過專門設計的固件程序來編程內部存儲器。