音频codec调试心得
本文介绍了一个CODEC芯片TLV320AIC3204音频CODEC的调试经验,记录一下芯片的调试过程中的一些心得。
1、硬件电路
一个驱动的调试离不开硬件的电路的结构的与原理,调试驱动前要首先详细的了解驱动电路的原理,原理图如下:
codec芯片的型号是TLV320AIC3204,这是TI公司的一款音频处理芯片,可以连接3路模拟mic输出,2路音频输出可以驱动耳机和扬声器。与MCU的数字接口是I2S接口,可以采集语音和播放语音,芯片的配置接口支持I2C和SPI接口,本电路采用的I2C接口。
MIC经过一级放大器后把语音信号放大器TS472后输入到TLV320AI3204的第一路音频输入IN1接口。电路如下图所示:
MCU使用的NXP的IMXRT1021芯片,使用的是SAI2接口与CODEC芯片相连,根据TLV320AI3204的数据手册,配置I2S接口的MCLK为6.144M,采样率为48Kbps,双声道,16位语音数据,bit clk=48kpbs*2*16。
2、驱动程序
驱动程序参考了TI官网提供的linux下的驱动程序代码,这个codec芯片的功能还是挺多的,支持多路语音输入,支持输入信号放大等众多功能,经过不断的调试成功的实现了从MCU输出一段音乐从codec芯片中播放出来,可以清楚听到播放的语音。为了测试mic部分的电路的功能,采用一个一边录音,边播放的方式来测试电路,这个测试程序在nxp评估板上已经可以正常运行。实现在这个电路上,codec输出的噪声,只有在Mic处输入的音乐很大时,codec才能播放出声音,同时还是具有很大的噪声。
3、问题的分析
首先的怀疑程序有问题,可能是采集播放时,对音频数据的处理速度不连续造成的,通信修改程序,在采集的时间同步播放音乐,经过测试播放音乐正常,那说明播放部分没有问题。可能出在采集上面,那是codec芯片的配置问题呢还是硬件的问题呢?codec芯片的这个配置参数是在另外一个产品上面使用,据说配置是可以实现录音的功能。暂切认为驱动没有问题。
由于硬件是别人设计,我没有系统全倍分析过这个电路设计的是否有问题。根据我的最简单的经验分析,这个codec芯片本身就可以直接接mic来工作,说明内部已经具在了足够的放大增益,前端再加一级放大是不是画蛇添足呢?我把这个问题反馈给设计者,设计者认为,自己测试了前端mic经过放大后的声音,连接到功放再接上喇叭能正常播放声音,认为自己的设计没有问题。期间经过多次沟通,无法说服其修改电路来进行测试。--遇到问题,过于盲目自信,真的不利于解决问题,说明此人经验还少呀。我遇到这样的问题,没有100%的把握都不敢说自己这里没有问题。
4、问题的解决
现在我怀疑硬件mic放大部分有问题,但是光说无用,得拿出事实证据,就是自己修改硬件调试出来。从mic前端电路测量入手,测试了mic语音信号经过放大后在RINP信号上的波形,此处信号的峰峰值在mic有输入音频时,信号很容易超过0.7V,再详细查阅TLV320AIC3204的音频输入的信号,芯片的模拟电路的供电电压为1.7V左右,输入的信号的峰峰值为0.75V,看来这里就不对。前端的输入的信号过大。再测量一下输出语音LOR,LOL的信号,输出的波形峰峰值达到了1.7V,说明前端输入信号过大,导致内部的ADC电路采集的全是饱和的语音信号,造成了输出全是噪声(最大值的信号)。
解决办法自然就有了,直接接MIC到CODEC前端,但是目前的电路不好操作。另外一个办法就是降低前级电路的增益,修改电阻R50为27K(由于没有470K电阻,最好是就成0DB)把增益变10db。此时一试还是输出噪声,我想还是信号过大,最后又在RINP,RINN处割开,使用0.1uF电容连接,相当于也降低了一部分增益。此时codec可以正常的输出语音,噪声小了很多,还有一点噪声,这点噪声还是由于有时输入的音频信号还是过大超过了0.75V导致的。调试到这里已经足已证明我的分析和判断。更好的调试结果,就要再改进一版电路,把MIC直接连接到CODEC芯片上去了。