https://e2e.ti.com/support/audio-group/audio/f/audio-forum/866867/pcm1865-pll-does-not-lock
器件型号:PCM1865您好!
我目前正在尝试将 PCM1865投入使用、该 PCM1865放置在定制 PCB 上。 我在锁闭 PLL 时遇到问题(或者我有另一个问题、我不确定)。 PCM1865由一个16MHz XTAL 计时、我尝试配置 PLL 以获得 FS = 441kHz。 我以手册(第45页)中的示例获得以下设置:
F_PLL_IN = 16MHz
F_PLL_OUT = 2048 * 44.1kHz = 90.3168 MHz (2048来自 N、我不知道 N 适合哪种情况...)
R = 1
P = 1
k = 5.6448 -> J = 5、D = 6448
通过这些设置,完整性检查将得到满足(1MHz <= f_PLL_IN/P <= 20MHz 和64MHz <f_PLL_IN*K*R/P < 100MHz)。 此外、我选择了相应的分频器:
DIVDSP1 = 4 -> f_DSP1 = 512*FS
DIVDSP2 = 8 -> f_DSP2 = 256*FS
DIVDADC = 16 -> f_ADC = 128*FS
DIVSCK = 32 -> f_CKOUT = 64*FS
DIVBCK = 1 -> f_Bck = 64*FS
DIVLRCK = 64 -> f_LRCK = FS
我通过 I2C 按以下顺序对 PCM1865进行编程:
WRITE_REG (0x00、0xFE) //将 PCM1865复位为默认设置
WRITE_REG (0x20、0xBE) //将时钟控制寄存器设置为:CLKDET_EN = 0、DSP1_CLK_SRC = 1、DSP2_CLK_SRC = 1、ADC_CLK_SRC = 1、MST_MODE = 1、 MST_SCK_SRC = 1、SCK_XI_SEL = 10
WRITE_REG (0x29、0x00) //设置 P = 1
WRITE_REG (0x2a、0x00) //设置 R = 1
WRITE_REG (0x2b、0x05) //设置 J = 5
WRITE_REG (0x2D、0x19) //设置 MSB = 0x19、首先写入 MSB、因为值在对 LSB 进行编程时设置
WRITE_REG (0x2C、0x30) //设置 LSB = 0x30
WRITE_REG (0x25、0x1f) //设置 PLL_SCK_DIV = 32
WRITE_REG (0x26、0x00) //设置 PLL_bck_DIV = 1
WRITE_REG (0x27、0x3f) //设置 PLL_LRCK_DIV = 64
WRITE_REG (0x21、0x03) //设置 DSP1_DIV = 4
WRITE_REG (0x22、0x07) //设置 DSP2_DIV = 8
WRITE_REG (0x23、0x0F) //设置 ADC_DIV = 16
当我读回 PLL_CTRL 寄存器(0x28)时、我只得到0x01、这意味着 PLL 被启用、但 PLL 锁定= 0。 CLK_STATUS 寄存器(0x75)还产生0x01、指示 SCK 错误(尽管如此、由于我们禁用了自动时钟配置、我可以忽略该错误)。 器件状态寄存器(0x72)再次产生0x01、这意味着状态为"等待时钟稳定"。 电源状态(0x78)产生0x07、这意味着所有三个电压都正常。 我用示波器探测 XTAL、有一个振幅为~190mV 的16MHz 清晰信号。
有人能告诉我我我发生了什么错误吗? PLL 永远不会锁定、器件始终处于"等待时钟稳定"状态。 在配置 PLL 之前、我曾使用禁用 PLL 的方法、但到目前为止没有任何作用。 不幸的是、我的想法已过时...
不同之处在于、有趣的是、在数据表中、XTAL 频率范围从15MHz 开始、但在示例中使用了12MHz XTAL…… 这甚至不应该起作用 ;)
如果有人知道我犯了什么错误、那就太棒了!
提前非常感谢!