串口协议

更新时间2020-11-24T09:01:25Z

1修订历史icon-link

序号 版本 日期 修改点 制修订 审核
1 V0.1 2020.07.30 首次编写 詹小琳
2 V0.2 2020.08.04 添加模组透传BLE协议 詹小琳
3 V0.3 2020.08.11 添加0x12、0x13进入厂测控制码 詹小琳
4 V1.0 2020.10.26 5.1.1模组通知MCU有ota版本中添加image文件的crc16值 詹小琳
5 V1.1 2021.02.05 增加0x14、0x15软重启控制码 蔡跃光

2-协议格式icon-link

定义MCU和模组的串口通讯协议,主要分为三种:

  1. 通用协议,用于心跳和信息查询。
  2. 功能协议,用于实现MCU的功能点,根据设备功能可分为事件、属性、方法。
  3. MCU OTA协议,用于升级MCU固件,需要MCU支持双镜像,模组只做数据转发,MCU OTA文件最大为300k。

21-串口设置icon-link

串口参数如下:

  • 波特率:115200
  • 数据位:8
  • 奇偶校验:无
  • 停止位:1
  • 数据流控:无

22-数据大小端icon-link

大端格式:所有多字节数据高字节在前,低字节在后。

23-格式说明icon-link

字段 长度(Bytes) 说明
帧头 2 0x5a5a
长度 2 大端
版本 1 协议版本
会话id 2 会话标识,每次通讯不同
控制码 1 具体控制命令
数据 n 数据内容
校验值 2 crc16检验值

帧是传送信息的基本单元,帧格式如上表所示:

  • 帧头: 固定为0x5a5a
  • 长度: 大端模式,包括版本、会话id、控制码、数据、校验值
  • 版本: 控制码和数据对应的版本号
  • 会话id:会话标识,可以初始化一个随机值后每次自增1,请求和响应的会话id需要一致
  • 控制码:描述具体的控制命令
  • 数据: 控制码对应的数据内容
  • 校验值:大端模式,采用crc16校验算法,包含帧头、长度、版本、会话id、控制码、数据,计算代码可使用icon-filecrc16计算代码

24-控制码说明icon-link

控制码 说明
0x00 心跳检测
0x01 心跳应答
0x02 查询模组wifi信息
0x03 模组wifi信息
0x04 查询模组连接状态
0x05 模组应答或主动下发连接状态
0x06 查询产品信息
0x07 模组固化的产品信息
0x08 查询模组或MCU的版本信息
0x09 模组或MCU的版本信息
0x0a MCU获取模组当前时间
0x0b 模组当前时间
0x0c 请求MCU或模组进行复位
0x0d MCU或模组响应复位请求
0x0e 模组查询MCU的节点列表
0x0f MCU返回当前的节点列表
0x10 模组透传BLE协议给MCU
0x11 MCU应答BLE协议
0x12 MCU请求模组进入厂测模式
0x13 模组应答进入厂测结果
0x14 请求MCU或模组进行软重启
0x15 MCU或模组响应软重启请求
0x40 MCU属性、方法设置,MCU属性值获取
0x41 MCU属性、事件上报,MCU属性、方法响应
0x80 通知MCU有OTA版本
0x81 MCU请求OTA数据
0x82 模组应答MCU OTA数据
0x83 MCU通知模组升级结束

通讯协议根据数据内容,主要分为3类:

  1. 通用协议
    • 心跳指令:模组上电后,检查MCU与模组的连接状态
    • 信息查询:用于MCU查询模组的信息,模组获取MCU的版本信息
  2. 功能协议
    • 用于实现设备功能的控制,数据内容为json格式,分为事件、属性、方法,具体查看icon-file功能协议
  3. 升级协议

3-通用协议icon-link

31-心跳协议icon-link

311-心跳检测icon-link

字段 说明 长度(bytes) 描述
控制码 0x00 1
数据 - 0

样例:5A5A 0006 00 DB99 00 2DED

312-心跳应答icon-link

字段 说明 长度(bytes) 描述
控制码 0x01 1
数据 - 0

样例:5A5A 0006 00 DB99 01 ED2C

313-心跳流程icon-link

模组启动后,间隔30秒没有收到MCU的数据时,模组发起心跳查询,如果MCU没有应答,改成间隔5秒发送心跳查询,直到MCU应答,用于确认MCU是否正常工作。

MCU也可以通过心跳确认模组是否正常工作。

32-信息查询协议icon-link

321-查询wifi模组信息icon-link

字段 说明 长度(bytes) 描述
控制码 0x02 1
数据 - 0

样例:5A5A 0006 00 2F59 02 1E7D

322-模组应答wifi信息icon-link

字段 说明 长度(bytes) 描述
控制码 0x03 1
数据 wifi状态 1 0:未指定网卡,1:STA模式,2:AP模式,3:AP+STA模式
IP地址 4
MAC地址 6
wifi ssid长度 1
wifi ssid n 字符串
wifi密码长度 1
wifi密码 n 字符串

样例:

ap模式,

IP地址:192.168.10.1,

mac地址:98:f4:ab:89:d1:f1,

wifi ssid:SmartLight-d1f0,

wifi密码为空

二进制协议如下:

5A5A 0022 00 2F59 03 02 C0A80A01 98F4AB89D1F1 0F 536D6172744C696768742D64316630 00 752A

323-查询模组连接状态icon-link

字段 说明 长度(bytes) 描述
控制码 0x04 1
数据 - 0

样例:5A5A 0006 00 2F5A 04 ECFD

324-模组应答通知连接状态icon-link

字段 说明 长度(bytes) 描述
控制码 0x05 1
数据 配网状态 1 0:未配网,1:配网成功
连接状态 2 0:ap_start1:ap_stop……102:device station start103:device station stop104:device station connected to AP105:device station disconnected from AP……201:获取mqtt服务器地址成功202:获取mqtt服务器地址失败203:获取mqtt服务器地址返回的json数据错误204:mqtt连接成功205:mqtt dns解析失败206:mqtt连接错误,比如连接超时207:mqtt ssl handshake err208:mqtt连接失败209:订阅设备topic失败210:同步信息失败211:绑定成功212:绑定失败213:订阅app topic失败214:mqtt登录成功 215:设备绑定中216:设备绑定成功……

样例:5A5A 0009 00 2F5A 05 01 00D6 D24C

325-查询产品信息icon-link

字段 说明 长度(bytes) 描述
控制码 0x06 1
数据 - 0

样例:5A5A 0006 00 2F5B 06 BD7D

326-模组应答产品信息icon-link

字段 说明 长度(bytes) 描述
控制码 0x07 1
数据 产品uuid 16
产品modelid长度 1
产品modelid n 字符串

样例:

uuid:360f0b7d0aa14e88905725e9633ebf9f

modelid:lds.Light_RGBW.050100004

二进制协议如下:5A5A 002F 00 2F5B 07 360F0B7D0AA14E88905725E9633EBF9F 18 6C64732E4C696768745F524742572E303530313030303034 17F9

327-查询版本icon-link

模组查询MCU版本,MCU查询模组版本

字段 说明 长度(bytes) 描述
控制码 0x08 1
数据 - 0

样例:5A5A 0006 00 2F5D 08 D9FF

328-应答版本icon-link

字段 说明 长度(bytes) 描述
控制码 0x09 1
数据 主版本号 1
次版本号 1

样例: 5A5A 0008 00 2F5D 09 01 00 FA3F

329-查询模组时间icon-link

字段 说明 长度(bytes) 描述
控制码 0x0a 1
数据 - 0

样例:5A5A 0006 00 2F5E 0A E87E

3210-模组应答当前时间icon-link

字段 说明 长度(bytes) 描述
控制码 0x0b 1
数据 2
1
1
1
1
1

样例:时间:2020-7-23 11:33:41

5A5A 000D 00 2F5E 0B 07E4 07 17 0B 21 29 24D4

3211-复位请求icon-link

模组请求MCU复位,MCU请求模组复位

字段 说明 长度(bytes) 描述
控制码 0x0c 1
数据 - 0

样例:5A5A 0006 00 2F5F 0C 7AFF

3212-复位响应icon-link

字段 说明 长度(bytes) 描述
控制码 0x0d 1
数据 复位状态 1 0:复位成功,其他值复位失败

样例:5A5A 0007 00 2F5F 0D 00 013A

3213-模组请求mcu节点列表icon-link

字段 说明 长度(bytes) 描述
控制码 0x0e 1
数据 - 0

样例:5A5A 0006 00 1122 0E 273E

3214-mcu响应节点列表icon-link

设备有多个设备节点时,需要响应该协议

字段 说明 长度(bytes) 描述
控制码 0x0f 1
数据 节点个数 1
第一个节点id 1
…… ……
第n个节点id 1

样例:2个节点,节点id:01,03

5A5A 0009 00 1122 0F 02 01 03 D1DB

3215-模组透传ble协议给mcuicon-link

用于BLE遥控器控制WiFi模组+MCU的产品

字段 说明 长度(bytes) 描述
控制码 0x10 1
数据 BLE数据长度 1
BLE数据 n

样例: 5A5A 000B 00 124b 10 04 00010201 8668

3216-mcu应答ble协议icon-link

字段 说明 长度(bytes) 描述
控制码 0x11 1
数据 应答状态 1 0:成功,其他失败
应答的BLE数据长度 1
应答的BLE数据 n

样例:5A5A 0008 00 124b 11 00 00 E0D7

3217-mcu请求模组进入厂测模式icon-link

字段 说明 长度(bytes) 描述
控制码 0x12 1
数据 wifi状态 1 0:未指定网卡,1:STA模式,2:AP模式,3:AP+STA模式
wifi ssid长度 1
wifi ssid n 字符串
wifi密码长度 1
wifi密码 n 字符串

样例:

sta模式,

wifi ssid:LDSWifiLightTest,

wifi密码:123456789

二进制协议如下:5A5A 0022 00 2F59 12 01 10 4C4453576966694C6967687454657374 09 313233343536 373839 7041

3218-模组应答进入厂测结果icon-link

字段 说明 长度(bytes) 描述
控制码 0x13 1
数据 应答状态 1 0:成功,其他失败

样例:5A5A 0007 00 124B 13 00 097E

3219-软重启请求icon-link

模组请求MCU复位,MCU请求模组软重启

字段 说明 长度(bytes) 描述
控制码 0x14 1
数据 - 0

样例:样例 5A5A 0006 00 E548 14 BED0

3220-软重启响应icon-link

字段 说明 长度(bytes) 描述
控制码 0x15 1
数据 重启状态 1 0:响应重启成功,其他值复位失败

样例:5A5A 0007 00 E548 15 00 DDBF

4-功能属性协议icon-link

41-功能协议icon-link

411-设置获取请求icon-link

字段 说明 长度(bytes) 描述
控制码 0x40 1
数据 节点号 1 单节点设备为0xff
请求类型 1 0:设置,1:获取
请求个数 1
第一个请求 属性/方法ID 2 获取属性ID=0xffff时,需要返回当前节点的所有属性
参数个数 1
第一个参数 参数类型 1 1:int,2:string
参数长度 1
参数值 n
…… ……
第n个参数 参数类型 1 1:int,2:string
参数长度 1
参数值 n
……
第n个请求 属性/方法ID 2
参数个数 1
第一个参数 参数类型 1
参数长度 1
参数值 n
…… ……
第n个参数 参数类型 1
参数长度 1
参数值 n

样例:

  1. 设置属性

    设置属性id=0x0001值为1,属性id=0x0002值为32

    5A5A 001B 00 D0A2 40 FF 00 02 0001 01 01 04 00000001 0002 01 01 04 00000020 56E7设置属性

  2. 获取属性

    获取属性获取0x0001的属性值

    5A5A 000C 00 1741 40 FF 01 01 0001 00 3BFB

  3. 获取指定节点的所有属性

获取指定节点的所有属性

5A5A 000C 00 FA4D 40 FF 01 01 FFFF 00 6A1A4.

  1. 方法请求

    方法请求方法id=15008,两个入参,第一个int参数=1,第二个int参数=1800

    5A5A 0018 00 58FE 40 FF 00 01 3AA0 02 01 04 00000001 01 04 00000708 9A7B

412-设置获取响应,状态变化上报icon-link

字段 说明 长度(bytes) 描述
控制码 0x41 1
数据 节点号 1 单节点设备为0xff
响应类型 1 0:设置,1:获取,2:上报
响应状态 2 0:成功,1:格式错误2:不支持0x03-0xffff:预留
响应/上报个数 1
第一个响应/上报 属性/方法/事件ID 2
参数个数 1
第一个参数 参数类型 1 1:int,2:string
参数长度 1
参数值 n
…… ……
第n个参数 参数类型 1 1:int,2:string
参数长度 1
参数值 n
……
第n个响应/上报 属性/方法/事件ID 2
参数个数 1
第一个参数 参数类型 1
参数长度 1
参数值 n
…… ……
第n个参数 参数类型 1
参数长度 1
参数值 n

样例:

  1. 设置属性响应

    5A5A 0014 00 1234 41 01 00 0000 01 0001 01 01 04 00000001 d136

  2. 获取属性响应

    5A5A 0014 00 1234 41 01 01 0000 01 0001 01 01 04 00000001 5034

  3. 方法响应

    5A5A 0019 00 1234 41 01 00 0000 01 3AA1 02 01 04 00000001 02 03 333436 5098

  4. 属性上报

    当个属性id=0x0001上报

    5A5A 0014 00 1122 41 02 02 0000 01 0001 01 01 04 00000001 0e4c

    多个属性上报

    5A5A 001d 00 1122 41 02 02 0000 02 0001 01 01 04 00000001 0002 01 01 04 00000034 14d5

  5. 事件上报

    5A5A 001b 00 1122 41 02 02 0000 01 61B0 02 01 04 00001234 02 05 3132333435 9F52

42-产品功能icon-link

产品功能由云端根据设备的定义生成,分为事件、属性、方法

5-ota协议icon-link

51-ota协议icon-link

511-模组通知mcu有ota版本icon-link

字段 说明 长度(bytes) 描述
控制码 0x80 1
数据 主版本 1
次版本 1
固件id 16 字符串
image文件大小 4
image文件crc16值 2

512-mcu请求ota数据icon-link

字段 说明 长度(bytes) 描述
控制码 0x81 1
数据 文件偏移值 4
MCU可以接收image数据的最大长度 2

513-模组应答mcu-ota数据icon-link

字段 说明 长度(bytes) 描述
控制码 0x82 1
数据 状态值 1 0:成功,其他失败
文件偏移值 4
image数据长度 2
image数据 n

514-mcu通知模组升级结束icon-link

字段 说明 长度(bytes) 描述
控制码 0x83 1
数据 状态值 1 0:成功,其他失败
升级重启时间(秒) 1

52-ota流程icon-link

521-流程说明icon-link

  • Wifi模组接收到升级通知后,获取MCU当前版本进行比对,如果版本不一样,通知MCU要升级的版本信息

例:版本1.20,image文件大小264192字节,固件id: ”123456789”

模组发送:

0x5a5a 001e 00 xxxx 80 01 14 00000000000000313233343536373839 00040800 xxxx xxxx

  • MCU开始OTA,需要带上文件偏移值和每帧允许的最大image数据长度

例:

(1)第一帧数据,最大每帧256字节:

MCU发送:0x5a5a 000c 00 xxxx 81 00000000 0001 xxxx

MCU接收:0x5a5a xxxx 00 xxxx 82 00 00000000 0001 xx……xx xxxx

(2)第二帧数据,最大每帧256字节:

MCU发送:0x5a5a 000c 00 xxxx 81 00010000 0001 xxxx

MCU接收:0x5a5a xxxx 00 xxxx 82 00 00010000 0001 xxx……xx xxxx

……

  • MCU获取OTA数据完成后,通知模组此次OTA是否成功和切换镜像重启MCU需要的时间

例:

MCU发送:0x5a5a 0008 00 xxxx 83 00 05 xxxx

  • 模组接收到MCU的升级结束信息后,如果升级成功,升级重启时间后开始查询MCU版本信息,如果版本跟要升级的一样,通知云端升级成功

522-异常处理icon-link

  • 模组下载中断电,不做处理
  • 模组下载完成,与MCU传输文件中断电,重新上电后,通知MCU有升级信息,待MCU来请求数据

6-附录icon-link

61-crc16计算代码icon-link

unsigned short get_crc16(unsigned char *data, signed int len, unsigned short crc)

{

  static unsigned short poly[2] = {0, 0xa001};

  signed int i, j;

  for (j = len; j > 0; j--) {

	signed int ds = *data++;

	for (i = 0; i < 8; i++) {

	crc = (crc >> 1) ^ poly[(crc ^ ds) & 1];

	ds = ds >> 1;

	}
  }
  return crc;
}
拷贝此章节链接
Copyright © 2024 LEEDARSON GROUP All Right Reserved.
VERSION: 3.17.0.kGpBp3e