head | length | CMD | DATA | XOR | tail |
---|---|---|---|---|---|
02 | 04 | A0 | 01 | FF | 03 |
head | length | CMD | ERR | XOR | tail |
---|---|---|---|---|---|
02 | 04 | A0 | 00 | FF | 03 |
HEAD | LENGTH | CMD | CHK | TAIL |
---|---|---|---|---|
0x02 | 1Byte | 0xA0 | 1Byte | 0x03 |
HEAD | LENGTH | CMD | CHK | TAIL |
---|---|---|---|---|
0x02 | 1Byte | 0xC2 | 1Byte | 0x03 |
HEAD | LENGTH | CMD | VOLUME | CHK | TAIL |
---|---|---|---|---|---|
0x02 | 1Byte | 0xA8 | 0-30 | 1Byte | 0x03 |
HEAD | LENGTH | CMD | STA | NAME | END | CHK | TAIL |
---|---|---|---|---|---|---|---|
0x02 | 1Byte | 0xAB | '$' | 'abc' | '$' | 1Byte | 0x03 |
实际上是播放 "abc.*", 程序自动增加 ".*" 通配符扩展名,"ab*"也是合法的,会播放"ab*.*"
HEAD | LENGTH | CMD | STA | NAME | END | CHK | TAIL |
---|---|---|---|---|---|---|---|
0x02 | 1Byte | 0xAC | '$' | 'abc.mp3' | '$' | 1Byte | 0x03 |
HEAD | LENGTH | CMD | FH | FL | CHK | TAIL |
---|---|---|---|---|---|---|
0x02 | 1Byte | 0xAD | 1Byte | 1Byte | 1Byte | 0x03 |
HEAD | LENGTH | CMD | NUM | LOOP | CHK | TAIL |
---|---|---|---|---|---|---|
0x02 | 1Byte | 0xC8 | 1-99 | 1Byte | 1Byte | 0x03 |
uint8_t buf[16];
int index = 0;
buf[index++] = 0x02; //头
buf[index++] = 0x00; //长度,临时赋值0
buf[index++] = 0xA0; //指令
buf[1] = index - 1; //数据填充完成后,重新赋值长度(0x02)
uint16_t sum = 0;
for(int i = 0; i < index - 1; i++)
{
sum += buf[1+i]; //从第一个字节开始累加,去除头,
}
//此时累加完成,sum:0x02 + 0xA0 = 0xA2
sum = ~sum + 1; //取反加1
//sum = 0xff5D + 1 = 0xff5E
buf[index++] = (u8)sum; //强制转换成uint8_t类型,截断后为 0x5E
buf[index++] = 0x03; //尾
//此时buf = {0x02,0x02,0xA0,0x5E,0x03}
//下面校验
//0x02 + 0xA0 + 0x5E = 0x0100
//将0x100强转为uint8_t后,截断后 = 0,校验通过
- 0:指令正确,数据正确,且执行正确
- 1:一个通用的错误,可能是一个未定义的错误
- 2:未识别的指令
- 3:参数错误
- 4:帧错误,此包数据未找到帧头,或者未找到帧尾
- 5:长度错误
- 6:校验错误