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.

[参考译文] LMK04828对 SPI 无响应

Guru**** 2557670 points
Other Parts Discussed in Thread: LMK04828

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/738917/lmk04828-not-responding-to-spi

主题中讨论的其他器件:LMK04828

您好!

我们将 LMK04828与 ZCU102参考板相连。 设置 SPI 模式0 (CPOL=0、CPHA=0)。  

我们使用3线制模式、CS#、SCLK 和 SDIO 引脚使用示波器探测并获得正确的波形。

例如、LMK04828的24位命令到达引脚。 但未接收到 LMK04828的响应。

我们在 LDObyp1~2.5V、LDObyp2~1.5V 以及 OSCin 和 CLKIN~1.6V 处测量了电压。

请在此处帮助我们。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、请帮助我确定我可以在哪个引脚上读回寄存器值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nikhil、

    您是否有可能使复位引脚5保持高电平?

    请参阅回读引脚上随附的文件。  请注意、在 POR 上、通过开漏输出启用3线 SPI 读回模式。

    73、
    Timothy

    e2e.ti.com/.../SPI-Readback-on-LMK0482x-Family.pdf

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

    您好、Timothy、

    非常感谢您的回答以及本文档。

    RESET (引脚5)被下拉并正确探测为低电平。

    我们将 ZCU102板的 EMIO 引脚用于 SPI 编程、请在下面找到我们的编程序列。 请核实并提供您宝贵的意见:

    #include
    #include
    #include
    #include
    #include
    #include
    #include

    #define RESET_CMD 0x000080
    #define NORMAL 0x000010
    #define DCKOD 0x010010
    #define DCKOB 0x010302
    #define DCKFMT 0x010701
    #define VCOMX 0x013800
    #define FIXED1 0x01457F

    #define CLKINEN 0x01461A
    #define CLKINS 0x01471A
    #define CLKINS1 0x014802
    #define CLKINS2 0x014942
    #define PLL1N1 0x01533D
    #define PLL1N2 0x015409
    #define PLL1CP 0x015BDF
    #define PLL2R1 0x016000
    #define PLL2R2 0x016102
    #define PLL2PRE 0x016269
    #define FIXED2 0x0171AA
    #define FIXED3 0x017202
    #define FIXED4 0x017C15
    #define FIXED5 0x017D33
    #define PLL2N1 0x016600
    #define PLL2N2 0x016700
    #define PLL2N3 0x01680B
    #define PLL2CP 0x016959
    #define LP2R4R3 0x016C00
    #define LP2C4C3 0x016D00

    int load_config (unsigned int cmd、int FD)

    内转台;
    uint8_t RecvBuf;
    RET =写入(fd、&cmd、6);
    如果(RET < 0)

    printf ("写入数据时出错\n");
    退出(0);

    /*ret =读取(fd、&RecvBuf、3);
    if (ret < 0)

    printf ("读取数据时出错\n");
    EXIT (0);

    printf ("接收到的值:%d\n"、RecvBuf);
    返回 RecvBuf;*/
    返回0;

    int readback (unsigned int cmd、int FD)

    内转台;
    uint8_t RecvBuf;
    RET =写入(fd、&cmd、2);
    如果(RET < 0)

    printf ("写入数据时出错\n");
    退出(0);

    RET =读取(FD、&RecvBuf、1);
    if (ret < 0)

    printf ("读取数据时出错\n");
    EXIT (0);

    printf ("接收到的值:%x\n"、RecvBuf);
    //返回 RecvBuf;
    返回0;

    int main (int argc、char ** argv)

    printf ("Hello World!\n");
    int stop=0;
    内部 FD、RET;
    int FCH=1;
    FD =开路("/dev/spidev1.0、O_RDWR);
    如果(FD < 0)

    printf ("打开节点时出错\n");
    退出(0);

    其他

    操作

    printf ("指定输出频率:(1->161Mhz 2->156Mhz 3->195MHz 4->257MHz 5->回读6->Stop 7->Iverase 回读:\n"\});
    scanf("%d",&FCH);
    switch (FCH){

    案例1:
    printf ("输出频率:161.1328125Mhz);
    load_config (reset_CMD、FD);
    load_config (正常、FD);
    load_config (DCKOD、FD);
    load_config (DCKOB、FD);
    load_config (DCKFMT、FD);
    load_config (VCOMX、FD);
    load_config (FIXED1、FD);
    LOAD_CONFIG (0x014A33、FD);
    load_config (CLKINEN、FD);
    load_config (CLKINS、FD);
    load_config (CLKINS1、FD);
    load_config (CLKINS2、FD);
    load_config (PLL1N1、FD);
    LOAD_CONFIG (PLL1N2、FD);
    load_config (PLL1CP、FD);
    load_config (PLL2R1、FD);
    load_config (PLL2R2、FD);
    load_config (PLL2PRE、FD);
    load_config (FIXED2、FD);
    load_config (FIXED3、FD);
    load_config (FIXED4、FD);
    load_config (FIXED5、FD);
    load_config (PLL2N1、FD);
    load_config (PLL2N2、FD);
    load_config (PLL2N3、FD);
    load_config (PLL2CP、FD);
    LOAD_CONFIG (LP2R4R3、FD);
    LOAD_CONFIG (LP2C4C3、FD);
    printf ("写入完成\n");
    中断;
    案例2:
    printf ("输出频率:156.25Mhz);
    中断;
    案例3:
    printf ("输出频率:195.3125Mhz);
    中断;
    案例4:
    printf ("输出频率:257.8125Mhz);
    中断;
    情况5:
    printf ("Readback \n");
    load_config (0x000080、FD);
    load_config (0x000010、FD);
    LOAD_CONFIG (0x01457F、FD);
    LOAD_CONFIG (0x014A33、FD);
    load_config (0x0171AA、FD);
    load_config (0x017202、FD);
    load_config (0x017C15、FD);
    load_config (0x017D33、FD);

    load_config (0x014833、FD);
    LOAD_CONFIG (0x014973、FD);
    LOAD_CONFIG (0x015F3B、FD);
    LOAD_CONFIG (0x016E3B、FD);

    回读(0x8003、FD);
    中断;
    案例7:
    load_config (0x800000、FD);
    load_config (0x100000、FD);
    LOAD_CONFIG (0x7F4501、FD);
    load_config (0x334A01、FD);
    load_config (0xAA7110、FD);
    LOAD_CONFIG (0x027201、FD);
    load_config (0x157C01、FD);
    load_config (0x337D01、FD);

    LOAD_CONFIG (0x334801、FD);
    LOAD_CONFIG (0x734901、FD);
    load_config (0x3B5F01、FD);
    load_config (0x3B6E01、FD);

    回读(0x0380、FD);
    中断;
    案例6:
    STOP=1;
    中断;
    默认值:
    printf ("选择有效的选项\n");

    }while (stop=0);

    返回0;

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

    您好、Timothy、

    好消息是、我可以通过 SPI 与 LMK04828进行通信、我可以写入寄存器、也可以通过4线制模式读取我写入的内容。

    我正在使用定制板。 使用以下参数:

    振荡器: 156.25Mhz

    CLKIN:30.72MHz

    我期望通过 DCLKOUT1获得156.25MHz LVDS 输出

    还会连接时钟设计工具输出以用于我的配置。

    如果您有任何寄存器、请帮助获取可能的寄存器配置、或者建议需要注意哪些寄存器。

    提前感谢

    Nikhil Krishnan R

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

    请在下面找到我们的寄存器集值:

    0x100 -> 0x10
    0x103 -> 0x02
    0x106 -> 0x71
    0x107 -> 0x01
    0x138 -> 0x01
    0x146 -> 0x1A
    0x147 -> 0x1A
    0x148 -> 0x03
    0x149 -> 0x43
    0x150 -> 0x43
    0x155 -> 0x0C
    0x156 -> 0x00
    0x159 -> 0x3D
    0x15A -> 0x09
    0x160 -> 0x00
    0x161 -> 0x02
    0x162 -> 0x49
    0x166 -> 0x00
    0x167 -> 0x00
    0x168 -> 0x10
    0x169 -> 0x59
    0x16C -> 0x00
    0x16D -> 0x00

    所有其他寄存器均为默认值

    请验证更改并提出建议。
    请帮我、这是一件紧急的事情。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nikhil、

    在您的寄存器中、通过0x16249、您正在对 PLL2_REF2X_EN = 1进行编程、您的 PLL2_R =/2且 PLL2_N =/16、这会导致 VCO 频率为5000MHz、您需要2500MHz、我建议您关闭倍频器(0x162 - 大于48)以获得78.125MHz 相位检测器频率。

    此外、如数据表第49页上的9.5.1所示。
    程序0x000 -> 0x80

    此外、在0x166之前添加寄存器:
    0x145 -> 0x7f
    0x171 -> 0xAA
    0x172 -> 0x02
    0x17c -> 0x15
    0x17d -> 0x33

    此外、您的 PLL1 R 分频器(CLKin1_R)为3072。 频率为30.72MHz。 这会导致极低的 PLL1相位检测器频率。 我建议增大 PLL1电荷泵(就像 CDT 仿真中的情况)、用0x15b -> 0xdf 设置1550 uA。

    只需确认您确实有一个3.3V 直流耦合 CMOS 信号进入 CLKin1、否则我建议使用 CLKin1_TYPE =双极。

    73、
    Timothy

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

    您好、Timothy、

    非常高兴地说、我们获得了很好的输出频率。

    初始编程序列根据数据表完成。

    问题是倍频器和电荷泵增益。 我们给出了建议的寄存器值并得到了输出。

    我们的输入是 CLKIN1的3.3VDC CMOS 信号、并在 DCLKOUT1获得 LVDS 输出。

    是否有任何要配置的寄存器来提高输出频率的稳定性?

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

    您好、Nikhil、

    您是否会看到频率在10kHz 速率下发生轻微偏移?  10kHz 的相位检测器较低、因此如果您使用的 VCXO 有一些泄漏、则可能会导致频率在电荷泵下次开启之前稍微漂移、从而校正频率。  这也会被视为10kHz 杂散。  尽管窄环路带宽会导致该杂散衰减。

    您可以尝试以下操作:

    • 设计更窄的环路滤波器可能会有所帮助。
    • 具有较高输入阻抗的 VCXO 可能会有所帮助。
    • 使用将运算放大器或运算放大器配置为单位增益缓冲器的有源环路滤波器将允许运算放大器的输入阻抗替换 VCXO 的输入阻抗。  这也会有所帮助。

    73、
    Timothy