USB_IAP例程講解及移植步驟

ZDeST發表於2024-07-22

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();

相關文章