COM协议构架说明
为了简化协议和方便解析,COM协议本质上就是对CAN指令的封装,其中包含的4~12位数据为4位CAN ID和8位CAN数据。由于COM报文长度是8~16位,使用固定表头0x55,请先阅读标准CAN协议再阅读以下内容。
COM 报文设置
通信波特率:460800
标准:自定义协议串口
|
COM 报文结构 |
|||||
|
数据定义 |
HEAD |
LEN |
DATA [0~11] |
Frame ID |
Checksum |
|
数据类型 |
unsigned int8 |
unsigned int8 |
4~12 x unsigned int8 |
unsigned int8 |
unsigned int8 |
|
说明 |
表头固定0x55 |
COM报文长度0x08~0x10 |
4位CAN ID 0~8位CAN报文数据 |
帧ID 可固定也可累加 连贯数据的序列戳 |
前7~15位内容的累加和 再取最低位的int8反馈 |
|
DATA [0~11] |
|||||
|
数据定义 |
ID[0] |
ID[1] |
ID[2] |
ID[3] |
DATA [0~7] |
|
数据类型 |
unsigned int8 |
unsigned int8 |
unsigned int8 |
unsigned int8 |
0~8 x unsigned int8 |
|
说明 |
设备大类 |
设备型号 |
设备编号 |
设备功能 |
0~8字节数据 |
报文内容解释
Frame ID
- 设计上是一个序列戳,方便对连续的数据包进行校验,帮助发现掉包现象。
- 该序列从0到255,溢出后自动循环
- 对非连续指令或不需要严格防掉包指令可以固定某一数值
- 一般用于上位机校验,设备一般不使用该值
Checksum
- 对报文前7~15位(总共8~16位)的累加和,取和的最低位字节,用于简单的数据校验
- 代码案例如下:
unsigned char checksum(unsigned char* data) {
unsigned char sum = 0x00;
for (int i = 0; i < data[1] - 1; i++) {
sum += data[i];
}
return sum;
}