深入解析 ESP32 OTA 分區表設計 | 搞懂 OTA 如何分割來提升系統靈活性
ESP32 OTA(Over-the-Air Update)功能讓物聯網裝置能透過無線網路進行韌體更新,大幅提升產品的維護性與擴充性。在物聯網時代,設備的韌體更新變得越來越頻繁。ESP32 OTA 功能讓智慧家居、工業自動化等領域的裝置能隨時保持更新,提升使用者體驗。
內容
簡介
OTA(Over-The-Air) 是指通過無線通信技術,將軟體或固件更新直接推送到設備的一種技術。這使得設備可以在不需要物理接觸或人工干預的情況下進行遠程升級和維護,特別適用於現代物聯網(IoT)設備和嵌入式系統。
本文將深入解析 ESP32 的 OTA 分區表設計,幫助你更好地理解如何將 OTA 分區進行分割,從而提升系統靈活性,實現高效的固件更新。
什麼是 ESP32 OTA 分區表?
在 ESP32 中,分區表(Partition Table)是系統中一個非常關鍵的概念,它定義了設備內部閃存的使用方式。每個分區表項(Partition Entry)都描述了一塊特定的閃存區域,這些區域可以用來存儲應用程式、數據、設定等。
對於 OTA 更新,我們通常會使用兩個或更多的應用分區來實現版本控制和回滾機制。這樣,即使新版本的固件出現問題,設備也可以通過切換到上一個穩定的分區來保證系統運行的穩定性。
開發環境
在開始編程之前,請確保已完成以下準備工作:
- 安裝 ESP-IDF 開發環境 (至少版本 v4.4 或更高)。
- ESP32 開發板。
- 其它參考文章。
基本 OTA 分區設計
在最基本的 OTA 分區設計中,我們會使用 ota_0
和 ota_1
作為兩個應用分區。這樣,設備在啟動時,會選擇其中一個分區來運行應用程式,而另一個則為預留分區,用來進行後續的 OTA 更新。
Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, , 0x4000,
otadata, data, ota, , 0x2000,
phy_init, data, phy, , 0x1000,
ota_0, app, ota_0, , 1M,
ota_1, app, ota_1, , 1M,
設計解釋:
- nvs:用於存儲設備的非易失性設置(如 Wi-Fi 配置等)。
- otadata:用來存儲 OTA 更新過程中的數據,包括當前啟動的應用分區和其他相關元數據。
- phy_init:存儲物理層初始化的數據。
- ota_0 和 ota_1:這兩個分區存儲不同版本的應用程式,設備會根據
otadata
中的記錄來選擇從哪個分區啟動。
支援加密和 NVS 密鑰的 OTA 分區設計
如果需要加強安全性,可能會加入加密支持,尤其是在需要對敏感數據進行加密存儲時。例如,使用加密的 nvs_key
分區來存儲加密的 NVS 數據,並確保 OTA 更新過程中的固件和數據傳輸是加密的。
Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, , 0x4000,
otadata, data, ota, , 0x2000,
phy_init, data, phy, , 0x1000,
factory, app, factory, , 1M,
ota_0, app, ota_0, , 1M,
ota_1, app, ota_1, , 1M,
nvs_key, data, nvs_keys,, 0x1000, encrypted
設計解釋:
- nvs_key:此分區存儲加密的 NVS 數據。這是重要的安全設置,確保即使設備被物理篡改,其配置數據也能保持安全。
- encrypted : 標誌表示該分區的數據會被加密存儲。
支援崩潰日誌的 OTA 分區設計
對於需要收集錯誤信息或崩潰日誌的應用場景,您可以在分區表中加入 coredump
分區。這樣,即使應用程式崩潰,設備也能保存調試信息,幫助開發者定位問題。
Name, Type, SubType, Offset, Size
nvs, data, nvs, , 0x4000,
otadata, data, ota, , 0x2000,
phy_init, data, phy, , 0x1000,
factory, 0, 0, , 1M,
coredump, data, coredump,, 64K,
ota_0, 0, ota_0, , 1M,
ota_1, 0, ota_1, , 1M,
設計解釋:
- coredump:該分區用於存儲應用程序崩潰時的核心轉儲信息,通常為小型數據,如崩潰堆棧或錯誤日志,大小一般為幾十 KB。
分區表比較
配置 | 特性 | 適用場景 |
---|---|---|
標準 OTA 配置 | 雙 OTA 分區,提供基本更新功能 | 一般應用,無特殊數據或診斷需求 |
加密 NVS 支持 | 支持加密 NVS,保護敏感數據 | 涉及機密數據的應用,如金融或醫療 |
核心轉儲支持 | 增加 coredump 分區,用於錯誤診斷 | 需要故障調試或高穩定性的系統 |
- 若需求簡單,可選擇標準配置。
- 若強調數據安全,可選擇加密 NVS 支持的配置。
- 若需要故障診斷,可選擇核心轉儲支持的配置。
- 確保分區不重疊,並留出足夠空間進行功能擴展。
結論
OTA 功能是現代嵌入式設備中不可或缺的一部分,而設計合理的分區表是成功實現 OTA 更新的關鍵。了解 ESP32 的 OTA 分區設計,不僅能幫助開發者理解如何利用不同的分區來管理應用和數據,還能提升系統的靈活性與可靠性。無論是標準的雙分區設計,還是支持加密和崩潰日誌的複雜設計,都能幫助開發者針對不同的應用場景進行靈活配置,實現更高效的遠程管理與升級。