This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PCM1865:PLL 未锁定

Guru**** 2483615 points
Other Parts Discussed in Thread: PCM1865

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

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…… 这甚至不应该起作用 ;)

如果有人知道我犯了什么错误、那就太棒了!
提前非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Reinhard、

    我认为问题是您的 SCK 配置。 即使您未使用自动检测、器件也需要生成内部主时钟以实现同步、从而生成音频速率时钟。 现在,您已将其配置为64*FS,它的运行速率与 bck 相同。 如果您运行4个通道、请尝试将 SCK 设置为256*FS (即设置 PLL_SCK_DIV = 8)、或者如果您仅使用2个通道、请尝试 SCK = 128*FS (设置 PLL_SCK_DIV = 16)。 请尝试此操作、并告诉我此操作是否能解决您的问题!

    此致、

    Zak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Zak、

    非常感谢您的快速回复! 正如您所说的、我想它现在就能正常工作了! 我按照您所说的那样设置分频器、现在状态寄存器中没有更多的错误、因为 CLK_STATUS 现在显示为0x00、这意味着没有任何错误、寄存器 DEVICE_STATUS 显示为0x0F、这意味着"run"。 然而、PLL 锁定位仍然没有被置位、这有点奇怪。 我输出 SCK 并使用示波器测量频率、我想我看到的是得到的值为2048*44.1kHz/8 = 11.2896MHz。 我的 OSCi 不是最好的、也不与 XTAL 同步、因此我测量的频率为11.28925 MHz、这似乎足够好了。

    我从其他 PLL 中读出、他们有时在寄存器中说、它们不是锁定的、而是锁定的。 这里似乎就是这样。

    你怎么看?

    此致、

    Reinhard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Reinhard、

    很高兴听到这个消息。 如何通过 GUI 或其他一些方法读取 LOCK 位? 我以前曾见过类似的东西、但无法重复该行为以确定它是否真正是寄存器问题。 如果器件是主器件且 PLL 已解锁、则器件应无法进入"运行"状态、因此这似乎是您案例的有力证据。  

    我认为最好的测试是在其中一个输入上放置一个信号、并确保数据输出匹配。 如果确实如此、则必须锁定 PLL、并且所有内容都已正确同步。

    最棒的

    Zak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Zak 您好!

    感谢您的回复、很抱歉我迟到了! 我必须对项目进行定位、到目前为止、我无法判断器件是否完全正常工作。 到目前为止、我只在没有输入的情况下对其进行了测试、噪声值似乎合理地位于零附近。 此外、我还能够使用时钟输出信号作为 MCU 的主时钟、该 MCU 进一步使用正在工作的 USB 接口。 因此,我认为它工作正常。

    我从我的定制板上读取我的 MCU 的寄存器。

    此致、

    Reinhard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Reinhard、

     

    感谢您的更新、请告诉我您是否遇到了器件的任何其他问题!

     

    最棒的

    Zak