ESP32 內置記憶體的分區表 (partition table)
分區表
ESP32 內建 flash,這個 flash 被規劃成數個區塊,稱為分區表(partition table)。ESP32 將分區表分成三類:第一為單一應用程式且無 OTA 區塊(single factory app, no OTA),圖一所示。第二為具有 OTA 定義的區塊(factory app, two OTA definitions),圖二所示,這被規劃做為韌體更新的分區表,可以更新應用程式區塊。第三為客戶自行定義的分區表。
圖一:單一應用程式的分區表 |
底下的影片詳細描述內建的分區表,表上有幾個部分是不會變動的,如:Bootloader、分區表、NVS資料區、硬體資料區、應用程式區...等。Bootloader 程式的大小約莫小於 0x7000 (28672 Bytes),開機後執行 Bootloader,然後跳到應用程式運行。到應用程式,可以存取 NVS 資料區,這是一塊非揮發性記憶空間,適合做為 config 之用。
函數
ESP-IDF component 提供 NVS 相關的函數,在範例程式中,有 C 語法調用的方式,也有 C++ 語法的調用。C 語法的做法,先透過 nvs_open / nvs_close 這對函數取得 NVS 的控制權杖,然後才能調用存取的函數,如:nvs_get_i8、nvs_get_i16、nvs_set_i8、nvs_set_i16...等,依據資料的大小來調用適合的存取函數。而 C++ 語法的做法,也是透過 open_nvs_handle 取得控制權,再來調用 get_item、set_item...等存取函數。
留言