設(shè)計(jì):no-ota 分區(qū)表設(shè)計(jì)原理詳解)
一文看懂 HoloCubic_AIO Flash分區(qū)設(shè)計(jì)no-ota 分區(qū)表設(shè)計(jì)原理詳解【免費(fèi)下載鏈接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天氣時(shí)鐘、相冊(cè)、視頻播放、桌面投屏、web服務(wù)、bilibili粉絲等項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIOHoloCubic_AIO是一款基于 ESP32 Arduino 的超多功能 AIOAll-in-One固件一臺(tái)設(shè)備集齊了天氣時(shí)鐘、電子相冊(cè)、視頻播放、桌面投屏、Web 服務(wù)、bilibili 粉絲看板等玩法。而這些功能能裝得下、跑得動(dòng)離不開(kāi)一套精心設(shè)計(jì)的ESP32 Flash 分區(qū)表——尤其是它采用的no-ota單應(yīng)用、非 OTA分區(qū)方案。這篇文章面向新手帶你從零理解它的分區(qū)設(shè)計(jì)原理幾分鐘搞懂每一塊空間都去了哪里。什么是 Flash 分區(qū)表ESP32 內(nèi)置的 Flash 芯片只是一塊連續(xù)的存儲(chǔ)空間本身分不清哪里放程序、哪里放配置、哪里放文件。分區(qū)表Partition Table就是一本房產(chǎn)證用一行行配置告訴芯片哪個(gè)地址段放啟動(dòng)配置NV哪個(gè)地址段放應(yīng)用程序App哪個(gè)地址段放文件系統(tǒng)SPIFFS / FATHoloCubic_AIO 實(shí)際使用的分區(qū)表定義在 partitions-no-ota.csv內(nèi)容只有 4 行分區(qū)名類(lèi)型起始地址大小換算容量nvsdata / nvs0x90000x500020 KBotadatadata / ota0xE0000x20008 KBapp0app / ota_00x100000x3D0000≈ 3.8 MBspiffsdata / spiffs0x3E00000x20000128 KB注意0x0000~0x8FFF 這段空間由芯片啟動(dòng)時(shí)占用Bootloader 等不會(huì)出現(xiàn)在表里。4 個(gè)分區(qū)首尾相接、按扇區(qū)4KB對(duì)齊把 4MB Flash 安排得滿滿當(dāng)當(dāng)。每個(gè)分區(qū)是干什么的nvsNon-Volatile Storage鍵值存儲(chǔ)WiFi 密碼、藍(lán)牙配網(wǎng)、用戶設(shè)置都存這里。官方 README 也特別強(qiáng)調(diào)WiFi 等信息保存在 flash 中拔不插內(nèi)存卡都不影響聯(lián)網(wǎng)。otadataOTA 切換記錄區(qū)。它記錄當(dāng)前該從 app0 還是 app1 啟動(dòng)。no-ota 方案里它看起來(lái)沒(méi)用后文會(huì)講為什么還要留著。app0應(yīng)用程序本體即整套 AIO 固件天氣、相冊(cè)、投屏、Web 服務(wù)等全部代碼。這是全表最大的一塊≈3.8MB是本文設(shè)計(jì)思想的核心。spiffs片上文件系統(tǒng)存放設(shè)備運(yùn)行時(shí)必需的小資源文件。為什么放棄 OTA改用 no-ota 單分區(qū)方案先看看 ESP32 常見(jiàn)的默認(rèn) OTA 分區(qū)方案長(zhǎng)什么樣對(duì)比一目了然默認(rèn)分區(qū)表 default.csvapp01.25MBapp11.25MB兩個(gè)對(duì)等應(yīng)用區(qū) 1.5MB 的 SPIFFS刷壞新固件時(shí)還能切回舊版本。本項(xiàng)目分區(qū)表 partitions-no-ota.csv只有一個(gè)app0≈3.8MB把另一半空間全部讓給應(yīng)用。兩者總?cè)萘肯嗤际?4MB Flash區(qū)別在于給不給 OTA 留雙保險(xiǎn)。HoloCubic_AIO 選擇 no-ota 的出發(fā)點(diǎn)很現(xiàn)實(shí)固件太胖了天氣時(shí)鐘 LVGL 圖形界面 相冊(cè) 視頻 投屏 Web 服務(wù)全塞在一起固件體積輕松突破 2MBOTA 方案的 1.25MB 應(yīng)用區(qū)根本裝不下。單分區(qū)方案直接給出 3.8MB問(wèn)題迎刃而解。升級(jí)靠上位機(jī)刷寫(xiě)不需要空中升級(jí)項(xiàng)目配套了桌面端上位機(jī) AIO_Tool刷機(jī)會(huì)同時(shí)寫(xiě)入分區(qū)文件partitions.bin、bootloader_qio_80m.bin和應(yīng)用程序一次性把整塊 flash 排布好因此設(shè)備端不需要 OTA 回滾能力。文件資源另有外倉(cāng)天氣圖標(biāo)、照片、視頻等大資源并不都塞在片內(nèi) flash。項(xiàng)目 README 就提到由于內(nèi)部 flash 不夠用部分天氣圖標(biāo)放在內(nèi)存卡TF 卡中把weather/文件夾復(fù)制到 TF 卡根目錄即可參考 放置到內(nèi)存卡/README.md。片內(nèi) 128KB 的 SPIFFS 只承擔(dān)輕裝上陣的角色騰挪空間給應(yīng)用才劃算。為什么 no-ota 表里還留著 otadata細(xì)心的讀者會(huì)發(fā)現(xiàn)既然是 no-ota為什么還保留otadata分區(qū)因?yàn)?ESP32 的 Bootloader 在每次上電時(shí)默認(rèn)都會(huì)去 otadata 里查詢啟動(dòng)哪個(gè)應(yīng)用分區(qū)再跳轉(zhuǎn)到對(duì)應(yīng) app 區(qū)。這塊區(qū)只有 8KB保留它的成本幾乎為零卻保證了啟動(dòng)邏輯完整、行為可預(yù)期——這也是官方各類(lèi)非 OTA 分區(qū)模板的共同做法??梢哉f(shuō)它是不升級(jí)但保啟動(dòng)的兜底配置。分區(qū)如何生效從編譯到刷機(jī)理解原理后看看它在工程里的落地路徑編譯時(shí)指定分區(qū)表platformio.ini 中通過(guò)board_build.partitions partitions-no-ota.csv指定使用 no-ota 分區(qū)表同時(shí)鎖定 80MHz/240MHz 的時(shí)鐘配置保證燒錄參數(shù)與硬件匹配。刷寫(xiě)時(shí)固化分區(qū)上位機(jī) AIO_Tool 在刷機(jī)時(shí)先寫(xiě)入base_bin/partitions.bin、bootloader_qio_80m.bin再寫(xiě)入應(yīng)用固件保證 flash 布局與固件預(yù)期完全一致。多種分區(qū)方案可切換工具目錄下還備有 AIO_Tool/partitions/ 一整套分區(qū)模板例如雙 OTA 的 app3M_fat9M_16MB.csv面向 16MB 大容量 Flash 的玩法方便不同硬件版本按需選擇??偨Y(jié)這套分區(qū)設(shè)計(jì)好在哪空間利用率 100%4MB Flash 從啟動(dòng)區(qū)到文件系統(tǒng)無(wú)浪費(fèi)每一塊都對(duì)齊扇區(qū)邊界。應(yīng)用區(qū)最大化用 3.8MB 單應(yīng)用區(qū)換掉了用不上的 OTA 雙分區(qū)是功能堆料型固件的理性選擇。存儲(chǔ)分層清晰片上 flash 放固件和關(guān)鍵設(shè)置大資源天氣圖標(biāo)、照片、視頻放 TF 卡各司其職。升級(jí)鏈路簡(jiǎn)單可靠上位機(jī)一次性刷寫(xiě)配合保留的 otadata 保證啟動(dòng)流程不出錯(cuò)新手照著裝、照這刷即可。下次當(dāng)你打開(kāi) partitions-no-ota.csv 時(shí)就不再只是看到幾行十六進(jìn)制數(shù)字而是看懂了一位作者為把更多功能裝進(jìn)小芯片所做的全部權(quán)衡?!久赓M(fèi)下載鏈接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天氣時(shí)鐘、相冊(cè)、視頻播放、桌面投屏、web服務(wù)、bilibili粉絲等項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考