esptool.py介绍和使⽤
⼀: esptool.py 简介
esptool.py 是乐鑫提供的开源库⼯具,⽤于乐鑫 ESP8285, ESP8266, ESP32, ESP32-S等系列芯⽚和 ROM Bootloader(即:⼀级 bootloader)通讯,从⽽实现:
固件烧录,flash 擦除,flash 读取,读 MAC 地址,读 flash id ,elf ⽂件转 bin 等常⽤功能;
flash 校验, 读取内存,载⼊ bin 到 RAM 执⾏,读内存,写内存,读 flash 状态,写 flash 状态,读 chip id,组装 bin等⾼级功能。
esptool.py 原版介绍请参考README.md
esptool.py 串⼝协议请参考 Serial Protocol
esptool.py 更多资料请参考 esptool.py WiKi
⼆: 安装⽅法
[推荐] 安装⽅法⼀ (功能实时更新)
1. 下载 esptool.py 源码
git clone github/espressif/esptool.git
1
2. ⽬录导⼊到全局环境变量
以 ubuntu 为例:
将 export PATH=/home/chenwu/esp/esptool:$PATH 添加到 /etc/profile ⽂件结尾
执⾏ source /etc/profile
安装成功后通过 esptool.py version 查看版本:
esptool.py v3.0-dev
3.0-dev
1
2
注意: esptool.py v3.0 版本后,才对 ESP32-S 系列⽀持。
如果使⽤新款芯⽚,可以通过 git pull 来更新 esptool.py 版本。
安装⽅法⼆:(安装简单)
如下 shell 命令任选其⼀,执⾏成功即可:
pip install esptool
python -m pip install esptool
pip2 install esptool
三: esptool.py 说明
当前⽀持命令:
load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,eras 通过 esptool.py -h 查看所有命令和通⽤参数详细说明
通过 esptool.py <command> -h 查看每条命令对应的参数详细说明
通⽤参数说明 (命令前参数)
-h: 或 --help, 显⽰帮助⽂档
--chip: 或 -c, 指定芯⽚,可选 auto,esp8266,esp32,esp32s2
--port: 或 -p, 指定串⼝
--baud: 或 -b, 指定波特率
--before: 指定 esptool.py 命令执⾏前预做的,可选 default_reset,no_reset,no_reset_no_sync,具体参考⽂档
--after: 或 -a, 指定 esptool.py 命令执⾏后将做的,可选 hard_reset,soft_reset,no_reset,具体参考⽂档
--no-stub: 禁⽤ Boot Stub, 不让其管理 flash 操作,具体参考⽂档
--trace: 或 -t, 打开 esptool.py 所有交互细节
--override-vddsdio: VDDSDIO 内部电压调节
--connect-attempts: 指定 esptool.py 尝试连接次数,默认 7.
四: 常⽤命令
1. 固件烧录 - write_flash
命令参数说明:
--erase-all: 或 -e, 在写固件时,擦除所有 flash 上所有 sector(默认只擦除要写区域的 sector)
--flash_freq: 或 -ff,可选 keep,40m,26m,20m,80m, 指定 SPI 速率
--flash_mode:或 -fm, 可选 keep,qio,qout,dio,dout, 指定 SPI 模式
--flash_size:或 -fs. 可选 1MB, 2MB, 4MB, 8MB, 16M + ESP8266 上特有的 256KB, 512KB, 2MB-c1, 4MB-c1。指定 flash ⼤⼩
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 连接配置,具体参考⽂档
--no-progress: 或 -p, 禁⽤进度条打印
--verify: 在 flash 上验证刚刚写⼊的数据
--encrypt: 写⼊数据时应⽤ flash 加密(需要正确的 efuse 设置)
--ignore-flash-encryption-efuse-setting:忽略 flash 加密的 efuse 设置
--compress: 传输中压缩数据(默认 --no-stub 未指定)
--no-compress:传输中禁⽤压缩数据(默认 --no-stub 已指定)
命令参考⽤法:
esptool.py write_flash [-h][--erase-all][--flash_freq {keep,40m,26m,20m,80m}][--flash_mode {keep,qio,qout,dio,dout}][--flash_size FLASH_SIZE][--spi-connection
SPI_CONNECTION] [--no-progress][--verify] [--encrypt][--ignore-flash-encryption-efuse-setting][--compress | --no-compress]<address> <filename> [<address> <filename> ...]
⽰例⼀:⾃动烧录
向 flash 的 0x0 地址烧录 factory.bin ⽂件
esptool.py write_flash 0x0 factory.bin
1
⽰例⼆:指定全参数烧录
指定芯⽚ ESP8266, 串⼝ USB0, flash DIO 模式, 80MHz, flash 为 2MB, 0x0 地址烧录 bootloader.bin, 0x10000 地址烧录 sntp.bin, 0x8000 地址烧录 partitions.bin
esptool.py --chip esp8266 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dout --flash_freq 80m --flash_size 2MB 0x0
build/bootloader/bootloader.bin 0x10000 build/sntp.bin 0x8000 build/partitions.bin
1
2. flash 读取 - read_flash
命令参数说明:
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 连接配置,具体参考⽂档
--no-progress: 或 -p, 禁⽤进度条打印
命令参考⽤法:
esptool.py read_flash [-h] [--spi-connection SPI_CONNECTION][--no-progress] address size filename
⽰例⼀:⾃动读取
读取从 0x0 地址开始的 4KB 内容,保存到 dump.bin ⽂件
esptool.py read_flash 0x0 0x1000 dump.bin
1
⽰例⼆: 指定参数读取
指定串⼝ USB1, 波特率 460800, 从 0x10000 地址读取 1MB 内容到 dump.bin ⽂件
esptool.py -p /dev/ttyUSB1 -b 460800 read_flash 0x10000 0x100000 dump.bin
1
3. flash 擦除 - erase_flash & erase region
命令参数说明:
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 连接配置,具体参考⽂档
命令参考⽤法:
esptool erase_flash [-h] [--spi-connection SPI_CONNECTION]
esptool erase_region [-h] [--spi-connection SPI_CONNECTION] address size
⽰例⼀:⾃动擦除
擦除 flash 上所有内容,即所有数据将是 0xFF
esptool.py erase_flash
1
⽰例⼆: 擦除指定区域
擦除从 0x20000 地址开始的 16KB 空间
esptool.py erase_region 0x20000 0x4000
1
4. 读 MAC 地址 - read_mac
⽆命令参数
命令参考⽤法:
esptool.py read_mac
1
通常设备有多个 MAC 地址,例如做 station 的 MAC 地址,做 softAP 时的 MAC 地址,etc
这⾥读取的是 MAC 地址是 station 地址
5. 读 flash id - flash_id
命令参数说明:
-
-spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 连接配置,具体参考⽂档
命令参考⽤法:
esptool.py flash_id [-h] [--spi-connection SPI_CONNECTION]
⽰例:读取 flash id
esptool.py flash_id
1
结果将有如下⼚商信息和设备信息:
...
Manufacturer: c8
Device: 4016
...
1
2
3
4
可在⼚商和设备信息中具体查看
6. elf ⽂件转 bin - elf2image
命令参数说明:
--output: 或 -o, 输出⽂件名前缀(image version=1)或⽂件名(image version=2)
--version: 或 -e, 可选 1,2, 输出的 image version
--min-rev: 或 -r, 可选 0,1,2,3, 最⼩芯⽚修正
--secure-pad: 填充 image,因为⼀旦签名,它将以 64KB 的边界结束。(适⽤于安全引导v1映像)
-
-secure-pad-v2: 将 image 填充到 64KB,因为⼀旦签名,其签名扇区将在下⼀个 64K block开始。(适⽤于安全引导v2映像)
--elf-sha256-offset:如果已设置,请在⼆进制⽂件的指定偏移量处插⼊输⼊ELF⽂件的 SHA256 哈希(32字节)
--flash_freq: 或 -ff,可选 keep,40m,26m,20m,80m, 指定 SPI 速率
--flash_mode:或 -fm, 可选 keep,qio,qout,dio,dout, 指定 SPI 模式
--flash_size:或 -fs. 可选 1MB, 2MB, 4MB, 8MB, 16M + ESP8266 上特有的 256KB, 512KB, 2MB-c1, 4MB-c1。指定 flash ⼤⼩
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 连接配置,具体参考⽂档
命令参考⽤法:
esptool elf2image [-h] [--output OUTPUT] [--version {1,2}][--min-rev {0,1,2,3}] [--secure-pad][--secure-pad-v2][--elf-sha256-offset ELF_SHA256_OFFSET][--flash_freq {40m,26m,20m,80m}][--flash_mode {qio,qout,dio,dout}][--flash_size FLASH_SIZE][--spi-connection SPI_CONNECTION] input
⽰例⼀:
ESP8266 上将 elf ⽂件转为可执⾏的 bin ⽂件
esptool.py --chip esp8266 elf2image my_app.elf
1
⽰例⼆:
ESP8266 上将 elf ⽂件转为可执⾏的 bin ⽂件,指定 image version 为 2
esptool.py --chip esp8266 elf2image --version=2 -o my_app-ota.bin my_app.elf
1
⽰例三:
ESP32 上将 elf ⽂件转为可执⾏的 bin ⽂件
esptool.py --chip esp32 elf2image my_esp32_app.elf
1
7. 输出 bin 信息 - image_info
⽆命令参数
命令参考⽤法:
esptool image_info [-h] filename
⽰例⼀:
ESP8266 上输出 image 信息
esptool.py image_info build/sntp.bin
1
⽰例⼆:
ESP32 上输出 image 信息
esptool.py --chip esp32 image_info build/sntp.bin
1
五: ⾼级命令
1. flash 校验 - verify_flash
详细说明参考⽂档
--diff: 或 -d, 可选 yes,no, 显⽰不同
--flash_freq: 或 -ff,可选 keep,40m,26m,20m,80m, 指定 SPI 速率
--flash_mode:或 -fm, 可选 keep,qio,qout,dio,dout, 指定 SPI 模式
--flash_size:或 -fs. 可选 1MB, 2MB, 4MB, 8MB, 16M + ESP8266 上特有的 256KB, 512KB, 2MB-c1, 4MB-c1。指定 flash ⼤⼩
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 连接配置,具体参考⽂档
命令参考⽤法:
esptool verify_flash [-h] [--diff {no,yes}][--flash_freq {keep,40m,26m,20m,80m}][--flash_mode {keep,qio,qout,dio,dout}][--flash_size FLASH_SIZE][--spi-connection SPI_CONNECTION] addr_filename [addr_filename ...]
⽰例:
对⽐ flash 上 0x10000 位置的 bin 和 build/sntp.bin 是否相等
esptool.py verify_flash --diff yes 0x10000 build/sntp.bin
1
2. 读取内存 - dump_mem
详细说明参考⽂档
⽆命令参数
命令参考⽤法:
esptool.py dump_mem [-h] address size filename
⽰例:
读取 ESP8266 上 0x40000000 内存地址开始的 4KB 内容,保存到 iram0.bin
esptool.py dump_mem 0x40000000 4096 iram0.bin
1
3. 载⼊ bin 到 RAM 执⾏ - load_ram
详细说明参考⽂档
⽆命令参数
命令参考⽤法:
esptool load_ram [-h] filename
⽰例:
将 ESP8266 可执⾏的 image 加载到 ram 中,然后⽴即执⾏其中包含的程序
esptool.py --no-stub load_ram ./test/images/helloworld-esp8266.bin
1
4. 读内存 - read_mem
详细说明参考⽂档
⽆命令参数
命令参考⽤法:
esptool.py read_mem [-h] address
⽰例:
读取 ESP8266 上内存地址为 0x400C0000 中的值 (4字节)
esptool.py read_mem 0x400C0000
1
5. 写内存 - write_mem
详细说明参考⽂档
⽆命令参数
命令参考⽤法:
esptool write_mem [-h] address value mask
⽰例:
向 0x400C0000 地址写⼊ 0xabad1dea
esptool.py write_mem 0x400C0000 0xabad1dea 0xFFFFFFFF
1
6. 读 flash 状态 - read_flash_status
详细说明参考⽂档
命令参数说明:
--bytes: 可选 1,2,3, 要读的字节数
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 连接配置,具体参考⽂档
命令参考⽤法:
esptool read_flash_status [-h] [--spi-connection SPI_CONNECTION][--bytes {1,2,3}]
⽰例:
esptool.py read_flash_status --bytes 2
1
7. 写 flash 状态 - write_flash_status
详细说明参考⽂档
命令参数说明:
-
-bytes: 可选 1,2,3, 要读的字节数
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 连接配置,具体参考⽂档
--non-volatile: 写⼊⾮易失位
命令参考⽤法:
esptool write_flash_status [-h] [--spi-connection SPI_CONNECTION][--non-volatile] [--bytes {1,2,3}] value
⽰例:
esptool.py write_flash_status --bytes 2 --non-volatile 0
1
8.读 chip id - chip_id
详细说明参考⽂档
⽆命令参数
命令参考⽤法:
esptool chip_id [-h]
⽰例:
1
9. 组装 bin - make_image
详细说明参考⽂档
java环境变量csdn
命令参数说明:
--segfile: 或 -f, 输⼊的 segment ⽂件
--segaddr: 或 -a, segment 基地址
--entrypoint: 或 -e, ⼊⼝地址
命令参考⽤法:
esptool make_image [-h] [--segfile SEGFILE] [--segaddr SEGADDR][--entrypoint ENTRYPOINT] output
⽰例:
esptool.py --chip esp8266 make_image -bin -a 0x40100000 -f app.data.bin -a 0x3ffe8000 -data.bin -a 0x3ffe8c00 app.flash.bin 1
10. 退出 boot, 执⾏ app - run
详细说明参考⽂档
⽆命令参数
命令参考⽤法:
esptool run [-h]
⽰例:
esptool.py run
————————————————
版权声明:本⽂为CSDN博主「espressif」的原创⽂章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原⽂出处链接及本声明。
原⽂链接:blog.csdn/espressif/java/article/details/105028809

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。