<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 推薦一個(gè)很贊的單片機OTA開(kāi)源項目

推薦一個(gè)很贊的單片機OTA開(kāi)源項目

發(fā)布人:xiaomaidashu 時(shí)間:2024-05-30 來(lái)源:工程師 發(fā)布文章
實(shí)現的功能

mOTA 是一個(gè)專(zhuān)為 32 位微控制器(MCU)設計的 OTA(空中下載)組件,提供了一整套固件更新解決方案。

以下是 mOTA 的詳細功能介紹:

本組件實(shí)現了以下功能:

  1. 固件包完整性檢查: 自動(dòng)檢測固件 CRC 值,驗證固件數據的準確性。
  2. 固件加密: 支持 AES256 加密算法,提高固件的安全性。
  3. APP 完整性檢查: 支持在 APP 運行前進(jìn)行完整性檢查,以確認可運行的固件通過(guò)數據校驗。
  4. 斷電保護: 當固件更新過(guò)程中(含下載、解密、更新等過(guò)程),任何一個(gè)環(huán)節斷電,設備再次上電時(shí),依然能確保有可用的固件。(需在 bootloader_config.h 中配置為雙分區或三分區)
  5. 固件水印檢查: 可檢測下載的固件包是否攜帶了特殊的水印,用于確認非第三方或非匹配的固件包,防止錯誤更新。
  6. 固件自動(dòng)更新: 當 download 或 factory 分區有可用的固件,且 APP 分區為空或 APP 分區不是最新版本的固件時(shí),可配置為自動(dòng)開(kāi)始更新。
  7. 恢復出廠(chǎng)設置: factory 分區設計用于存放穩定版的固件,當設備需要恢復出廠(chǎng)設置時(shí),該固件會(huì )被更新至 APP 分區。
  8. 無(wú)須 deinit : 我們知道,固件更新完畢后從 bootloader 跳轉至 APP 前需對所用的外設 deinit ,以使外設恢復至上電時(shí)的初始狀態(tài)。本組件的 bootloader 包含了下載器的功能,當使用復雜的外設收取固件包時(shí), deinit 也將變得復雜,甚至很難排除對 APP 的影響。為此,本組件采用了再入 bootloader 的方式,給 APP 提供一個(gè)相當于剛上電的外設環(huán)境,免去了 deinit 的代碼。
  9. 功能可裁剪: 本組件通過(guò)功能裁剪(bootloader_config.h)可實(shí)現單分區、雙分區、三分區的方案切換、是否配置解密組件、是否自動(dòng)更新 APP 、是否檢查 APP 完整性、 是否使用 SPI Flash 等功能。
  10. 固件存放至 SPI flash : 本組件可通過(guò) bootloader_config.h 配置 download 分區和 factory 分區的所在位置為片內 flash 或 SPI flash ,使用了 SFUD (Serial Flash Universal Driver) 作為 SPI flash 的底層驅動(dòng)庫。若使用的 SPI flash 支持 SFDP (Serial Flash Discovable Parameters) ,則可在不修改任何源代碼的情況下更換其它品牌型號的 SPI flash 。若不支持 SFDP ,SFUD 中已有對應 SPI flash 參數表的,也可做到在不修改任何源代碼的情況下更換其它品牌型號的 SPI flash 。
軟件架構

圖片軟件架構

  • 硬件層描述的是運算器件和邏輯器件,如 CPU、ADC、TIMER、各類(lèi) IC 等,是所有軟件組件的硬件基礎,是軟件邏輯的最終底層實(shí)現。
  • 硬件抽象層是位于驅動(dòng)與硬件電路之間的接口層,將硬件抽象化。它隱藏了特定平臺的硬件接口細節,為驅動(dòng)層提供抽象化的硬件接口,使其具有硬件無(wú)關(guān)性。
  • 驅動(dòng)層通過(guò)調用硬件抽象層的開(kāi)放接口,實(shí)現一定的邏輯功能后封裝,提供給上層軟件調用。
  • 數據傳輸層負責收發(fā)數據,對外開(kāi)放的是數據發(fā)送與接收相關(guān)的接口,屏蔽了通訊接口的邏輯代碼,使其易于修改為其他類(lèi)型的通訊接口。
  • 協(xié)議析構層將調用數據傳輸層的數據收發(fā)接口進(jìn)行封包發(fā)送與收包解析,通過(guò)實(shí)現公有協(xié)議或自定義的協(xié)議,完成對數據的構造和解析。
  • 應用層負責業(yè)務(wù)邏輯代碼的實(shí)現,通過(guò)調用其他層封裝的接口,完成頂層邏輯功能。
文件架構
├─ document                 設計和原理性文檔
├─ example                  示例工程
├─ image                    圖片資源
├─ source                   mOTA 組件的源碼
│  ├─ bootloader            mOTA 組件的 bootloader 部分
│  │  ├─ Component          第三方庫
│  │  ├─ Config             bootloader 配置文件
│  │  ├─ Core               核心源碼
│  │  │  ├─ Module          代碼模塊(可移植部分)
│  ├─ BSP                   BSP(板級支持包)
├─ tools                    mOTA 組件的工具部分
│  ├─ firmware_packager     固件打包工具
│  ├─ YModem_Sender         基于 YModem-1K 協(xié)議的發(fā)送工具
├─ README.md                說(shuō)明文件
├─ LICENSE                  Apache-2.0 開(kāi)源許可



*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 單片機 OTA 開(kāi)源項目

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>