| Flash 地址 | 固件文件(.bin) |
|---|
0x0 / 0x10000)。要写多个文件就点「+ 增加一行」,逐条填地址选文件。
0x0 bootloader · 0x8000 分区表 · 0x9000 NVS(WiFi/服务器地址/皮肤/舵机回中位/灯色)·
0xD000 otadata · 0x20000 app 主槽 · 0x410000 app 备槽 · 0x800000 assets(表情/字体/唤醒词)
octal_psram: PSRAM chip is not connected)。
连接后点「复位设备」即可抓开机全过程;抓完「保存日志为文件」发出来最快定位。
一个纯浏览器端的 ESP32 工具页:刷固件(esptool-js)、读回固件备份、看串口日志。 全部在你自己电脑和串口之间完成,不经过任何服务器中转,不需要装 Python / 驱动 / 客户端。
需要什么| 地址 | 内容 | 说明 |
|---|---|---|
0x0 | bootloader + 分区表 + app + assets | 整片包(merged)用;⚠ 会覆盖 NVS |
0x8000 | 分区表 | 单独换分区表时用 |
0x9000 | NVS | WiFi / 服务器地址 / 舵机回中位 / 皮肤设置,别乱刷 |
0x20000 | app 主槽(ota_0) | 只更新程序时刷这里 |
0x410000 | app 备槽(ota_1) | 两个槽都写 = 无论从哪启动都是新版 |
0x800000 | assets | 表情 / 字体 / 唤醒词,8MB 分区 |
分区表为准 —— 用「② 读固件」读整片后能看出来。Q:刷完之后设备没反应、屏幕黑的,日志一直重启循环?
先「③ 串口日志」连接 + 复位,把日志抓出来看第一行错误。常见两类:
octal_psram: PSRAM chip is not connected, or wrong PSRAM line mode →
编译时 PSRAM 模式选错了。例如 CoreS3 用的是 quad PSRAM,固件却按 octal 编的,一上电就 abort 重启。
正确做法:CONFIG_SPIRAM_MODE_QUAD=y(并且把 sdkconfig.defaults.esp32s3 里的
CONFIG_SPIRAM_MODE_OCT=y 改掉,否则下次 set-target 又会被覆盖回去)。invalid header: 0xffffffff / 一堆乱码 → 镜像没写完整,用「写后校验」重刷一次。Q:刷完新版本,重启后又变回旧版本?
开 CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE 时,OTA 写入的新镜像首次启动处于 PENDING_VERIFY,
App 必须调用 esp_ota_mark_app_valid_cancel_rollback()“报平安”,否则 bootloader 下次启动会回滚。
自编译固件记得加这一步(可在主循环入口调用)。
Q:OTA 升级总是卡住 / 下载到一半就失败?
多半是下载链路被掐断(跨境直连尤其明显)。检查得到的固件是完整的:下载完对一下大小和 sha256;
有条件就给下载走 CDN,或改用本页插线刷。
Q:连接时提示端口被占用 / 点了没反应?
同一个串口同一时刻只能被一个功能占用:回到上一个页签点「断开」,或者关掉其它占用串口的程序
(串口监视器、Arduino IDE、M5Burner 等)。
Q:能刷别的 ESP32 板子吗?
能。这个页面不绑定任何固件,只要是 .bin + 正确地址即可;上面那张地址表是 StackChan 的,别的板子按自己的分区表填。
刷机有风险:固件文件与 Flash 地址都由你自己确认,写错地址会覆盖设备上其它数据(例如 0x9000 的 NVS 存着 WiFi 配置与各项设置),写错固件可能导致设备无法启动。动手前先用「② 读固件」把整片备份下来, 出问题可以用正确的整片包救回。本页是纯客户端工具,不读取、不上传你的任何数据,所有操作只发生在你的浏览器与串口之间; 刷坏、刷错、丢设置的后果请自行承担。