简介
在使用 ESP8266
进行开发时, 读者或多或少都能遇到固件烧写失败情况, 无论是官方提供的 windows
上 Flash 下载工具, 还是 SDK
中提供的 esptool.py.
下面笔者提供几种常见的烧写失败的原因和对应解决方法.
原因一: ESP8266 不在 UART boot
请通过 UART0
查看 ESP8266
上电打印:
ets Jan 8 2013,rst cause:1, boot mode:(1,n)
UART boot
对应 boot mode
第一参数为 1, 此值由 [GPIO15, GPIO0, GPIO2]
决定.
即 GPIO15
和 GPIO0
低电平, GPIO2
高电平.
boot mode
第一参数不为 1, 即不在烧写模式, 将无法烧写成功.
更加详细说明参考: ESP8266 基础篇: 启动时 rst cause 和 boot mode
参考解决办法:
不同模组/不同开发板解决方法不一而足, 但万变不离其宗, 即确保:
GPIO15 和 GPIO0 低电平, GPIO2 高电平
例如: ESP-Launcher
开发板, 需将 IO0
开关拨到 L
侧, CH_EN
开关拨到 H
侧.
有些开发板需按住 BOOT
按钮不放, 再短按 RST
按钮松开, 再松开 BOOT
按钮.
而后续的 ESP8266-DevKitC
则无需用户关心此问题.
原因二: 供压问题
常见供压问题如下:
参考解决办法:
即最终确保模组 VCC
(3V3
) 和 GND
电压稳定在 3.3V
.
通常可以使用独立供电的 HUB
来确保供压问题.
原因三: 串口配置错误
某些读者刚入门 Linux
或对 Windows
/MacOS
了解不深, 可能未配置对串口就开始烧写, 而导致烧写失败.通常, 开发板或模组通过 USB
插到 PC
上, 不同平台对应不同烧写口, 可以使用如下命令查看:
Linux
: ls /dev/ttyUSB*
MacOS
: ls /dev/tty.*
Windows
: 计算机
-> 管理
-> 设备管理器
-> 端口 (COM 和 LPT)
参考解决办法:
Linux
和 MacOS
用户:
- 通过在
make menuconfig
-> Serial flasher config
-> Default serial port
中配置对烧写口, 重新编译烧写.
Windows
用户:
原因四: 串口无写权限
某些读者可能通过虚拟机安装了 Linux
系统或 MacOS
, 或某些权限管理较为严格的系统(某些公司管控 USB
设备), 经常串口无写权限, 需要用户手动去提升串口权限.
参考解决办法:
sudo chmod 777 /dev/ttyUSB*
其他非 Linux
平台类似.
原因五: 波特率配置过高
烧写速度受硬件影响, 在初步烧写失败情况下, 因降低烧写波特率.
参考解决办法:
make menuconfig
-> Serial flasher config
-> Default baud rate
配置为 115200
其他非 Linux
平台类似.
原因六: Flash SPI mode/speed 配置错误
ESP8266
芯片和固件本身支持: Flash SPI mode
: QIO
, QOUT
, DIO
, DOUT
ESP8266
芯片和固件本身支持 Flash SPI speed
: 80MHz
, 40MHz
, 26.7MHz
, 20MHz
但某些模组厂商, 基于 ESP8266
开发模组/开发板, 因成本或其他考虑, 未选型支持以上功能的 Flash
, 导致某些读者使用此类型模组或开发板时需考虑此配置.
参考解决办法:
通常选择 QIO
, 烧写失败时切换到 DIO
, 切换方法:
make menuconfig
-> Serial flasher config
-> Flash SPI mode
切换 SPI mode
make menuconfig
-> Serial flasher config
-> Flash SPI speed
切换 SPI speed
其他非 Linux
平台类似.
原因七: 使用非官方烧写工具
某些读者可能基于其他公司的 第三方工具/IDE
进行二次开发甚至更下游开发.
如遇到烧写失败情况, 也可能是 第三方工具/IDE 本身问题. 如下截图所示, 某博客写到:
初步来看, 应是第三方工具在烧写模式时, 未对 [GPIO15, GPIO0, GPIO2]
电平做出较为优雅的配置, 导致需重新插拔进行烧写.
参考解决办法:
建议使用官方提供的 windows
上 Flash 下载工具, 或 SDK
中提供的 make flash
进行烧写固件.
原因八: 模组 TX RX GND 接线错误
开发板通常不存在此类情况, 模组需考虑此种情况.
- 模组接线错误:
TX
, RX
, GND
未接到对应 RXD
, TXD
, GND
或其他接线错误
参考解决办法:
根据官方 datasheet 重新布线.
原因九: 其他原因
往往, 电脑或个人原因, 或多或少偶尔遇到一些奇怪的烧写错误原因, 这里记录一下, 供读者参考:
其他参考解决办法
- 重启电脑
- 换个
USB线
/USB转TTL
- 换个 模组/开发板
- 使用官方
SDK
和 release
版本进行烧写测试 - 向我们提 issues
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)