目录
1.概述
1.1 简介
KT404A是一个提供串口的语音芯片,完美的集成了MP3、WAV的硬解码。同时软件支持工业级别的串口通信协议,以SPIFLASH作为存储介质,用户可以灵活的选用其中的任何一种设备作为语音的存储介质。通过简单的串口指令即可完成播放指定的语音,以及如何播放语音等功能,无需繁琐的底层操作,使用方便,稳定可靠是此款产品的最大特点。
1.2 功能
1.3 应用
2.1 参数说明
2.2 管脚说明
2.3测试简述
3.1 通讯格式
3.2 通讯指令
3.2.1 控制指令
3.2.2 查询指令
1.概述
1.1 简介
KT404A是一个提供串口的语音芯片,完美的集成了MP3、WAV的硬解码。同时软件支持工业级别的串口通信协议,以SPIFLASH作为存储介质,用户可以灵活的选用其中的任何一种设备作为语音的存储介质。通过简单的串口指令即可完成播放指定的语音,以及如何播放语音等功能,无需繁琐的底层操作,使用方便,稳定可靠是此款产品的最大特点。
无需任何烧录器,无需任何软件,USB直接烧写FLASH。
同时可以以SPIFLASH为存储介质的U盘功能,后面章节详细说明
KT404A语音芯片_PTUF4FS模块_完整资料V2_20200529.zip-C文档类资源-CSDN下载KT404A是一个提供串口的语音芯片,完美的集成了MP3、WAV的硬解码。同时软件支持工业级别的串口更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn/download/qyvhome/51253593
1.2 功能
1、支持采样率(KHz):8/11.025/12/16/22.05/24/32/44.1/48
2、24位DAC输出,动态范围支持90dB,信噪比支持85dB
3、最大支持16M字节的SPIFLASH。例如W25Q16[2M字节]、W25Q128[16M字节]
4、多种控制模式,并口控制模式、串口模式、AD按键控制模式
5、Miniusb接口更新语音文件,无需安装任何软件。支持XP和WIN7系统。
6、支持组合播放功能,可以实现报时、报温度,在一定程度上可以替代一些昂贵的TTS方案
7、30级音量可调,5级EQ可调[此功能暂不开放]
- 支持外挂多种类型的功放,如3W、5W、10W等等
- 支持上电循环播放的功能
- 可以支持SPIFLASH[超小型封装]作为存储介质
1.3 应用
1、 车载导航语音播报
2、 公路运输稽查、收费站语音提示;
3、 火车站、汽车站安全检查语音提示;
4、 电力、通信、金融营业厅语音提示;
5、 车辆进、出通道验证语音提示;
6、 公安边防检查通道语音提示;
8、 电动观光车安全行驶语音告示;
9、 机电设备故障自动报警;
10、消防语音报警提示;
芯片选用的是SOC方案,集成了一个16位的MCU,以及一个专门针对音频解码的aDSP,采用硬解码的方式,更加保证了系统的稳定性和音质。小巧的封装尺寸更加满足嵌入其它产品的需求
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.7V-5.2V[7805后级串一个二极管为最佳] |
额定电流 | 10MA[静态] |
低功耗电流 | <200uA |
功放功率 | 负载32欧姆0.25W[只支持驱动耳机][不支持直接驱动喇叭] |
尺寸 | 参见封装章节 |
工作温度 | [-40度] -- [80度] |
湿度 | 5% ~ 95% |
主芯片型号 | KT404A[SOP16] |
2.2 管脚说明
引脚序号 | 引脚名称 | 功能描述 | 备注 | |
1 | GPIOA0 | SPI的数据口 | 可做GPIO | |
2 | GPIOA1 | SPI的时钟口 | 可做GPIO | |
3 | GPIOA2 | 通用输入输出口 | 可做GPIO | |
4 | GPIOA3 | ADC/通用输入输出口 | 可做AD口 | |
5 | GPIOA4 | USB接口/通用输入输出口 | USB设备 | |
6 | GPIOA5 | USB接口/通用输入输出口 | USB设备 | |
7 | GPIOA6 | 音频信号偏置 | 音频信号偏置 | |
8 | GND | 模拟地 | 音频信号地 | 8 |
9 | DACR | 右声道输出 | 峰峰值为3V | 9 |
10 | DACL | 左声道输出 | 峰峰值为3V | |
11 | VDDIO | 3.3V LDO输出[是KT404A的输出] | 最大100MA | |
12 | LDO5V | 电源输入 | 4.2V为最佳 | |
13 | GND | 数字地 | ||
14 | GPIOB1 | 通用输入输出口 | 作为IO口用 | |
15 | GPIOB0 | 通用输入输出口 | 作为IO口用 | |
16 | GPIOA7 | 通用输入输出口 | 作为IO口用 |
- 、只要需要外接喇叭的应用,即使是0.5W的,也是需要外加功放的
- 、DACL和DACR只能推动耳机,是芯片内部自己产品的音频信号,就像电脑的音频接口一样。
2.3测试简述
- 用户拿到芯片之后,可以直接插上USB线缆,对芯片进行下载语音,正常,插入USB线之后,电脑会显示如U盘插入一样的窗口。并且电脑会自动安装USB驱动,无需用户关心
- 如果下载语音完成之后,有两种选择测试
- 、用户可以直接拔掉USB线缆,再供电测试[注意不要插入电脑],相当于对芯片进行一次重启。[建议这样测试]
- 、下载完声音之后,可以直接使用外接电源或者USB充电头来供电测试
- 进入工作状态之后,就可以按照我们的按键表格,来进行芯片的简单测试了
- 如果用户需要简单的测试一下音质效果,搭建好电路之后,在芯片的第4脚,连接一个按键[微动开关]到地,按一下芯片就会播放第一曲
串口通讯协议
串口作为一种在控制领域常用的通信,我们进行了工业级别的优化,加入的帧的校验、重发、错误处理等措施,大大加强通信的稳定性和可靠性,同时可以在此基础上扩展更加强大的RS485
进行组网功能,串口的通信波特率可自行设置,默认为9600
3.1 通讯格式
支持异步串口通讯模式,通过串口接受上位机发送的命令 停止位 :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 通讯指令
我们的通讯分为以下两大块
- 控制指令
- 查询芯片的参数以及状态
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 |
/******************************************************************************************************************
+--------------------------------------------------+
主函数部分
+--------------------------------------------------+
- 实现功能:
- 目前进展:
- 日期 :2013-05-06
- 作者 :
- 运行环境:STC 晶振:11.0592M 波特率:9600
- 备注 :在普中科技的51开发板上调试OK --- STC89C516RD+
1、实现芯片上电分别指定播放第一曲和第二曲,基本的程序供用户测试
2、该测试程序必须是模块或者芯片方案中,有设备在线,譬如U盘、TF卡、FLASH等等
3、
******************************************************************************************************************/
#include "STK6037.h"
//运行晶振:11.05926MHZ
#define TIMER0_H (65536-1800)/256//定时2Ms
#define TIMER0_L (65536-1800)%256
#define SYS_Fosc 11059200 //晶振频率
#define COMM_BAUD_RATE 9600 //串口波特率
#define OSC_FREQ 11059200 //11059200
static INT8U Send_buf[10] = {0} ;
static INT8U Recv_buf[10] = {0} ;
static INT8U SendDataLen = 0 ;
static INT8U ResendDataLen = 0 ;
/******************************串口1的波特率********************************/
//T1作波特率发生器
//在波特率加倍情况下
#define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254 FF
#define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 254 FE
#define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 253 FD
#define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 252 FC
#define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 250 FA
/*****************************************************************************************************
- 功能描述:10us的延时函数
- 隶属模块:常用函数库(内部)
- 参数说明:无
- 返回参数:无
- 注: 在这里的运行环境是51,晶振为12MHZ
*****************************************************************************************************/
void Delay_Us(INT32U z)
{
while(z--);
}
/***********************毫秒级别延时************************/
void Delay_Ms(INT32U z)
{
INT32U x=0 , y=0;
for(x=110 ; x>0 ;x--)
for(y=z; y>0;y-- );
}
/*****************************************************************************************************
- 功能描述: 串口1初始化
- 隶属模块: 外部
- 参数说明: 无
- 返回说明: 无
- 注: 都是9600波特率
*****************************************************************************************************/
void Serial_init(void)
{
TMOD = 0x20; // 设置 T1 为波特率发生器
SCON = 0x50; // 0101,0000 8位数据位, 无奇偶校验
PCON = 0x00; //PCON=0;
TH1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);//设置为9600波特率
TL1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);
TR1 = 1; //定时器1打开
REN = 1; //串口1接收使能
ES = 1; //串口1中断使能
}
/********************************************************************************************
- 功能描述: 串口发送一个字节
- 隶属模块: 外部
- 参数说明:
- 返回说明:
- 注:
********************************************************************************************/
void Uart_PutByte(INT8U ch)
{
SBUF = ch;
while(!TI){;}
TI = 0;
}
/*****************************************************************************************************
- 功能描述: 串口发送一帧数据
- 隶属模块: 内部
- 参数说明:
- 返回说明:
- 注:无
*****************************************************************************************************/
void SendCmd(INT8U len)
{
INT8U i = 0 ;
Uart_PutByte(0x7E); //起始
for(i=0; i<len; i++)//数据
{
Uart_PutByte(Send_buf[i]) ;
}
Uart_PutByte(0xEF) ;//结束
}
/********************************************************************************************
- 功能描述:求和校验
- 隶属模块:
- 参数说明:
- 返回说明:
- 注: 和校验的思路如下
发送的指令,去掉起始和结束。将中间的6个字节进行累加,最后取反码
接收端就将接收到的一帧数据,去掉起始和结束。将中间的数据累加,再加上接收到的校验
字节。刚好为0.这样就代表接收到的数据完全正确。
********************************************************************************************/
void DoSum( INT8U *Str, INT8U len)
{
INT16U xorsum = 0;
INT8U i;
for(i=0; i<len; i++)
{
xorsum = xorsum + Str[i];
}
xorsum = 0 -xorsum;
*(Str+i) = (INT8U)(xorsum >>8);
*(Str+i+1) = (INT8U)(xorsum & 0x00ff);
}
/********************************************************************************************
- 功能描述: 串口向外发送命令[包括控制和查询]
- 隶属模块: 外部
- 参数说明: CMD:表示控制指令,请查阅指令表,还包括查询的相关指令
feedback:是否需要应答[0:不需要应答,1:需要应答]
data:传送的参数
- 返回说明:
- 注:
********************************************************************************************/
void Uart_SendCMD(INT8U CMD ,INT8U feedback , INT16U dat)
{
Send_buf[0] = 0xff; //保留字节
Send_buf[1] = 0x06; //长度
Send_buf[2] = CMD; //控制指令
Send_buf[3] = feedback;//是否需要反馈
Send_buf[4] = (INT8U)(dat >> 8);//datah
Send_buf[5] = (INT8U)(dat); //datal
DoSum(&Send_buf[0],6); //校验
SendCmd(8); //发送此帧数据
}
void main()
{
Delay_Us(1) ;
Delay_Ms(1) ;
Serial_init() ;
Delay_Ms(1000) ;//延时大概6S
Uart_SendCMD(0x03 , 0 , 0x01) ;//播放第一首
Delay_Ms(1000) ;//延时大概6S
Uart_SendCMD(0x03 , 0 , 0x02) ;//播放第二首
Delay_Ms(1000) ;//延时大概6S
Uart_SendCMD(0x03 , 0 , 0x04) ;//播放第四首
while(1) ;
}
一、KT404A常见问题集锦:
问题 | 1、KT404A是什么? 具备哪些功能? 有什么特色? |
答疑 |
|
问题 | 2、KT404A工作电压多少?电流是多少?串口波特率是多少?支持多大的喇叭? |
答疑 |
|
问题 | 3、KT404A芯片如何快速的测试?如何快速的上手使用呢 |
答疑 |
|
问题 | 4、请问资料如何下载呢?有问题需要咨询找谁呢? |
答疑 | (1)、您好,资料在“宝贝详情”里面有专用下载链接[注意要使用PC才能看到] (2)、无论是售前还是售后,有技术问题随时拨打“13510250437 滕工” |
问题 | 5、KT404A如何下载语音到存储器里面呢? 拷贝是按照什么顺序呢? |
答疑 |
|
问题 | 6、KT404A我焊接到PCB板上面之后,为什么没有任何反应呢? |
答疑 |
|
问题 |
|
答疑 |
|
更多推荐
KT404A/C系列语音芯片参考程序&硬件设计注意事项
发布评论