KT25-0812_82A-UART/README.md
2025-08-28 00:29:07 +08:00

6.3 KiB
Raw Permalink Blame History

引脚排列

引脚定义

使用注意:

1. TF卡和SPI Flash只支持一个下单请注意备注。
2. 开机有提示音“咚”。
3. 默认循环方式为不循环,播放一次后结束。
4. BUSY引脚指示当前播放状态低电平为正在播放高电平为未播放也可使用此引脚控制功放的MUTE但需实测是否有呑字现象。

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 播放指定曲目(数字)
    • 0xAE 播放循环
    • 0xB0 获取当前磁盘文件总数
    • 0xB1 获取当前磁盘文件夹数量
    • 0xB2 获取当前播放文件夹内文件数量
    • 0xB3 获取当前播放曲目总时间
    • 0xB4 获取当前播放曲目时间

指令详述

  • 播放控制指令0xA0/A1/A2/A3/A4/A5/A6/A7/A9/AA
    HEAD LENGTH CMD CHK TAIL
    0x02 1Byte 0xA0 1Byte 0x03
  • 播放循环0xAE
    HEAD LENGTH CMD CYCLE CHK TAIL
    0x02 1Byte 0xAE 1Byte 1Byte 0x03
    • CYCLE 0-不循环1-全部循环 2-单曲循环3-文件夹循环4-随机
  • 设置音量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格式例如01.mp3和001.mp3是不同的
    • 文件必须存在否则播放失败
  • 播放指定曲目(文件号)AD
    HEAD LENGTH CMD FH FL CHK TAIL
    0x02 1Byte 0xAD 1Byte 1Byte 1Byte 0x03
    • FHFL组合成一个16bit的整形例如 FH=0x00 FL=0x02 实际上是播放0x0002曲目曲目的顺序号是拷贝进磁盘的顺序
    • 文件必须存在否则播放失败
  • 播放信息B0/B1/B2/B3/B4
    HEAD LENGTH CMD CHK TAIL
    0x02 1Byte 0xB0 1Byte 0x03
  • ACK:
    HEAD LENGTH CMD ERR DH DL CHK TAIL
    0x02 1Byte 0xB0 1Byte 1Byte 1Byte 1Byte 0x03
    • DH,DL: 回复数据组合成一个16bit的整形例如 DH=0x00 DL=0x02 则值是0x0002

附录1校验

  • 校验方式为校验和计算方式为数据累计和取反加1的方式
  • 举例发送系统复位指令A00x02 0x02 0xA0 CheckSum 0x03
    • 其中头尾分别为02 03
    • 计算第二个02 + 指令A0相加结果取反再+1得到CheckSum
    • 校验:数据段+校验后的值为0
    • 详细算法
          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校验错误