1.概述
10、消防语音报警提示;
2.2 管脚说明
引脚序号 | 引脚名称 | 功能描述 | 备注 |
1 | DACL | 左声道 |
|
2 | DACR | 右声道 |
|
3 | 3V3 | 3.3V稳压输出 |
|
4 | VIN | 电源输入 |
|
5 | GND | 电源地 |
|
6 | TX | 通用输入输出口 | 串口的发送脚 |
7 | RX | 通用输入输出口 | 串口的接收脚 |
8 | X1 | 晶振输入 | 可以做GPIO |
9 | X2 | 晶振输出 | 可以做GPIO |
10 | INT/GPIOA0 | 通用输入输出口 | 外部中断[低触发] |
11 | GPIOA1 | 通用输入输出口 | SPI的输入 |
12 | GPIOA2 | 通用输入输出口 | SPI的时钟 |
13 | GPIOA3 | 通用输入输出口 | SPI的输出 |
14 | GPIOA4 | 通用输入输出口 |
|
15 | GPIOA5 | 通用输入输出口 |
|
16 | GPIOA6 | 通用输入输出口 |
|
17 | GPIOB4 | 通用输入输出口 | SDCLK |
18 | GPIOB3 | 通用输入输出口 | SDCMD |
19 | GPIOB2 | 通用输入输出口 | SDDAT |
20 | GPIOB1 | 通用输入输出口 | USB- |
21 | GPIOB0 | 通用输入输出口 | USB+ |
22 | RST | 复位脚 | 复位脚 |
23 | VCOM | DAC的参考电压 | DAC的参考电压 |
24 | DACVSS | DAC的输出地 | DAC的输出地 |
3. 串口通讯协议
串口作为一种在控制领域常用的通信,我们进行了工业级别的优化,加入的帧的校验、重发、错误处理等措施,大大加强通信的稳定性和可靠性,同时可以在此基础上扩展更加强大的RS485
进行组网功能,串口的通信波特率可自行设置,默认为9600
3.1 通讯格式
支持异步串口通讯模式,通过串口接受上位机发送的命令 | ||
格式:$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 通讯指令
我们的通讯分为以下两大块
n 控制指令
n 查询芯片的参数以及状态
3.2.1 控制指令CMD命令 | 对应的功能 | 参数(16位) |
0x01 | 下一曲 |
|
0x02 | 上一曲 |
|
0x03 | 指定曲目(NUM) | 详见3.4.1 |
0x04 | 音量+ |
|
0x05 | 音量- |
|
0x06 | 指定音量 | 详见3.4.2 |
0x08 | 单曲循环指定曲目播放 | 详见3.4.3 |
0x09 | 指定播放设备 | 详见3.4.4 |
0x0A | 进入睡眠 -- 低功耗 | 详见3.4.5 |
0x0B | 唤醒睡眠 |
|
0x0C | 芯片复位 |
|
0x0D | 播放 |
|
0x0E | 暂停 |
|
0x0F | 指定文件夹文件名播放 | 详见3.4.6 |
0x13 | 插播广告 | 详见3.4.7 |
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 |
0x22 | 指定音量同时指定文件播放 | 详见3.4.15 |
0x25 | 多文件夹插播 | 详见3.4.16 |
3.2.2 查询指令
这里是查询芯片的状态和相关的参数
CMD命令详解(查询) | 对应的功能 | 参数(16位) |
0x3C | 保留 |
|
0x3D | 保留 |
|
0x3E | 保留 |
|
0x3F | 查询在线的设备 | 详见3.5.1 |
0x40 | 返回错误,请求重发 |
|
0x41 | 应答 |
|
0x42 | 查询当前状态 | 详见3.4.10 |
0x43 | 查询当前音量 |
|
0x44 | 查询当前EQ | 保留 |
0x45 | 保留 | 该版本保留此功能 |
0x46 | 保留 | 该版本保留此功能 |
0x47 | 查询UDISK文件总数 | 设备的总文件数 |
0x48 | 查询TF文件总数 | 设备的总文件数 |
0x49 | 查询FLASH的总文件数 | 5个文件夹的总文件数 |
0x4B | 查询UDISK的当前曲目 | 物理顺序 |
0x4C | 查询TF的当前曲目 | 物理顺序 |
0x4D | 查询FLASH的当前曲目 | 返回文件夹号和曲目指针 |
0x4E | 查询指定文件夹的曲目总数 | 详见3.5.3 |
0x4F | 查询当前设备的总文件夹数 | 详见3.5.4 |
0x61 | 查询当前文件夹指针 | 仅支持FLASH |
3.3 芯片返回的数据
芯片在关键地方均会有数据返回。供用户掌控芯片的工作状态
n 芯片上电初始化成功的数据
n 芯片播放完当前曲目的数据
n 芯片成功接收到指令返回的ACK(应答)
n 芯片接收一帧数据出错[包括数据没收完整、校验出错两种情况]
n 芯片在繁忙时,有数据过来,芯片会返回忙的指令
n U盘、TF卡插入拔出,均有数据返回
3.3.1 芯片上电返回的数据
(1)、芯片上电,需要一定的时间初始化,这个时间是需要根据TF卡、U盘、SPIFLASH设备的文件多少决定的,一般情况在小于500ms这个时间。如果超过这个时间芯片的初始化数据还没有发送出来,说明芯片初始化出错,请检查硬件的连接
(2)、芯片初始化返回的数据为当前的有效文件夹,譬如返回7E FF 06 3F 00 00 03 xx xx EF
==>其中0x03代表的是U盘和TF这两个设备在线
U盘 -- 在线 | 7E FF 06 3F 00 00 01 xx xx EF | 各设备之间是或的关系 |
TF -- 在线 | 7E FF 06 3F 00 00 02 xx xx EF |
|
PC -- 在线 | 7E FF 06 3F 00 00 04 xx xx EF |
|
FLASH -- 在线 | 7E FF 06 3F 00 00 08 xx xx EF |
|
U盘、TF -- 在线 | 7E FF 06 3F 00 00 03 xx xx EF |
|
(3)、MCU必须等待芯片初始化指令发出之后才能发送相应的控制指令,否则发送的指令芯片将不予处理。同时还会影响芯片的正常初始化。
3.3.2 曲目播放完毕返回的数据
U盘播放完第1曲 | 7E FF 06 3C 00 00 01 xx xx EF | U盘播放第1曲完毕 |
U盘播放完第2曲 | 7E FF 06 3C 00 00 02 xx xx EF | U盘播放第2曲完毕 |
TF卡播放完第1曲 | 7E FF 06 3D 00 00 01 xx xx EF | TF卡播放第1曲完毕 |
TF卡播放完第2曲 | 7E FF 06 3D 00 00 02 xx xx EF | TF卡播放第2曲完毕 |
FLASH播放完第1曲 | 7E FF 06 3E 00 01 01 xx xx EF | FOLDER1的第1曲播放完 |
FLASH播放完第2曲 | 7E FF 06 3E 00 02 02 xx xx EF | FOLDER2的第2曲播放完 |
1、针对很多的触发型的播放需求,我们芯片更正为播放一曲之后自动进入停止状态。如果用户需要此类应用。只需要指定曲目播放即可。这样,曲目播放完毕会自动停止,等待指令
2、另外我们专门开辟一个IO作为解码和暂停的状态指示。请参见第5脚
(1)、播放状态输出低电平[很多功放有静音脚,可以通过此IO直接进行控制]
(2)、播放暂停状态,输出高电平。芯片睡眠状态。也是低电平
3、芯片通电之后,初始化正常 ,芯片会自动进入设备播放状态。并且停止解码,等待用户发送播放的相关指令
4、另外用户在指定设备之后,需要等待200ms的时间,再发送指定的曲目,因为一旦指定曲目之后,系统会对指定的设备进行文件系统的初始化,如果立刻发送指定的曲目命令,会导致芯片接收不到。
3.3.3 芯片应答返回的数据
芯片返回ACK | 7E FF 06 41 00 00 00 xx xx EF | 说明成功接收数据 |
(1)、为了加强数据通信之间的稳定性,我们增加了应答处理,ACKB字节就是设置是否需要回复应答。这样做的好处是保证每次通信都有握手信号,收到应答就表示MCU发送的数据,芯片已经成功收到,马上处理。
(2)、对于一般的应用,客户可以自由选择,不加这个应答处理也是可以的。
3.3.4 芯片错误返回的数据
返回忙 | 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 08 xx xx EF | 如最小为1的地方,发送为0 |
(1)、为了加强数据通信之间的稳定性,我们增加了数据错误处理机制。芯片收到不符合格式的数据,均会有信息反馈出来
(2)、在环境比较恶劣的情况下,强烈建议客户处理此命令。如果应用环境一般,可以不用处理。
(3)、芯片返回忙,基本上是芯片上电初始化的时候才会返回,因为芯片需要初始化文件系统
(4)、芯片上电之后,进入的是设备状态,设备是SPIFLASH。如果SPIFLASH不在线的话,会自动进入睡眠状态。
(5)、只要参考我们给出的测试SDK程序,移植里面的串口操作部分,就不会出现校验出错,在这里强烈建议用户使用我们给出的校验方式。因为谁都不能保证数据的传输不会出错。
(6)、文件指定部分出错,请参考下面的详解
3.3.5 设备插入拔出消息
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盘灯闪烁。也可以接收到设备插入的串口消息。