ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

一文看懂 HoloCubic_AIO Flash分区设计:no-ota 分区表设计原理详解

一文看懂 HoloCubic_AIO Flash分区设计:no-ota 分区表设计原理详解 一文看懂 HoloCubic_AIO Flash分区设计no-ota 分区表设计原理详解【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIOHoloCubic_AIO是一款基于 ESP32 Arduino 的超多功能 AIOAll-in-One固件一台设备集齐了天气时钟、电子相册、视频播放、桌面投屏、Web 服务、bilibili 粉丝看板等玩法。而这些功能能装得下、跑得动离不开一套精心设计的ESP32 Flash 分区表——尤其是它采用的no-ota单应用、非 OTA分区方案。这篇文章面向新手带你从零理解它的分区设计原理几分钟搞懂每一块空间都去了哪里。什么是 Flash 分区表ESP32 内置的 Flash 芯片只是一块连续的存储空间本身分不清哪里放程序、哪里放配置、哪里放文件。分区表Partition Table就是一本房产证用一行行配置告诉芯片哪个地址段放启动配置NV哪个地址段放应用程序App哪个地址段放文件系统SPIFFS / FATHoloCubic_AIO 实际使用的分区表定义在 partitions-no-ota.csv内容只有 4 行分区名类型起始地址大小换算容量nvsdata / nvs0x90000x500020 KBotadatadata / ota0xE0000x20008 KBapp0app / ota_00x100000x3D0000≈ 3.8 MBspiffsdata / spiffs0x3E00000x20000128 KB注意0x0000~0x8FFF 这段空间由芯片启动时占用Bootloader 等不会出现在表里。4 个分区首尾相接、按扇区4KB对齐把 4MB Flash 安排得满满当当。每个分区是干什么的nvsNon-Volatile Storage键值存储WiFi 密码、蓝牙配网、用户设置都存这里。官方 README 也特别强调WiFi 等信息保存在 flash 中拔不插内存卡都不影响联网。otadataOTA 切换记录区。它记录当前该从 app0 还是 app1 启动。no-ota 方案里它看起来没用后文会讲为什么还要留着。app0应用程序本体即整套 AIO 固件天气、相册、投屏、Web 服务等全部代码。这是全表最大的一块≈3.8MB是本文设计思想的核心。spiffs片上文件系统存放设备运行时必需的小资源文件。为什么放弃 OTA改用 no-ota 单分区方案先看看 ESP32 常见的默认 OTA 分区方案长什么样对比一目了然默认分区表 default.csvapp01.25MBapp11.25MB两个对等应用区 1.5MB 的 SPIFFS刷坏新固件时还能切回旧版本。本项目分区表 partitions-no-ota.csv只有一个app0≈3.8MB把另一半空间全部让给应用。两者总容量相同都是 4MB Flash区别在于给不给 OTA 留双保险。HoloCubic_AIO 选择 no-ota 的出发点很现实固件太胖了天气时钟 LVGL 图形界面 相册 视频 投屏 Web 服务全塞在一起固件体积轻松突破 2MBOTA 方案的 1.25MB 应用区根本装不下。单分区方案直接给出 3.8MB问题迎刃而解。升级靠上位机刷写不需要空中升级项目配套了桌面端上位机 AIO_Tool刷机会同时写入分区文件partitions.bin、bootloader_qio_80m.bin和应用程序一次性把整块 flash 排布好因此设备端不需要 OTA 回滚能力。文件资源另有外仓天气图标、照片、视频等大资源并不都塞在片内 flash。项目 README 就提到由于内部 flash 不够用部分天气图标放在内存卡TF 卡中把weather/文件夹复制到 TF 卡根目录即可参考 放置到内存卡/README.md。片内 128KB 的 SPIFFS 只承担轻装上阵的角色腾挪空间给应用才划算。为什么 no-ota 表里还留着 otadata细心的读者会发现既然是 no-ota为什么还保留otadata分区因为 ESP32 的 Bootloader 在每次上电时默认都会去 otadata 里查询启动哪个应用分区再跳转到对应 app 区。这块区只有 8KB保留它的成本几乎为零却保证了启动逻辑完整、行为可预期——这也是官方各类非 OTA 分区模板的共同做法。可以说它是不升级但保启动的兜底配置。分区如何生效从编译到刷机理解原理后看看它在工程里的落地路径编译时指定分区表platformio.ini 中通过board_build.partitions partitions-no-ota.csv指定使用 no-ota 分区表同时锁定 80MHz/240MHz 的时钟配置保证烧录参数与硬件匹配。刷写时固化分区上位机 AIO_Tool 在刷机时先写入base_bin/partitions.bin、bootloader_qio_80m.bin再写入应用固件保证 flash 布局与固件预期完全一致。多种分区方案可切换工具目录下还备有 AIO_Tool/partitions/ 一整套分区模板例如双 OTA 的 app3M_fat9M_16MB.csv面向 16MB 大容量 Flash 的玩法方便不同硬件版本按需选择。总结这套分区设计好在哪空间利用率 100%4MB Flash 从启动区到文件系统无浪费每一块都对齐扇区边界。应用区最大化用 3.8MB 单应用区换掉了用不上的 OTA 双分区是功能堆料型固件的理性选择。存储分层清晰片上 flash 放固件和关键设置大资源天气图标、照片、视频放 TF 卡各司其职。升级链路简单可靠上位机一次性刷写配合保留的 otadata 保证启动流程不出错新手照着装、照这刷即可。下次当你打开 partitions-no-ota.csv 时就不再只是看到几行十六进制数字而是看懂了一位作者为把更多功能装进小芯片所做的全部权衡。【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表