ESP32和WSL相关

ESP32和WSL相关

文章目录

  • ESP32和WSL相关
    • 0 编译esp32不用每次启动都运行export.sh
    • 1 用VScode把windows系统下的文件保存到WSL子系统
    • 2 ESP32相关
      • 2. 1 用python创建本地的HTTPServer用法:
      • 2.2 ESP32的OTA方法
      • 2.3 WSL里面的bin文件怎么拷贝出来
      • 2.4 ESP32录程序命令
    • 3 通信过程
      • 3.1 通信模式
      • 3.2 通信帧错误
      • 3.3 时间间隔
      • 3.4 超时重发
    • 4 通信帧
      • 4.1 初始化帧
      • 4.2 查询升级状态帧
      • 4.3 查询硬件信息帧
      • 4.4 配置帧
      • 4.5 数据帧

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。

你可能感兴趣的:(esp32)