You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

量产优化:如何在烧录过程中写入指定NVS值

实现方案:合并ESP32固件烧录与NVS序列号写入

核心思路

ESP32的NVS存储对应独立分区,你可以先将序列号打包为符合NVS格式的二进制文件,再通过esptool.py依次完成通用固件烧录和NVS二进制文件烧录,实现一步到位的量产操作。

具体步骤

1. 确认NVS分区的偏移地址

查看你的ESP32项目partition_table.csv,找到NVS分区的offset值(默认通常为0x9000,需以实际配置为准)。示例分区表行:

nvs,      data, nvs,     0x9000,  0x6000,

其中0x9000是NVS分区起始偏移,0x6000是分区大小。

2. 生成含序列号的NVS二进制文件

使用ESP-IDF自带的nvs_partition_generator.py工具(路径为ESP-IDF目录/components/nvs_flash/nvs_partition_generator)生成NVS格式文件:

2.1 动态生成配置文件

通过脚本接收序列号参数,生成临时配置文件(示例用Shell脚本):

SERIAL=$1
cat > sn_config.csv << EOF
key,type,encoding,value
sn,data,string,$SERIAL
EOF

2.2 生成NVS二进制

调用工具生成对应二进制:

python $IDF_PATH/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py generate sn_config.csv sn.bin 0x6000

注意:0x6000需与你分区表中NVS的大小一致。

3. 合并烧录流程

在脚本中依次执行固件烧录和NVS二进制烧录:

# 烧录通用固件(替换为你的固件路径,默认偏移0x1000)
esptool.py --chip esp32 write_flash 0x1000 your_general_firmware.bin

# 烧录NVS二进制到对应偏移
esptool.py --chip esp32 write_flash 0x9000 sn.bin

4. 完整Shell脚本示例

将上述步骤整合为可执行脚本(flash_with_sn.sh):

#!/bin/bash

if [ $# -ne 1 ]; then
    echo "用法: $0 <序列号>"
    exit 1
fi

SERIAL=$1
IDF_PATH="/path/to/your/esp-idf" # 替换为你的ESP-IDF路径
FIRMWARE_PATH="your_general_firmware.bin" # 替换为通用固件路径
NVS_OFFSET="0x9000" # 替换为你的NVS分区偏移
NVS_SIZE="0x6000" # 替换为你的NVS分区大小

# 生成临时NVS配置文件
cat > sn_config.csv << EOF
key,type,encoding,value
sn,data,string,$SERIAL
EOF

# 生成NVS二进制文件
python $IDF_PATH/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py generate sn_config.csv sn.bin $NVS_SIZE

# 合并烧录固件与NVS
esptool.py --chip esp32 write_flash 0x1000 $FIRMWARE_PATH $NVS_OFFSET sn.bin

# 清理临时文件
rm sn_config.csv sn.bin

echo "烧录完成,序列号已设置为: $SERIAL"

5. 验证方法

烧录后可读取并解析NVS分区确认结果:

# 读取NVS分区到本地文件
esptool.py --chip esp32 read_flash $NVS_OFFSET $NVS_SIZE read_nvs.bin

# 解析NVS内容
python $IDF_PATH/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py parse read_nvs.bin parsed_nvs.csv

查看parsed_nvs.csv即可确认序列号是否写入成功。

注意事项

  • 提前配置ESP-IDF环境变量(执行source $IDF_PATH/export.sh),确保esptool.py和nvs_partition_generator.py可正常调用。
  • 不同ESP32型号(如ESP32-S3)的分区表可能不同,务必确认NVS分区的偏移和大小。
  • 量产时可配合串口多路工具,同时烧录多块板子提升效率。

内容的提问来源于stack exchange,提问作者Stéphane de Luca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:45:35