esptool.py 介绍和使用

2023-05-16

一: esptool.py 简介

esptool.py 是乐鑫提供的开源库工具,用于乐鑫 ESP8285, ESP8266, ESP32, ESP32-S等系列芯片和 ROM Bootloader(即:一级 bootloader)通讯,从而实现:

固件烧录flash 擦除flash 读取读 MAC 地址读 flash idelf 文件转 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 https://github.com/espressif/esptool.git

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

注意: 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,erase_region,version,get_security_info
  • 通过 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

示例二:指定全参数烧录
指定芯片 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

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

示例二: 指定参数读取
指定串口 USB1, 波特率 460800, 从 0x10000 地址读取 1MB 内容到 dump.bin 文件

esptool.py -p /dev/ttyUSB1 -b 460800 read_flash 0x10000 0x100000 dump.bin

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

示例二: 擦除指定区域
擦除从 0x20000 地址开始的 16KB 空间

esptool.py erase_region 0x20000 0x4000

4. 读 MAC 地址 - read_mac

无命令参数

命令参考用法:

esptool.py read_mac

通常设备有多个 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

结果将有如下厂商信息和设备信息:

...
Manufacturer: c8
Device: 4016
...

可在厂商和设备信息中 具体查看

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

示例二:
ESP8266 上将 elf 文件转为可执行的 bin 文件,指定 image version 为 2

esptool.py --chip esp8266 elf2image --version=2 -o my_app-ota.bin my_app.elf

示例三:
ESP32 上将 elf 文件转为可执行的 bin 文件

esptool.py --chip esp32 elf2image my_esp32_app.elf

7. 输出 bin 信息 - image_info

无命令参数

命令参考用法:
esptool image_info [-h] filename

示例一:
ESP8266 上输出 image 信息

esptool.py image_info build/sntp.bin

示例二:
ESP32 上输出 image 信息

esptool.py --chip esp32 image_info build/sntp.bin

五: 高级命令

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

2. 读取内存 - dump_mem

详细说明 参考文档

无命令参数

命令参考用法:
esptool.py dump_mem [-h] address size filename

示例:
读取 ESP82660x40000000 内存地址开始的 4KB 内容,保存到 iram0.bin

esptool.py dump_mem 0x40000000 4096 iram0.bin

3. 载入 bin 到 RAM 执行 - load_ram

详细说明 参考文档

无命令参数

命令参考用法:
esptool load_ram [-h] filename

示例:
ESP8266 可执行的 image 加载到 ram 中,然后立即执行其中包含的程序

esptool.py --no-stub load_ram ./test/images/helloworld-esp8266.bin

4. 读内存 - read_mem

详细说明 参考文档

无命令参数

命令参考用法:
esptool.py read_mem [-h] address

示例:
读取 ESP8266 上内存地址为 0x400C0000 中的值 (4字节)

esptool.py read_mem 0x400C0000

5. 写内存 - write_mem

详细说明 参考文档

无命令参数

命令参考用法:
esptool write_mem [-h] address value mask

示例:
0x400C0000 地址写入 0xabad1dea

esptool.py write_mem 0x400C0000 0xabad1dea 0xFFFFFFFF

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

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

8.读 chip id - chip_id

详细说明 参考文档

无命令参数

命令参考用法:
esptool chip_id [-h]

示例:

esptool.py chip_id

9. 组装 bin - make_image

详细说明 参考文档

命令参数说明:

  • --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 -f app.text.bin -a 0x40100000 -f app.data.bin -a 0x3ffe8000 -f app.rodata.bin -a 0x3ffe8c00 app.flash.bin

10. 退出 boot, 执行 app - run

详细说明 参考文档

无命令参数

命令参考用法:
esptool run [-h]

示例:

esptool.py run

...
我就是这条街这条街最靓的仔
走起路一定要大摇大摆
墨镜要戴 发型要甩
一出门 低调不下来
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

esptool.py 介绍和使用 的相关文章

  • 最近开始研究openpilot的开源飞控,记录一下

    国内用这个飞控的人比较少 xff0c 也没有太多的文章来描述包括代码结构之类的 xff0c 其实该飞控相当强大 xff0c 而且有一个用QT做的很强悍的GCS xff0c 我用380的机架已经搭建了一个四轴 xff0c 用默认参数就能飞得很
  • 解决aria2下载磁力链接或bt文件时没有速度或速度为0

    使用aria2下载磁力链接和种子时 xff0c 发现长时间都没有速度 xff0c 因为默认的配置是没有加tracker列表的 xff0c 就像迅雷没有p2p共享一样 xff0c 所以要在配置文件中加入trackers xff0c 速度就会提
  • UDP 打洞 java demo

    UDP打洞的具体原理就不细说了文章还是很多 xff0c 说下我的网络环境 xff0c 家里台式电脑网线连的家里路由器 移动宽带 xff0c 公司台式电脑网线连的公司路由器 电信宽带 xff0c 一台有公网IP的华为云主机 xff08 我是试
  • 云服务器内存不够,设置swap交换分区

    购买了一台阿里的云服务器1核2G的 xff0c 装上docker后 xff0c 运行了十几个容器后面的容器就再也没法启动了 xff0c 一看物理内存为0 xff0c 加内存又没钱 xff0c 只能牺牲速度了 xff0c 阿里云的服务器默认是
  • sql 拼接一列数据为一个字段

    最近有个功能中需要把一列数据拼接成一个字段的需要 xff0c 本以为concat 轻松就能实现 xff0c 结果却差点意思 xff0c 这个是拼接一行之间的 xff0c group concat 需要分组才能拼接组内的一列数据 xff0c
  • idea反编译

    idea有自带的反编译插件java decompiler jar xff0c 默认是安装的 这个工具包在F Program Files JetBrains IntelliJ IDEA 2020 2 3 plugins java decomp
  • android远程协助

    一部手机有时候需要远程协助另一台手机如QQ的远程协助一样 xff0c 准备两个手机 下面用AB代替 1 A手机 xff08 需要被协助的手机 xff09 开启开发者选项 xff0c usb连接电脑 xff0c 命令开启ADB xff08 手
  • 阿里云服务器安装图形界面

    为了自动化流程安装图形界面 xff0c 我的服务器是Centos7 1 yum安装gnome图形界面 yum groupinstall GNOME Desktop y 2 安装远程桌面服务端 yum y install tigervnc s
  • 国网 内网U盘 服务未启动 驱动版本不符问题

    国网内网U盘问题处理 1 提示服务未启动 是因为Bios开启了Secure BOOT xff0c 将这个选项设置为disable就可以 xff0c 进入Bios这个选项有的主板在Boot选项下 xff0c 有的在Security选项下 xf
  • 【C++】面试题目,整理自牛客网

    来源 1 写出完整版的strcpy函数 char strcpy char strDest const char strSrc assert strDest 61 NULL amp amp strSrc 61 NULL char addres
  • 卡尔曼滤波

    系列文章目录 前言 一 线性高斯系统 二 卡尔曼滤波算法 1 卡尔曼滤波算法的应用 2 卡尔曼滤波的数学推导 1 预测部分的推导 2 观测部分的推导 前言 最近在阅读概率机器人这本书 xff0c 读到了卡尔曼滤波的相关内容 xff0c 想要
  • xcode升级到6.2,解决了simulator国际化无法获取中文的问题

    问题描述 xff1a http blog csdn net aileenyuxiao article details 42704917 xcode最近升级到6 2 xff0c 这个bug也一起解决了 xff0c 只需要修改simulator
  • 利用OOQP求解二次凸优化问题

    最近使用到了OOQP求解凸优化问题 xff0c 所以记录一下求解简单的二次凸优化问题 目录 一 OOQP安装 二 OOQP相关介绍 三 例题 1 数学例题 2 代码求解 3 求解结果 总结 一 OOQP安装 参考了浙大高飞老师团队提供的 O
  • 一、pixhawk 开发之 QGroundControl 安装

    提示 xff1a 地面站 xff08 QGroundControl xff09 安装 一 注意事项 1 There are known video steaming issues on Ubuntu 18 04 systems with d
  • git bash可以正常commit,但是 VSCode 里不能正常commit使用的解决方法

    问题描述 同一路径下的源码 xff0c 使用git bash可以正常commit xff0c 但是使用vscode提交commit就会一直卡住 xff0c 转圈圈 参考方案链接 xff1a VS CODE GIT 500 问题处理 pudn

随机推荐

  • Windows和Linux双系统安装教程

    最近刚刚完成了Windows和Linux双系统 xff08 这里以Ubuntu安装为例 xff09 的安装 xff0c 应某奔同学要求 xff0c 这里简单记录下安装过程 系统启动盘准备Windows系统安装分出给Linux系统的磁盘空间安
  • Level5#Unit1#Part1#Dialogue#A-Customer-Complaint

    Is this the ACE service center Yes it is sir May I help you Yes I 39 m calling to complain about your service Certainly
  • Level5#Unit1#Part2#Listening#At-Jessica’s-Reunion-Party1

    Jessica 39 s 20 year classreunion was held at a fancy hotel When she arrived she wasn 39 t sure she was in the right pla
  • Level5#Unit2#Part1#Dialogue#The-Teenage-Years

    What 39 s so funny What are you writing about I 39 m writing about something I saw earlier this morning Really Do you ke
  • nginx环境wordpress 固定链接实现…

    开始几次设置wordpress的固定链接都没成功 xff0c 今天做松子价格网时不甘心 xff0c 试了几次OK了 其实nginx环境下设置wordpress固定链接 xff08 也叫伪静态 xff09 非常简单 xff08 我是用的是wo
  • 如何使用vb.net多线程

    可能一些小程序用不上 xff0c 单线程就可以完成 xff0c 但是很多程序往往需要多个线程同时操作 xff0c 或者用辅助线程来完成主线程的工作 xff0c 多线程对于一个程序员来说是一个必须逾越的槛 最近在写一个程序 xff0c 设备要
  • 准备自己做块飞控,先看看方案

    主要参考是CC3D和crazyflie 2 0 xff0c 双CPU xff1a STM32F405RG xff0c 和STM32F103相比 xff0c 支持浮点运算 xff0c 168MHz xff0c 片上存储空间大 xff0c 考虑
  • 转:如何获取某人的所在物理位置

    如何获取某人的所在物理位置 xff1f xff08 andorid手机GPS 基站定位 JSON获取基站定位信息 xff09 原文地址 xff1a http cyad blog 163 com blog static 54368792011
  • Excel“工程不可查看”及VBA工程密码…

    一 Excel 工程不可查看 两种实现方法及破解 关于Excel宏编程中 xff0c 要用到一些技巧 xff0c 如破解Excel宏加密 今天我对一个Excel宏编程中进行日期限制进行了破解 方法一 xff08 共用级锁定 xff09 1
  • vba给数组赋值

    39 向VBA数组中写入数据 39 1 按编号 标 写入和读取 Sub t1 39 写入一维数组 Dim x As Integer Dim arr 1 To 10 arr 2 61 190 arr 10 61 5 End Sub
  • 中兴光猫配置文件获取方法

    中兴光猫配置文件获取方法 http 192 168 1 1 manager dev config t gch 有些配置文件加密了 xff0c 还不好破解 网上有超级牛帖子 xff0c 不过想在好像web shell也关闭了 http www
  • wget下载百度网盘文件

    分享一下wget下载百度网盘文件 有些时候需要从网盘下比较大文件 xff0c 但是linux无法登陆百度网盘 xff08 当然如果使用了API xff09 可以获取下载链接 这里介绍简单的方法 xff0c 直接在百度网盘分享建立公共链接 然
  • sudo aptitude install…

    sudo aptitude install 这个方法可以解决破损包问题 Aptitude will give up less easily and will attempt to find solutions which may invol
  • centos 万兆网卡使用要点

    随着宽带技术的快速发展 xff0c 服务器使用万兆网卡的概率越来越高 最近装了几台服务器都用的万兆网卡 xff0c 为了图便宜 xff0c 网卡和模块都是淘宝上买的 xff0c 这部还真遇到不少问题 我的服务器都是centos6 4 64位
  • 实在受不了360流氓浏览器用了10年终于不用了

    360浏览器 xff0c 恶心广告 xff0c 垃圾软文越来越泛滥了 xff0c 实在让人受不了 用了近10年终于下决心抛弃了 大家看下恶心不 xff0c 天天都是这个
  • ESP-AT 系列: AT+MQTT 使用

    AT 工程 xff1a https github com espressif esp at AT 文档 xff1a https docs espressif com projects esp at zh CN latest MQTT AT
  • ESP8266 常见固件烧写失败原因和解决方法

    简介 在使用 ESP8266 进行开发时 读者或多或少都能遇到固件烧写失败情况 无论是官方提供的 windows 上 Flash 下载工具 还是 SDK 中提供的 esptool py 下面笔者提供几种常见的烧写失败的原因和对应解决方法 原
  • 基于ros的kcf目标跟随

    本文参考的是基于 大神的博客 https blog csdn net yiranhaiziqi article details 53303747 locationNum 61 10 amp fps 61 1 关于kcf追踪的ros库在git
  • ESP-AT 系列: HTTP 客户端功能

    AT 工程 xff1a https github com espressif esp at AT 文档 xff1a https docs espressif com projects esp at zh CN latest 简介 esp a
  • esptool.py 介绍和使用

    一 esptool py 简介 esptool py 是乐鑫提供的开源库工具 xff0c 用于乐鑫 ESP8285 ESP8266 ESP32 ESP32 S等系列芯片和 ROM Bootloader xff08 即 xff1a 一级 bo