这个TI的解码芯片怎么说呢,其实电路设计超级简单,麻烦的是写代码和初始化,我当时为了寻求支持Master模式的DAC,找到了这个芯片。但是这个芯片的寄存器超级多,为了写驱动,我前后花了大约2个月的业余时间,加起来超过110K的代码量,可谓是不小的工程,当我把所有的代码都写完之后,在联合调试的时候发现一个问题,无论我怎么用MCU输出正弦波的I2S数据,5122就是没有输出,输出永远是一条直线。我不得已只能求教于DS,但是,DS也是一个半吊子。它对这个芯片的很多说法全是错的(AI常规性的产幻)。但它再半吊子,也比我这个新手强,在它的协助分析下,我找到了两个问题,第一个是XSMT这个引脚。我画电路板的时候,用的就是TI文档中的电路图:

看到没?这个图中的XSMT引脚是悬空的。于是我也把这个引脚悬空,当时没留意这个引脚的功能。看到悬空以为和GPIO差不多,就直接照搬了。结果,这个引脚必须接高电平!否则就是静音。我只想吐槽一下,哪怕在这个图上标注一下XMST引脚的软静音几个字,我都会去查一下。。。
第一个问题我通过飞线暂时解决了,新板子肯定要加上拉电阻到3.3V,第二个问题才是要命的。PCM5122还是没有输出,因为它的内置CP(电荷泵)没有工作!这个是真的惊到我了,我一直以为CP是模拟部分,有电就会自动运行,我以为它有固定频率来驱动。结果DS告诉我,这货需要DAC的分频来驱动!但是无论我怎么调增初始化方法,GetDacPowerStatus函数只是从WAIT_CP_VALID状态变成了STANDBY。。。而我需要它的状态处于VOLUME_RAMP_UP(模拟无电)或则RUN_PLAYING(模拟加电),我一度怀疑是芯片坏了,因为CP相关的几个引脚,PIN2没有任何电压,PIN3接地,PIN4,PIN5本应该是负压,结果输出0.17V和0.46V。后来我想了半天,貌似没有做过分的事情啊,卡在这个位置我几乎打算放弃这个芯片。后来还是不死心,有点舍不得写了两个多月的代码,我又在往上找相应的话题,我也看到很多老外被这个芯片搞懵逼,也有不少老外碰到和我一样的问题,就是CP不启动。现象和我的一样。我在无意间,下了一个老外提供的压缩包,我发现里面居然是TI官方的初始化芯片的教程!我立即照着TI的教程修改我的初始化代码,修改完之后,我终于看到了CP启动的信息。我等待这一刻已经太久,内心已经没有太多想法。
另外,再吐槽一个TI的文档缺陷:

TI的文档在写如何设置锁相环的时候,有几个限制条件,分别限制了Vref和VCom模式下的PLL输入频率,和PLL输出频率的范围,另外,还有一个限制:Fs = ( PLLIN * K * R) / (2048 * P)。
这个公式就是一坨狗屎,因为它原本应该是Fs = ( PLLIN * K * R) / (N * P),然后应该给出N的取值范围!这个写法非常误导人,如果不仔细点,就非常容易误以为这个是2048固定值!比如如果你想用192K的Fs,你就会发现你无论选择怎样的输入频率,怎样分频设定,你都永远无法满足它的这个2048的条件。如果你翻到手册的最后,你就会发现TI给了你所有Fs和特定输入频率的设定,但你如果按他的参数去计算,就会发现结果根本不是2048。我不知道TI的工程师写这个限制的时候是怎么样的想法。我只知道他写这个限制的时候没有动脑子。
最后,我找到的初始化的例子,我放在我的下载资源里面,有兴趣的可以去看看。
464

被折叠的 条评论
为什么被折叠?



