使用esptool工具备份ESP32的固件(从芯片中备份下来固件)
使用esptool工具备份ESP32的固件(从芯片中备份下来固件)
ESP32是Espressif Systems公司推出的一款集成了Wi-Fi和蓝牙功能的低功耗微控制器,广泛应用于物联网设备开发。在开发过程中,备份和恢复固件是常见的需求,比如在升级或调试过程中需要保留原始固件,或者在设备出现故障时需要恢复到已知的工作状态。esptool是Espressif官方提供的用于ESP系列芯片固件烧录和读取的命令行工具,支持Windows、Linux和macOS等操作系统。本文将详细介绍如何在Windows环境下使用esptool工具备份ESP32的固件。
本文以Windows电脑为例,板子为esp32-c3。
1. 下载Python
可在官网中下载,此处不进行讲解。
使用如下代码查看是否安装了 Python(终端输入)
python
2. 下载esptool
在终端输入如下代码即可下载
使用 pip(推荐): 在你已经安装的 Python 和 pip(Python 包管理器),通过运行以下命令来安装 esptool:
pip install esptool
安装成功
在python的目录下可以看到
我的python的目录
C:\Users\zhi_geng_niao\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts
看到的
- 添加环境
在设置中(高级系统设置)
环境变量
如图选项在编辑
在点击新建,将刚才的路径复制进去即可
3. 使用esptool
找到终端以管理员权限打开
通过usb插上esp32
可在设备中看到esp32已经连接
实例1:查看ESP的信息
输入如下代码
格式
esptool --port <串行端口> chip_id
我输入的
esptool --port COM3 chip_id
结果(就不全部截图了,截了一些)
一般信息
esptool.py v3.0
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP8266
Features: WiFi
Crystal is 26MHz
MAC: 5c:cf:7f:1c:xx:xx
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 115200
Changed.
MAC: 5c:cf:7f:1c:xx:xx
Chip ID: 0x00123456
esptool.py v3.0
串行端口 /dev/ttyUSB0
正在连接....
芯片是 ESP8266
功能:WiFi
晶体频率是 26MHz
MAC 地址:5c:cf:7f:1c:xx:xx
正在上传stub...
正在运行stub...
Stub正在运行...
正在改变波特率到 115200
已改变。
MAC 地址:5c:cf:7f:1c:xx:xx
芯片 ID:0x00123456
实例2:获取芯片的闪存大小
输入如下代码
格式
esptool.py --port <串口号> flash_id
实例
esptool --port COM3 flash_id
可以看到我的为4MB
实例3:实现备份固件
代码格式
esptool.py --chip esp32c3 --port <串行端口> read_flash <起始地址> <结束地址或大小> <完整备份文件路径>
--chip esp32c3
指芯片类型 :--chip
类型<串行端口>
:替换为你的设备连接的串行端口号,例如/dev/ttyUSB0
(Linux 或 macOS)或COM1
(Windows)。<起始地址>
:替换为你想要开始读取的闪存地址,通常固件从地址0x0
开始。<结束地址或大小>
:替换为你想要读取的闪存结束地址或数据大小。如果你知道固件的大小,可以直接使用大小,例如0x400000
表示读取4MB
的数据。<完整备份文件路径>
:替换为你想要保存的备份文件的完整路径,包括文件名。例如,/path/to/backup/firmware_backup.bin
或C:\path\to\backup\firmware_backup.bin
。只写文件名会下载到当前终端的位置下
我的输入
esptool --chip esp32c3 --port COM3 read_flash 0x0 0x400000 esp32-c3_firmware_backup.bin
会下到
C:\Users\zhi_geng_niao\Desktop\nh>
的地址中
实例4:将固件烧入板子中
注意
在 ESP32-C3 芯片上,固件通常是从地址 0x1000
开始烧录的。这是 ESP32-C3 芯片的一个约定,用于保留芯片的启动代码和必要的信息。因此,如果你已经下载了一个固件文件,并且想要将其烧录到 ESP32-C3 芯片中,你应该从地址 0x1000
开始烧录。
代码格式
esptool.py --chip <芯片类型> --port <串行端口> write_flash <起始地址> <固件文件> [<分区表文件>]
实例(因为刚才备份时的开始地址是0x0所以这里为0x0)
esptool --chip esp32c3 --port COM3 write_flash 0x0 esp32-c3_firmware_backup.bin