1. 程式人生 > >【嵌入式開發】Linux上位機通過esptool燒寫ESP8266

【嵌入式開發】Linux上位機通過esptool燒寫ESP8266

前言

本教程針對非官方開發板、無狀態轉換按鈕、須通過gpio口控制esp8266進入下載狀態並實現esp8266韌體更新的嵌入式linux裝置。雖然esp8266有線上更新的功能,但由於開發需求不得不研究相關知識,而網上資料甚少,特此補充。

準備

  1. 上位機安裝好python, pip, 以及esptool,esptool下載地址:https://github.com/espressif/esptool,安裝方法極其簡單,在pip的支援下,在上位機命令列輸入pip install esptool即完成安裝。當然後面我又實現了離線安裝以上軟體的指令碼,具體方法須自行百度,這裡不作闡述。
  2. esp8266接線,IO2-EN-VCC均設為高電平,IO15低電平,RST-IO0要連到上位機可控制的gpio口上(需要切換高低電平),TXD、RXD、GND要正確連線到上位機對應的介面
  3. 韌體準備,請到官網下載對應的韌體,或編譯出自己的韌體。

燒寫流程

  1. 首先要確定燒寫地址,這個需要根據esp8266的flash大小做決定,如果不清楚自己的模組是什麼型號,可以通過輸入指令esptool.py --port /dev/ttyUSB0 flash_id檢視,其中--port /dev/ttyUSB0需要改為上位機中連線esp8266的路徑,
  2. 確認了flash燒寫格式就可以開始燒寫了,首先將io0置為低電平(下載模式),然後將rst置為低電平(低電平有效),1秒後再置為高電平(模式切換後需要重置才有效),然後輸入類似write_flash --port /dev/ttyUSB0 0x00000 boot.bin 0x01000 use1.bin
    這樣的命令去燒寫,當然實際命令會比較長,按照write_flash --port 裝置路徑 地址1 bin1 地址2 bin2 ...這樣去編寫命令
  3. 當然你也可以擦除flash,命令類似esptool.py --port 裝置路徑 erase_flash
  4. 燒寫結束後將io0置為高電平(執行模式),然後將rst置為低電平(低電平有效),1秒後再置為高電平(模式切換後需要重置才有效),然後就可以愉快地跑新的韌體了。

補充

  1. 訪問gpio口的方法是通過修改/sys/class/gpio實現的,例如要訪問gpio30高電平並設為,首先輸入echo 30 > export,然後echo out > gpio30/direction
    設定模式,然後通過echo 1 > gpio30/value就可以設定為高電平了。