簡介
在使用
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
使用者:
- 在
中通過Flash 下載下傳工具
口配置COM
原因四: 序列槽無寫權限
某些讀者可能通過虛拟機安裝了
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 本身問題. 如下截圖所示, 某部落格寫到:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90zZaBnTzMGbKh0Y6ZlMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzYjN5QjM1cTMwIDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
初步來看, 應是第三方工具在燒寫模式時, 未對
[GPIO15, GPIO0, GPIO2]
電平做出較為優雅的配置, 導緻需重新插拔進行燒寫.
參考解決辦法:
建議使用官方提供的
windows
上 Flash 下載下傳工具, 或
SDK
中提供的
make flash
進行燒寫固件.
原因八: 模組 TX RX GND 接線錯誤
開發闆通常不存在此類情況, 模組需考慮此種情況.
- 模組接線錯誤:
,TX
,RX
未接到對應GND
,RXD
,TXD
或其他接線錯誤GND
參考解決辦法:
根據官方 datasheet 重新布線.
原因九: 其他原因
往往, 電腦或個人原因, 或多或少偶爾遇到一些奇怪的燒寫錯誤原因, 這裡記錄一下, 供讀者參考:
-
固件燒寫到ESP8266
上ESP32
其他參考解決辦法
- 重新開機電腦
- 換個
/USB線
USB轉TTL
- 換個 模組/開發闆
- 使用官方
和SDK
版本進行燒寫測試release
- 向我們提 issues