2021年11月27日 星期六

用 esptool.py 燒錄 MicroPython 韌體 (ESP8266/ESP32)

今天在零件箱找到一塊之前測試過的 Wemos ESP8266, 接上 USB 後板載藍色 LED 會持續閃爍, 可見裡面已有程式在跑, 但卻無法用 Thonny 與 Putty 連線 COM 埠, 可能太久沒有使用秀逗了. 我看背板有打印這是 32MB, 喜出望外以為這是 32M Bytes : 





我用 esptool.py 查詢 flash_id 發現只有 4M Bytes, 背板打印的其實是 32M bits, 執行下列指令前須按住右下方的 Flash 鈕約直到顯示結果再放開 : 

D:\ESP8266>esptool.py --port COM8 flash_id    
esptool.py v2.6
Serial port COM8
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX   
Features: WiFi
MAC: 2c:3a:e8:06:b9:ca
Uploading stub...
Running stub...
Stub running...
Manufacturer: c8
Device: 4016
Detected flash size: 4MB    
Hard resetting via RTS pin...

雖然用 Thonny 或 ESPFlasher.exe 燒錄韌體很方便, 但命令列的 esptool.py 提供的功能更多 (Thonny 背後也是執行 esptool.py), 例如 flash_id 指令不僅顯示 Flash 大小, 還包括所使用的晶片. 詳細用法參考 :


我之前都是在燒錄 ESP32 時才會用 esptool.py, 今天就用它來將這塊無法連線的板子重新燒錄最新版 MicroPython 吧! 


1. 抹除 Flash 內容 :   

首先要將 Flash 裡面的舊資料清除乾淨, 同樣地, 在執行下列指令前須按住右下方的 Flash 鈕直到顯示結果再放開 : 

D:\ESP8266>esptool.py --chip esp8266 --port COM8 erase_flash     
esptool.py v2.6
Serial port COM8
Connecting....
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:06:b9:ca
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 6.1s
Hard resetting via RTS pin...


2. 燒錄 MicroPython 映像檔 :   

接下來就可以開始燒錄映像檔了, 同樣地, 在執行下列指令前須先按住右下方的 Flash 鈕直到顯示結果再放開 : 

D:\ESP8266>esptool.py --port COM8 --baud 115200 write_flash --flash_size=detect -fm dio 0 esp8266-20210902-v1.17.bin   
esptool.py v2.6
Serial port COM8
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:06:b9:ca
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0040
Compressed 633688 bytes to 416262...
Wrote 633688 bytes (416262 compressed) at 0x00000000 in 36.8 seconds (effective 137.8 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

此處黃底色部分是連續燒兩次沒成功 (燒錄過程無錯誤, 但出現怪碼) 後添加上去的, Baud rate 用 115200 較保險, 總之, 整個指令須要改的部分就是 COM 埠與映像檔檔名而已. 

完成後用 Thonny 或 Putty 均可正常連線進入 Shell/REPL 介面了 : 




關於 Thonny 操作參考 :


燒錄 ESP32 的 esptool 指令轉寫如下 : 

1. 清除 Flash :

esptool.py --port COM9 flash_id

2. 燒錄韌體 : 

esptool.py --chip esp32 --port COM9 write_flash -z 0x1000 esp32-20210418-v1.15.bin

3. 檢查 Flash : 

esptool.py --chip esp32 --port COM9 erase_flash

參考 : 


沒有留言 :