ESP32 串口下載過程-使用 esptool
ESP32 串口下載過程(使用 esptool)
原文鏈接:https://www.esp32.com/viewtopic.php?f=25&t=8161&p=34283#p34283
通常,我們會通過 python 腳本,從 PC 端,通過串口給 esp32 芯片或者模塊下載固件程序。
通過 esptool (https://github.com/espressif/esptool) 腳本,我們可以很方便的實現。
但有時,我們也希望能通過其他單片機的串口,給 esp32/esp8266 進行固件更新。(前提是外部單片機能夠控制esp32 進入串口下載模式)。
完整的串口通信協議可以參考這裏(https://github.com/espressif/esptool/w … -Protocol)
爲了方便調試,我們可以通過運行 esptool,來查看上位機與esp32之間的通信過程。
首先,esp32 的串口通信協議基於 SLIP (Serial Line Internet Protocol)。任何一個數據包以0xC0開始,以0xC0結尾。數據包內容中的0xC0替換爲0xDB 0xDC。數據包內容中的0xDB替換爲0xDB 0xDD.
在運行esptool的同時,在命令中添加 --trace 參數,即可查看通信過程中的串口數據。
以讀取 flash id 的過程爲例:
python esptool.py -b 115200 -p /dev/cu.SLAB_USBtoUART --trace --no-stub flash_id
從輸出的 log 中,我們可以看到串口通信的具體內容。
TRACE +0.000 command op=0x09 data len=16 wait_response=1 timeout=3.000 data=1c20006040000080ffffffff00000000
TRACE +0.000 Write 26 bytes:
c000091000000000 001c200060400000 | .......... .`@..
80ffffffff000000 00c0 | ..........
TRACE +0.004 Read 1 bytes: c0
TRACE +0.000 Read 13 bytes: 01090400c840160000000000c0
TRACE +0.000 Received full packet: 01090400c840160000000000
上面的 log 中,串口向 esp32 發送 26 字節十六進制序列
c000091000000000001c20006040000080ffffffff00000000c0
esp32 向串口返回13字節十六進制序列
c001090400c840160000000000c0