天天看點

STM32 OTA更新流程設計分析

    上次談到OTA,有小夥伴私信我表示對更新的原理感興趣。回想當初入職看到MCU線上更新的代碼流程時,同樣感到很神奇,畢竟學生時代我們在MCU上開發基本不需要更新,隻需要進行燒錄即可。

    事實上,很多公司現在也采用現場燒錄來進行更新。這需要技術支援工程到現場,當産品數量一多時,未免過于麻煩。是以,對于已經接入網絡的裝置,可以采用線上更新的方法,有效提高更新的工作效率。

    那麼如何實作呢?下面提供幾點思路。

    1.大家知道,燒錄的時候,是将生成的bin檔案燒寫到flash指定區域。同樣,線上更新也需要将新版本代碼生成的固件,寫入到flash中。

    2.由于是網絡傳輸,是以我們不可能一下子得到整個固件,需要進行分包傳輸,分片寫入flash中。當然這個過程需要保證資料的完整性可靠性。而且,寫入的flash區域肯定不能和原來的固件所占的位址有所重合,否則原固件不能正常運作。

    3.最後,也是最重要的,将新固件寫入flash後,怎樣将新固件運作起來呢?我們可以考慮在MCU上編寫bootloader,根據标志位,選擇跳轉到哪個固件在flash中位置運作。大家知道,MCU都是從0x08000000位址開始運作程式,我們可以在該位置放置bootloader,由其完成之後的跳轉。

    4.使用bootloader進行跳轉,需要固件代碼生成時選擇好連結位址,同時,需要重新映射向量位址。這時跳轉之後代碼能夠正常運作的基礎前提。

    5.bootloader也不一定要跳到兩種位置,它可以把新固件搬運到flash指定位置,然後跳到該位置運作。

    好了,以上就是MCU線上更新的基本原理步驟,希望對在讀的你有用,有疑問可以私信我。最後,下面是我新開的個人公衆号,上面會不定期更新我在單片機和嵌入式相關領域的工作經驗和整理,歡迎關注和交流,比心!

STM32 OTA更新流程設計分析

繼續閱讀