KT404A/C系列语音芯片参考程序&硬件设计注意事项

目录

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.net/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可调[此功能暂不开放]

  1. 支持外挂多种类型的功放,如3W、5W、10W等等
  2. 支持上电循环播放的功能
  3. 可以支持SPIFLASH[超小型封装]作为存储介质

1.3 应用

1、 车载导航语音播报

2、 公路运输稽查、收费站语音提示;

3、 火车站、汽车站安全检查语音提示;

4、 电力、通信、金融营业厅语音提示;

5、 车辆进、出通道验证语音提示;

6、 公安边防检查通道语音提示;     

8、 电动观光车安全行驶语音告示;   

9、 机电设备故障自动报警;

10、消防语音报警提示;

KT404A/C系列语音芯片参考程序&硬件设计注意事项_第1张图片

芯片选用的是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 管脚说明

KT404A/C系列语音芯片参考程序&硬件设计注意事项_第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口用

  1. 、只要需要外接喇叭的应用,即使是0.5W的,也是需要外加功放的
  2. 、DACL和DACR只能推动耳机,是芯片内部自己产品的音频信号,就像电脑的音频接口一样。


2.3测试简述

  1. 用户拿到芯片之后,可以直接插上USB线缆,对芯片进行下载语音,正常,插入USB线之后,电脑会显示如U盘插入一样的窗口。并且电脑会自动安装USB驱动,无需用户关心
  1. 如果下载语音完成之后,有两种选择测试
  1. 、用户可以直接拔掉USB线缆,再供电测试[注意不要插入电脑],相当于对芯片进行一次重启。[建议这样测试]
  2. 、下载完声音之后,可以直接使用外接电源或者USB充电头来供电测试
  1. 进入工作状态之后,就可以按照我们的按键表格,来进行芯片的简单测试了
  2. 如果用户需要简单的测试一下音质效果,搭建好电路之后,在芯片的第4脚,连接一个按键[微动开关]到地,按一下芯片就会播放第一曲

串口通讯协议

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

进行组网功能,串口的通信波特率可自行设置,默认为9600   

3.1 通讯格式

支持异步串口通讯模式,通过串口接受上位机发送的命令

    通讯标准:9600 bps
    数据位  :8

    停止位  :1
    校验位  :none
    流控制  :none

格式:$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 通讯指令

我们的通讯分为以下两大块

  1. 控制指令
  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>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是什么? 具备哪些功能? 有什么特色?

答疑

  1. 、KT404A是一颗专用于语音播报,支持外挂SPIFLASH,或者TF卡、U盘。的MP3语音芯片,标准SOP16封装,支持高音质输出
  2. 、支持串口UART控制,支持插播组合播报,非常适合游戏机、播报金额
  3. 、KT404A支持虚拟spiflash或者TF卡为U盘,方便拷贝语音到设备
  4. 、芯片是成熟5年的产品,组合播报金额或者插播都非常稳定,成本低廉
  5. 、spiflash和TF卡只能二选一,U盘是都支持
  6. 、SPIFLASH选用W25Qxx系列,最大支持16M字节
  7. 、TF卡和U盘最大支持32G,FAT32文件系统

问题

2、KT404A工作电压多少?电流是多少?串口波特率是多少?支持多大的喇叭?

答疑

  1. 、KT404A的工作电压是3.3V--5V,注意如果外接功放芯片,则建议用5V
  2. 、待机电流10mA,工作电流大概16mA。如果外接功放则视喇叭功率而定
  3. 、串口波特率是9600,注意是TTL信号
  4. 、支持喇叭的大小,视外接功放芯片的驱动能力而定

问题

3、KT404A芯片如何快速的测试?如何快速的上手使用呢

答疑

  1. 、当您把芯片焊接到PCB板上面的时候,如果硬件连接正常,连接USB到电脑是一定能看到“虚拟的盘符”,如果没有请检查硬件的连接
  2. 、芯片的第4脚为测试脚,可以接一个按键,一端接地一端连接4脚,按一下芯片会自动播放当前设备的音乐
  3. 、芯片的16脚为busy脚,有声音输出则为低电平,反之则为高电平
  4. 、以上都正常之后,可以使用CH340G的USB转TTL,连接芯片使用“串口调试助手”进行发送指令进行测试了
  5. 、以上都正常,就可以使用单片机去正常控制了

问题

4、请问资料如何下载呢?有问题需要咨询找谁呢?

答疑

(1)、您好,资料在“宝贝详情”里面有专用下载链接[注意要使用PC才能看到]

(2)、无论是售前还是售后,有技术问题随时拨打“13510250437 滕工

问题

5、KT404A如何下载语音到存储器里面呢?  拷贝是按照什么顺序呢?

答疑

  1. 、芯片有专用的USB接口,可以连接PC电脑,芯片会自动把存储器虚拟成为U盘,您就可以像拷贝U盘一样,往里面拷贝语音
  2. 拷贝的顺序,是先考进去的编号为1,后考进去的编号为2,以此类推
  3. 、还有一种是指定文件夹和文件名的方式,这样就不需要按照顺序。芯片会按照文件夹和文件名去查找对应的文件

问题

6、KT404A我焊接到PCB板上面之后,为什么没有任何反应呢?

答疑

  1. 、这个问题比较模糊,所以需要多重判断,才能找出问题来
  2. 、首先看一下芯片的供电正常不正常,也就是芯片的12脚,输入电压是否是3.3--5.2V之间
  3. 、在看看芯片的11脚,是否有3.3V的电压输出。如果超过3.5V以上则极有可能芯片被击穿了,只能更换了
  4. 、然后再连接电脑,看看电脑端是否有USB设备显示。同时看看spiflash里面是否有音乐文件

问题

  1. KT404A我焊接到PCB板上面之后,为什么插入USB连接电脑显示如下呢?
  2. KT404A/C系列语音芯片参考程序&硬件设计注意事项_第3张图片

答疑

  1. 、首先可以明确,就是KT404A和电脑之间的通讯是正常的,也就是KT404A芯片正常工作起来了
  2. 、连接电脑显示这个,不能格式化,主要的问题在于
  3. 、spiflash是否正确
  4. 、以及spiflash和KT404A的连接是否正确
  5. 、一定要注意一下:flash要选25Q80,25Q32,具体的可以看看我们的手册
  6. 、同时spiflash和KT404A之间的连接,有个电阻是100欧姆
  7. 、这个问题主要是硬件问题,和404A芯片基本没关系

你可能感兴趣的:(语音芯片,单片机,物联网,51单片机)