CS4272驯服失败 2026.8.10
简介
CS4272是一款音频codec芯片(编解码器),即集ADC与DAC于一体的芯片,而且通常是多通道的,如CS4272就是2进2出。对于输入这一路,模拟信号(音频)被ADC采集后进入CS4272,内部有简单的数字处理,再通过I2S输出数字信号;而输出为处理器(如DSP、MCU)输出I2S数字信号给CS4272,再通过DAC转换成模拟信号输出给后级如音响。
而它的控制接口是IIC或3线SPI(只能写不能读。可以发现这类codec芯片几乎都是只写的),通过控制接口可以配置CS4272的寄存器以修改它的数字处理的参数等等。
我想做一个音频效果处理器,选择了CS4272作为我的ADC与DAC。选择它是因为它不是很冷门,封装好焊(VSSOP28),TB有很多在售且不贵,性能好,并且I2C可以读取寄存器(以让我判断芯片是否正常工作)。但是前后花了半个月时间打了2次PCB、焊了好多板子,都没有让它正常工作,即某些应该输出非0值的引脚无输出、I2C无应答,甚至经过测量,芯片似乎没有电流。
背景
CS4272
引脚描述


上电时序
5.2.1
Recommended Power-Up Sequence - Access to Control Port Mode
1)
When using the CS4272 with an external MCLK, hold RST low until the power supply, MCLK, and LRCK are
stable. When using the CS4272 with internally generated MCLK, hold RST low until the power supply is stable.
In this state, the Control Port is reset to its default settings.
2)
Bring RST high. The device will remain in a low power state and the control port will be accessible. If internally
generated MCLK is being used, it will appear on the MCLK pin prior to 1 ms from the release of RST.
3)
Write 03h to register 07h within 10 ms following the release of RST. This sets the Control Port Enable (CPEN)
and Power Down (PDN) bits, activating the Control Port and placing the part in power-down. When using the
CS4272 with internally generated MCLK, it is necessary to wait 1 ms following the release of RST before initi-
ating this Control Port write.
4)
The desired register settings can be loaded while keeping the PDN bit set.
5)
Clear the PDN bit to initiate the power-up sequence. This power-up sequence requires approximately 85 µS.
- 当使用外部 MCLK 驱动 CS4272 时,请将 RST 引脚保持低电平,直到电源、MCLK 和 LRCK 均稳定。当使用内部生成的 MCLK 驱动 CS4272 时,请将 RST 引脚保持低电平,直到电源稳定。在此状态下,控制端口被重置为其默认设置。
- 将 RST 引脚拉高。器件将保持低功耗状态,并且控制端口将变为可访问。如果使用内部生成的 CLK,则 MCLK 引脚会在 RST 释放后 1 ms 内出现该时钟信号。
- 在 RST 释放后的 10 ms 内,向寄存器 07h 写入 03h。此操作将设置控制端口使能(CPEN)和关断(PDN)位,从而激活控制端口并使器件进入关断状态。当使用内部生成的 MCLK 时,需要在 RST 释放后等待 1 ms,再启动此次控制端口写操作。
- 在保持 PDN 位置位的情况下,可以加载所需的寄存器设置。
- 清除 PDN 位以启动上电序列。该上电序列大约需要 85 µs。
PCB
原理图(仅重要)


PCB


源代码
过程详述
最开始完全焊接了所有元件(这时候的PCB采用的是数字地和模拟地分离,在CS4272的背面通过0欧电阻单点连接),然后使用STM32编写I2C代码试图读取芯片ID无果。当时还没回家在学校,代码是Vibe Coding的,以为是AI的问题,接着去忙其他事了,这件事便搁置了。

回到家后,仔细编写了代码,发现还是读不到ID,而同样的代码却可以正常读OLED屏的ID。此时我还没有意识到我将在接下来半个月时间一直卡在这第一步。于是仔细查看芯片数据手册、严格按照上电顺序,还是读不到。于是怀疑是我的模拟部分电路太复杂,或者是某处的焊接问题。于是我用另一颗一颗CS4272重新焊接,这次只焊了必要元件,并且用焊台和锡浆焊芯片,非常的美观,几乎可以排除焊接问题。

但是仍然读不到ID。此时怀疑是tB买到假货了,这个7块钱1片,嘉立创17块1片还不包邮。于是花40多块从立创商城买了2片“正版”芯片,等几天芯片来以后,焊接上,问题依旧。此时开始怀疑是我的PCB有问题,根据AI的推测,最有可能的是我的分离地平面的做法导致回流路径太大。于是开始打第二版,不分数字模拟地。等待一周板子到,焊接最后一块芯片后发现问题依旧,用逻辑分析仪抓波形发现从机根本无应答,然后测量VCOM引脚(应该输出2.5V)和FILT+引脚(应该输出5V)电平,都是0V;然后用小刀划断主电流路径,用万用表测电流,发现只有个位数mA,而另一路是AMS1117,这一路一定是正常工作的,要消耗电流,结合前面的测量,可以判断CS4272没有消耗电流,它可能根本就没工作。此时万念俱灰,终于不想和CS4272死磕了,选中了德州仪器的PCM3060.虽然它的性能比CS4272差远了,但是它没有复杂的上电要求,而且我也在网上没有搜到有人用PCM3060无应答的情况(PCM应该比CS4272还要流行)。没错,我搜到了还有其他人也遇到了这种情况,这使我不那么怀疑自己😊

下面这个说的时序我也试过了,还是不行QAQ

本来还想好好写一写这篇记录然后发到各大平台寻求帮助,但是写到一半转念一想,如果要发为了严谨还要再连杜邦线烧代码抓波形截图等等很麻烦,而且大概率不会被成功用它的人刷到吧……
今早赶工把PCM的板子画出来,然后发现嘉立创因为上市,砍掉了1-4层有铅喷锡的免费券,改成了PSC还是什么新工艺的(这个工艺的焊盘好像很容易氧化),以后不知道会不会把这个也砍掉😭
