分布式光伏無線傳輸模塊物esp32 8266聯網無線通信模塊固件OTA升級,物聯網設備固件的更新往往是通過 OTA (Over-the-Air) 升級實現的。通過 OTA 升級可以安會可靠地修復固件漏洞、推送新功能、優化產品體驗,這些都將有助于更好地服務終端客戶目前,OTA 升級已經成為產品量產的標配功能。
將不同功能的固件標記為不同的版本是實現固件管理的可靠、有效手段。一個規范的版本標記方法有助于版本管理,便于排查問題,方便后期追溯,可以更加高效地通過 OTA 升級完成固件更新。
分布式光伏無線傳輸模塊物esp32 8266聯網無線通信模塊ESP-IDF 提供了OTA 升級示例,以及多種用于版本管理的固件標記方法,本文將講述這些內容,并借助 ESP RainMaker 實現智能燈的遠程OTA 升級。
固件更新
分布式光伏無線傳輸模塊物esp32 8266聯網無線通信模塊OTA 升級機制允許設備在正常運行時接收新固件,并將新固件寫入當前未運行的應用程序分區,在校驗固件有效后,切換至新固件運行。
OTA 升級的基本步驟如下:
(1)云服務器向設備推送 OTA 升級信息。
(2)設備對云服務器身份進行驗證,從受信任的云服務器下載固件。
(3)根據下載固件中的版本信息,設備決定是否進行升級。如果決定升級,則請求固件,并將固件寫入 Flash 后對其進行校驗,校驗成功后切換至新的固件運行。
從基本步驟可以看出,分布式光伏無線傳輸模塊物esp32 8266聯網無線通信模塊OTA 升級的過程就是固件獲取、寫入、校驗、切換的過程。在進一步了解 OTA 升級的原理之前,本節先對分區表、固件啟動流程進行介紹。
分區表概述
ESP-IDF 的分區表是指在用戶層面將 Flash 不同位置、范圍劃分為特定功能的描述文件。本文以分布式光伏無線傳輸模塊物esp32 8266聯網無線通信模塊ESP-IDF的advanced_https_ota(esp-idf/examples/system/ota/ advancedhttps_ota)為例(簡稱 OTA 升級示例)。在該示例中默認使用了 ESP-IDF 中 partitiontable組件下的partitions two ota.csv(esp-idf/components/partition_tablepartitions_two ota.csv)文件,以下是 partitions_two_ota.csv分區表的概要。
1.1# Name,Type,SubType, Offset, Size, Flags
2.# Note: if you have increased the bootloader size, make sure to update the offsetsto avoid overlap
3.nvs,data, nvs,,0x4000,
4.otadata,4 .data, ota,,0x2000,
5.phy_init,data,phy,,0x1000,
6.factory,app,factoryr,,1M,
7.ota 0,app,ota_0,,1M,
8.ota_1,app,ota_1,,1M
從上面的概要可以看到,分區表每個條目都是由 Name、Type、SubType、offset、size.
Flags 構成的。
(1) Name 字段用于標識名稱,不應超過 16 B。
(2) Type 字段既可以指定為 app 或者 data,也可以直接使用 0~254 (或對應的十六進制數 0x00~0xFE),主要用于標記存儲的內容是應用固件還是數據。
(3)SubType 字段的長度為 8 bit,具體標記內容與 Type 字段有關。
1)當Type定義為app時,SubType字段可以指定為factory(0x00)、ota 0(0x10)、...、ota 15(0x1F)或test(0x20)。
2)當 Type 定義為 data 時,SubType 字段可以指定為 ota(0x00)、phy(0x01)、nvs(0x02)、nvs _keys(0x04)或者他組件特定的子類型
(4) offset 與 size 字段用于劃分一個特定的區域。
(5) Elags 字段用于標記是否加密。
該示例分區表中的 offset 未填寫任何數值,但依舊是有效的分區表,這是因為分區表首個條目的位置是確定的,所以可以通過前一個條目的 size 字段計算出后續條目的地址。如果分區表劃分的每個條目地址不是連續的,此時就需要通過 offset 來標記每個條目的起始地址??梢钥闯?,分布式光伏無線傳輸模塊物esp32 8266聯網無線通信模塊分區表首個條目的起始地址為 0x9000,即 partitions two ota.csv中name為nvs條目的 Offset 字段是0x9000,該條目的大小為0x4000根據之前介紹的計算規則,下一個條目的 Offset 為0x9000+0x4000=xd000。依次計算,后一個ota_1目的offset為0x210000。
Partitions_two_ota.csv分區表劃分了6個區域:3 個數據分區nvs、otadata、phy_init分別用于存儲NVS 數據、OTA 升級數據、PHY 初始化數據:3個應用分區分別存儲了3個不部的應用固件。分布式光伏無線傳輸模塊物esp32 8266聯網無線通信模塊從OTA 升級的基本步驟可知,要進行 OTA升級,至少需要包括兩個 OTA 升級應用分區[Type (app),SubType (ota_0/ota_1)]和一個OTA 升級數據分區[Type(data),SubType (ota)],同時也可包含一個可選的應用分區——出廠應用分區 [Type(app),SubType (factory)]。
(1)OTA 升級數據分區用于存儲當前所選的 OTA 升級應用分區的信息,第一次 OTA 升級后OTA 升級數據分區將被更新,指定下一次啟動哪個 OTA 升級應用分區。OTA 升級數據分區的大小需要設定為 0x2000,用于防止寫入時電源故障引發問題。兩個扇區單獨擦除、寫入匹配數據,若存在不一致,則用計數器字段將判定哪個扇區為新數據。
(2)應用分區用于存儲固件,出廠應用分區是默認的應用分區,如果不存在 OTA 升級數據分區或 OTA 升級數據分區無效,則優先使用出廠應用分區的固件(如果存在),其次使用 OTA升級數據分區的固件。分布式光伏無線傳輸模塊物esp32 8266聯網無線通信模塊OTA 升級永遠都不會更新出廠應用分區中的內容。