本文介绍了一个CODEC芯片TLV320AIC3204音频CODEC的调试经验,记录一下芯片的调试过程当中的一些心得。前端
一、硬件电路
一个驱动的调试离不开硬件的电路的结构的与原理,调试驱动前要首先详细的了解驱动电路的原理,原理图以下:linux
codec芯片的型号是TLV320AIC3204,这是TI公司的一款音频处理芯片,能够链接3路模拟mic输出,2路音频输出能够驱动耳机和扬声器。与MCU的数字接口是I2S接口,能够采集语音和播放语音,芯片的配置接口支持I2C和SPI接口,本电路采用的I2C接口。测试
MIC通过一级放大器后把语音信号放大器TS472后输入到TLV320AI3204的第一路音频输入IN1接口。电路以下图所示:spa
MCU使用的NXP的IMXRT1021芯片,使用的是SAI2接口与CODEC芯片相连,根据TLV320AI3204的数据手册,配置I2S接口的MCLK为6.144M,采样率为48Kbps,双声道,16位语音数据,bit clk=48kpbs*2*16。设计
二、驱动程序
驱动程序参考了TI官网提供的linux下的驱动程序代码,这个codec芯片的功能仍是挺多的,支持多路语音输入,支持输入信号放大等众多功能,通过不断的调试成功的实现了从MCU输出一段音乐从codec芯片中播放出来,能够清楚听到播放的语音。为了测试mic部分的电路的功能,采用一个一边录音,边播放的方式来测试电路,这个测试程序在nxp评估板上已经能够正常运行。实如今这个电路上,codec输出的噪声,只有在Mic处输入的音乐很大时,codec才能播放出声音,同时仍是具备很大的噪声。调试
三、问题的分析
首先的怀疑程序有问题,多是采集播放时,对音频数据的处理速度不连续形成的,通讯修改程序,在采集的时间同步播放音乐,通过测试播放音乐正常,那说明播放部分没有问题。可能出在采集上面,那是codec芯片的配置问题呢仍是硬件的问题呢?codec芯片的这个配置参数是在另一个产品上面使用,听说配置是能够实现录音的功能。暂切认为驱动没有问题。code
因为硬件是别人设计,我没有系统全倍分析过这个电路设计的是否有问题。根据个人最简单的经验分析,这个codec芯片自己就能够直接接mic来工做,说明内部已经具在了足够的放大增益,前端再加一级放大是否是多此一举呢?我把这个问题反馈给设计者,设计者认为,本身测试了前端mic通过放大后的声音,链接到功放再接上喇叭能正常播放声音,认为本身的设计没有问题。期间通过屡次沟通,没法说服其修改电路来进行测试。--遇到问题,过于盲目自信,真的不利于解决问题,说明此人经验还少呀。我遇到这样的问题,没有100%的把握都不敢说本身这里没有问题。blog
四、问题的解决
如今我怀疑硬件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芯片上去了。同步