KT25-0812_82A-UART/README.md
2025-08-21 16:15:01 +08:00

123 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 引脚排列
![引脚定义](./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校验错误