KT25-0812_82A-UART/README.md

123 lines
5.7 KiB
Markdown
Raw Normal View History

2025-08-21 08:15:01 +00:00
# 引脚排列
![引脚定义](./pin)
## UART 通讯协议 115200 N 8 1
- 发送
| head | length | CMD | DATA | XOR | tail |
|---------|-------------|----------|-----------|---------|---------|
| 02 | 04 | A0 | 01 | FF | 03 |
- 回复
| head | length | CMD | ERR | XOR | tail |
|---------|-------------|----------|-----------|---------|---------|
| 02 | 04 | A0 | 00 | FF | 03 |
- 解释:
- heat帧头 一个字节 0x02
- tail帧尾 一个字节 0x03
- length长度 一个字节 从长度到校验的长度,包含长度和校验
- CMD命令字 一个字节
- DATA数据区不定长
- XOR校验一个字节的xor校验,调试可以填写一个字节FF当此字节为FF时为不校验
- 指令列表:
- 0xA0 播放
- 0xA1 暂停
- 0xA2 播放/暂停
- 0xA3 下一曲
- 0xA4 上一曲
- 0xA5 停止
- 0xA6 音量加
- 0xA7 音量减
- 0xA8 设置音量
- 0xA9 静音
- 0xAA 解除静音
- 0xAB 播放指定曲目(通配符)
- 0xAC 播放指定曲目(带扩展名)
- 0xAD 播放指定曲目(数字)
## 指令详述
- 系统复位0xA0/A1/A2/A3/A4/A5/A6/A7/A9/AA
| HEAD | LENGTH | CMD | CHK | TAIL |
|------|--------|--------|-------|------|
| 0x02 | 1Byte | 0xA0 | 1Byte | 0x03 |
- 播放/暂停0xC2
| HEAD | LENGTH | CMD | CHK | TAIL |
|------|--------|--------|-------|------|
| 0x02 | 1Byte | 0xC2 | 1Byte | 0x03 |
- 设置音量0xA8
| HEAD | LENGTH | CMD | VOLUME | CHK | TAIL |
|------|--------|--------|---------------|------|------|
| 0x02 | 1Byte | 0xA8 | 0-30 |1Byte | 0x03 |
- VOLUME 0-30
- 播放指定曲目(通配符)AB
| HEAD | LENGTH | CMD | STA | NAME | END | CHK | TAIL |
|------|--------|--------|-----------|-----------|--------|------|------|
| 0x02 | 1Byte | 0xAB | '$' | 'abc' | '$' | 1Byte| 0x03 |
- STA :名字起始,字符'$'(0x24)。
- END : 名字结束,字符'$'(0x24)。
- NAME :名字字符串,支持通配符,注:会自动增加扩展名实例为3字节abc61 62 63,```实际上是播放 "abc.*", 程序自动增加 ".*" 通配符扩展名,"ab*"也是合法的,会播放"ab*.*"```
- 文件必须存在否则播放失败
- 播放指定曲目(全路径)AC
| HEAD | LENGTH | CMD | STA | NAME | END | CHK | TAIL |
|------|--------|--------|-----------|---------------|--------|------|------|
| 0x02 | 1Byte | 0xAC | '$' | 'abc.mp3' | '$' | 1Byte| 0x03 |
- STA :名字起始,字符'$'(0x24)。
- END : 名字结束,字符'$'(0x24)。
- NAME :名字字符串,必须写全文件名例如文件名采用8+3格式只识别文件名的前2个字符例如01.mp3和010.mp3是不同的
- 文件必须存在否则播放失败
- 播放指定曲目(文件号)AD
| HEAD | LENGTH | CMD | FH | FL | CHK | TAIL |
|------|--------|--------|----------|------------|-------|------|
| 0x02 | 1Byte | 0xAD | 1Byte | 1Byte | 1Byte | 0x03 |
- FHFL组合成以恶搞16bit的整形例如 FH=0x00 FL=0x02 实际上是播放0x0002曲目曲目的顺序号是拷贝进磁盘的顺序
- 文件必须存在否则播放失败
- 指定文件号播放0xC8
| HEAD | LENGTH | CMD | NUM | LOOP | CHK | TAIL |
|------|--------|--------|-----------|-----------|------|------|
| 0x02 | 1Byte | 0xC8 | 1-99 | 1Byte | 1Byte| 0x03 |
- NUM 文件名号码。注文件名采用8+3格式只识别文件名的前2个字符例如01.mp3和01月光小夜曲.mp3是相同的月光小夜曲可有可无但前面序号必须有存放文件时需注意。
- LOOP 循环次数0为单曲无限循环
- 文件必须存在否则播放失败
## 附录1校验
- 校验方式为校验和计算方式为数据累计和取反加1的方式
- 举例发送系统复位指令A00x02 0x02 0xA0 CheckSum 0x03
- 其中头尾分别为02 03
- 计算第二个02 + 指令A0相加结果取反再+1得到CheckSum
- 校验:数据段+校验后的值为0
- 详细算法
```C
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]; //从第一个字节开始累加,去除头,
}
//此时累加完成sum0x02 + 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校验通过
```
## 附录2 ERRCODE 错误定义:
- 0指令正确数据正确且执行正确
- 1一个通用的错误可能是一个未定义的错误
- 2未识别的指令
- 3参数错误
- 4帧错误此包数据未找到帧头或者未找到帧尾
- 5长度错误
- 6校验错误