MSP430F5529&HSC001 语音模快-使用教程

几年前一直使用蜂鸣器这种神奇的几十年代年的发音产品,直到一年前在X宝碰倒了HSC001 这个很好用的语言模块,才使得MCU的视“听”发生绝对性改变。前几天又用了一次这块芯片,所以就再记录一片日志。

HSC001资料如下,博主使用日志见其后。

111

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 芯片管脚说明

222

 

引脚序号 引脚名称 功能描述 备注
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)
  1. 串口通讯协议

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

大的 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 详解

(指令)

对应的功能 参数(8HEX)
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.    模块原理图

333

附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;i RXed 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 );

}