STM32 之 在線升級(IAP)圖示詳解

IAP 是啥

  IAP( In Application Programming)即在應用編程,也就是用戶可以使用自己的程序對MCU的中的運行程序進行更新,而無需藉助於外部燒寫器。其實ST官網也給出了IAP的示例程序,感興趣的可以直接去官網搜索。
  這裏有一點需要特殊注意,就是在MCU中,有一個特殊區域被稱爲 System memory。在這塊區域中存放了ST公司自己的 bootloader 程序,它是在MCU出廠時,有ST固化到芯片中的,後續不能再更改。其中的 bootloader 程序也可以對MCU進行升級(DFU對芯片的編程應該就是用的這個Bootloader)。而且,芯片不同,BootLoader的功能也是有區別的。ST官網對於這些也是有詳細文檔的,後續再寫篇文章介紹這一塊。下圖爲部分芯片BootLoader版本及功能
在這裏插入圖片描述

STM32 MCU啓動配置

  要實現IAP,首先要了解一下MCU是如何啓動的。這一點在芯片的參考手冊中都有詳細的說明,不同的芯片手冊所在位置可能不同,但是一般在第二章會有單獨一節叫Boot configuration。如下圖:
BootConfig
主要就是說,啓動是通過管腳BOOT0和BOOT1的連接方式來控制的。這個是在硬件設計階段設計好的。不同的配置決定了,MCU將何處映射到0x00000000。從這裏又可以看到一點,MCU眼裏只有0x00000000。至於爲啥可以從Flash(0x08000000)啓動,就是因爲MCU內部做了映射。從其他位置啓動時同理。

IAP 實現

  要實現IAP,則整個程序實現分爲大程序(APP)和小程序(IAP)兩部分。其中,APP主要接收升級數據並存儲,IAP處理擦除APP,並重新寫入升級數據。此外,IAP還應該可以獨立接收升級數據的情況。但是,由於Cortex-M0核是沒有中斷向量表偏移寄存器的,這就導致了在Cortex-M0核的MCU上實現在線升級比較麻煩。在實際產品中,整個程序的基本組成結構:
FlashUsage

注意:
(1)與 Cortex-M3 和 Cortex-M4 不同,Cortex-M0 沒有中斷向量表偏移寄存器(VTOR寄存器)
(2)Cortex-M3 r2p0 及其之前版本,中斷向量表只能位於SRAM或者CODE區域,但是Cortex-M3 r2p1及之後,Cortex-M4 沒有該限制!
(3)MCU根據Boot引腳配置將指定地址映射爲0x地址!

IAP 啓動

  啓動網上有很多文章介紹,但是或多或少不是很完善,我只做了一張相對來說比較詳細的圖,如下:
Startup
  Cortex-M內核規定,中斷向量表開始的4個字節存放的是堆棧棧頂的地址,其後是中斷向量表各中斷服務程序的地址。當發生中斷後程序通過查找該表得到相應的中斷服務程序入口地址,然後再跳到相應的中斷服務程序中執行,中斷服務程序中最終調用用戶實現的各函數。例如:main函數就是復位中斷服務函數中調用的!
  在沒有IAP時,上電後從0x08000004處取出復位中斷向量的地址,然後跳轉到復位中斷程序的入口(標號①所示),執行結束後跳轉到main函數中(標號②所示)。通常main函數是個死循環,不會退出。在執行main函數的過程中發生中斷,則STM32強制將PC指針指回中斷向量表處(標號④所示),從中斷向量表中找到相應的中斷函數入口地址,跳轉到相應的中斷服務函數(標號⑤所示),執行完中斷函數後再返回到main函數中來(標號⑥所示)。
  在添加IAP後,上電後仍然從0x08000004處取出復位中斷向量的地址,然後跳轉到復位中斷程序的入口(標號①所示),執行結束後跳轉到小程序的main函數中(標號②所示)。在執行小程序main函數的過程中發生中斷,則STM32強制將PC指針指回中斷向量表處(標號④所示),從中斷向量表中找到相應的中斷函數入口地址,跳轉到相應的中斷服務函數(標號⑤所示),執行完中斷函數後再返回到main函數中來(標號⑥所示)。而想要大程序執行,則必須在小程序中顯示強制跳轉(標號⑦)。
  在大程序的main函數的執行過程中,如果CPU得到一箇中斷請求,由於我們設置了中斷向量表偏移量爲N+M,因此PC指針被強制跳轉到0x08000004+N+M處的中斷向量表中得到相應的中斷函數地址,再跳轉到相應新的中斷服務函數,執行結束後返回到main函數中來。
  需要注意的是,復位中斷比較特殊。產生復位後,PC的值會被硬件強制置爲0x08000004。因爲,在發生復位後,負責中斷向量偏移的寄存器VTOR變爲了0,因此,復位後的中斷就變爲了0x08000004。而其他中斷髮生時,VTOR爲已經設置好的終端向量表偏移。

程序實現

  有了上面的介紹,實現就比較簡單了!其實我有設計了一套適用於全部STM32芯片的IAP模板,但是屬於公司產品,不方便對外公佈!

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