2.2 KiB
2.2 KiB
应用内嵌素材与 Flash 布局
LCD PNG 和 Opus 提示音随应用固件一起发布。ota_0、ota_1 各为 4.5 MiB;每个槽位包含代码和同版本素材。语音识别模型仍单独使用 model 分区,NVS、OTA 数据和 coredump 维持各自用途。分区的实际偏移以 16m.csv 和每次构建生成的空间报告为准。
构建流程
tools/optimize_lcd_assets.py check-current核对已提交的优化 PNG 与原图、manifest 一致。components/platform/CMakeLists.txt将明确列出的 PNG 和assets/audio_prompts/中的 Opus 复制到构建暂存目录。tools/pack_embedded_assets.py按名称排序,生成platform_assets.pack。包内每项包含名称、长度及原始文件字节;程序通过名称查找,不需要 LittleFS 挂载。未列入 PNG 清单的原图不会进入固件。- 构建系统将整个包嵌入
TQ_Cat_Code.bin。OTA 对应用镜像执行原有长度、SHA-256 和镜像校验,素材随固件一起切换或回滚。 - 每次
idf.py build结束后,tools/report_flash_usage.py输出完整分区地址、应用槽位占用、素材包大小、模型镜像占用和 Flash 未分配尾部;超出分区容量时构建失败。
idf.py flash 首次烧录 bootloader、分区表、OTA 数据、应用和模型。不再生成或烧录 gifpack.bin。旧分区布局的开发板需先整片擦除,再烧录新布局;只执行应用 OTA 不会改写分区表或模型分区。
运行时读取
platform 内部的 platform_asset_find() 返回只读地址和长度。调用方必须使用完整包内名称:LCD 使用 lcd/<名称>.png,提示音使用 audio_prompts/<名称>.opus。PNG 解码器直接读取应用镜像内的字节,不复制整张 PNG 到 PSRAM;解码后的 RGB565 缓存仍保留。Opus 按原有四字节大端长度头逐帧送入音频管线,并逐帧检查边界。
素材只随应用固件发布。仅修改某张图或提示音,也需要发布新的应用 OTA 镜像。model 分区仍通过 ESP-SR 独立加载,不属于应用 OTA。
验证边界
本地构建和素材包校验可证明文件被打包且镜像装入分区;LCD 显示、提示音播放、双槽 OTA、回滚及模型加载仍须在开发板上验证。