WT588F/E系列语音芯片驱动程序&注意事项


开的这个专栏会一直记录自己用过的驱动,有触摸芯片,RFID芯片,语音芯片,显示屏驱动,ADC,各种通讯模块等等,感兴趣的可以一起交流学习

源码查询该文章
专栏地址

一、简介

  WT588F区别于传统OTP(单次烧写)的语音芯片,可以通过配套的下载器在线更换芯片内部语音内容。支持6-32KHz的WAV文件,工作电压2.0-5.5V。
语音芯片的时长及采样率自己根据使用情况联系芯片厂家。

二、硬件连接

  本次项目MCU用的是复旦微的FM33G026,内核是Cortex-M0。
  芯片IO口,默认内部1M下拉。用的是两线串口控制的模式,两线串口控制方式具有较好的抗干扰能力。
  引脚:
  CLK:时钟信号;MCU_OUT
  DATA:发送数据信号;MCU_OUT
  BUSY:时钟信号,默认播放语音时忙脚低电平;MCU_IN
硬件连接

三、驱动层

 1、配置GPIO

在头文件中宏定义,用的FM33G026的库供参考,其他MCU配置管脚大同小异。

  /* data */
	#define WT588F_DATA_PORT			GPIOE
	#define WT588F_DATA_PIN				GPIO_Pin_2
	#define WT588F_DATA_OUT_CFG()	    (OutputIO(WT588F_DATA_PORT,WT588F_DATA_PIN,OUT_PUSHPULL))
	#define WT588F_DATA_OUT_H()			(GPIO_SetBits(WT588F_DATA_PORT,WT588F_DATA_PIN))
	#define WT588F_DATA_OUT_L()			(GPIO_ResetBits(WT588F_DATA_PORT,WT588F_DATA_PIN))
	/* busy */			
	#define WT588F_BUSY_PORT			GPIOB
	#define WT588F_BUSY_PIN				GPIO_Pin_14
	#define WT588F_BUSY_IPU_CFG()       (InputtIO(WT588F_BUSY_PORT,WT588F_BUSY_PIN,IN_NORMAL))
	#define WT588F_BUSY_READIN()        (GPIO_ReadInputDataBit(WT588F_BUSY_PORT,WT588F_BUSY_PIN))
	/* clk */			
	#define WT588F_CLK_PORT			    GPIOB
	#define WT588F_CLK_PIN				GPIO_Pin_15
	#define WT588F_CLK_OUT_CFG()		(OutputIO(WT588F_CLK_PORT,WT588F_CLK_PIN,OUT_PUSHPULL))
	#define WT588F_CLK_OUT_H()			(GPIO_SetBits(WT588F_CLK_PORT,WT588F_CLK_PIN))
	#define WT588F_CLK_OUT_L()			(GPIO_ResetBits(WT588F_CLK_PORT,WT588F_CLK_PIN))

初始化WT588F,注意:上电初始化要200ms

/********************************************************
 * @brief void WT588F_Init()
 *   初始化
 * @param
 *     @arg:
 * @return
 *   none
 * @note 
 ******************************************************/
void WT588F_Init()
{
	WT588F_DATA_OUT_CFG();
	WT588F_BUSY_IPU_CFG();
	WT588F_CLK_OUT_CFG();
	delay_ms(200);					
	WT588F_DATA_OUT_H();
	WT588F_CLK_OUT_L();
}

 2、发送数据函数

两线串口时序
tips:
1、 WT588F 语音芯片上电初始化时间大概 200ms,初始化期间无法响应指令。
2、一条指令最短时间为6.6ms(5ms+0.2ms*8=6.6ms)。
3、芯片 IO 口,默认内部1M下拉。因此在做低功耗休眠时,播放结束后可以将 CLK 和DATA 拉低,防止倒灌电流;若 CLK 拉低,发指令前需将 CLK 拉高大于 3ms 后再发送指令。

/********************************************************
 * @brief  static void send_data()
 *   发送数据
 * @param
 *     @arg:
 * @return
 *   none
 * @note CLK高位数据有效
 ******************************************************/
static void send_data(u8 data)
{
	u8 i;
	WT588F_CLK_OUT_L();
	WT588F_DATA_OUT_H();
	delay_ms(5);							//发送一个字节数据前,时钟信号CLK拉低5ms
	delay_us(300);     				//时钟周期
	for(i=0;i<8;i++)
	{
		if(data & 0x01)
		{
			WT588F_DATA_OUT_H();
		}
		else
		{
			WT588F_DATA_OUT_L();
		}
		data >>= 1;
		WT588F_CLK_OUT_H();			//在时钟的上升沿接收数据
		delay_us(300);
		WT588F_CLK_OUT_L();	
		delay_us(300);
	}
	WT588F_DATA_OUT_H();
	WT588F_CLK_OUT_H();
}

 3、播放语音

tips
1、低功耗休眠若 CLK 拉低,发指令前需将 CLK 拉高大于 3ms 后再发送指令。

/********************************************************
 * @brief void WT588F_Play(u8 addr)
 *   播放对应地址语音
 * @param
 *     @arg:
 * @return
 *   none
 * @note 
 ******************************************************/
void WT588F_Play(u8 addr)
{
	WT588F_CLK_OUT_H();
	delay_ms(3);							//做低功耗时CLK拉低,发指令前需将CLK拉高大于3ms后再发送指令。
	send_data(addr);
}

 4、是否在播放语音

/********************************************************
 * @brief u8 WT588F_isBusy()
 *   是否在播放语音
 * @param
 *     @arg:
 * @return
 *   busy:低电平
 * @note 
 ******************************************************/
u8 WT588F_isBusy()
{
	if(!WT588F_BUSY_READIN())
	{
		return 1;
	}
	return 0;
}

 5、语音&命令码地址表

语音地址命令码

四、应用层

 1、连码播放demo

tips
1、连码播放时 F3 指令和地址之间需留 2ms 的间隔时间,可参考下图。
连码时序

/********************************************************
 * @brief void WT588F_ListPlay()
 *   连码播放
 * @param
 *     @arg:
 * @return
 *   none
 * @note 
 ******************************************************/
void WT588F_ListPlay()
{
	WT588F_CLK_OUT_H();
	delay_ms(3);							//做低功耗时CLK拉低,发指令前需将CLK拉高大于3ms后再发送指令。
	send_data(LOOP_EXTI);			//F3
	delay_ms(2);
	send_data(ZERO);					//01
	delay_ms(2);
	send_data(LOOP_EXTI);			//F3
	delay_ms(2);
	send_data(ONE);					  //02
	delay_ms(2);
	send_data(LOOP_EXTI);			//F3
	delay_ms(2);
	send_data(TWO);				  	//03
	delay_ms(2);
	send_data(LOOP_EXTI);			//F3
	delay_ms(2);
	send_data(THREE);				  //04
}	

五、其他

 1、在线下载器更换语音

如有用到下载器按下图连接
下载器连接


结语
该芯片比较简单,想不到太多展开,也有一线串口的使用方法,更加简单,有问题直接提问。
源码查询该文章

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Diode丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值