蓝牙调试协议
1. 广播包
蓝牙广播包0x09
名称以Acr
为前缀,用来区分是我司设备
2. OTA升级
收发命令使用同一功能码,通过数据长度不同来表示读取或写入操作,具体根据不同功能码自行定义,收发格式如下。
描述 | 地址 | 功能码 | 子功能码 | 长度 | 操作码 | 数据 | crc |
---|---|---|---|---|---|---|---|
字节数 | 1 | 1 | 1 | 2 | 1 | n | 2 |
协议说明:
字节组合按照小端模式,低位在前,高位在后(芯片基本都为小端模式);
长度使用两个字节,数据域的长度(操作码+数据);
操作码为1个字节(用于显示应答情况标识,返回错误或故障使用0xEx或0xFx);
地址0是广播地址,0xff是万能地址,广播地址不回复;
crc校验从地址开始计算,到前一个字节结束
功能码列表:
功能码 | 说明 | 子功能码 | 说明 | 操作码 |
---|---|---|---|---|
0x55 | 设备基本信息 固件升级 | 0x01 | 读取设备基本信息&出厂配置信息 | 0x03 |
0x02 | 向设备发送固件升级请求 | 0x10 | ||
0xAA | 写入升级固件数据 | 0x10 | ||
0x03 | 向设备发送模块升级请求 | 0x10 | ||
0xAB | 写入模块升级包数据 | 0x10 | ||
0xFF | 查看升级是否成功 | 0x01 | ||
0xF0 | 重启设备 | 0x01 |
2.1 读取设备基本信息(0x03)
请求 | 回复 | ||||
---|---|---|---|---|---|
类型 | 报文 | 说明 | 类型 | 报文 | 说明 |
表地址 | 0xff | 表地址 | 0xff | ||
功能码 | 0x55 | 功能码 | 0x55 | ||
子功能码 | 0x01 | 子功能码 | 0x01 | ||
长度 | 0x0100 | 低位在前 | 长度 | 0xXXXX | 可变,低位在前 |
操作码 | 0x03 | 读取信息 | 操作码 | 0x01/0xEE | 正常/失败 |
数据 | --- | 数据 | N | 见下表 | |
校验 | Crc16 | 校验 | Crc16 |
数据详情:
类型 | 长度 | 参数名 | 说明 |
---|---|---|---|
硬件系列编号 | 2 | seriesCode | 公司统⼀管控,低位在前 |
硬件产品编号 | 2 | productCode | 产品编号,低位在前 |
软件编号 | 2 | softcode | 例如 |
软件版本 | 2 | softversion | 例如 |
设备标识 | 1 | deviceType | 0x55 子设备,0xAA 采集设备(网关) |
断点续传 | 1 | 暂无 | 0x00不支持,0xFF支持 |
差分升级 | 1 | 暂无 | 0x00不支持,0xFF支持 |
数据报文长度 | 2 | MTU | 单次传输最大字节数,128,256,512,1024等,低位在前 |
固件信息地址 | 4 | 暂无 | Bin文件的绝对地址,文件起始为0,低位在前,用于读取bin文件自动获取以上信息 |
序列号 | 20 | 设备SN,字符串,默认一般按公司14位数字编号,/0结束 | |
预留 | 8 |
2.2 向设备发送固件升级请求(0x02)
请求报文包含以下内容:硬件系列标识、硬件产品标识、软件编号、软件版本、设备标识、数据报文长度、升级方式、完整文件校验码。
返回允许升级后,设备进入升级模式,允许0xAA、0xFF子功能码生效,1分钟内无子功能码0xAA写入升级软件数据报文,退出升级模式。
表1
请求: | 回复: | ||||
---|---|---|---|---|---|
类型 | 报文 | 说明 | 类型 | 报文 | 说明 |
表地址 | 0xff | 表地址 | 0xff | ||
功能码 | 0x55 | 功能码 | 0x55 | ||
子功能码 | 0x02 | 子功能码 | 0x02 | ||
长度 | 0xXXXX | 可变,低位在前 | 长度 | 0x0500 | 低位在前 |
操作码 | 0x10 | 写入升级信息 | 操作码 | 0x01 | 见表3 |
数据 | N*byte | 见表2 | 数据 | 4*byte | |
校验 | Crc16 | 校验 | Crc16 |
表2
类型 | 长度 | 参数名 | 说明 |
---|---|---|---|
硬件系列编号 | 2 | seriesCode | 公司统⼀管控,低位在前 |
硬件产品编号 | 2 | productCode | 产品编号,低位在前 |
软件编号 | 2 | softcode | softcode 例如 |
软件版本 | 2 | softversion | softversion 例如 |
设备标识 | 1 | deviceType | 0x55 |
数据报文长度 | 2 | MTU | 单次最大传输字节数,128, 256, 512, 1024等,低位在前 |
升级方式 | 1 | upgradeMode | 0x00完全升级, 0xAA差分升级 |
升级包长度 | 4 | fileSize | Bin文件大小,低位在前 |
16位CRC校验码 | 2 | crc16 | Bin文件的校验码 |
32位CRC校验码 | 4 | crc32 | Bin文件的校验码 |
MD5校验码 | 16 | md5 | Bin文件的校验码 |
表3 返回数据
操作码 | 其他数据 | 说明 |
---|---|---|
0x01 | 4个字节 | 允许升级,返回对应升级文件地址,0x00表示从头开始,非0x00可能是断点续传 |
0xEE | 4个字节 | 不允许升级,错误信息 |
2.3 写入固件数据(0xAA)
根据上一条报文,发送对应文件地址的数据。
表1
请求: | 回复: | ||||
---|---|---|---|---|---|
类型 | 报文 | 说明 | 类型 | 报文 | 说明 |
表地址 | 0xff | 表地址 | 0xff | ||
功能码 | 0x55 | 功能码 | 0x55 | ||
子功能码 | 0xAA | 子功能码 | 0xAA | ||
长度 | 0xXXXX | 可变,低位在前 | 长度 | 0x0500/0x0100 | 低位在前 |
操作码 | 0x10 | 写入升级软件 | 操作码 | 0x01 | 见表2 |
数据 | 4byte+Nbyte | 4地址; N升级数据 | 数据 | 4*byte | 后续地址 |
校验 | Crc16 | 校验 | Crc16 |
表2 返回数据
操作码 | 其他数据 | 说明 |
---|---|---|
0x01 | 4个字节,0x00000080 | 继续升级,返回后续升级文件地址 |
0xAA | 4个字节,0XFFFFFFFF | 完成所有数据传输 |
0xEE | 0字节 | 其他未知错误 |
2.4 向设备发送模块升级请求(0x03)
请求报文包含以下内容: 硬件系列标识、硬件产品标识、软件编号、软件版本、设备标识、数据报文长度、升级方式、完整文件校验码
返回允许升级后,设备进入升级模式,允许0xAB、0xFF子功能码生效,1分钟内无子功能码0xAB写入模块升级数据报文,退出升级模式。
表1
请求: | 回复: | ||||
---|---|---|---|---|---|
类型 | 报文 | 说明 | 类型 | 报文 | 说明 |
表地址 | 0xff | 表地址 | 0xff | ||
功能码 | 0x55 | 功能码 | 0x55 | ||
子功能码 | 0x03 | 子功能码 | 0x03 | ||
长度 | 0xXXXX | 可变,低位在前 | 长度 | 0x0500 | 低位在前 |
操作码 | 0x10 | 写入升级信息 | 操作码 | 0x01 | 见表3 |
数据 | N*byte | 见表2 | 数据 | 4*byte | |
校验 | Crc16 | 校验 | Crc16 |
表2
类型 | 长度 | 参数名 | 说明 |
---|---|---|---|
硬件系列编号 | 2 | seriesCode | 公司统⼀管控,低位在前 |
硬件产品编号 | 2 | productCode | 产品编号,低位在前 |
软件编号 | 2 | softcode | softcode 例如 |
软件版本 | 2 | softversion | softversion 例如 |
设备标识 | 1 | deviceType | 0x55 |
数据报文长度 | 2 | MTU | 单次最大传输字节数,128, 256, 512, 1024等,低位在前 |
升级方式 | 1 | upgradeMode | 0x00完全升级, 0xAA差分升级 |
升级包长度 | 4 | fileSize | Bin文件大小,低位在前 |
16位CRC校验码 | 2 | crc16 | Bin文件的校验码 |
32位CRC校验码 | 4 | crc32 | Bin文件的校验码 |
MD5校验码 | 16 | md5 | Bin文件的校验码 |
表3 返回数据
操作码 | 其他数据 | 说明 |
---|---|---|
0x01 | 4个字节 | 允许升级,返回对应升级文件地址,0x00表示从头开始,非0x00可能是断点续传 |
0xEE | 4个字节 | 不允许升级,错误信息 |
2.5 写入固件数据(0xAB)
根据上一条报文,发送对应文件地址的数据。
表1
请求: | 回复: | ||||
---|---|---|---|---|---|
类型 | 报文 | 说明 | 类型 | 报文 | 说明 |
表地址 | 0xff | 表地址 | 0xff | ||
功能码 | 0x55 | 功能码 | 0x55 | ||
子功能码 | 0xAB | 子功能码 | 0xAB | ||
长度 | 0xXXXX | 可变,低位在前 | 长度 | 0x0500/0x0100 | 低位在前 |
操作码 | 0x10 | 写入升级软件 | 操作码 | 0x01 | 见表2 |
数据 | 4byte+Nbyte | 4地址; N升级数据 | 数据 | 4*byte | 后续地址 |
校验 | Crc16 | 校验 | Crc16 |
表2 返回数据
操作码 | 其他数据 | 说明 |
---|---|---|
0x01 | 4个字节,0x00000080 | 继续升级,返回后续升级文件地址 |
0xAA | 4个字节,0XFFFFFFFF | 完成所有数据传输 |
0xEE | 0字节 | 其他未知错误 |
2.6 查看升级是否成功(0xFF)
接收到数据传输完成报文后,发送此报文,用于查询升级是否成功,被升级设备检查文件校验信息,若成功,返回成功报文并在3秒后重启,将升级后的固件替换原有固件
请求: | 回复: | ||||
---|---|---|---|---|---|
类型 | 报文 | 说明 | 类型 | 报文 | 说明 |
表地址 | 0xff | 表地址 | 0xff | ||
功能码 | 0x55 | 功能码 | 0x55 | ||
子功能码 | 0XFF | 子功能码 | 0XFF | ||
长度 | 0x0100 | 低位在前 | 长度 | 0x0100 | 低位在前 |
操作码 | 0x01 | 操作码 | 0x01/0xEE | 0x01表示成功 0xEE表示失败 | |
校验 | Crc16 | 校验 | Crc16 |
2.7 重启设备
小程序发送重启命令到设备,设备响应后执行重启操作
请求: | 回复: | ||||
---|---|---|---|---|---|
类型 | 报文 | 说明 | 类型 | 报文 | 说明 |
表地址 | 0xff | 表地址 | 0xff | ||
功能码 | 0x55 | 功能码 | 0x55 | ||
子功能码 | 0XF0 | 子功能码 | 0XF0 | ||
长度 | 0x0100 | 低位在前 | 长度 | 0x0100 | 低位在前 |
操作码 | 0x01 | 操作码 | 0x01/0xEE | 0x01表示成功 0xEE表示失败 | |
校验 | Crc16 | 校验 | Crc16 |