[分享] 查看 esp32 的串口下载过程(使用esptool)

costaud
Posts: 53
Joined: Wed Dec 30, 2015 5:09 pm

[分享] 查看 esp32 的串口下载过程(使用esptool)

Postby costaud » Fri Nov 23, 2018 10:38 am

通常,我们会通过 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的过程为例:

Code: Select all

python esptool.py -b 115200 -p /dev/cu.SLAB_USBtoUART --trace --no-stub flash_id
从输出的 log 中,我们可以看到串口通信的具体内容。

Code: Select all

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

Who is online

Users browsing this forum: No registered users and 2 guests