1 前言
1.1 什么是 esptool?
esptool 是一个 用 Python 编写的开源命令行工具
主要用于和 Espressif(乐鑫) 的 ESP8266、ESP32 系列芯片交互
可以通过 串口(UART) 下载固件、读写 Flash、获取芯片信息等
📌 一句话总结:
esptool 就是 ESP 芯片的刷机/调试小帮手,帮你把固件写进芯片的 Flash 里。
2 安装
2.1 安装 Python & esptool
pip install esptool
安装完成后可以验证:
esptool version

2.2 安装 USB 驱动
ESP32-S3 常用的 USB 转串口芯片有
CP2102/CP2104 → 下载驱动
CH340/CH9102 → 下载驱动
安装后在 Windows 设备管理器里能看到一个 COM 端口(例如 COM3)。
3 烧录准备
3.1 准备烧录固件
固件通常是 .bin
文件,比如:
- MicroPython 固件(官方下载)
- Arduino/ESP-IDF 编译出来的固件
3.2 硬件连接与进入下载模式
ESP32-S3 开发板大部分能自动进入下载模式,但如果失败,需要手动:
- 按住 BOOT(或 IO0 接地)
- 按一下 EN/RST
- 松开 EN/RST
- 松开 BOOT
进入下载模式后,芯片会等待烧录命令。
3.3 擦除 Flash(推荐先做一次)
esptool --chip esp32s3 --port COM5 erase_flash
--chip esp32s3
指定芯片型号
--port COM5
指定串口(Mac/Linux 用 /dev/ttyUSB0
或 /dev/ttyACM0
)

4 正式烧录
4.1 基础命令
esptool.py --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 firmware.bin
参数解释:
--chip esp32s3
→ 芯片型号
--port COM5
→ 串口号
--baud 460800
→ 烧录速度(可改成 115200
更稳)
write_flash
→ 烧录命令
-z
→ 压缩数据,加快传输
0x0
→ 烧录起始地址(大多数单 bin 固件从 0x0 开始)
firmware.bin
→ 固件文件路径
常用命令
淘宝自带固件
esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/GENERIC_S3-20220618-v1.19.1.bin
esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/micropython_camera_feeeb5ea3_esp32_idf4_4.bin
esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/micropython_cmake_9fef1c0bd_esp32_idf4.x_ble_camera.bin
esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/micropython_v1.21.0_camera_no_ble.bin
esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/esp32-20220618-v1.19.1.bin
4.2 多分区固件(Arduino/ESP-IDF)
如果固件是多个 .bin
文件,需要分别烧录到不同地址,例如:
esptool.py --chip esp32s3 --port COM3 --baud 460800 write_flash \
0x0 bootloader.bin \
0x8000 partitions.bin \
0x10000 firmware.bin
常见地址:
0x0
→ bootloader
0x8000
→ 分区表
0x10000
→ 主程序
5 烧录完成后启动
烧录完成后:
- 按一下 EN/RST 键
- 进入正常运行模式
- 如果是 MicroPython,可以用串口工具连接:
picocom /dev/ttyUSB0 -b 115200
或 Windows 下用 PuTTY / Thonny。
6 常见问题与解决
错误提示 |
原因 |
解决方法 |
Failed to connect / Wrong boot mode detected |
没进下载模式 |
手动按 BOOT+EN 进入 |
Serial data stream stopped |
USB 线差/干扰/波特率高 |
换数据线,降到 115200 |
invalid header: 0xffffffff |
Flash 空/地址错 |
擦除 Flash,检查烧录地址 |
Timeout waiting for packet header |
串口占用 |
关闭 Arduino IDE / 串口工具 |
<h2><a id="1__0"></a>1 前言</h2>
<h3><a id="11__esptool_2"></a>1.1 什么是 esptool?</h3>
<p><strong>esptool</strong> 是一个 <strong>用 Python 编写的开源命令行工具</strong></p>
<p>主要用于和 <strong>Espressif(乐鑫)</strong> 的 ESP8266、ESP32 系列芯片交互</p>
<p>可以通过 <strong>串口(UART)</strong> 下载固件、读写 Flash、获取芯片信息等</p>
<p>📌 一句话总结:<br />
<strong>esptool 就是 ESP 芯片的刷机/调试小帮手,帮你把固件写进芯片的 Flash 里。</strong></p>
<h2><a id="2__13"></a>2 安装</h2>
<h3><a id="21__Python__esptool_15"></a>2.1 安装 Python & esptool</h3>
<pre><div class="hljs"><code class="lang-shell">pip install esptool
</code></div></pre>
<p>安装完成后可以验证:</p>
<pre><div class="hljs"><code class="lang-shell">esptool version
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/cf521fcf99606104b2e95a03359ddf3a.png" alt="image.png" /></p>
<h3><a id="22__USB__29"></a>2.2 安装 USB 驱动</h3>
<p>ESP32-S3 常用的 USB 转串口芯片有</p>
<p><strong>CP2102/CP2104</strong> → 下载驱动</p>
<p><strong>CH340/CH9102</strong> → 下载驱动</p>
<p>安装后在 Windows <strong>设备管理器</strong>里能看到一个 <strong>COM 端口</strong>(例如 COM3)。</p>
<h2><a id="3__41"></a>3 烧录准备</h2>
<h3><a id="31__43"></a>3.1 准备烧录固件</h3>
<p>固件通常是 <code>.bin</code> 文件,比如:</p>
<ul>
<li><strong>MicroPython</strong> 固件(官方下载)</li>
<li><strong>Arduino/ESP-IDF</strong> 编译出来的固件</li>
</ul>
<h3><a id="32__50"></a>3.2 硬件连接与进入下载模式</h3>
<p>ESP32-S3 开发板大部分能自动进入下载模式,但如果失败,需要手动:</p>
<ol>
<li><strong>按住 BOOT</strong>(或 IO0 接地)</li>
<li><strong>按一下 EN/RST</strong></li>
<li><strong>松开 EN/RST</strong></li>
<li><strong>松开 BOOT</strong></li>
</ol>
<blockquote>
<p>进入下载模式后,芯片会等待烧录命令。</p>
</blockquote>
<h3><a id="33__Flash_61"></a>3.3 擦除 Flash(推荐先做一次)</h3>
<pre><div class="hljs"><code class="lang-shell">esptool --chip esp32s3 --port COM5 erase_flash
</code></div></pre>
<p><code>--chip esp32s3</code> 指定芯片型号</p>
<p><code>--port COM5</code> 指定串口(Mac/Linux 用 <code>/dev/ttyUSB0</code> 或 <code>/dev/ttyACM0</code>)</p>
<p><img src="https://static.couragesteak.com/article/52b2e66a3090e803f38ea27e773bb9a2.png" alt="image.png" /></p>
<h2><a id="4__73"></a>4 正式烧录</h2>
<h3><a id="41__75"></a>4.1 基础命令</h3>
<pre><div class="hljs"><code class="lang-shell">esptool.py --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 firmware.bin
</code></div></pre>
<p>参数解释:</p>
<ul>
<li><code>--chip esp32s3</code> → 芯片型号</li>
<li><code>--port COM5</code> → 串口号</li>
<li><code>--baud 460800</code> → 烧录速度(可改成 <code>115200</code> 更稳)</li>
<li><code>write_flash</code> → 烧录命令</li>
<li><code>-z</code> → 压缩数据,加快传输</li>
<li><code>0x0</code> → 烧录起始地址(大多数单 bin 固件从 0x0 开始)</li>
<li><code>firmware.bin</code> → 固件文件路径</li>
</ul>
<p>常用命令</p>
<p>淘宝自带固件</p>
<pre><div class="hljs"><code class="lang-shell">esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/GENERIC_S3-20220618-v1.19.1.bin
</code></div></pre>
<pre><div class="hljs"><code class="lang-shell">esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/micropython_camera_feeeb5ea3_esp32_idf4_4.bin
esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/micropython_cmake_9fef1c0bd_esp32_idf4.x_ble_camera.bin
esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/micropython_v1.21.0_camera_no_ble.bin
esptool --chip esp32s3 --port COM5 --baud 115200 write_flash -z 0x0 F:/iot/fireware/esp32/esp32-20220618-v1.19.1.bin
</code></div></pre>
<h3><a id="42_ArduinoESPIDF_111"></a>4.2 多分区固件(Arduino/ESP-IDF)</h3>
<p>如果固件是多个 <code>.bin</code> 文件,需要分别烧录到不同地址,例如:</p>
<pre><div class="hljs"><code class="lang-shell">esptool.py --chip esp32s3 --port COM3 --baud 460800 write_flash \
0x0 bootloader.bin \
0x8000 partitions.bin \
0x10000 firmware.bin
</code></div></pre>
<p>常见地址:</p>
<ul>
<li><code>0x0</code> → bootloader</li>
<li><code>0x8000</code> → 分区表</li>
<li><code>0x10000</code> → 主程序</li>
</ul>
<h2><a id="5__128"></a>5 烧录完成后启动</h2>
<p>烧录完成后:</p>
<ol>
<li>按一下 <strong>EN/RST</strong> 键</li>
<li>进入正常运行模式</li>
<li>如果是 MicroPython,可以用串口工具连接:</li>
</ol>
<pre><div class="hljs"><code class="lang-shell">picocom /dev/ttyUSB0 -b 115200
</code></div></pre>
<p>或 Windows 下用 <strong>PuTTY / Thonny</strong>。</p>
<h2><a id="6__142"></a>6 常见问题与解决</h2>
<table>
<thead>
<tr>
<th>错误提示</th>
<th>原因</th>
<th>解决方法</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Failed to connect</code> / <code>Wrong boot mode detected</code></td>
<td>没进下载模式</td>
<td>手动按 BOOT+EN 进入</td>
</tr>
<tr>
<td><code>Serial data stream stopped</code></td>
<td>USB 线差/干扰/波特率高</td>
<td>换数据线,降到 115200</td>
</tr>
<tr>
<td><code>invalid header: 0xffffffff</code></td>
<td>Flash 空/地址错</td>
<td>擦除 Flash,检查烧录地址</td>
</tr>
<tr>
<td><code>Timeout waiting for packet header</code></td>
<td>串口占用</td>
<td>关闭 Arduino IDE / 串口工具</td>
</tr>
</tbody>
</table>
评论区