DC娱乐网

主控 IO 紧张时,怎么用一根线搞定语音播放语音芯片一线串口实战 小封装MCU做

主控 IO 紧张时,怎么用一根线搞定语音播放语音芯片一线串口实战
小封装MCU做产品时,IO永远是稀缺资源。按键、传感器、指示灯把引脚占得差不多了,老板还要加个语音提示,一算IO余量,往往只剩一两根。这时候如果语音芯片还要占CLK加DATA两根串口线,方案可能直接卡死。WT588F40B-16S的一线串口模式,恰好能把控制压到一根DATA线,MCU一个普通IO就能播、停、循环全搞定。

先说清楚一线串口是怎么工作的。在固定一线或兼容一线两线配置下,MCU只通过DATA线给芯片发数据,CLK脚固定电平即可,不需要参与通信。发送的是16位控制字,内容可以是播放某段地址、调节音量、循环、停止、连码等。也就是说,控制层面的硬件成本就是一个IO口,外加可选的BUSY状态脚用来判断芯片是否在播。
接线很简单。一线串口PWM输出模式的应用电路里,芯片的DATA接MCU任意一个GPIO,喇叭直接挂在PWM输出脚上,不需要外置功放。BUSY脚是可选的,如果你只关心触发不关心状态,这脚可以省掉,真正只留一根DATA线。低功耗场景记得DATA脚内部有1M下拉,播放结束把它拉低能防止IO倒灌。
发码才是关键,这里把时序讲明白。每次发指令,先把DATA拉低5毫秒(允许5到20毫秒),然后发送16位数据。字节顺序是先发高字节、再发低字节,每个字节内部先发低位、再发高位。每一位用高电平和低电平的脉宽比例来代表0或1,而且规定高电平必须排在前面、低电平在后面。具体的位宽比例以规格书时序图为准,常见的一线串口约定是每位约800微秒,发0时高200低600,发1时高600低200,写代码时照这个节奏拉高拉低即可。

常用的命令码下面这张表直接抄。
命令码以规格书与上位机工具为准,不同版本可能有差异。
几个实战里容易踩的坑要记住。第一,同一条指令里两个字节之间间隔要小于4毫秒,建议2毫秒,拖太长芯片会认为指令结束。第二,连码时相邻两段之间间隔要小于20毫秒。第三,连码最多40段,超了发不进去。第四,上电默认最大音量FFEFH,而且上电后如果一次语音都没播过,不要直接发循环类指令,先触发一次播放更稳妥。第五,连码指令全部发完后,芯片大约等100毫秒才开始播,这段代码里别急着发下一条。
给你一段发码思路,不依赖具体平台。先拉低DATA5 毫秒,取命令码,先送高8位再送低8位,每字节从bit0到bit7,发0就高电平T1、低电平T2,发1就高电平T3、低电平T4,始终高在前,字节间留2毫秒,发完释放DATA,让芯片内部下拉把它拉稳,1秒后自动休眠。照这个框架填位宽,就能用任意MCU的一个IO口驱动语音播报。

回到开头那个痛点。当IO只剩一两根,语音芯片还想要两线串口,方案基本就废了。WT588F40B-16S的一线串口把控制压到一根线,再配合PWM直驱喇叭省掉功放、停播自动休眠省掉软件管理,整体外围非常干净。对IO紧张的小封装产品来说,这根线省下的,不只是引脚,还有一整套BOM和调试时间。