ESP8266 更新韌體

ESP8266 更新韌體

對於ESP8266的韌體類型有所了解後,接下來就是要利用工具將韌體上傳至ESP8266,首先必需先將更新韌體的電路完成後,就能使用工具將韌體上傳至ESP8266。

更新韌體必需要將ESP8266切換至UART0啟動,之後利用命令去讀、寫ESP8266上的外置FLASH,因命令是公開的,所以有官方及開發者提供的更新工具,這裡會大略說明一下常用的更新工具。

官方

ESP8266 DOWNLOAD TOOL

下載

官方網站下載:

下按完後後為ZIP檔案自行解壓縮後進到flash_download_tools_v3.4.4'目錄中執行ESPFlashDownloadTool_v3.4.4.exe`:

選擇ESP8266 DownloadTool後會進入程式的畫面:

進入畫面後依照下面步驟檢查:

  • 選擇依序選擇檔案並且輸入寫入的位址(Ex:boot.bin 0x0)

  • 選擇Serial埠,COMx,如果你執行程式之前已經連接好ESP8266,那程式會自動選擇,如果沒有就到裝置管理員查看

  • 設定BAUD 可依照你的狀態選擇,一般選擇230400

  • 勾選SpiAutoSet讓程式自動補齊設定(SPI SPEED/MODE/SIZE)

  • 勾選DoNotChgBin不讓程式改變韌體中針整Flash相關設定,如UI上的FLASH SIZE,因為你已經選擇SpiAutoSet

  • 按下START進行上傳

上傳之間會有一個Console視窗顯示進度:

完成後會看到下圖中的Console視窗已經顯示到100%並且有出現提示Wrote 41943xxxxxxx....

基本上SpiAutoSet勾選後,設定值程式會自動偵測,除非你有特定需求,如:32Mbit flash,但要燒錄的韌體是給8Mbit的Flash,那就要手動選擇(SPI SPEED/MODE/SIZE),並且將DoNotChgBinSpiAutoSet勾選取消再進行更新即完成,另外燒錄細節也可以參考安信可官方提供的:如何为 ESP 系列模组烧录固件

esptool.py

[esptool](esptool原先由Fredrik Ahlberg利用Python所開發的工具,它具有跨平台的特性,只要有安裝Python 及 pySerial函數庫都能運作的很正常,丹尼已在Windows、Linux、macOS都使用過,Windows使用必需要注意先安裝python for windows版本,因普遍率及功能性,目前已經納入樂鑫官方專案,esptool新版1.3已支援python 2.7與python 3。。

esptool.py v1.3 - ESP8266 ROM Bootloader Utility

positional arguments:
  {load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash,verify_flash,erase_flash,version}
                        Run esptool {command} -h for additional help
    load_ram            將映像檔載入RAM中並行執行
    dump_mem            轉存記憶體資料至檔案(轉存ESP資料)
    read_mem            讀取記憶體指定位址並存至檔案
    write_mem           讀取檔案內容並寫入至記憶體指定位址
    write_flash         將檔案內容寫入至SPI Flash
    run                 執行Flash裡的應用程式碼
    image_info          轉存可執行應用映像檔的標頭
    make_image          從二進位檔建立可執行的應用
    elf2image           從ELF檔建立可執行的應用
    read_mac            從OTP ROM讀取MAC位址
    chip_id             從OTP ROM讀取晶片資訊
    flash_id            讀取Flash出廠資訊(可透過此ID得知容量大小)
    read_flash          取讀SPI Flash內容
    verify_flash        驗證bin與Flash
    erase_flash         抹除SPI Flash
    version             列印出esptool版本

optional arguments:
  -h, --help            show this help message and exit
  --port PORT, -p PORT  Serial埠名稱(Linux ttyxxx,macOS cu.xxx,Windows COMx)
  --baud BAUD, -b BAUD  Serial埠速度


韌體上傳命令示範:


./esptool.py -p /dev/ttyUSB0 write_flash 0x00000 Ai-Thinker_ESP8266_DOUT_32Mbit_AiCloud_0.0.0.6_20170517.bin

其中-p後所接的是你的通訊埠名稱(macOS以cu.命名規則,Linux以ttyXXX,Windows以COMx),韌體寫入位址從0x00000開始,來源檔為Ai-Thinker_ESP8266_DOUT_32Mbit_AiCloud_0.0.0.6_20170517.bin,一切順利後就會更新完成:


./esptool.py -p /dev/cu.usbmodem5d11 write_flash 0x00000 Ai-Thinker_ESP8266_DOUT_32Mbit_AiCloud_0.0.0.6_20170517.bin Connecting... Erasing flash... Writing at 0x0007ef00... (100 %)

非官方

NodeMCU Flasher

ESP8266一開始會受歡迎也是因為有名為NodeMcu所製作的開發板,它內建支援Lua語法,可以利用Serial console進行程式的線上編寫,該官方也提供一款專為NodeMcu使用的上傳程式,不過它也可以使用在其他的ESP8266開發板。,主程式分為:

開啟後選擇你連接的Serial埠名稱。

Config頁面,每個firmware更新方式不同,依照官方SDK所產生出來的是多個檔案並且指定位址的,要記得依照位扯選定檔案後後再輸入寫入的位址,不過有的像安信可提供的韌體大小是符合整個flash大小,不需要分段更新,所以只要設定寫入從0x00000,並且選擇好檔案:

選擇好檔案後再回到Operation頁面按下Flash開始升級韌體,要記得進入UART0啟動(升級模式)。

上傳過程中切換至Log能看到更新韌體所進行的過程

更新一切正常後就能看到左下方圖示為綠色打勾,代表已經將韌體更新成功。

注意事項

官方提供的程式已經非常久沒更新,據丹尼實測結果,韌體檔案超過512KBytes就會無法上傳。丹尼推測更新程式應該只是針對當時SDK編譯出來的程式碼大小(通常都<512KBytes)進行規範,再加上一些系統設定(esp_init_data_default.bin、eagle.irom0text.bin…)是分開燒錄,所以限制在512KBytes,所以,要記住,如果你的檔案超過512KBytes就可能無法使用。

參考資料