esptool.py 流程
- 预备知识
- SLIP
- Command
- Response
- Command Opcodes
- 流程
- 8266 stub loader 为例说明
SLIP(Serial Line IP)
串行线路网际协议,是串行线路上对 IP 数据包进行的简单封装形式。
- IP 数据包以特殊字符 0xc0 结束,有的数据包开始处也会传一个 0xc0 以防止数据报到来之前的线路噪声当做数据报内容。
- IP报文中某个字符为 0xc0,那么就连续传输两个字节 0xdb 和 0xdc 来取代。
- IP报文中某个字符为 0xdb,那么就连续传输两个字节 0xdb 和 0xdd 来取代。
Command
详见:https://github.com/espressif/esptool/wiki/Serial-Protocol#writing-data
- commad 为 host 端发出的 SLIP 包,所有的字段都为小端格式。
Response
详见:https://github.com/espressif/esptool/wiki/Serial-Protocol#writing-data
Command Opcodes
详见:https://github.com/espressif/esptool/wiki/Serial-Protocol#writing-data
esptool 与 stub loader 的交互流程
终端输入: python esptool.py --trace --chip esp8266 --port /dev/ttyUSB1 --baud 115200 --before defa ault_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m -- -flash_size 2MB 0x0000 bootloader.bin 0x10000 power_save.bin 0x8000 partitions_singleapp.bin
1.connect…
[Command]: c0 00 08 24 00 00000000 0707122055555 55555555555555555 5555555555555555 5555555555555555 5555555555 c0
Note: 36 bytes: 0x07 0x07 0x12 0x20
, followed by 32 x 0x55
[Response]: c0 01 08 02 00 07071220 0000 c0
- 读取芯片类型信息
[Command]: c0 00 0a 04 00 00000000 [5c 00 f0 3f] c0
Note: 0a
: READ_REG
command, 通常用来读取芯片上的各种地址,以识别芯片子类型、版本等。[5c 00 f0 3f]
为 32 位地址
[Response]: c0 01 0a 02 00 ab622404 0000 c0
Note: READ_REG
, Read data as 32-bit word in value
field.
- 要读取的地址 {5c00f03f, 5800f03f, 5400f03f, 5000f03f} 依次发出,如下:
{c0000a0400000000005c00f03fc0, c0000a0400000000005800f03fc0, c0000a0400000000005400f03fc0, c0000a0400000000005000f03fc0}
依次收到的 Response, 如下:
{c0010a0200ab6224040000c0, 010a020000b000be0000, 010a0200553f00020000, 010a02003000da760000}
----以上读到信息为 Chip is ESP8285
- 要读取的地址 {5c00f03f, 5800f03f, 5400f03f, 5000f03f} 依次发出,如下:
{c0000a0400000000005c00f03fc0, c0000a0400000000005800f03fc0, c0000a0400000000005400f03fc0, c0000a040000000000500