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.

[参考译文] ADC12QJ1600:ADC12QJ1600EVM 开发板上的 C-PLL 初始化问题

Guru**** 2378650 points
Other Parts Discussed in Thread: ADC12QJ1600, ADC12QJ1600EVM, LMK04828, TSW14J57EVM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1270944/adc12qj1600-issue-with-c-pll-initialization-on-adc12qj1600evm-development-board

器件型号:ADC12QJ1600
主题中讨论的其他器件:LMK04828TSW14J57EVM

尊敬的 TI 支持团队:

我目前正在从事一个项目、其中涉及将 ADC12QJ1600EVM 开发板与 Xilinx Zynq UltraScale 板(EK-U1-ZCU102-ES2-G)相连接。 我为 ADC12QJ1600设计了 SPI 驱动器、我将在 MicroBlaze 软内核中使用。

我已成功成功通过 SPI 访问 ADC 寄存器。 作为测试、我读取 VENTER_ID 寄存器、它会返回预期值0x0451。
然而、我将面临一个与 C-PLL 初始化相关的问题。 我使用板载50 MHz VCXO 振荡器(Y2)对 SE_CLK 引脚进行计时、并使用以下设置:

JMODE:8
采样率:1GSPS
反馈分压器:V = 4、P = 2、N = 20

我已经验证了50 MHz 时钟是否显示、并且通过使用示波器观察电阻器 R231上的信号来验证时钟是否清晰。 开发上的所有跳线。 正确设置电路板 ADC12QJ1600EVM (包括 OSC 开启、PLL_EN_ADC、PLLREF_SE_ADC)。
我还尝试过通过 CPLL_OVR 寄存器配置基准时钟源选择和启用 C-PLL、但没有效果。

故障排除步骤
*已检查数据表中的 SE_CLK 频率范围(50 MHz 至500 MHz)、因此  SE_CLK 处于该范围内。
*重复所有可能的选项配置 C-PLL 反馈(FS 范围内的500 MHz - 1300 MHz 与参考时钟: 50MHz )
在等待 C-PLL 锁定标志时总是遇到一个超时。

我已经遵循数据表中"9.3初始化设置"段落中建议的寄存器编程顺序、但问题仍然存在。
为了提供更详细的环境信息、我列出了在 ADC 初始化过程中发生的 SPI 事务。 这将提供我已采取的步骤的全面视图、并可能有助于确定任何差异或问题。

ADC12QJ1600[0] INITIALIZATION PROCEDURE
         write adc reg | addr : 0x0000 | data : 0x00B0
         read  adc reg | addr : 0x0270 | data : 0x0001
         write adc reg | addr : 0x0058 | data : 0x0083
         write adc reg | addr : 0x002B | data : 0x0015
         write adc reg | addr : 0x005C | data : 0x0001
         write adc reg | addr : 0x003F | data : 0x004A
         write adc reg | addr : 0x003D | data : 0x0005
         write adc reg | addr : 0x003E | data : 0x0014
         write adc reg | addr : 0x005D | data : 0x0041
         write adc reg | addr : 0x005C | data : 0x0000
         write adc reg | addr : 0x0200 | data : 0x0000
         write adc reg | addr : 0x0061 | data : 0x0000
         write adc reg | addr : 0x0037 | data : 0x004B
         write adc reg | addr : 0x029A | data : 0x000F
         write adc reg | addr : 0x029B | data : 0x0004
         write adc reg | addr : 0x029C | data : 0x001B
         write adc reg | addr : 0x0201 | data : 0x0008
         write adc reg | addr : 0x0202 | data : 0x00FF
         write adc reg | addr : 0x0204 | data : 0x0003
         write adc reg | addr : 0x0062 | data : 0x0005
         write adc reg | addr : 0x0065 | data : 0x0001
         write adc reg | addr : 0x0057 | data : 0x0080
         read  adc reg | addr : 0x005E | data : 0x0003
         read  adc reg | addr : 0x0059 | data : 0x007F
ADC[0] wait for flag : 0x01 in reg_addr : 0x208 data : 0x00 TIMEOUT!
         read  adc reg | addr : 0x0208 | data : 0x0000

您能帮助我确定我可能会出什么问题吗? 非常感谢您的协助。

感谢您投入宝贵的时间给予大力支持。

此致、
米哈伊尔·瓦西列乌

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

    您好 Mikhail:

    如果你能给我一个星期结束,以调查这个问题,我会很感激。

    谢谢!

    埃里克·克莱克纳

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

    尊敬的 Mikhail:

    我想我发现了你的问题。 根据您所使用的设置...

    Jmode 8  

    FS = 1GHz

    线速率= 12.375GHz

    FPGA 参考= 12.375GHz/66 = 187.5MHz

    在 ADC12QJ1600 EVM 上、当使用板载基准为 ADC 计时时、它无法生成特定的 FPGA 参考时钟频率、这意味着 FPGA 获得不正确的频率、但该频率将不起作用。 对于我们的 FPGA IP、根据编码、我们需要不同的 FPGA 参考时钟、那么正常生成的数据是线速率/8b10b 时为40、64b66b 时为线速率/66。

    生成 FPGA 参考时钟的方式是、采用线速率(在上面计算)、然后使用 ADC 内部的分频器、将其分频为 FPGA 参考时钟。 遗憾的是、ADC 只有分频选项16、32和64、对于某些频率而言不够细。 您可以通过探测 LMK0034的输出(见下图)来验证这一点、我会在 C106/C107/C108/C109 (箭头1和2)处探测这些是最靠近 FMC 连接器的电容器、它们应显示您的 FPGA 参考时钟。 如果您要将器件编程为 JMODE 8、则线路速率将为12.375GHz、如果您使用内部除以32寄存器、则应该可以在 FPGA 时钟输出端看到386 MHz 附近的情况。 (以下方 FPGA 时钟生成的方框图)

    解决此问题的最简单方法是使用 EVM 上已存在的 LMK04828作为旁路器件、对 FPGA 时钟进行路由。 您只需将正确的 FPGA 参考时钟频率输入到 EVM 上的 LMK_CLK (J31)引脚、然后将器件配置为旁路模式、以便直接从 LMK04828馈入时钟并输出 FPGA 参考时钟。 从 EVM 原理图中、您需要启用的输出是 DCLKOUT4和 DCLKCOUT8。 您还需要确保 CBT clck 跳线(J25)在来自 LMK04828 (我们想要的)的 FPGA 时钟或来自 ADC (错误的)之间切换。 执行此操作后、您应该能够探测上述电容器并应看到正确的 FPGA 参考时钟。

    这应该会起作用、同时仍允许您使用板载50MHz 生成 ADC 采样时钟。

    此致!

    埃里克

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

    尊敬的 Eric:

    感谢您的详细答复。 我感谢您花时间研究这个问题。

    但是、我想澄清几个要点、以确保我们在同一个页面上:

    1. FPGA 板和 IP:

    我的实验室中没有 TSW14J57EVM FPGA 板。 而是使用 HW-Z1-ZCU102评估板(XCZU9EG-FFVB1156)。 因此、我没有使用任何基于 TI 的 FPGA IP 或相关软件/固件与 ADC 连接。 我的 SPI 驱动器是为通过 SPI 对 ADC 设置进行编程而开发的、符合数据表"10应用和实现"部分中所述的激光雷达示例。 我在上一封邮件中提供了寄存器写入的顺序。 目前、我将通过 PLL 使用板载振荡器为 FPGA、SPI 模块和 Microsoftaze 内核计时。 因此、我的终端上不存在与 FPGA 相关的问题。

    2. C-PLL 锁定问题:

    我的主要问题是 C-PLL 无法锁定。 根据典型激光雷达应用、C-PLL 应通过板载 XTAL 振荡器提供的50 MHz 参考时钟锁定。 但是、我的设置中不会出现这种情况。 为了更深入地研究这个问题、我决定检查 PLLREFO、因为它源自 C-PLL 时钟输入。 如果我可以观察 PLLREFO、它会指示 C-PLL 基准时钟的存在。 我已确保所需的跳线(J15、J23和 J26)已正确设置、并已按上文所述对 CPLL_OVR 和 PLLREFO_CTRL 寄存器进行编程。 尽管有这些设置、但在通过电阻 R225和 R228测量信号时、我没有观察到 PLLREFO 时钟。 这使我得出一个结论、即时钟没有到达 PLL 输入端。 此外、我注意到 SE_CLOCK 电压电平存在差异、并调整电阻器 R232以匹配 ADC 的1.9V 域、但这未解决问题。

    此外、我尝试了以下操作:我从 FMC 插座上断开 ADC 板并重新启动它。 鉴于跳线设置、应该启用 C-PLL 并且应选择 SE_CLK 作为 C-PLL 基准。 考虑到 PLLREFO_CTRL 的默认值为0x1、我希望在上电后立即看到 PLLREFO、而无需任何其他 ADC 配置。 但是、我无法使用示波器观察 PLLREFO。

    3.关于 LMK04828:

    虽然使用外部 PLL LMK04828很有意义、但为了简单起见、我的目标是将此任务分解为两个部分。 我的主要目标是确保我可以在没有外部 PLL 的情况下配置 ADC 并运行它。 在我对 ADC 驱动器的功能有信心之后、我将继续使用 LMK04828。 此外、我尝试实现的设置是典型的、我希望在引入其他组件之前确保其功能正常。

    鉴于上述说明、如果我们能继续调查 ADC 的 C-PLL 初始化问题、我将不胜感激。 您在这方面的专业知识和支持是非常宝贵的。

    感谢您的理解和帮助。

    此致、
    米哈伊尔·瓦西列乌

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

    您好 Mikhail:

    您能帮我确认一下这一点吗、在您对 ADC 的编程序列中、您已经开始对其他 PLL 字段进行编程、现在设置 CPLL_VCOCTRL (0x3F)。  该寄存器用于设置 PLL 的偏置、我认为如果在对其他 PLL 寄存器编程之前未启用偏置、则会对它们进行错误编程。  

    下面是一个您可以尝试使用的寄存器序列示例。

    此致!

    埃里克

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

    尊敬的 Eric:

    是的、我确实使用建议值0x4A 对 CPLL_VCOCTRL 寄存器进行了编程。
    我确保在将 C-PLL 推入复位模式后、按照建议写入该寄存器和所有其他 PLL 寄存器。
    下面是我遵循的顺序:

    ADC12QJ1600[0] INITIALIZATION PROCEDURE
             write adc reg | addr : 0x0000 | data : 0x00B0
             read  adc reg | addr : 0x0270 | data : 0x0001
             write adc reg | addr : 0x0058 | data : 0x0083
             write adc reg | addr : 0x002B | data : 0x0015
             write adc reg | addr : 0x005C | data : 0x0001
             write adc reg | addr : 0x003F | data : 0x004A
             write adc reg | addr : 0x003D | data : 0x0005
             write adc reg | addr : 0x003E | data : 0x0014
             write adc reg | addr : 0x005D | data : 0x0041
             write adc reg | addr : 0x005C | data : 0x0000
             write adc reg | addr : 0x0200 | data : 0x0000
             write adc reg | addr : 0x0061 | data : 0x0000
             write adc reg | addr : 0x0037 | data : 0x004B
             write adc reg | addr : 0x029A | data : 0x000F
             write adc reg | addr : 0x029B | data : 0x0004
             write adc reg | addr : 0x029C | data : 0x001B
             write adc reg | addr : 0x0201 | data : 0x0008
             write adc reg | addr : 0x0202 | data : 0x00FF
             write adc reg | addr : 0x0204 | data : 0x0003
             write adc reg | addr : 0x0062 | data : 0x0005
             write adc reg | addr : 0x0065 | data : 0x0001
             write adc reg | addr : 0x0057 | data : 0x0080
             read  adc reg | addr : 0x005E | data : 0x0003
             read  adc reg | addr : 0x0059 | data : 0x007F
    ADC[0] wait for flag : 0x01 in reg_addr : 0x208 data : 0x00 TIMEOUT!
             read  adc reg | addr : 0x0208 | data : 0x0000"

    我还尝试了您建议的顺序。 此外、我在序列结束时包括了对 JESD_STATUS 寄存器的读取。
    但是、C-PLL 和 S-PLL 没有锁定:

             write adc reg | addr : 0x0000 | data : 0x00B0
             write adc reg | addr : 0x003F | data : 0x004A
             write adc reg | addr : 0x0058 | data : 0x0083
             write adc reg | addr : 0x005C | data : 0x0001
             write adc reg | addr : 0x003D | data : 0x0004
             write adc reg | addr : 0x003D | data : 0x0005
             write adc reg | addr : 0x003E | data : 0x0014
             write adc reg | addr : 0x005D | data : 0x0041
             write adc reg | addr : 0x005C | data : 0x0000
             write adc reg | addr : 0x0057 | data : 0x0001
             write adc reg | addr : 0x0057 | data : 0x0081
             write adc reg | addr : 0x002B | data : 0x0015
             write adc reg | addr : 0x0200 | data : 0x0000
             write adc reg | addr : 0x0061 | data : 0x0000
             write adc reg | addr : 0x0201 | data : 0x0008
             write adc reg | addr : 0x0204 | data : 0x0001
             write adc reg | addr : 0x0213 | data : 0x000F
             write adc reg | addr : 0x0061 | data : 0x0001
             write adc reg | addr : 0x0200 | data : 0x0001
             write adc reg | addr : 0x006C | data : 0x0000
             write adc reg | addr : 0x006C | data : 0x0001
             read  adc reg | addr : 0x005E | data : 0x0003
             read  adc reg | addr : 0x0059 | data : 0x007F
             read  adc reg | addr : 0x0208 | data : 0x0000


    尽管遵循了这些顺序,但问题仍然存在。  

    感谢您的持续帮助。

    此致、
    米哈伊尔·瓦西列乌

     

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

    您好 Mikhail:

    如果您能给我几天的时间来深入了解一下、我将在下星期三再次与您联系并提供更新信息。

    此致!

    埃里克

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

    尊敬的 Mikhail:

    我还在为你调试这个问题,如果我能有更多的时间,我将在下周早些时候回到你。

    谢谢。

    埃里克

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

    您好 Mikhail:

    您能否尝试使用 TI.com 上的器件 GUI 对 ADC 进行编程、并查看它是否能锁住 cpll。

    谢谢。

    埃里克