ESP 芯片设备端模拟器 —— 支持虚拟串口的 esptool 协议模拟工具。
芯片模拟
- 支持 ESP8266、ESP32、ESP32-S2、ESP32-S3、ESP32-C2、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-C61、ESP32-H2、ESP32-P4、ESP32-S31
- eFuse 一次性可编程模拟(OR 写入行为)
- 启动日志输出(各芯片 ROM Bootloader 格式)
协议支持
- esptool SLIP 协议完整响应
- Flash 烧录(普通/压缩/加密模式)
- Flash 读取、擦除、MD5 校验
- 内存写入(Stub 上传)
- 寄存器读写、波特率切换
加密功能
- Flash 加密烧录(AES-XTS 算法)
- 加密状态控制(无加密/开发模式/量产模式)
- 下载模式控制(正常/安全/禁用)
- 密钥管理(导入/导出/生成)
- 安全启动、JTAG 状态显示
设备管理
- 新建、打开、保存 .esp 设备文件
- 设备属性修改(芯片类型、晶振频率、Flash 大小、MAC 地址)
- Flash 导入/导出(.bin 文件)
- 设备内容导出(txt 文件)
串口通信
- 虚拟串口(com0com)和实体串口支持
- DTR/RTS 信号控制(下载模式检测)
- 动态波特率切换
用户界面
- 多语言支持(英文、简体中文)
- 实时 HEX 日志显示(带时间戳和颜色)
- 工具栏快捷操作
- 状态栏信息显示(加密状态、下载模式、安全启动、JTAG)
- 配置持久化(字体、端口、设备文件)
文件操作
- 命令行打开文件(支持 .esp 文件关联)
- 拖放文件到窗口打开
- 单实例模式(避免串口冲突)
- Windows 10/11 (x64)
- CMake 3.20+ / MSVC 编译器 或 Pelles C 14.10+
# 配置
cmake -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -B build
# 编译
cmake --build build --config Release -j选项:
-DENABLE_TRACE_FW=ON启用框架调试日志-DENABLE_TRACE_PROTO=ON启用协议调试日志
输出:build/Release/FakeEsptool.exe
# 编译
pomake /f FakeEsptool.ppj输出:FakeEsptool.exe
- 创建虚拟串口对或连接实体串口(见下方详细说明)
- 运行
build\Release\FakeEsptool.exe(自动创建默认 ESP32 设备) - 如需修改设备参数,使用 File > Device Properties
- Serial > Connect 选择串口
- 用 esptool 客户端连接另一端进行烧录测试
com0com 是 Windows 平台免费的虚拟串口驱动,创建成对的虚拟串口(如 COM10 ↔ COM11)。
注意事项:
- com0com 虚拟串口支持 DTR/RTS 信号控制,可测试完整的下载模式进入流程
- WSL 兼容性警告: com0com 创建的虚拟串口在 WSL (Windows Subsystem for Linux) 中无法使用。WSL 无法访问 Windows 原生的 com0com 虚拟串口设备。如需在 WSL 中使用 esptool,请使用实体串口或支持 WSL 的其他虚拟串口方案。
使用两个 USB 转串口适配器,通过物理连线创建串口对。
所需设备:
- 2 个 USB 转串口适配器(如 CH340、CP2102、FT232)
- 杜邦线 2 根或 4 根(同一电脑 GND 已共地)
最小连接(2 线):
仅需 TXD、RXD 两根线即可通信,但无法检测 DTR/RTS 信号:
USB 串口 A USB 串口 B
┌────────┐ ┌────────┐
│ TXD ──┼─────────┼─► RXD │
│ RXD ◄─┼─────────┼── TXD │
└────────┘ └────────┘
由于缺少信号线,FakeEsptool 无法检测 DTR/RTS 信号,因此:
- 无法输出启动日志(Boot Message)——即使断开重连也不会触发
- 无法自动清除 eFuse 易失性数据——断开重连可触发此清除
每次通讯完成后,请手动断开再重新连接串口,以模拟 RESET 行为并触发易失数据清除。
完整连接(含信号控制):
支持信号检测的完整连线:
烧录器端 (esptool) 模拟设备端 (FakeEsptool)
┌────────┐ ┌────────┐
│ TXD ──┼─────────────────┼─► RXD │
│ RXD ◄─┼─────────────────┼── TXD │
│ DTR ──┼─────────────────┼─► DSR │
│ RTS ──┼─────────────────┼─► CTS │
└────────┘ └────────┘
当然,也可以使用 6 根连线连接,就无需区分方向。
FakeEsptool/
├── src/ # 源代码(具体请参考开发文档)
├── tests/ # 测试代码(具体请参考开发文档)
├── tools/ # 工具
│ ├── verify_flash.py # 烧录验证工具(普通 Flash)
│ ├── verify_encrypted_flash.py # 加密烧录验证工具(AES-XTS 解密后比对)
│ └── efuse_convert.py # eFuse 格式转换(QEMU <-> espefuse --virt)
├── docs/ # 文档
│ ├── REQUIREMENTS.md # 需求规格
│ ├── DEVELOPMENT.md # 开发文档
│ ├── API.md # API 参考
│ ├── PROTOCOL.md # 协议规范
│ ├── WRITE_FLASH_GUIDE.md # 烧录流程指南
│ ├── ENCRYPT_FLASH_GUIDE.md # 加密烧录指南
│ └── TODO.md # 待办改进项
├── CHANGELOG.md # 变更记录
├── LICENSE # MIT 许可证
└── README.md
本项目使用 AI 辅助开发,感谢以下 AI 助手的贡献:
- OpenCode - 由 Anomaly 开发的交互式 CLI 工具,基于小米大模型(mimo-v2.5-pro),在代码分析、架构设计、协议实现等方面提供了重要支持。
- Mimo Code - 由 Xiaomi MiMo Team 开发的 AI 编程助手,基于 mimo-auto 模型,持续辅助本项目的开发与维护工作。
本项目采用 MIT 许可证。
Copyright (c) 2025 - 2026 Larry Li