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.

[参考译文] DS125DF1610:10G 速度配置

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1378447/ds125df1610-configuration-for-10g-speed

器件型号:DS125DF1610

工具与软件:

大家好、团队成员:

我们的客户需要 DS125DF1610的10G 速度。 假设他选择2.5 GHz 的基准频率。 他如何向 DS125DF1610明确指明输出速度是10G 而不是5G?

他们 在此步骤中遇到了问题:他们的参考频率现在为2.5GHz、寄存器位0x2F [7:4]= 0x0A。 但输出频率为5G、而不是所需的10G。

此致、

Jejomar



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

    尊敬的 Jejomar:

    客户可以使用以下寄存器写入来确保输出为10Gbps。

    • 0x09[2]= 1 //启用位以覆盖 divsel
    • 0x18[6:4]= 000 //强制1分频设置

    此致!

    卢卡斯

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

    大家好、Lucas:

    感谢您的参与。 我想澄清客户的方案、因为我的最初问题没有清楚说明。

    客户希望将 DS125DF1610用作 PRBS 序列的来源。 下图展示了该图。 LMH2581频率为2.5GHz、用作基准信号。 在 DS125DF1610的输出端、它们需要10G 速度。 但遗憾的是、在这种情况下 、客户只能使用5G。

    此致、

    Jejomar

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

    尊敬的 Jejomar:

    感谢您的澄清。 除了我共享的寄存器写入已用于启用 PRBS 发生器的序列之外、客户还可以使用这些写入。 这将确保 PRBS 输出为10G 而不是5G。

    此致!

    卢卡斯

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

    您好、Lucas、

    很遗憾、根据您的建议、客户无法达到10G 速度。

    它们在 Anritsu MP2100B 示波器上检查速度。 从器件运行10G 速度(PRBS-31)、在示波器上设置类似的模式、然后观察到没有阳性结果。


    另一方面、如果他们将示波器切换到5G 模式(PRBS-31)、结果为正。 也就是说、DS125DF1610会根据需要生成5G、而不是10G。



    下面我将提供初始化代码、如果您能帮助我们查明错误的位置、我们将不胜感激。

    void set_all_channel_10G( void )
    { // ff ff 14 ff ff 02 ff ff 2f ff fc fd
    uint8_t data[12]={0x01,0x03,0x00,0x01,0x00,0x20,0x01,0x03,0xA6,0x01,0x00,0x01};
    // Write to the channel regs
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[0],1,10);
    HAL_Delay(100);
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[1],1,10);
    HAL_Delay(110);
    // ??
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x14,1,&data[2],1,10);
    HAL_Delay(250);
    // Turn off broadcast write
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[3],1,10);
    HAL_Delay(100);
    // Write to the share regs
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[4],1,10);
    HAL_Delay(100);
    // Freq 125 MHz
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x02,1,&data[5],1,10);
    HAL_Delay(100);
    // Write to the channel regs
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[6],1,100);
    HAL_Delay(100);
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[7],1,100);
    HAL_Delay(250);
    //CTLE - off, EN_FLD_C
    
    //CTLE - off, EN_FLD_CHECK = 1, EN_PPM_CHECK = 1, rate - 10 Gbps
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x2F,1,&data[8],1,100);
    HAL_Delay(250);
    // Write to the channel regs( not broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data[9],1,100);
    HAL_Delay(100);
    // Channels 0 - 7 switch off
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFC,1,&data[10],1,100);
    HAL_Delay(100);
    // Channel 8 - switch on
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFD,1,&data[11],1,100);
    HAL_Delay(500);
    
    
    uint8_t data3[3]={0x03,0x04,0x01};
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data3[0],1,10);
    HAL_Delay(100);
    // 0x09[2] = 1 enable bit to override divsel
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x09,1,&data3[1],1,10);
    HAL_Delay(170);
    // Turn off broadcast write
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data3[2],1,10);
    HAL_Delay(500);
    
    
    uint8_t data4[3]={0x03,0x00,0x01};
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data4[0],1,10);
    HAL_Delay(70);
    // PDIQ
    
    // PDIQ_SEL_DIV, divide by 1 (bits 4-6 = 0b000)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x18,1,&data4[1],1,10);
    HAL_Delay(170);
    // Turn off broadcast write
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data4[2],1,10);
    HAL_Delay(100);
    
    uint8_t data5[3]={0x03,0x00,0x01};
    // Write to the channel regs (broadcast)
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data5[0],1,10);
    HAL_Delay(100);
    // SINGLE_BIT_LIMIT_CHECK_ON - switch off
    HAL_I2C_Mem_Write(&hi2c3,0x30,0x0C,1,&data5[1],1,10);
    HAL_Delay(170);
    // Turn off broadcast write
    HAL_I2C_Mem_Write(&hi2c3,0x30,0xFF,1,&data5[2],1,10);
    HAL_Delay(500);
    }


    此致、

    Jejomar

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

    尊敬的 Jejomar:

    在我全面回顾此寄存器序列之前、您能说明每个参数吗? 我可以推断一些参数是什么、但您能分享其他参数表示什么吗? 是使用掩码还是将寄存器值完全写入每个寄存器地址?

    HAL_I2C_I2C Mem_Write (I2C 总线、器件地址、寄存器地址、??、寄存器值、 ????)

    初始化代码示例:HAL_I2C_DIC_ Mem_Write (&H 2c3、0x30、0xFF、1、&DATA[0]、1、10);

    此致!

    卢卡斯

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

    您好、Lucas、

    以下是 用于访问 DS125DF1610的函数参数

    初始化代码示例:
    HAL_I2C_DIC_ Mem_Write (&H 2c3、0x30、0xFF、1、&DATA[0]、1、10);

    此处:
    &hi2c3 - I2C 总线
    0x30 - I2C 器件地址
    0xFF–寄存器地址
    1 -内部存储器地址的 memAddSize
    &DATA[0]-寄存器值
    1 -要发送的数据量的大小
    10 -超时(以 ms 为单位)

    为了以防万一、我还将从 HAL 库中给出该函数的标准定义。

    /**
    *@简要在分块模式下将大量数据写入特定的存储器地址
    *@param hi2c 指针指向包含的 I2C_HandleTypeDef 结构
    *指定 I2C 的配置信息。
    *@param DevAddress 目标器件地址
    *@param memAddress 内部存储器地址
    *@param memAddSize 的内部存储器地址
    *@param pData 指针到数据缓冲区
    *@参数大小要发送的数据量
    *@param 超时持续时间
    *@retval HAL 状态
    */
    HAL_StatusTypeDef HAL_I2C_MemSize Mem_Write (I2C_HandleTypeDef * hi2c、uint16_t DevAddress、uint16_t MemAddress、uint16_t MemAddSize、uint8_t * pData、 uint16_t 大小、uint32_t 超时)

    }

    此致、

    Jejomar

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

    尊敬的 Jejomar:

    感谢您的澄清。 我查看了客户的寄存器写入序列、发现了一些问题:

    • 没有必要写入0xFF=0x01然后立即写入0xFF=0x03。 简单写入0xFF=0x03即可置位位位1和0、从而启用对所有通道的广播写入。
    • 无需在每次通道寄存器写入之间写入0xFF=0x03。 只需写入0xFF=0x03一次即可选择通道寄存器组和广播写入选项。 所有后续寄存器写入都将引用通道寄存器组。 仅当切换到共享寄存器组或禁用广播写入时、才需要再次使用寄存器0xFF。
    • 我没有看到任何寄存器写入来设置内部 PRBS 发生器。

    客户能否改为使用以下寄存器写入序列?

    • 寄存器地址、写入值
    • 0xFF 0x00 //选择共享寄存器页面
    • 0x02 0x20 //选择25 MHz REFCLK
    • 0xFF 0x03 //选择对所有通道进行广播写入
    • 0x0A 0x5C //将 CDR 置于复位状态
    • 0x2F 0xA6 //选择10/5/2.5Gbps
    • 0x09 0x24 //启用 divsel 覆盖、启用输出多路复用器覆盖
    • 0x18 0x00 //强制除以1设置(10Gbps)
    • 0x0C 0x00 //禁用 single-bit 限制检查
    • 0x1E 0x99 //图形发生器输出。 启用串行器。
    • 0x79 0x30 //启用 PRBS 发生器
    • 0x30 0x0B //启用数字时钟、选择 PRBS-31
    • 0x0A 0x50 //释放 CDR 复位

    客户是否可以访问 DS125DF1610编程指南? 本文档包含许多有用的寄存器写入序列、包括如何使用 PRBS 发生器。

    此致!

    卢卡斯