KT404A芯片使用手册_3.串口通讯协议3.1-3.3

3.串口通讯协议

    串口作为一种在控制领域常用的通信,我们进行了工业级别的优化,加入的帧的校验、重发、错误处理等措施,大大加强通信的稳定性和可靠性,同时可以在此基础上扩展更加强大的RS485

进行组网功能,串口的通信波特率可自行设置,默认为9600   

 

3.1 通讯格式

支持异步串口通讯模式,通过串口接受上位机发送的命令

    通讯标准:9600 bps
    数据位  :8

    停止位  :1
    校验位  :none
    流控制  :none

格式:$S  VER  Len  CMD  Feedback  para1  para2  checksum  $O

 

 

 

$S

起始位0x7E

每条命令反馈均以$开头,即0x7E

VER

版本  

版本信息

Len

len后字节个数

校验和不计算在内

CMD

命令字

表示具体的操作,比如播放/暂停等等

Feedback

命令反馈

是否需要反馈信息,1反馈,0不反馈

dat

参数

和前面的len相关联,不限制长度

checksum

校验和[占两个字节]

累加和校验[不计起始位$]

$O

结束位

结束位0xEF

 

 

 

举个例子,如果我们指定播放SPIFLASH,就需要发送:7E FF 06 09 00 00 04 FF dd EF

数据长度为6 ,这6个字节分别是[FF 06 09 00 00 04] 。不计算起始、结束、和校验。然后对得到的结果进行累加,再用0减,即“0-checksum=校验数据”。如果这里不明白,可以参考我们的“QYMxFS辅助说明文档”。另外用户也可以直接忽视校验,参考我们的5.3.4章节说明。

3.2 通讯指令

我们的通讯分为以下两大块

  1. 控制指令
  2. 查询芯片的参数以及状态

3.2.1 控制指令

CMD命令

对应的功能

参数(16位)

0x01

下一曲

 

0x02

上一曲

 

0x03

指定曲目(NUM)

详见3.4.1

0x04

音量+

 

0x05

音量-

 

0x06

指定音量

详见3.4.2

0x08

单曲循环指定曲目播放

详见3.4.3

0x09

指定播放设备

保留

0x0A

进入睡眠 -- 低功耗

详见3.4.5

0x0B

唤醒睡眠

 

0x0C

芯片复位

任何状态有效

0x0D

播放

 

0x0E

暂停

 

0x0F

指定文件夹文件名播放

详见3.4.6

0x14

单个文件夹支持1000首曲目

保留

0x15

停止插播播放背景音乐

详见3.4.9

0x16

停止

 

0x17

指定文件夹循环播放

详见3.4.10

0x18

指定根目录随机播放

详见3.4.11

0x19

对当前播放的曲目设置为循环播放

详见3.4.12

0x1A

开启和关闭芯片的DAC输出

详见3.4.13

0x21

组合播放

详见3.4.14

0x25

多文件夹插播

详见3.4.16

0x28

指定文件夹随机播放

详见3.4.18

3.2.2 查询指令

这里是查询芯片的状态和相关的参数

CMD命令详解(查询)

对应的功能

参数(16位)

0x3C

保留

 

0x3D

保留

 

0x3E

保留

 

0x3F

查询在线的设备

详见3.5.1

0x40

返回错误,请求重发

 

0x41

应答

 

0x42

查询当前状态

详见3.4.10

0x43

查询当前音量

 

0x44

查询当前EQ

保留

0x45

保留

该版本保留此功能

0x46

保留

该版本保留此功能

0x49

查询FLASH的总文件数

5个文件夹的总文件数

0x4D

查询FLASH的当前曲目

返回文件夹号和曲目指针

0x4E

查询指定文件夹的曲目总数

详见3.5.3

0x4F

查询当前设备的总文件夹数

详见3.5.4

0x61

查询当前文件夹指针

仅支持FLASH

3.3 芯片返回的数据

芯片在关键地方均会有数据返回。供用户掌控芯片的工作状态

  1. 芯片上电初始化成功的数据
  2. 芯片播放完当前曲目的数据
  3. 芯片成功接收到指令返回的ACK(应答)
  4. 芯片接收一帧数据出错[包括数据没收完整、校验出错两种情况]
  5. 芯片在繁忙时,有数据过来,芯片会返回忙的指令
  6. U盘、TF卡插入拔出,均有数据返回

 

3.3.1 芯片上电返回的数据

(1)、芯片上电,需要一定的时间初始化,这个时间是需要根据SPIFLASH设备的文件多少决定的,一般情况在小于500ms。如果超过这个时间芯片的初始化数据还没有发送出来,说明芯片初始化出错,请检查硬件的连接

(2)、芯片初始化返回的数据为当前的有效文件夹,譬如返回7E FF 06 3F 00 00 03 xx xx EF

==>其中0x03代表的是U盘和TF这两个设备在线

PC -- 在线

7E FF 06 3F 00 00 04 xx xx EF

即下载模式

FLASH -- 在线

7E FF 06 3F 00 00 08 xx xx EF

 

 

  1. 、MCU必须等待芯片初始化指令发出之后才能发送相应的控制指令,否则发送的指令芯片将不予处理。同时还会影响芯片的正常初始化。

3.3.2 曲目播放完毕返回的数据[0x3C][0x3D][0x3E]

U盘播放完第1曲

7E FF 06 3C 00 00 01 xx xx EF

U盘播放完第2曲

7E FF 06 3C 00 00 02 xx xx EF

TF卡播放完第1曲

7E FF 06 3D 00 00 01 xx xx EF

TF卡播放完第2曲

7E FF 06 3D 00 00 02 xx xx EF

FLASH播放完第1曲

7E FF 06 3E 00 00 01 xx xx EF

FLASH播放完第2曲

7E FF 06 3E 00 00 02 xx xx EF

 

  1. 争对很多的触发型的播放需求,我们模块更正为播放一曲之后自动进入停止状态。如果用户需要此类应用。只需要指定曲目播放即可。这样,曲目播放完毕会自动停止,等待指令
  2. 另外我们专门开辟一个IO作为解码和暂停的状态指示。请参见第BUSY脚
  • 播放状态输出低电平[很多功放有静音脚,可以通过此IO直接进行控制]
  • 播放暂停状态,输出高电平。模块睡眠状态。也是低电平

   3.模块通电之后,初始化正常 ,模块会自动进入设备播放状态。并且停止解码,等待用户发送播放的相关指令

   4、另外用户在指定设备之后,需要等待200ms的时间,再发送指定的曲目,因为一旦指定设备之后,系统会对指定的设备进行文件系统的初始化,如果立刻发送指定的曲目命令,会导致模块接收不到。

   5、设备播放完每一段语音,都会有数据返回,举例说明:

7E FF 06 3C 00 00 01 xx xx EF

其中0x3C代表的是U盘,详细的请参见上表

其中0x00,0x01代表的是第1段语音播放完毕

     0x01,0xF4代表的是第500段语音播放完毕。因为0x01F4 = 500.这里分别代表的是高低字节

6. 由于设备中所有的文件均是以物理顺序进行识别的,包括指定文件夹文件名播放,播放完毕之后,返回的数据还是其存储的物理顺序编号,这点请用户朋友留意。

3.3.3 模块应答返回的数据[0x41]

模块返回ACK

7E FF 06 41 00 00 00 xx xx EF

说明成功接收数据

 

(1)、为了加强数据通信之间的稳定性,我们增加了应答处理,ACKB字节就是设置是否需要回复应答。这样做的好处是保证每次通信都有握手信号,收到应答就表示MCU发送的数据,模块已经成功收到,马上处理。

(2)、对于一般的应用,客户可以自由选择,不加这个应答处理也是可以的。

3.3.4 模块错误返回的数据[0x40][0x50]

返回忙

7E FF 06 40 00 00 01 xx xx EF

芯片在文件系统初始化时

当前睡眠模式

7E FF 06 40 00 00 02 xx xx EF

睡眠模式只支持指定设备

串口接收错误

7E FF 06 40 00 00 03 xx xx EF

串口一帧数据没接收完毕

校验出错

7E FF 06 40 00 00 04 xx xx EF

和校验出错

指定文件超范围

7E FF 06 40 00 00 05 xx xx EF

文件的指定超过设定的范围

未找到指定文件

7E FF 06 40 00 00 06 xx xx EF

指定为文件没有被找到

插播错误

7E FF 06 40 00 00 07 xx xx EF

插播只允许在播放的状态下进行

播放TF卡错误

7E FF 06 40 00 00 08 xx xx EF

TF卡读取失败或者TF卡被拔出或者有坏区

FLASH初始化出错

7E FF 06 40 00 00 09 xx xx EF

FLASH里面的文件系统信息错误

进入睡眠

7E FF 06 40 00 00 0A xx xx EF

进入SLEPP模式

1、为了加强数据通信之间的稳定性,我们增加了数据错误处理机制。模块收到不符合格式的数据,或者异常均会有信息反馈出来

2、在环境比较恶劣的情况下,强烈建议客户处理此命令。如果应用环境一般,可以不用处理。

3、模块返回忙,基本上是模块上电初始化的时候才会返回,因为模块需要初始化文件系统

4、只要参考我们给出的测试SDK程序,移植里面的串口操作部分,就不会出现校验出错,在这里强烈建议用户使用我们给出的校验方式。因为谁都不能保证数据的传输不会出错。

3.3.5 设备插入拔出消息[0x3A][0x3B]

U盘插入

7E FF 06 3A 00 00 01 xx xx EF

TF插入

7E FF 06 3A 00 00 02 xx xx EF

PC插入

7E FF 06 3A 00 00 04 xx xx EF

U盘拔出

7E FF 06 3B 00 00 01 xx xx EF

TF拔出

7E FF 06 3B 00 00 02 xx xx EF

PC拔出

7E FF 06 3B 00 00 04 xx xx EF

1、为了加强模块灵活性,我们特别增加了,设备插入、拔出的指令反馈。方便知道模块的工作状态。

2、设备插入的时候,我们默认进入到设备等待状态,如果用户插入的是带灯的U盘,可以看到U盘灯闪烁。也可以接收到设备插入的串口消息。

3.3.6 设备文件系统初始化成功返回[0x90]

U盘挂载文件系统OK

7E FF 06 90 00 00 01 xx xx EF

TF卡挂载文件系统OK

7E FF 06 90 00 00 02 xx xx EF

spiflash挂载文件系统OK

7E FF 06 90 00 00 04 xx xx EF

  1. 主控芯片初始化设备,并且挂载文件系统成功之后,新增此数据的返回,方便用户掌握状态
  2. 三种设备,挂载成功之后均会返回对应的数据

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值