3.4 串口控制指令详解
以下我们对关键的地方进行详细的说明--针对控制指令:
- 指定曲目播放
- 指定播放的音量
- 指定播放的设备
- 全部循环播放指令
- 组合播放功能[亮点]
- 带音量参数的指定曲目播放
3.4.1 指定歌曲播放指令[0x03]
我们给出的指令是支持指定曲目播放的,歌曲的选择范围为0~3000.其实是可以支持更多的,因为涉及到文件管理的原因,支持过多的歌曲,会导致系统操作缓慢,一般的应用也不需要支持这么多的文件。如果客户有非常规的应用,请事前和我们沟通。此指令在TF卡和U盘状态是按照存储的物理顺序指定的。FLASH同样也是按照物理顺序[拷贝的先后顺序]
(1)、例如选择第一首歌播放,串口的发送部分7E FF 06 03 00 00 01 FE E7 EF
数据 | 详解 |
0x7E | 起始字节 |
0xFF | 版本信息 |
0x06 | 数据长度[不包含校验] |
0x03 | 命令字节 |
0x00 | 是否需要应答[0x01=需要应答 0x00=不需要应答] |
0x00 | 曲目的高字节[DH] |
0x01 | 曲目的低字节[DL],这里代表的是一首歌播放 |
0xFE | 校验高字节 |
0xF7 | 校验低字节 |
0xEF | 结束字节 |
(2)、对于选曲,如果选择第100首,首先将100转化为16进制,默认为双字节,就为0x0064。
DH = 0x00 ; DL = 0x64
(3)、其它的操作依次类推即可,因为在嵌入式领域采用16进制是最为方便的一种操作。
3.4.2 指定音量播放指令[0x06]
- 、我们系统上电默认的音量为30级,如果要设置音量的话,直接发送相应的指令即可
- 、芯片内部设置的音量细分级数为0--30.请用户注意
(3)、例如指定音量为15级,串口发送的指令:7E FF 06 06 00 00 0F FF D5 EF
(4)、DH = 0x00 ; DL = 0x0F ,15转化为16进制为0x000F。可以参照播放曲目部分的说明
3.4.3 单曲循环播放指令[0x08]
7E FF 06 08 00 00 01 xx xx EF | |
循环播放第二曲 | 7E FF 06 08 00 00 02 xx xx EF |
- 争对一些需要单曲循环播放的要求,我们改进这一条控制指令0x08。在操作TF卡或者U盘/以及FLASH时,按照的是文件存储的物理顺序指定,这点请用户注意。
- 在循环播放的过程中,可以正常的操作播放/暂停,上一曲、下一曲、音量调节,包括EQ等等,并且状态仍然是循环播放.可以通过指定单曲触发播放或者停止来关闭循环播放状态
3.4.4 指定播放设备[0x09]
1、我们的模块默认是支持4种类型的播放设备,只有设备在线才能指定设备去播放。设备是否在线,我们软件会自动检测,无需用户关系。
2、看下表,选择合适的指令发送
(3)、指定设备之后。模块会自动进入停止解码状态,等待用户指定曲目播放。从接收到指定设备到模块内部完成初始化文件系统。大概需要200ms。请等待200ms之后再发送指定曲目的指令。
指定播放设备-U盘 | 7E FF 06 09 00 00 01 xx xx EF | xx xx:代表校验 |
指定播放设备-TF卡 | 7E FF 06 09 00 00 02 xx xx EF |
|
指定播放设备-FLASH | 7E FF 06 09 00 00 04 xx xx EF |
|
指定播放设备-PC | 7E FF 06 09 00 00 05 xx xx EF | 指[下载]模式 |
指定播放设备-SLEEP | 7E FF 06 09 00 00 06 xx xx EF |
|
3.4.5 进入睡眠[0x0A]
进入睡眠模式 | 7E FF 06 0A 00 00 00 FE F1 EF | xx xx:代表校验 |
指定芯片进入睡眠之后,有两种方式对芯片或者模块进行唤醒
- 、指定一下播放的设备,指定播放U盘或者TF卡,或者FLASH都可以唤醒
- 、对当前的设备进行一次拔出,再插入也是可以直接唤醒
芯片或者模块进入睡眠之后,待机功耗大概在10MA。功耗依然较大,所以用户对功耗有要求的地方,请注意了。可以选择使用一个pmos管和一个三极管来控制芯片或者模块的供电,不需要的时候可以完全断电。如下图:
3.4.6 指定文件夹文件名播放[0x0F]
文件夹01的001xxx.mp3 | 7E FF 06 0F 00 01 01 xx xx EF |
文件夹11的100xxx.mp3 | 7E FF 06 0F 00 0B 64 xx xx EF |
文件夹99的255xxx.mp3 | 7E FF 06 0F 00 63 FF xx xx EF |
1、指定文件夹播放是我们制定的扩展功能,默认文件夹的命名方式为"01","11"这样的方式,为了系统的稳定性和歌曲切换的速度,每个文件夹下默认最大支持255首歌,最多支持99个文件夹
2、例如指定"01"文件夹的100xxx.MP3文件,串口发送的指令为:7E FF 06 0F 00 01 64 xx xx EF
DH:代表的是文件夹的名字,默认支持99个文件,即01 -- 99的命名
DL:代表的是曲目,默认最多255首歌,即0x01 ~ 0xFF
3、为了模块的标准性,必须同时指定文件夹和文件名,来锁定一个文件。单独指定文件夹或者单独指定文件名也是可以的,但是这样文件的管理会变差。指定文件夹和指定曲目是支持MP3、WAV
4、下面截两个图说明文件夹和文件名的指定[分左右两个图]
5、SPIFLASH的操作和TF卡以及U盘一致,只是SPIFLASH的空间有限,能存放的语音数量有限
这个还需要根据客户对音质的要求进行压缩语音,来存放更多的语音信息
3.4.8 全部循环播放指令[0x11]
循环播放开始 | 7E FF 06 11 00 00 01 xx xx EF | 循环播放所有曲目 |
循环播放停止 | 7E FF 06 11 00 00 00 xx xx EF | 停止循环播放曲目 |
1、争对一些需要循环播放根目录下面曲目的要求,我们加多这一条控制指令0x11。
2、在循环播放的过程中,可以正常的操作播放/暂停,上一曲、下一曲、音量调节,包括EQ等等
3、循环播放开始之后,模块会不停的播放设备里面的曲目,按照存储的物理顺序。播完一遍之后会继续再播放一边,直到接收到播放完成,或者暂停等等指令
3.4.9 播放停止指令[0x15][0x16]
停止播放广告 | 7E FF 06 15 00 00 00 FE E6 EF | 停止当广告,回到背景音乐继续播 |
停止播放 | 7E FF 06 16 00 00 00 FE E5 EF | 停止软件解码 |
1、在模块的播放过程中,我们有两种停止方式,一种是停止当前的插播广告,回到当前断点处继续播放背景音乐。另一种是停止所有的播放,包括背景音乐
2、假如当前在播放插播广告,这时发送停止指令0x16,芯片会停止所有播放任务.0x16的停止指令的优先级别是最高的,请用户留意
3.4.10 指定文件夹开始循环顺序播放[0x17]
指定文件夹循环播放 | 7E FF 06 17 00 00 02 FE E2 EF | 指定02文件夹循环播放 |
| 7E FF 06 17 00 00 01 FE E3 EF | 指定01文件夹循环播放 |
1、对于TF卡和U盘或者SPIFLASH,文件夹的命名方式必须是”01” --- “99”。不可以超过99
2、一旦指定文件夹循环之后,可以使用播放/暂停/上一曲/下一曲。这些操作命令都不会打断当前的文件夹循环播放状态。也就是说,发送下一曲指令之后,还是会循环当前的文件夹。
3、用户可以发送停止指令0x16来结束循环播放,返回至触发播放状态
3.4.11 随机播放设备文件[0x18]
随机播放 | 7E FF 06 18 00 00 00 xx xx EF | 整个设备的随机播放 |
1、此指令是随机播放设备里面存储的所有语音文件,是按照物理顺序随机播放,不分设备里面是否带有文件夹。并且播放的第一个语音文件一定是设备里面的第一个语音文件
3.4.12 对当前的曲目设置为循环播放[0x19]
循环播放开启关闭 | 7E FF 06 19 00 00 00 FE E2 EF | 单曲循环播放开启 |
| 7E FF 06 19 00 00 01 FE E1 EF | 单曲循环播放关闭 |
1、在播放的过程中发送此指令,会循环播放当前的曲目。如果当前是处理暂停或者停止状态,则芯片不会响应此指令
2、如果要关闭单曲循环播放,发送关闭的指令即可,这样会把当前的曲目播放完毕之后,就停止。
3.4.14 组合播放功能指令[0x21]
组合播放 | 7E FF 09 21 01 02 02 03 01 04 EF | 播放[1,2][2,3][1,4] |
| 7E FF 15 21 01 02 02 03 01 04 01 03 01 04 01 05 02 08 03 04 03 01 FE 9A EF | 带校验[1,2][2,3][1,4][1,3][1,4][1,5][1,8][3,4][3,1] |
| 7E FF 15 21 01 02 02 03 01 04 01 03 01 04 01 05 02 08 03 04 03 01 EF | [1,2][2,3][1,4][1,3][1,4][1,5][1,8][3,4][3,1] |
1、很多应用场合需要用到TTS的功能,譬如报时,报温度,报金额等等应用,如果用户拿我们的模块模仿简单的TTS功能的话,可能会在效果上面大打折扣,矛盾点就是在语音和语音之间的延时。直接按照一个一个文件的指定播放的话,会存在语音和语音之间的延时,这样是不能接受的。因此我们增加了组合播放的功能,同时最多支持指定播放30个语音,按照串口发送的顺序依次播放。
2、发送7E FF 15 21 01 02 02 64 01 04 01 40 01 06 01 07 02 08 03 04 03 02 EF这一帧数据,我们分析一下
CMD= 0x21 --- 查阅指令表
LEN = 0x15 = 21 个字节 ---FF 15 21 01 02 02 64 01 04 01 40 01 06 01 07 02 08 03 04 03 02[其中一段语音,由两个参数组成,即“文件夹编号”和“文件名编号”]
模块会依次播放01文件夹第002曲、02文件夹第100曲、01文件夹第004曲、01文件夹第064曲,01文件夹第006曲、01文件夹第007曲、02文件夹第008曲、03文件夹第004曲、03文件夹第002曲这9段语音。播放完毕就停止。其中每播放完一段语音都会有串口数据返回[按照物理编号]这样就实现了跨文件夹的语音组合播放功能。
特别注意,这里面所有的参数是16进制,请用户注意,如02 64 = 代表02文件夹里面的100.mp3这个文件
3、在组合播放的过程中,是允许用户进入播放暂停和设置音量,但是不允许指定上下曲。如果用户对组合播放的要求比较高的话,请用户对音源自行编辑一下,去掉音源头和尾的一些静音。这样就可以减少语音和语音之间的延时,可以采用“Adobe Audition CS5.5”或者“GoldWave.exe”等等专业音频软件制作。
4、有了这个功能,就可以很方便的实现“欢迎光临,现在时间是13年12月24日”这样的灵活播报方式,大大提高了产品的竞争力。
5、另外在组合播放的过程中,需要停止,可以直接发送停止指令。组合播放的过程中,不允许穿插其他的组合播放,要打断组合播放之前,必须先发送停止指令。
6、组合播放的文件,必须存放在“01”或者“02”或者其他“03-99”文件夹里面,文件必须重命名为“001xx.mp3或者其他,如下截图。组合播放一定是要带文件夹的根目录里面是不支持的,因为根目录是不利于文件管理
7、如果组合播放发送的指定文件播放,而设备中没有对应的文件的话,组合播放会在当前停止。
请一定让发送的指令能找到相对应的文件。一旦出错,就会停止在出错的文件位置
- 此指令比较长,所以我们去掉了反馈字节,也就是“FEEDBACK”请用户留意
- 在组合播放的过程中,busy引脚是持续拉低的,直到播放完成之后才会拉高,这个可以用来检测组合播放结束
3.4.16 多文件夹插播功能[0x25]
插播"ADVERT1"的文件夹,曲目为"001" | 7E FF 06 25 00 01 01 FE D4 EF |
插播"ADVERT1"的文件夹,曲目为"002" | 7E FF 06 25 00 01 02 FE D3 EF |
插播"ADVERT2"的文件夹,曲目为"001" | 7E FF 06 25 00 02 01 FE D3 EF |
1、在之前我们的插播基础上,我们增加了多文件夹的插播功能,命名的方式如上图
2、文件夹最多支持9个,也就是从ADVERT1 --- ADVERT9 ,文件夹的命令请一定按照我们给出的规则,否则会导致出错。请注意上图的文件夹命名格式
3、单个插播文件夹下的文件最大不能超过255,也就是“255xxx.MP3/WAV”,请注意上图的文件名的命名格式。
4、完善了插播的相关应用,如当前播放的文件处于单曲循环或者当前文件夹循环,即使有插播进来,也不会改变当前状态,还会是单曲循环或者文件夹循环播放,除非用户使用停止指令。
5、插播的原理请参见3.4.6.
6、此插播的功能,支持TF卡、U盘以及SPIFLASH。插播的文件仅仅允许在同一个设备内进行。
7、在停止状态,可以直接播放ADVERTn文件夹里面的曲目,就像指定文件夹文件名播放一样。
只要是播放ADVERTn文件夹里面的曲目,就不存在插播的问题,也就是说,当前播放的“ADVERT1”
里面的001文件,在没有播放完之前,还可以继续指定播放002文件[此时会打断001文件]。
3.4.17 复位和睡眠的说明[0x0A][0x0B][0x0C]
[进入睡眠模式] | 7E FF 06 0A 00 00 00 FE F1 EF |
[唤醒睡眠] | 7E FF 06 0B 00 00 00 FE F0 EF |
[模块复位] | 7E FF 06 0C 00 00 00 FE EF EF |
1、因为芯片是属于硬解码,所以低功耗部分一直是得不到很好的解决,所以用户朋友请注意,需要低功耗的场合,请一定使用控制芯片供电的方法,详细请参考3.4.5章节的说明
2、芯片的复位指令为软复位,这点请用户朋友注意一下,因为芯片内部集成了MAX831L的看门狗芯片,采用的是内部的独立RC震荡时钟,虽然不准,但是确实独立的,这样可以保证芯片在超强干扰下会自动复位。复位的时间为5S-8S。
3、在任何状态下,都可以发送复位指令让芯片复位。
3.4.18 指定文件夹循环随机播放[0x28]
指定01文件夹随机播放 | 7E FF 06 28 00 00 01 FE D2 EF |
指定02文件夹随机播放 | 7E FF 06 28 00 00 02 FE D1 EF |
指定03文件夹随机播放 | 7E FF 06 28 00 00 03 FE D0 EF |
1、指定文件夹随机播放是我们制定的扩展功能,默认文件夹的命名方式为"01","11"这样的方式,为了系统的稳定性和歌曲切换的速度,每个文件夹下默认最大支持255首歌,最多支持99个文件夹
2、下面截图说明文件夹的命名方式
3、SPIFLASH的操作和TF卡以及U盘一致,只是SPIFLASH的空间有限,能存放的语音数量有限
这个还需要根据客户对音质的要求进行压缩语音,来存放更多的语音信息