乐鑫技术交流
直播中

李鑫

7年用户 1340经验值
私信 关注
[问答]

如何查看esp32的串口下载过程?

通常,我们会通过 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

更多回帖

发帖
×
20
完善资料,
赚取积分