ESP32和WSL相关
文章目录
0 编译esp32不用每次启动都运行export.sh
子系统下面修改shell配置文件,文件路径/home/chen/…bashrc。
1 用VScode把windows系统下的文件保存到WSL子系统
在WSL TARGETS→Ubuntu-18.04 default distro 打开一个新目录。 在explorer下Open Folder选择WSL下保存路径。把windows下的文件夹拖入。
2 ESP32相关
2. 1 用python创建本地的HTTPServer用法:
python2语法:python -m SimpleHTTPServer 8000
python3语法:python -m http.server 8000
2.2 ESP32的OTA方法
esp32的三种ota方法之一:Web Browser:通过 Web 浏览器手动提供应用程序更新模块 。
过程:esp32作为服务器,通过web打开esp32,把bin文件拖入。类似通过web打开路由器的192.168.1.1。
屏蔽掉下面
/* if (!ota_config->http_config->cert_pem) {
ESP_LOGE(TAG, “Server certificate not found in esp_http_client config”);
handle = NULL;
return ESP_ERR_INVALID_ARG;
}/
什么时候用到配置服务器证书 : 一般https会要求服务器证书
2.3 WSL里面的bin文件怎么拷贝出来
cp -a /home/chen/work/PCR-V1-ESP32-Rewrite/build/pcr-v1.bin /mnt/d/zlg
2.4 ESP32录程序命令
idf.py -p /dev/ttyS11 -b 38400 flash
3 通信过程
3.1 通信模式
采用主从通信方式,从设备只有在收到主设备指令时,才能进行应答,不能主动发送消息。
3.2 通信帧错误
通信帧错误,表示主设备发送帧出现以下错误:
-
帧长错误
表示该字段超过从设备能处理的最大帧长数据,或小于最小帧长(6)
-
功能码错误
表示从设备无法识别该功能码,即无法处理该功能码时
-
检验错误
帧校验失败
无论主设备发送何种帧,当出现上述帧错误时,从设备会返回一个通信异常帧,帧格式如下:
功能码 | 异常码 |
---|---|
0xE0 | 1 byte |
⚠ 注意:
当发生通信帧错误时,从设备返回通信异常帧,功能码固定为 0xE0。未发生通信帧错误时,应答帧的功能码与主设备发送帧的功能码相同。
异常码说明:
- 0x01 帧长错误
- 0x02 功能码错误
- 0x03 校验错误
- 其他未定义
3.3 时间间隔
为了保证从设备有足够的时间处理帧,主设备发送帧满足一定的时间间隔,当小于这个时间间隔时,从设备会由于无法及时处理,而造成帧丢失。
由于当前无法确定从设备的帧处理速度,暂定时间间隔为 500ms;或者主设备收到正确的应答,即可发送下一帧。
3.4 超时重发
主设备在发送帧后,一定时间内没有收到从设备应答,需要进行重发。连续三次没收到应答,则表示设备离线,停止通信。
4 通信帧
4.1 初始化帧
初始化帧,用于通知从设备停止其他任务,进入 OTA 升级任务。
初始化帧:
帧头 | 地址 | 帧长 | 功能码 | 校验 |
---|---|---|---|---|
2 bytes | 1 byte | 2 bytes | 0x00 | 2 bytes |
响应帧:
帧头 | 地址 | 帧长 | 功能码 | 异常码 | 校验 |
---|---|---|---|---|---|
2 bytes | 1 byte | 2 bytes | 0x00 | 1 byte | 2 bytes |
- 异常码
- 0x00 无异常,初始化成功
- 其他 初始化失败,当前无法进行 OTA 升级
4.2 查询升级状态帧
查询升级状态帧,用于查询 OTA 升级进行到哪个阶段。
-
查询升级状态帧格式:
帧头 地址 帧长 功能码 校验 2 bytes 1 byte 2 bytes 0x01 2 bytes -
响应帧格式:
帧头 地址 帧长 功能码 升级状态信息 校验 2 bytes 1 byte 2 bytes 0x00 2 bytes 2 bytes 状态信息由 2 个字节构成,
Stage Progress 1 byte 1 byte -
Stage
表示当前 OTA 升级处于哪个阶段
-
Progress
表示在某个阶段的进度信息
Stage 说明 Progress 说明 0x00 未初始化 0x00 不使用,默认值为 0x00 0x01 初始化中 0x00 不使用,默认值为 0x00 0x02 初始化完成 0x00 不使用,默认值为 0x00 0x03 下载阶段,表示从设备正在从主设备接收升级文件 0 ~ 100 下载进度百分比 0x04 更新程序阶段,表示从设备正在更新程序 0 ~ 100 更新进度百分比 0x05 升级完成 0x00 不使用,默认值为 0x00 0xEE OTA 升级终止,发生无法修复的错误 用作错误码 -
备注:建议下载阶段和更新阶段不要发送查询升级状态指令
4.3 查询硬件信息帧
查询硬件信息帧,用于查询从设备硬件支持的最大升级文件大小、最大分片大小等。
-
查询硬件信息帧格式:
帧头 地址 帧长 功能码 校验 2 bytes 1 byte 2 bytes 0x02 2 bytes -
响应帧:
帧头 地址 帧长 功能码 硬件信息 校验 2 bytes 1 byte 2 bytes 0x00 5 bytes 2 bytes 硬件信息格式如下:
Maximum File Size Maximum Fragment Size 3 bytes 2 bytes
4.4 配置帧
-
配置帧格式:
帧头 地址 帧长 功能码 配置信息 校验 2 bytes 1 byte 2 bytes 0x02 8 bytes 2 bytes 配置信息格式如下:
File Size Fragment Size Version 3 bytes 2 bytes 3 bytes -
File Size
表示升级文件的大小,高字节在前,文件大小单位为 Byte。最大可表示 2 24 2^{24} 224 = 16,777,16 bytes 的文件大小。
-
Fragment Size
表示数据分片的大小,高字节在前,大小单位为 Byte,默认是512Byte。主设备将文件按一定长度分成一个个的片段,分片段传输给从设备。
-
Version
表示程序的版本号,按以下方式组织
Major(1 byte) + Minor(1 byte) + Patch(1 byte)
Major 表示主版本号,Minor 表示次版本号,Patch 表示修复版本号。
-
-
响应帧:
帧头 地址 帧长 功能码 异常码 校验 2 bytes 1 byte 2 bytes 0x00 1 byte 2 bytes 异常码由 1 个字节组成,共 8 bits,每个 bit 表示一种异常,具体说明如下:
7 ~ 3 2 1 0 未定义 文件尺寸异常 分片大小异常 版本异常 -
文件尺寸异常
置 1,表示文件太大,超过从设备最大允许尺寸
-
分片大小异常
置 1,表示超出最大允许尺寸或不是 128 的倍数
-
版本异常
置 1,表示升级版本号小于从设备当前版本号
-
4.5 数据帧
-
数据帧格式:
帧头 地址 帧长 功能码 分片信息 校验 2 bytes 1 byte 2 bytes 0x02 N bytes 2 bytes 分片信息格式:
分片编号 分片数据信息 1 byte n bytes -
分片编号
表示本次传输的数据是升级文件的第几个分片,从 1 开始计数。
-
数据信息
注意,除最后一个分片外,其余所有分片长度必须等于通过配置帧配置的分片大小。
-
-
响应帧:
帧头 地址 帧长 功能码 最后确认帧编号 异常码 校验 2 bytes 1 byte 2 bytes 0x04 1 byte 1 byte 2 byte -
最后确认帧编号
用于表示当前从设备成功接收的最后一个分片的编号,如该字段为 n,则表示从 1 ~ n 这些编号的分片,从设备已经全部正确接收。
-
异常码
表示本次传输的数据帧是否出现异常,以及异常的具体原因。
由 1 个字节组成,共 8 bits,每个 bit 表示一种异常,具体说明如下:
7 ~ 3 2 1 0 未定义 无法接收异常 分片数据长度异常 编号异常 -
编号异常
从设备只能按顺序接收编号顺序接收分片,当传送的分片序号不等于最后确认帧编号 + 1 或超出最大分片编号时,产生编号异常,该位置 1。
-
分片数据长度异常
通过配置帧设置的分片大小,我们把它成为配置分片大小。除最后一个分片的数据长度可以小于等于配置分片大小外,其余所有分片的数据长度必须等于配置分片大小。
-
无法接收异常
当从设备并不处于下载阶段时,拒绝接收分片数据,该位置 1。
-
-
| 未定义 | 无法接收异常 | 分片数据长度异常 | 编号异常 |
- 编号异常
从设备只能按顺序接收编号顺序接收分片,当传送的分片序号不等于最后确认帧编号 + 1 或超出最大分片编号时,产生编号异常,该位置 1。
- 分片数据长度异常
通过配置帧设置的分片大小,我们把它成为配置分片大小。除最后一个分片的数据长度可以小于等于配置分片大小外,其余所有分片的数据长度必须等于配置分片大小。
- 无法接收异常
当从设备并不处于下载阶段时,拒绝接收分片数据,该位置 1。