最近在弄一个SMT8L串口通信,从机的供应商给出了数据包的格式,10bit 异步转输方式。
数据包的格式以下:
1Byte 1Byte 1Byte 1Byte 1Byte 1Byte 1Byte
0x22 0xee len CMD_H CMD_L Data CS
1 0x22,0xee 数据包引导头。
2 Data 域的总长度
3 CMD 命令 由两字节组成
4 CS 数据包的校验和字节
计算方式以下:
CS= 0-(Len+CMD_H+CMD_L+Data[0]+… +Data[N-1]
这个验验和字节,如何弄,函数应怎么写。
没弄过,谁帮个忙。。
- uint8_t fun(const uint8_t* src) {
- uint8_t cnt, sum;
- uint16_t cmd;
- if (0x22 != *src++) {
- return 0xff;
- }
- if (0xee != *src++) {
- return 0xff;
- }
- cnt = *src++;
- cmd = (uint16_t)(*src++);
- cmd <<= 8;
- cmd |= (uint16_t)(*src++);
- for (sum = 0; cnt != 0; cnt--) {
- sum += *src++;
- }
- sum += *src;
- return sum;
- }
复制代码一周热门 更多>