目录

1.概述

1.1 简介 

KT148A是一款32位的DSP语音芯片,标准的SOP8封装。内置420KByte的语音空间,最大支持420秒的语音长度,支持多段语音,同时支持直驱0.5W的扬声器,目前该芯片的优势如下:

1.2 功能简述

2.参数说明

2.1 管脚说明

2.2 GPIO电气特性

2.3 GPIO的内部特性

2.4 参考电路

3.1 通讯格式

3.2 通讯指令

4.2 通讯举例F3--组合播放

4.3 通讯指令F0描述

4.4 通讯细节注意事项

5.1 第1步产生音频文件

5.2 第2步--转换音频文件

2.3 第3步--使用串口下载工具下载音频


1.概述

1.1 简介 

KT148A是一款32位的DSP语音芯片,标准的SOP8封装。内置420KByte的语音空间,最大支持420秒的语音长度,支持多段语音,同时支持直驱0.5W的扬声器,目前该芯片的优势如下:

  1. 性价比高,相比较传统的OTP芯片来说,工艺的提升大大降低了成本,同时芯片可重复烧录
  2. 用户可以自行的更换声音,通过电脑端的串口即可自己完成,无需其他昂贵的工具
  3. 芯片自带足够的空间,可以追求更高的音质效果

1.2 功能简述

1. 32 位 DSP 语音芯片、5MHZ的内部振荡,PLL到120MHZ;

2. 工作电压 2.0~5.5V; 注意低于3.3V的供电,硬件上有细节的区别

3. 待机功耗小于 25ua;另有低功耗模式1.5uA

4. 16bit 的 PWM输出、可直接驱动 8R0.5W 喇叭;

5. 提供工具自行转换音频格式,全部用户可以自己操作,非常简单

6. 16KHZ 下最大可以支持200秒。8KHZ 下最大可以支持400秒

7. 客户可以通过电脑端的工具软件,通过串口直接更换语音内容

8. 支持一线串口控制,当然可以根据需求订制各种协议

9. 支持 224 段地址,有更多需求可以扩展;

10.具有硬件 iic接口、UART 接口。可以为客户定制各类功能。

11.芯片具备重复烧录的能力,所以任何时候不用担心测试不完整导致批量性的问题

2.参数说明

芯片选用的是SOC方案,集成了一个16位的MCU,以及一个专门针对音频解码的aDSP,采用硬解码的方式,更加保证了系统的稳定性和音质。小巧的封装尺寸更加满足嵌入其它产品的需求

2.1 管脚说明

IOS spine封装_串口

Pad No

Pad Name

ATTR

Description 描述

1

GND

Power

电源负极

2

PB9

I/O

Busy信号=播放输出低空闲输出高

复用串口下载连接MCU的RX

3

PB1

I/O

[ONELINE-DATA]一线串口输入端

复用串口下载连接MCU的TX

4

PB0

I/O

KEY按键

5

SPK1

Out

不分正负,支持8欧姆0.5W

6

SPK2

Out

不分正负,支持8欧姆0.5W

7

VDDIO

Power

芯片内部的LDO输出,最大100mA

8

VBAT

Power

电源正极

供电的注意事项:

  1. 建议给芯片的供电,做到5V供电,电压越高芯片驱动喇叭的功率也越高,声音也越大
  2. 如果是[3.3--4.2V]锂电池的场景,电源正极直接进芯片的8脚即可
  3. 如果是干电池的供电场景,电源正极也是直接进芯片的8脚
  4. 如果需要超低电压供电,如2V--3V之间的纽扣电池,建议芯片的7脚和8脚直接短路,再连接电源正极

2.2 GPIO电气特性

IO输入特性

符号

参数

最小

典型

最大

单位

测试条件

VIL

Low-Level Input Voltage

-0.3

 -

0.3*VDD

V

VDDIO=3.3V

VIH

High-Level Input Voltage

0.7VDDIO

-

VDDIO+0.3

V

VDDIO=3.3V

IO输出特性

符号

参数

最小

典型

最大

单位

测试条件

VOL

Low-Level Output Voltage

 -

 -

0.33

V

VDDIO=3.3V

VOH

High-Level Output Voltage

2.7

-

 -

V

VDDIO=3.3V

2.3 GPIO的内部特性

Port

General

Output

High

Drive

Internal

Pull-Up

Resistor

Internal

Pull-Down

Resistor

Comment

PB0,PB1

8mA

 64mA

10K

60K

1、PB0 & PB1 default pull down

2、internal pull-up/pull-down

resistance | accuracy ±20%

PB9  

8mA


10K

60K

2.4 参考电路

  1. 一线通讯协议

目前芯片支持一线串口通讯协议,采用的也是高低电平时间宽度来确定0或者1 。

3.1 通讯格式

IOS spine封装_串口_02

先把数据线DATA,也就是ONELINE,拉低 6ms 后,发送 8 位数据,先发送低位,再发送高位。使用高电平和低电平比例来表示每个数据位的值。

IOS spine封装_串口_03

注意:必须高电平在前,低电平在后。

推荐使用 200us:600us。取值范围:窄脉冲=[150us--400us]    宽脉冲[500us--1000us]

注意使用 3:1 和 1:3 电平比例以保障通讯稳定。

注意起始的6ms低电平,初次调试时,尽量用示波器或者逻辑分析仪看一下,误差在10%左右都能接受

1、0x00H到0xDFH为声音地址码或定义功能码。

2、0xFE为语音停止码,发送该命令可以停止播放语音。

3、编码之间的间隔须大于20ms

3.2 通讯指令

NO.序号

Data编码

Voice语音表

0

0x00

保留

1

0x01

声音1

2

0x02

声音2

3

0x03

声音3



……

224

0xE0~0xEF

15级音量,0xE0H为最小音量0,0xEFH最大音量 (上电默认)。

(若需要调节音量,则先发音量码,隔20ms再发声音码)

225

0xF0

关机。进入超低功耗状态=1.7uA,详见4.3章节

进入此状态之后,还需要控制芯片,则需要先拉低DATA脚40ms

目的是唤醒芯片,就可以正常发指令控制了,

242

0xF2

循环码 -- 详见4.1章节

若需要循环某个声音,则先发声音码,隔20ms再发循环码)

243

0xF3

连码播放 -- 详见4.2章节

F3H+语音地址 A,语音地址 B,语音地址 C,…  在播放地址 A

的时候,收到后面的码不打断,播放完 A,就播放 B,然后播放 C…。F3

与地址之间需要加 20ms 的延时。而一组连码地址与下一组地址最大需要

40ms 延时(“F3+语音地址”为一组连码地址)

254

0xFE

停止码

  1. 参考例程
/*******************************************************************************

 - 函数说明:一线通数据发送【注意调试的时候,用示波器或者逻辑分析仪看一下脉冲宽度】

 - 隶属模块:内部

 - 参数说明:dat = 待发送的数据

 - 返回说明:无

********************************************************************************/

#define IO1_HIGH() JL_PORTA->DIR &= ~BIT(6);JL_PORTA->OUT |=  BIT(6);

#define IO1_LOW() JL_PORTA->DIR &= ~BIT(6);JL_PORTA->OUT &= ~BIT(6);



void oneline_send_one_data(u8 dat)

{

    u8 i = 0 ;

    IO1_LOW() ;/*现将总线拉低*/

    udelay(5000) ;/*延时6MS --- 这里就是发起通讯的起始信号*/

    CPU_SR_ALLOC();//关中断--芯片不同,可能接口不同

    OS_ENTER_CRITICAL();//关中断

    for(i=0 ; i<8 ;i++){

        if(dat & 0x01){

            IO1_HIGH() ;

            udelay(500);/*延时600us*/

            IO1_LOW();

            udelay(170) ;/*延时200us*/

        }else{

            IO1_HIGH() ;

            udelay(170);/*延时200us*/

            IO1_LOW();

            udelay(500) ;/*延时600us*/

        }

        dat = dat >> 1 ;/*发送的时候,先发送最高位,再发送次高位,以此类推*/

    }

    IO1_HIGH() ;/*空闲时将该脚拉高即可*/

    OS_EXIT_CRITICAL();//开中断

    /*同时注意,芯片初始化的时候,请将信号脚拉高。*/

}
oneline_send_one_data(0x05);//对应播放第5段声音 
1.  通讯举例F2--循环播放
void oneline_test_CMD_F2(void){
    oneline_send_one_data(0x01) ;
    udelay(20) ;/*延时25ms*/
    oneline_send_one_data(0xF2) ;   
    udelay(20) ;/*延时25ms*/
}     实现的效果,就是第一段声音,循环播放,不停止。如果需要停止,可以发送FE指令
4.2 通讯举例F3--组合播放
void oneline_test_CMD_F3(void){
    oneline_send_one_data(0xF3) ;
    udelay(20) ;/*延时25ms*/
    oneline_send_one_data(0x01) ;   
    udelay(20) ;/*延时25ms*/
    oneline_send_one_data(0x02) ;   
    udelay(20) ;/*延时25ms*/
    oneline_send_one_data(0x03) ;   
    udelay(20) ;/*延时25ms*/
}   组合播放第一段、第二段、第三段声音,依次按照顺序播放。如果需要停止,可以发送FE指令

同时,在组合播放的过程中,接收到新的组合播放数据,会停止当前的组合播放,转去播放新的指令

4.3 通讯指令F0描述

1、专用于芯片进入超低功耗,因为芯片在播放结束之后,会自动进入待机状态,功耗维持在25uA 。

2、如果需要芯片的功耗再低,则需要发送F0指令,任何状态下都可以

3、芯片接收到F0指令之后,就会进入关机状态,功耗维持在1.7uA左右

4、如果需要芯片再次接收指令,必须先将dat信号拉低40ms,让芯片被唤醒,再发送数据就可以了

4.4 通讯细节注意事项

1、控制MCU上电之后,第一时间就要将通讯IO,也就是ONELINE脚设置为高电平输出

2、尽量和KT148A芯片的通讯之间,串1K的电阻,来适配不同的电平

3、芯片的2脚PB9,在播放的时候,电压大概是3.1V左右 。一旦进入空闲状态,此IO会变成2.8V左右

因为芯片内部有一个空闲进入低功耗待机的机制。

  1. 用户自己更换声音

芯片支持通过串口更换声音,需要的工具如下:

  1. PC端的音频压缩软件---我们提供
  2. PC端的下载工具软件---我们提供
  3. USB转TTL的串口工具---推荐使用CH340G的小模块

5.1 第1步产生音频文件

1、这个可以通过TTS合成软件,自己生成mp3或者wav文件 。也可以找真人录音等等方式

2、获取了这些音频文件之后,自己可以试听一下效果

3、音频的效果,必须是在这一步完成,包括,修音、去头去尾,调整好音量大小等等

待续。。。。。。。。。

5.2 第2步--转换音频文件

IOS spine封装_串口_04

1、使用我们提供的工具软件,格式只能选择F1A

2、采样率和码率,就自己去灵活的选择了,一般推荐“采样率16K”,码率6K ,效果就很好了

如果空间允许,就自由发挥

3、添加文件,选择输出的目录  ,最后点击转换就可以了

  1. 他会将原始的音频文件,生成为xxx.f1a格式的文件,注意这个文件在电脑端是不能播放的,只能下载到芯片里面去解码播放

2.3 第3步--使用串口下载工具下载音频

IOS spine封装_fpga开发_05

1、一定要把芯片的5脚对地短路再上电 ,听到喇叭“滴”的一声,松开就可以了

2、这个时候,芯片就自动进入到下载状态

3、然后,连接串口模块到电脑,USB转TTL的TX接芯片的2脚,USB转TTL的RX接芯片的3脚,然后共地 。就可以了

4、点击上位机上面的,打开串口,波特率固定115200 ,选择导入文件,再点击“下载全部”,等到下载完成即可

5、注意,下载完了之后,可以用芯片的4脚对地触发一下,试听下载的声音文件

IOS spine封装_IOS spine封装_06