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.

[参考译文] LMK05028:LMK05028动态时钟校正

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1072012/lmk05028-lmk05028-dynamic-clock-correction

部件号:LMK05028
“线程: 测试”中讨论的其它部件

您好,

我可以使用哪个 LMK05028寄存器进行 动态时钟校正。

请告诉我们 动态时钟校正所使用的计算步骤。

此致

安吉

安吉

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

    安吉您好,

    请澄清动态时钟校正的含义吗? 您是否在询问我们的 DCO 模式?

    此致,

    起亚·拉赫巴尔

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

    是的。
    1.如何从 ppb 计算步长?  
    2.以下哪两个寄存器用于调节时钟?
    DPLLy_FDEV, DPLLy_FDEV_REG_UPDATE
    3.在调整时钟之前是否有任何 GPIO 寄存器要启用。
    4.请与我们共享一个用于时钟调整的 psudo 代码。

    此致

    安吉

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

    安吉您好,

    1.数据表中的第9.4.4.1节显示了从 ppb 计算步长的公式。

    2.是用于调整时钟,DPLLy_FDEV 会设置步长,DPLLy_FDEV_REG_UPDATE 会根据数字递增或递减步长。 另请注意,DPLLy_FDEV_EN 必须为高,才能启用 DCO 模式,必须将 DPLLy_DCO_SEL_REF_TCXOB 设置为在 TCXO DCO 模式和 REF DCO 模式之间选择。

    3. DCO 模式可以使用 GPIO 引脚操作,但我建议使用寄存器方法。 寄存器方法只需要设置上面第2号中所述的4个控件。

     4.集成电路 Pro GUI 具有用户友好界面,可用于更好地了解 DCO 的工作原理。

    基本上,要执行频率调整,顺序如下:

    1.通过设置 DPLLy_FDEV_EN HIGH 启用 DPLLy 的 DCO 功能。

    2.通过设置  DPLLy_DCO_SEL_REF_TCXOB,选择 DCO 调整是否需要为 TCXO 模式或 REF 模式。

    3.将所需的步长写入 DPLLy_FDEV 寄存器。

    4.将 DPLLy_FDEV_REG_UPDATE 设置为低增量,设置为高减。

    此致,

    起亚·拉赫巴尔

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

     

    根据上述程序,我实施了 C 函数。 尝试测试,但无法正常工作。 请检查以下代码片段。 如果我漏了任何东西,请告诉我。

    int lmk_clock_control(int64_t ppb)/*ppb 值将来自 ptp4l */


    int64_t 步进值= 0;
    UINT64_t DENref = 1099511627776;
    UINT64_t fin = 390625000;
    UINT64_t fVCO = 5156250000;
    INT Rin = 1,P1_PLL = 4,PR_ref = 4;
    UINT8_t data1,data2,data3,data3,data4,data5;

    /*计算步长*/
    梯级=(ppb/1000000000)* DENref /(fin/Rin)* fVCO /(p1_PLL*PR_ref);

    //字节提取
    Data1=((uint8_t)(step val & 0x0000000000ff);
    Data2=((uint8_t)((step _val & 0x00000000ff00">8));
    Data3=((uint8_t)((step val & 0x000000ff0000)>16));
    Data4=(uint8_t)((step val & 0x0000ff000000)>24));
    Data5=(uint8_t)((step val & 0x00ff0000">32));

    /*为 DPLL1和 DPPL2启用 DCO 功能*/
    /*选择 DCO 调整模式 TCXO-DPLL->0h,REF-DPLL->1h */
    IF (i2c_write(&lmk,0x0244,0x5,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x0244);
    返回-1;
    }
    IF (i2c_write(&lmk,0x0245,0x5,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x0245);
    返回-1;
    }

    /*将 step 值写入 DPLL1_FDEV 寄存器*/
    如果(i2c_write(&lmk,0x024A,data1,0)<0)则为{0}
    printf("I2C 写入错误:地址%x\n", 0x024A);
    返回-1;
    }
    IF (i2c_write(&lmk,0x0249,data2,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x0249);
    返回-1;
    }
    IF (i2c_write(&lmk,0x0248,data3,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x0248);
    返回-1;
    }
    IF (i2c_write(&lmk,0x0247,data4,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x0247);
    返回-1;
    }
    IF (i2c_write(&lmk,0x0246,data5,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x0246);
    返回-1;
    }

    /*写入 DPL1更新寄存器*/
    如果(i2c_write(&lmk,0x024B,0x0,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x024B);
    返回-1;
    }

    /*将 step 值写入 DPL2_FDEV 寄存器*/
    IF (i2c_write(&lmk,0x0250,data1,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x0250);
    返回-1;
    }
    IF (i2c_write(&lmk,0x024F,data2,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x024F);
    返回-1;
    }
    IF (i2c_write(&lmk,0x024E,data3,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x024E);
    返回-1;
    }
    IF (i2c_write(&lmk,0x024D,data4,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x024D);
    返回-1;
    }
    IF (i2c_write(&lmk,0x024C,data5,0)<0){
    printf("I2C 写入错误:地址%x\n", 0x024C);
    返回-1;
    }


    /*写入 DPLL2更新寄存器*/
    IF (i2c_write(&lmk,0x0251,0x0)<0){
    printf("I2C 写入错误:地址%x\n", 0x024B);
    返回-1;
    }

    }

    /*用于测试目的的呼叫示例*/

    lm_clock_control (5678227331);
    lm_clock_control (10000000000);
    lm_clock_control (5678228331);
    lm_clock_control (10000090000);

    此致

    安吉

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

    安吉您好,

    您需要按相反的顺序编写 FDEV 寄存器。 编写 LSB 时,FDEV 将生效。 因此,对于 DPL1,FDEV 应首先写入0x0246,最后写入0x024A。 DPLL2也采用相同的顺序。

    此致,

    起亚·拉赫巴尔

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

    嗨,起亚·拉巴尔,

    如何选择 FINC/FDEC? 假设我根据该值计算的步进值如何选择 FINC/FDEC?
    请帮帮我。

    此致

    安吉

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

    安吉您好,

    写入 DPLLy_FDEV 寄存器后,将 DPLLy_FDEV_REG_UPDATE LOW 设置为增量,将 HIGH 设置为递减。 对于 DPL1, DPLL1_FDEV_REG_UPDATE 是寄存器0x24B 的位0。 对于 DPLL2, DPL2_FDEV_REG_UPDATE 是寄存器0x251的位0。

    此致,

    起亚·拉赫巴尔

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

    嗨,起亚·拉巴尔,

    我对集成电路专业版和时钟调整有疑问。

    1.集成电路 pro 软件的目标 ppb 是否与 ptp4l ppb 相同?

    2.我正在从 ptp4l 接收 ppb 值2149,使用该值计算得出的 DPLLy_FDEV 值为 152,291,034。 如果我写了这个值,PTP 因为高偏移校正而断开连接。我在这里做了什么错?

    3.实际上,我们将从 ptp4l 接收正负 ppb 值,但 TIC Pro 软件不会将 ppb (目标 ppb 框)值接受为负。为什么?

    请帮我了解这个 ppb。

    此致

    安吉

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

    安吉您好,

    1.目标 ppb 是要对输出时钟信号进行的 ppb 调整。 例如,编写一个10 ppb 目标,然后按下增量按钮,将导致 APLL 分子增加10 ppb,因此输出时钟也将增加10 ppb。

    2.当 ptp4l 返回 ppb 偏移量时,您将是目标频率的许多 ppb 偏移量。 因此,使用该 ppb 偏移量计算 DPLLy_FDEV,然后根据您所处的 ppb 偏移量方向进行增量或递减。 请确保您正朝着正确的方向进行调整。

    3.要进行负调整,您必须按下递减按钮。 ppb 值将始终作为正数输入,然后增量和递减按钮确定是将 ppb 减去还是添加到 APLL 分子中以完成调整。

    另请记住 ,DPLLy_FDEV_REG_UPDATE 控件确定是递增还是递减。

    此致,

    起亚·拉赫巴尔

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

    嗨,起亚·拉巴尔,

    我按照文档中提到的程序和您的建议进行了更正,试图进行测试,但由于 FDEV 值较高而未进行更正。 请您查看随附的代码一次。 请告诉我您的意见。

    此致

    安吉

    e2e.ti.com/.../lmk.c

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

    安吉您好,

    不幸的 是,我无法支持有关非我们的 TIC Pro 软件的软件的技术问题。 我的建议是联系 SMARTModular (第三方编程机构)以帮助您的设备编程,或者使用 TIC Pro 软件  https://www.ti.com/tool/TICSPRO-SW 对设备进行编程

    此致,

    起亚·拉赫巴尔