IAP:物聯網終端軟件升級技術

摘要:IAP是利用自己的程序代碼實現升級程序(新的APP)從外部接口(可以是串口、I2C、SPI、網口等等)寫入到flash中,再通過flash讀寫操作,將新的APP覆蓋原有APP程序,在重新從新的APP入口位置啓動我們的應用程序,同時也負責IAP代碼的修改和迭代。

本文分享自華爲雲社區《物聯網終端軟件升級技術---IAP(因芯片類型較多,本文僅針對STM32的Cortex-M系列》,原文作者:o0龍龍0o 。

現在升級已經成爲IoT領域邊緣升級的基本技術,廣泛被現在流行的OTA技術就是其中之一。因爲物聯網終端會和互聯網技術相關,軟件迭代速度會比傳統制造業高很多,這樣就對非現場升級提出了要求,在行業內形成以OTA爲主流的升級方式及升級標準。

物聯網終端多使用的經濟型的MCU,這個類的MCU一般有三種程序寫入方式:

ISP:In System Programing

  • 在系統編程(使用芯片提供的引導程序(Bootload)加上外設接口進行燒錄)

IAP:In applicating Programing

  • 在應用編程(軟件自身實現在線電擦除和編程的方法,不使用任何工具。程序通常分成兩塊,分別爲引導程序和應用程序)

ICP:In Circuit Programing

  • 在電路編程(使用JTAG/SWD接口進行燒錄,如J-Link燒錄器和J-Flash軟件配合使用)

ICP、ISP都是用在廠家在調試過程燒錄程序和成片燒錄程序的芯片編程方法,在製成後一般利用IAP的方式更加自由的對自己的芯片就行升級。

IAP

若由ROM執行程序,如支持IAP的單芯片能夠運用自修改代碼進行程序升級,也能對負責IAP功能的代碼進行修改或刪除從而失去IAP功能。IAP不需要芯片廠家給出特殊的支持,只需要提供FLASH操作、通信接口操作、中斷矢量偏移操作和復位操作就可以了。

IAP的原理與實現

IAP是利用自己的程序代碼實現升級程序(新的APP)從外部接口(可以是串口、I2C、SPI、網口等等)寫入到flash中,再通過flash讀寫操作,將新的APP覆蓋原有APP程序,在重新從新的APP入口位置啓動我們的應用程序,同時也負責IAP代碼的修改和迭代。

在這裏,首先在我們的代碼空間,一部分的是我們用於升級的程序IAP,另一部分是我們的應用程序APP,例如如下圖進行分配:IAP通過ISP或是ICP方式進行燒錄,APP初版通過三種方式進行燒寫,在需要升級時通過IAP進行升級。

我們先來看看 Cortex正常的程序運行流程,如下圖所示:內部閃存(FLASH)地址起始於 0x08000000,一般情況下,程序文件就從此地址開始寫入。

此外芯片是基於Cortex-M內核的微控制器,其內部通過一張“中斷向量表”來響應中斷,程序啓動後,將首先從“中斷向量表”取出復位中斷向量執行復位中斷程序完成啓動,而這張“中斷向量表”的起始地址是 0x08000004。

當中斷來臨,芯片的內部硬件機制亦會自動將 PC 指針定位到“中斷向量表”處,並根據中斷源取出對應的中斷向量執行中斷服務程序。

芯片復位後,先從 0X08000004 地址取出復位中斷向量的地址,並跳轉到復位中斷服務程序,如圖標號①所示;在復位中斷服務程序執行完之後,會跳轉到我們的main 函數,如圖標號②所示;而我們的 main 函數一般都是一個死循環,在 main 函數執行過程中,如果收到中斷請求(發生重中斷),此時芯片強制將 PC 指針指回中斷向量表處,如圖標號③所示;然後,根據中斷源進入相應的中斷服務程序,如圖標號④所示;在執行完中斷服務程序以後,程序再次返回 main 函數執行,如圖標號⑤所示

當基於IAP設計的程序啓動流程如下圖:芯片復位後, 還是從 0X08000004 地址取出復位中斷向量的地址,並跳轉到復位中斷服務程序,在運行完復位中斷服務程序之後跳轉到 IAP 的 main 函數,如下圖標號①所示,在執行完 IAP 以後(即將新的 APP 代碼寫入預先定義的 FLASH,灰底部分。

新程序的復位中斷向量起始地址爲 0X08000004+N+M),跳轉至新寫入程序的復位向量表,取出新程序的復位中斷向量的地址,並跳轉執行新程序的復位中斷服務程序,隨後跳轉至新程序的 main 函數,如下圖標號②和③所示,同樣 main 函數爲一個死循環,並且注意到此時芯片的 FLASH,在不同位置上,共有兩個中斷向量表。

main 函數執行過程中,如果 CPU 得到一箇中斷請求, PC 指針仍強制跳轉到地址0X08000004 中斷向量表處,而不是新程序的中斷向量表,如下圖標號④所示;程序再根據我們設置的中斷向量表偏移量,跳轉到對應中斷源新的中斷服務程序中,如圖標號⑤所示;在執行完中斷服務程序後,程序返回 main 函數繼續運行,如圖標號⑥所示。這樣就完成程序設計和跳轉的動作。

LiteOS的OTA方案

LiteOS是利用華爲雲實現物聯網終端的升級的工作,底層的原理與上面介紹的移植,不過因爲是物聯網,所以程序是通過Wi-Fi、4G、NB等無線通訊技術下載到芯片實現軟件的升級,具體可以在博客檢索相關關鍵詞獲取,有很多對應的解釋。大致原理如下圖:分爲SOTA和FOTA兩種技術,即固件和軟件都可以分別進行升級操作,然後將程序編譯好的bin文件,通過華爲雲IoT平臺進行打包發送到物聯網終端進行升級操作。

附錄:

華爲LiteOS官方表述升級參考鏈接:https://support.huaweicloud.com/usermanual-iothub/iot_01_0027.html

點擊關注,第一時間瞭解華爲雲新鮮技術~

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