IAP是In Application Programming的縮寫,它指的是在應用程式設計技術,此方式允許使用者在自己的程式執行過程中對Flash儲存器的部分割槽域進行燒寫,方便地透過預留的通訊口(USB/.URAT)對產品中的韌體程式進行更新升級。
此外,USB_IAPDemo中的兩個工程可透過預留的jumpApp介面和jumpToIap介面進行地址指標的跳轉進行工程切換;
IAP完整工程簡略圖如下:
按照Code地址的順序,首先上電後我們會從0地址執行IAP工程,
一上來我們會去Dataflash中去讀取IAP Flag,看是否需要進行IAP升級,如果不需要,則會跳轉至APP程式,如果檢測到標誌置位,則會載入USB驅動;
USB驅動載入:
IAP部分一般不需要改動,按需改動進入APP的方式,然後複製到自己的工程下即可,
而該例程下的APP程式則只用來演示如何跳轉往IAP工程以及如果升級失敗如何保證重新升級,因此只有三處需要注意:
①在IAP工程中可以看到上電後會進行判斷IAP標誌,決定是否跳轉至APP,而如果APP升級失敗(也就不可能跑到APP工程中),則flag不可能會被置為APP_Flag,重新上電後跑到IAP工程呢箇中判斷標誌不成立依舊會跑IAP工程,直到升級成功順利執行到APP後才會將flag置為APP_Flag;
②例程中給出的進入IAP的方式為連續兩次將PB4拉低,該方式隨意更改,主體函式為jumpToIap();
③記得修改APP工程的Link.ld檔案的CODE起始地址為0x1000,另外啟動檔案Startup.s檔案li t0, 0x88修改為li t0, 0x1888(機器模式);
移植步驟:
①將IAP工程複製到自己的應用APP工程目錄下
②修改自己的APP工程Link.ld起始地址為0x1000,startup啟動檔案li to,0x1888
③自行新增標誌管理(按需)
④新增void jumpToIap(void),void SwitchImageFlag(uint8_t new_flag)函式定義
⑤完善標誌管理的邏輯,新增工程跳轉的處理邏輯,何時呼叫jumpToIapI();