單片機IAP程序升級:通過網絡模塊或其他任意數據傳輸方式。

單片機的程序升級其實本質就是對單片機的片上Flash進行擦寫,將新的程序寫入到運行的Flash位置。做了2G模塊的IAP程序升級和基於串口上位機的IAP程序升級。寫下一點自己的淺見。

概況:

  1. 軟件上:
    具備遠程升級的單片機的程序整體具體包含兩個部分,一部分是(APP)應用程序,另一部分是(BOOT)引導程序
    APP程序 就是我們需要進行更新的程序,程序包括的內容:應用相關的程序(業務相關),接受並解析升級數據包的程序,存儲數據包的程序。
    BOOT程序 
    就是負責對已經存儲好的升級數據包文件寫入APP程序所在的Flash;並跳轉到APP程序
    這兩部分的程序是相互獨立的運行的,擁有相互跳轉的能力,相互升級對方的能力。上電一般先運行BOOT程序,然後跳轉到APP程序執行。BOOT程序一般很小,APP程序比較大。

  2. 硬件上:
    單Flash塊的單片機:Flash存儲位置上BOOT程序從默認啓動Flash地址 0x0000000 開始開始存儲 ,APP程序從BOOT 程序後的指定Flash頁的基地址開始(Flash擦除寫入以頁(page)爲單位)。
    多個Flash塊的單片機:單片機有相應的Flash區分(例如LDROM,APROM等),一般將兩個程序存儲與不同的區塊,查看手冊配置好,啓動flash即可。
    如下圖所示:

1. BOOT程序結構:

  •   單塊Flash的BOOT程序結構簡單(單片機爲新唐的M4系列,使用復位跳轉方式。也可以使用非重啓方式跳轉:重映射向量表之後,棧指針也要修改到APP_ADDR,(APP_ADDR + 4) 復位中斷處理函數爲程序入口),如下:
//只是示意步驟,並非真正程序,隱去細節
int32_t main(void)
{
    SYS_Init(); //系統以及外設初始化

    SYS_UnlockReg(); //解鎖系統寄存器的寫保護

    FMC_Open();    //開啓Flash擦寫

    set_IAP_boot_mode(); //進入IAP模式

    if(CheckUpdateFlag()) //檢查是否需要升級APP程序
    {
        if(DataCheck()) //檢驗待寫入的APP數據的完整性
        {
            FMC_ENABLE_AP_UPDATE(); //開啓程序區的Falsh寫入

            load_image_to_flash(); //寫入新的APP程序

            WriteUpdateFlag(Update_Success); //更新升級標誌位至升級完成
            
            FMC_DISABLE_AP_UPDATE(); //關閉程序區的Falsh寫入
        }
        else
        {
            WriteUpdateFlag(Update_Failed); //更新升級標誌位至升級完成
        }    
    } 

    NVIC->ICER[0] = 0xFFFFFFFF; //關閉所有中斷

    FMC_SetVectorPageAddr(APP_ADDR); //重定向APP程序執行向量,頁對齊

    NVIC_SystemReset();	//重啓跳轉至APP程序,或者使用程序跳轉

}
  • 多塊Flash的情況:只是將跳轉的方式的操作有所區別,基本一致。

2. APP程序結構:

APP程序的程序升級流程就把從數據源獲取的數據(不管是網絡傳輸過來的數據,還是通過串口傳輸的數據),按照約定的格式解析出APP的二進制數據包和程序的校驗值存儲起來,在接收完畢數據之後把升級的標誌位置爲需要升級,然後執行跳轉到BOOT程序,進行升級。新的APP程序,檢查升級是否完成的,上報或者回復相應信息。

至此升級流程就全部完成。這裏只講流程,由於傳輸的方式和傳輸協議等的差異,具體的實現方式很多。

3. Flash寫入相關:

一般升級文件爲單片機工程編譯生成的BIN文件,傳輸量最小。Hex文件大小至少是BIN文件的2倍。

例如如上圖所示,數據存儲於片上Flash的另一區域,那麼一般這塊數據的第一頁都是用來存放數據包的信息,校驗值,升級標誌位等升級相關的數據。升級文件的Flash寫入就是將BIN文件原封不動的從Flash指定地址(例如APP_ADDR)開始寫入,不足一頁的用0xFF填充剩下的字節寫入。

 

題外話:現在單片機的功能越來越強大,主頻也越來越高,像Coretex-M7的已經達到了500MHz。相應的應用也是越來越豐富,互聯網思維(敏捷開發)的全行業推進,做一款產品先做一個demo先上線,然後根據實際情況慢慢的完善。這時候程序的升級就變得非常的重要了,你要是聯網的的設備遠程升級那就更加的方便了。IAP升級也適用於功能出了問題進行緊急維護。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章