AbleCloud 串口通信协议v2-7

版本日志

版本 修改描述 修订人 修订日期
2-0 初始版本 JACK 2015-11-5
2-1 增加设备注册类消息 JACK 2015-11-27
2-2 支持局域网控制消息、支持设备通知类消息 JACK 2015-12-29
2-3 增加AP配网、串口波特率修改为9600-8-N-1 JACK 2016-07-25
2-4 修改设备注册消息中设备回复消息,增加云端环境配置,增加NTP,CRC参考算法 JACK 2016-08-29
2-5 增加获取信号质量接口 JACK 2016-12-01
2-6 增加支持第三方云接口和上报回响应 JACK 2017-01-01
2-7 增加产测、订阅上报和局域网推送设备状态接口 JACK 2017-05-23

一 基本数据格式

字节数 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据 校验 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x?? 0x?? 0x???? 0x?? 5B
  • 串口通讯默认参数:9600-8-N-1

包头:数据包起始标识,固定为0x5A

  • 包长度:整个数据包的长度(包括包头、包长度、包序号、附加码、功能码、数据、校验和、包尾)

  • 包序号:取值范围[0x00,0xff],

​ 上报无响应填0x00

​ 上报有响应和回复填[0x01,0xff],

​ 响应填入查询或控制数据包的相同值。

  • 功能码:取值范围[0x00,0xff]

​ 系统定义范围:[0,0x40],

​ 用户自定义取值范围:

​ 控制与查询消息:[0x41, 0xC7]

​ 设备主动上报:[0xC8,0xFF],UDS 收到MsgCode与功能码一致

  • 附加码:在控制查询指令中,云端消息,固定0x00;局域网,固定0x01;京东消息,固定0x02;

  • 数据:用户通信实际内容,上报数据最大500 Byte。

  • 校验和:整个数据包的数据和(包括包长度、包序号、附加码、功能码、数据),超过0xff取低8位(1B)。

参考代码:

uint8t calc_sum(uint8t *src, uint16_t len)
{

     uint8_t sum = 0;
     int i;

     for(i = 0; i < len; i++)
     {
            sum += src[i];
     }
     return sum;
}

二  设备注册

1.wifi模块获取设备注册消息

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x01 0x00 0x02 0x F0 0x 0F 0x0C 0x5B

2.设备回复设备信息

MCU->WIFI模块

包头 包长度H 包长度L 包序号 附加码 功能码 服务器环境 设备版本H3 设备版本H2 设备版本H1 设备版本H0 主域ID H5 主域ID H4 主域ID H3 主域ID H2 主域ID H1 主域ID H0 子域ID H 子域ID L 设备密钥(112Byte) 校验和 包尾
0x5A 0x00 0x85 0x00 0x00 0x07 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x???? 0x?? 0x5B

服务器环境

国内测试环境:0xFF

国内生产环境:0x00

北美生产环境:0x01

欧洲生产环境:0x02

亚太生产环境:0x03

设备连接生产环境之前需要联系ablecloud进行设备迁移,迁移之后注意使用配置环境是设备密钥使用对应环境云端后台产生的密钥

设备版本:H3云端后台不显示

云端后台显示0-1-2 对应数据内容 H3:0x0 H2:0x0 H1:0x1 H0:0x2

主域ID:ablecloud管理后台自动生成

子域ID:创建产品自动生成

设备密钥:在产品管理-》管理-》设备密钥 注意使用对应环境云端后台产生的密钥

三 云端控制查询指令

1.查询

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x00 0x?? 0x???? 0x?? 0x5B

2.回复数据

MCU->WIFI模块

字节数 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x00 0x?? 0x???? 0x?? 0x5B

注意:

  1. 数据内容与格式用户自定义
  2. 云端下发的控制与查询,设备必须回复响应且消息序号与云端下发的一致
  3. 功能范围[0x41,0xC7]
  4. AbleCloud云附加码为00,京东云附加码为02(需联网固件支持)

四 设备上报

1.无响应上报

MCU->WIFI模块

字节数 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x00 0x00 0x?? 0x???? 0x?? 0x5B

注意:

  1. 数据内容与格式用户自定义

  2. 包序号:0

  3. 功能范围[0xC8,0xFF]

  4. uds收到msgCode与功能码一致

2.有响应上报

上报

MCU->WIFI模块

字节数 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x00 0x?? 0x???? 0x?? 0x5B

响应

WIFI->MCU模块

字节数 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x00 0x?? 0x???? 0x?? 0x5B

注意:

  1. 数据内容与格式用户自定义
  2. 包序号范围[0x1,0xFF]
  3. 功能范围[0xC8,0xFF]
  4. uds收到msgCode与功能码一致
  5. 数据超时和重传需要应用层结合业务场景实现
  6. 响应数据需要通过uds下发给设备端

3.订阅上报

云端订阅

WIFI->MCU模块

字节数 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 校验和 包尾
内容 0x5A 0x00 0x08 0x00 0x00 0x3F 0x47 0x5B

响应

MCU>WIFI模块

字节数 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x00 0x?? 0x???? 0x?? 0x5B
  1. 数据内容与格式建议开发者上报全部属性
  2. 包序号:0
  3. 功能范围[0xC8,0xFF]
  4. 用户打开APP后,WIFI收到云端收到的订阅消息,会定时给MCU触发订阅,MCU收到订阅请求,上报全部属性,保证APP能够同步更新设备状态。

局域网订阅

WIFI->MCU模块

字节数 1B 1B 1B 1B 1B 1B 4B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 客户端ID 校验和 包尾
内容 0x5A 0x00 0x0C 0x00 0x01 0x3F 0XFFFFFFFF 0x48 0x5B

响应

MCU>WIFI模块

字节数 1B 1B 1B 1B 1B 1B 4B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 客户端ID 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x01 0x?? 0XFFFFFFFF 0x???? 0x?? 0x5B
  1. 数据内容与格式建议开发者上报全部属性
  2. 包序号:0,附加码:1
  3. 功能范围[0xC8,0xFF]
  4. 用户打开APP后,WIFI收到云端收到的订阅消息,会定时给MCU触发订阅,MCU收到订阅请求,上报全部属性,保证APP能够同步更新设备状态。

五操作类消息

1. WIFI配网指令

MCU->WIFI

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x08 0xD8 0x8D 0x77 0x5B

2. WIFI AP配网指令

MCU->WIFI

字节数 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 Ap名称 校验和 包尾
内容 0x5A 0x00 0x?? 0x00 0x00 0x0C 0x???? 0x?? 0x5B

备注:  热点名称(SSID): 最大27字节,生成的AP热点名称是“Ap名称-XXXX”,其中XXXX是wifi模块MAC地址后四位大写  密码:123456789;  IP地址:10.10.100.254

3.WIFI强制解绑指令

MCU->WIFI

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x24 0xA6 0x6A 0x3E 0x5B

4. WIFI休眠指令(可选)

MCU->WIFI 

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x09 0xE9 0x9E 0x9A 0x5B

5. WIFI唤醒指令(可选)

MCU->WIFI 

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x0A 0xFA 0xAF 0xBD 0x5B

6. WIFI重启指令(可选)

MCU->WIFI 

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x0B 0xB7 0x7B 0x47 0x5B

六 产测命令

1. 下位发送命令

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x01 0xF0 0x0F 0x0A 0x5B

2. 上位回复命令

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x01 0xF0 0x0F 0x0A 0x5B

七 通知类消息

1.联网通知

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x01 0x00 0x2 0x F0 0x 0F 0x0C 0x5B

2.断网通知

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x01 0x00 0x3 0XF1 0x1F 0x1E 0x5B

3.联云通知

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x01 0x00 0x4 0XF2 0x 2F 0x30 0x5B

4.断云通知

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x01 0x00 0x5 0x F3 0x3F 0x42 0x5B

八 设备OTA类消息(可选)

1.OTA确认消息

MCU->WIFI

字节数 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 校验和 包尾
内容 0x5A 0x00 0x08 0x?? 0x00 0xF 0x?? 0x5B

2.OTA错误消息

MCU->WIFI

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 子错误号 校验和 包尾
内容 0x5A 0x00 0x09 0x?? 0x00 0x10 0x? 0x?? 0x5B

3.OTA启动消息

WIFI->MCU

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 OTA下发文件数目 预留 预留 预留 校验和 包尾
内容 0x5A x00 0x0C 0x?? 0x00 0x11 0x? 0x0 0x0 0x0 0x?? 0x5B

MCU->WIFI

成功:OTA确认消息

失败:OTA错误消息

4.OTA文件传输消息

WIFI->MCU

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 预留 功能码 固件类型 预留 文件CRC H 文件CRC L 文件长度H3 文件长度H2 文件长度H1 文件长度H0 校验和 包尾
内容 0x5A 0x00 0x10 0x?? 0x00 0x00 0x12 0x?? 0x00 0x00 0x00 0x?? 0x?? 0x?? 0x?? 0x?? 0x5B

MCU->WIFI

成功:OTA确认消息

失败:OTA错误消息

crc参考算法

#define CRC_CCITT 0x1021    //CRC-CCITT多项式

unsigned int crc16_ccitt_segment(unsigned int precrc, const unsigned char* ptr, unsigned int len)

{

unsigned int crc = precrc;
unsigned char i;
while(len-- != 0)
{
    for(i = 0x80; i != 0; i /= 2)
    {
        crc *= 2;
        if((crc&0x10000) !=0) //上一位CRC乘 2后,若首位是1,则除以 0x11021
            crc ^= 0x11021;

        if((*ptr&i) != 0)    //如果本位是1,那么CRC = 上一位的CRC + 本位/CRC_CCITT
            crc ^= CRC_CCITT;
    }
    ptr++;
}
return crc;

}

5.OTA文件块传输消息

整个升级文件会被拆分成若干文件块进行传输,一次升级会有若干文件块。

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 文件偏移H3 文件偏移H2 文件偏移H1 文件偏移H0 文件内容 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x00 0x13 0x?? 0x?? 0x?? 0x?? 0x???? 0x?? 0x5B

MCU->WIFI

成功:OTA确认消息

失败:OTA错误消息

6.OTA文件传输结束消息

WIFI->MCU

字节数 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 校验和 包尾
内容 0x5A x00 0x08 0x?? 0x00 0x14 0x?? 0x5B

MCU->WIFI

成功:OTA确认消息

失败:OTA错误消息

7.OTA结束消息

WIFI->MCU

字节数 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 校验和 包尾
内容 0x5A x00 0x08 0x?? 0x00 0x15 0x?? 0x5B

MCU->WIFI

成功:OTA确认消息

失败:OTA错误消息

8.OTA用户确认升级消息

WIFI->MCU

字节数 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 校验和 包尾
内容 0x5A x00 0x08 0x?? 0x00 0x23 0x?? 0x5B

MCU->WIFI

成功:OTA确认消息

失败:OTA错误消息

九 局域网控制查询消息(可选)

1.上位发送数据

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 4B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 客户端ID 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x01 0x?? 0x?? 0x???? 0x?? 0x5B

2.下位回复数据

MCU->Wifi模块

字节数 1B 1B 1B 1B 1B 1B 4B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 客户端ID 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x01 0x?? 0x?? 0x???? 0x?? 0x5B

注意:

  1. 数据内容与格式用户自定义
  2. 云端下发的控制与查询,设备必须回复响应且消息序号与云端下发的一致
  3. 功能范围[0x41,0xC7]
  4. 附加码01表示本地局域网消息
  5. 客户端ID:回复的数据的客户端ID必须与发送数据保持一致

十 局域网推送状态消息(可选)

MCU->Wifi模块

字节数 1B 1B 1B 1B 1B 1B 4B nB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 客户端ID 数据 校验和 包尾
内容 0x5A 0x?? 0x?? 0x?? 0x01 0x?? 0xFFFFFFFF 0x???? 0x?? 0x5B

注意:

  1. 数据内容与格式建议开发者上报全部属性
  2. 包序号:0,附加码:1
  3. 功能范围[0xC8,0xFF]

十一 NTP查询指令(可选)

1.下位查询数据

MCU->Wifi模块

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x0D 0x F0 0x 0F 0x16 0x5B

2.上位回复数据

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 2B 1B 1B 1B 1B 1B 1B 4B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 星期 NTP时间 校验和 包尾
内容 0x5A 0x00 0x14 0x?? 0x00 0x0D 0x???? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x???????? 0x?? 0x5B

wifi端回复的是UTC时间

NTP是1970年1月1日至今的秒数

十二 查询信号质量(可选)

1.下位查询数据

MCU->Wifi模块

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 数据H 数据L 校验和 包尾
内容 0x5A 0x00 0x0A 0x00 0x00 0x0E 0x F0 0x 0F 0x17 0x5B

2.上位回复数据

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 信号质量 校验和 包尾
内容 0x5A 0x00 0x09 0x00 0x00 0x0E 0x?? 0x?? 0x5B

设备已连接无线路由器,回复信号质量,范围0~100

如果设备断开无线路由器,回复断网通知消息

十三 第三方云支持(可选,需提供支持第三方云平台固件)

1.下位配置第三方云设备类型

MCU->Wifi模块

字节数 1B 1B 1B 1B 1B 1B NB 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 设备类型 校验和 包尾
内容 0x5A 0x?? 0x?? 0x00 0x0? 0x00 0x ?? 0x?? 0x5B

1.客户开发京东或微信,需要联系我司,提供对接对应平台的固件版本,默认版本是不支持第三方云平台的

2.设备第一次启动配置设备型号到WIFI模块,WIFI模块回复ACK消息表示设备型号存储到内部FLASH中,回复error配置出错。

3.WIFI模块启动读取到有第三方云平台型号配置,直接启动连接第三方云平台

4.附加码:0对应微信,1对应京东,两个都支需要配置两次

2.上位回复响应

Wifi模块->MCU

字节数 1B 1B 1B 1B 1B 1B 1B 1B
含义 包头 包长度H 包长度L 包序号 附加码 功能码 校验和 包尾
内容 0x5A 0x00 0x08 0x00 0x00 0xF 0x17 0x5B

MCU收到WIFI回复下次启动无需配置对应第三方云平台型号