几年前一直使用蜂鸣器这种神奇的几十年代年的发音产品,直到一年前在X宝碰倒了HSC001 这个很好用的语言模块,才使得MCU的视“听”发生绝对性改变。前几天又用了一次这块芯片,所以就再记录一片日志。
HSC001资料如下,博主使用日志见其后。
HSC001 模块串口通讯协议
JOLLY编写
1.1 简介
HSC001 是一个提供串口的 MP3 芯片,完美的集成了 MP3、WAV 的硬解码。同时软件支持 USB /SPI FLASH 驱动,支持 FAT16、FAT32 文件系统。通过简单的串口指令即可完成播放指定的音乐,以及如何播放音乐等功能,无需繁琐的底层操作,直接播放 SPI FLASH 内部歌曲,直接从电脑 USB 下载进 SPI FLASH,使用方便,稳定可靠是此款产品的最大特点。
另外该芯片也是深度定制的产品,专为 USB 读卡器,固定语音播放领域开发的低成本解决方
案。
1.2 功能
1、支持采样率(KHz):8/11.025/12/16/22.05/24/32/44.1/48
2、24 位 DAC 输出,动态范围支持 90dB,信噪比支持 85dB
3、完全支持 FAT16、FAT32 文件系统,最大支持 32G 的 U 盘、512K-128M 字节的 spi flash
4、多种控制模式,串口模式、AD 按键控制模式
5、广播语插播功能,可以暂停正在播放的背景音乐
6、音频数据按文件夹排序,最多支持 255 个文件夹,每隔文件夹可以分配 1000 首歌曲
7、30 级音量可调,5 级 EQ 可调
8、连接电脑可以显示盘符进行更新内容;
9、可以通过单片机串口进行控制播放指定的音乐;
10、在按键模式下,可以进行播放模式选择:单曲循环,大循环;
11、播放音量,播放曲目记意数据存于 FLASH 内部;
1.3 应用
1、车载导航语音播报
2、公路运输稽查、收费站语音提示;
3、火车站、汽车站安全检查语音提示;
4、电力、通信、金融营业厅语音提示;
5、车辆进、出通道验证语音提示;
6、公安边防检查通道语音提示;
7、多路语音告警或设备操作引导语音;
8、电动观光车安全行驶语音告示;
9、机电设备故障自动报警;
10、消防语音报警提示;
11、自动广播设备,定时播报
2.1 硬件参数
名称 | 参数 |
MP3文件格式 | 1、支持所有比特率11172-3和 ISO13813-3 layer3音频解码 |
2、采样率支持(KHZ):8/11.025/12/16/22.05/24/32/44.1/48 | |
3、支持 Normal、Jazz、Classic、Pop、Rock 等音效 | |
USB 接口 | 2.0标准 |
UART 接口 | 标准串口,TTL 电平,波特率可设 |
输入电压 | 供电在3.3V-5.4V 最佳为4.2V |
额定电流 | 15ma[不带 U 盘] |
尺寸 | 见5.芯片封装 |
工作温度 | -40度~70度 |
湿度 | 5% ~ 95% |
2.2 芯片管脚说明
引脚序号 | 引脚名称 | 功能描述 | 备注 |
1 | DAC-OUT+ | 功放输出正 | 外接喇叭(3W)输出 |
2 | GND | 地 | 电源地 |
3 | VDD | 电源输入 | 3.3V-5.4V |
4 | DAC-OUT- | 功放输出负 | 外接喇叭(3W)输出 |
5 | MUTE | 低电平时播放声音(L) | 静音控制 |
6 | USB-DP | USB-DP | 用于播放 USB 和下载音乐 |
7 | USB-DM | USB-DM | 用于播放 USB 和下载音乐 |
8 | ADK | 按键 | 多组 ADK 按键 |
9 | TX | UART 串行数据输出 | TTL 电平(3.3V) |
10 | RX | UART 串行数据输入 | TTL 电平(3.3V) |
- 串口通讯协议
串口作为一种在控制领域常用的通信,我们进行了工业级别的优化,加入的帧的校验、重发、错误处理等措施,大大加强通信的稳定性和可靠性,同时可以在此基础上扩展更加强
大的 RS485 进行组网功能,串口的通信波特率可自行设置,默认为 9600 可修改为 19200
115200 等。
3.1 通讯格式
支持异步串口通讯模式,通过串口接受上位机发送的命令
通讯标准:9600 bps 数据位 :1 校验位 :none 流控制 :none
格式:$S Len CMD para1 para2 $O | ||
$S | 起始位0x7E | 每条命令反馈均以$开头,即0x7E |
Len | len 后字节个数 | Len + CMD + para1 + para2 |
CMD | 命令字 | 表示具体的操作,比如播放/暂停等等 |
para1 | 参数1 | 查询的数据高字节(比如歌曲序号) |
para2 | 参数2 | 查询的数据低字节 |
$O | 结束位 | 结束位0xEF |
例如,如果我们指定播放,就需要发送:7E 04 41 00 01 EF
数据长度为 4 ,这 4 个字节分别是[04 41 00 01] 。不计算起始、结束。
连续播放【7E 04 41 00 01 EF】【7E 04 41 00 02 EF】【7E 04 41 00 03 EF】… 十段
播放完暂停
3.2 通讯指令
1、直接发送的指令,每发一条正确指令都会返回”OK”错误返回”err”
CMD 详解(指令) | 对应的功能 | 参数(ASCK 码) |
0x01 | 播放 | 无 |
0x02 | 暂停 | 无 |
0x03 | 下一曲 | 无 |
0x04 | 上一曲 | 无 |
0x05 | 音量加 | 无 |
0x06 | 音量减 | 无 |
0x07 | 待机 | 无 |
0x09 | 正常工作 | 无 |
0x0A | 快进 | 无 |
0x0B | 快退 | 无 |
0x0C | PP | 无 |
0x0D | 无 | |
0x0E | STOP | 无 |
0x0F | 无 |
(8 位)和指令(无设定指令)
例如,播放,发送:7E 02 01 EF 例如,暂停,发送:7E 02 02 EF 例如,下一曲,发送:7E 02 03 EF
2、查询系统的参数,每发一条正确指令都会返回”OK”错误返回”err”
CMD 命令详解
(查询) |
对应的功能 | 参数(ASCK 码)(16位) |
0x10 | 查询播放状态 | 0 (STOP)1(PLAY)2(PAUS)3(FF)4(FR) |
0x11 | 查询音量大小 | 0-30(断电记忆) |
0x12 | 查询当前 EQ | 0-5(NOPOPROCKJAZZCLASSICBASS) (断电记忆) |
0x13 | 查询当前播放模式 | 0-4(ALLFOLDERONERANDOM) (断电记忆) |
0x14 | 查询版本号 | 1.0 |
0x15 | 查询 SD 卡的总文件数 | 1-65535 |
0x16 | 查询 UDISK 总文件数 | 1-65535 |
0x17 | 查询 FLASH 的总文件数 | 1-65535 |
0x18 | 查询当前播放设备 | 0:USB 1:SD 2:SPI |
0x19 | 查询 TF 卡的当前曲目 | 1-65536(断电记忆) |
0x1A | 查询 UDISK 的当前曲目 | 1-65536(断电记忆) |
0x1B | 查询 FLASH 的当前曲目 | 1-200(断电记忆) |
0x1C | 查询当前播放歌曲的时间 | 返回时间(秒) |
0x1D | 查询当前播放歌曲总时间 | 返回时间(秒) |
0x1E | 查询当前播放歌曲歌名 | 返回歌曲名(SPI 内部歌曲无法返回) |
0x1F | 查询当前播放文件夹内总数量 | 0-65536 |
例:读取音量大小发送【7E 02 11 EF】 则直接返回音量大小(十六位) 注:1.当为单曲播放时,放完一曲停止,并返回 IDLE,全盘播放时会一直播放,放完最后一曲,播放第一曲,单曲和全盘播时断电均有记忆,(音量,曲目,播放模式) 默认最大声音和单曲播放。
2.支持摇控器控制,码值 00FF
3.返回’err’时表示指令无法识别
3、设置系统的参数(写入 8 位 HEX),每发一条正确指令都会返回”OK”错误返回”err”
CMD 详解
(指令) |
对应的功能 | 参数(8位 HEX) |
0x31 | 设置音量 | 0-30 |
0x32 | 设置 EQ | 0-5(NOPOPROCKJAZZCLASSICBASS) (断电记忆) |
0x33 | 设置循环模式 | 0-4(ALLFOLDERONERANDOM) (断电记忆) |
0x34 | 文件夹切换 | 1 下一个文件夹 0上一个文件夹 |
0x35 | 设备切换 | 0-4(U/TF/AUX/SLEEP/FLASH) |
0x36 | ADK 软件加上拉 | 1开上接,0关上拉,默认关上拉 |
0X37 | ADK 使能 | 1开起,0关闭(默认为1) |
0X38 | 静音电平切换 | 1为高电平静音,0为低电平静音(默认为 1) |
(8 位设定) 例如,选音量大小,发送:7E 03 31 1E EF 7E 起始地址 03 位长度,31 指令,1E 为
30,EF 结束地址 音量设定 30
4、文件选择(写入 16 位 HEX),每发一条正确指令都会返回”OK”错误返回”err”
CMD详解
(指令) |
对应的功能 | 参数(16位HEX) |
0x41 | 选择播放曲目 | 1-最大曲目 |
0x42 | 指定文件夹曲目播放 | 高八位为文件夹号,低八位为歌曲名字 |
(16 位设定) 例如,选指定歌曲,发送:7E 04 41 00 08 EF 7E 起始地址 04 位长度,41 指令,00 08
第 8 曲,EF 结束地址 连续播放,发送:
7E 04 41 00 01 EF
7E 04 41 00 02 EF
7E 04 41 00 03 EF
7E 04 41 00 04 EF
播放第 1,2,3,4 曲,最多连续播放 10 曲。
指定文件夹播放,文件夹名必须为 0-99 文件号,内总曲目名字必须改为 1-255.MP3/WAV 开机后发播放,上一曲,下一曲,都可以播放,默认播放 SPI FLASH ,没带 SPI FLASH
播放以有设备,开机后,后插入设置,系统会自动转为所插设置模式,发播放指令或按键可以播放。
4. 模块原理图
附MSP430F5529代码:
voice.h #ifndef VOICE_H_ #define VOICE_H_ void delay_voice(unsigned int ms); void INIT_UART(); void Set_Voice(unsigned char i); #endif
voice.c /* * voice.c * * Created on: 2015-5-22 * Author: TM */ #include "msp430F5529.h" #include "voice.h" void delay_voice(unsigned int ms) { unsigned int i,j; for( i=0;iRXed character while (!(UCA0IFG&UCTXIFG)); UCA0TXBUF = 0x04; // TX -> RXed character while (!(UCA0IFG&UCTXIFG)); UCA0TXBUF = 0x41; // TX -> RXed character while (!(UCA0IFG&UCTXIFG)); UCA0TXBUF = 0x00; // TX -> RXed character while (!(UCA0IFG&UCTXIFG)); UCA0TXBUF = i; // TX -> RXed character while (!(UCA0IFG&UCTXIFG)); UCA0TXBUF = 0xEF; // TX -> RXed character } #pragma vector=USCI_A0_VECTOR __interrupt void USCI_A0_ISR(void) { UCA0IFG&=~(UCRXIFG ); }