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.

[参考译文] AM2432:如何使用 TX_IPG 寄存器?

Guru**** 2905760 points

Other Parts Discussed in Thread: AM2432, TMDS243EVM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569332/am2432-how-is-the-tx_ipg-register-used

器件型号:AM2432
Thread: TMDS243EVM 中讨论的其他器件

工具/软件:

您好:

在使用 AM2432 的定制电路板上、我遇到了 100M 以太网 IPG 设置为 480ns 的问题。

经过一些研究后、我发现可以通过将 TX_IPG1 寄存器 0x0x30032034 从 0x0B 更改为 0x17 来将 IPG 设置为 960ns、而不是将 TX_IPG0 寄存器 0x30032030。

我想分析为什么会发生这种情况、原因是固件、SDK 还是硬件、
那么、您能告诉我哪个模块正在使用这个 TX_IPG 寄存器来调整 IPG 吗?

此致、
西森市

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

    尊敬的 Nishimori:  

    在 100M 和 1G 以太网之间的链路速度转换期间进行 IPG 调整、反之亦然。 它由 ICSS 以太网驱动程序进行管理。
    时序计算基于不同的时钟频率:100Mbps MII 运行 25MHz 时钟(每个周期 40ns)、而 1Gbps RGMII 使用 125MHz 时钟(每个周期 8ns)。 对于 100Mbps MII、实现 960ns IPG 需要 24 个时钟周期 (960ns÷40ns)、而 1Gbps RGMII 需要 12 个时钟周期 (96ns÷8ns)。 由于寄存器值设置为比实际时钟周期计数少 1、因为它必须在下一个周期传输、因此这说明了 100Mbps 模式下的用法 0x17(十进制 23)和 1Gbps 模式下的用法 0xB(十进制 11)。

    预计为 480ns。 您在寄存器中看到的值是多少?
    您使用的是 RTOS 还是 Linux?
    如果您正在使用 RTOS、则使用 Icssg_updateLinkSpeed100MB() 和 Icssg_updateLinkSpeed1G() 来更新链路速度。

    注意:
    -如果您正在编程 TX_IPG1 您需要写入 TX_IPG0(这是针对硬件错误的权变措施,即读取 TX_IPG0 并将相同的值写回 TX_IPG0
        Icssg_wr32(hIcssg, baseAddr + CSL_ICSS_G_PR1_MII_RT_PR1_MII_RT_CFG_REGS_BASE + CSL_ICSS_G_PR1_MII_RT_PR1_MII_RT_CFG_TX_IPG1, 0xBU);
        Icssg_wr32(hIcssg, baseAddr + CSL_ICSS_G_PR1_MII_RT_PR1_MII_RT_CFG_REGS_BASE + CSL_ICSS_G_PR1_MII_RT_PR1_MII_RT_CFG_TX_IPG0, 0xBU);

    -需要设置 Wire clk 位。

    BR
    Jc.

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

    您好、

    480ns is not expected。 您在寄存器中看到的值是多少?

    TX_IPG0 0x30032030 0x17U  
      设置了 TX_IPG1 0x30032034 0x0BU。

    您使用的是 RTOS 还是 Linux?

    我使用的是 FreeRTOS。

    调试后、我发现 Icssg_updateLinkSpeed100MB 只被调用过一次、而 Icssg_updateLinkSpeed1G 从未被调用过。

    Icssg_updateLinkSpeed100MB 指定了参数 macPort = ENET_MAC_PORT_FIRST = 0、我确认 0x17U 已写入 TX_IPG0 寄存器。
    这似乎没问题、但当通信开始时、IPG 为 480ns。
    我再次调试、无论我将 TX_IPG0 寄存器重写为什么值、IPG 都没有改变。
    然后、我尝试重新写入 TX_IPG1 寄存器、IPG 更改为 TX_IPG1 的值。
    →μ s 将 TX_IP1 设置为 0x17 将 IPG 更改为 960ns。

    从现在开始、我已确定引用 TX_IPG1 寄存器、即使这是端口 0 也是如此。
    我想知道这是由固件问题还是定制电路板问题导致。
    写入 TX_IPG0/1 的寄存器值在哪里是参考值?

     

    -在配置了几乎相同固件的 TMDS243EVM 环境中不会发生此问题、并且 TX_IPG0 可以正确引用。
    -定制板有两个端口,只有端口 0 通过 100M 以太网连接到 LAN 电缆。
    - sdk:mcu_plus_sdk_am243x_11_00_00_15

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

    你好西森吗?

    I 再次进行调试、无论我将 TX_IPG0 寄存器重写为什么值、IPG 都没有更改。

    您能否确认 当您读回该值时 0x17、即存储器 TX_IPG0 中的值完好无损?

    BR
    Jc.

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

    您好、

    您能否确认 读回该值是否为 0x17、即存储器 TX_IPG0 中的值是否完好无损?

    我用这种方式检查了它

    1.使用调试器确认 0x17 是否写入 TX_IPG0。
    2.用 0x17 覆盖 TX_IPG0 寄存器 (0x30032030)。
    3.运行→检查信号并确认 IPG 保持在 480ns。
    4.中断并检查 TX_IPG0 寄存器→0x17 是否已写入。

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

    您好、

    2. 用 0x17 覆盖 TX_IPG0 寄存器 (0x30032030)。
    [/报价]

    >>如果您正在调用此 API  Icssg_updateLinkSpeed100MB()、则您不应看到此问题。 如果手动覆盖 TX_IPG1、则必须遵循我建议的上述顺序(“检查注释“部分)。  

    如果不解决、  

    您能否探测 PHY 的 TX_CLK?

    您在定制电路板中使用哪种 PHY?

    BR
    Jc.

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

    还共享 TXCFG0/1 寄存器值。  

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

    您好、

    >>如果您正在调用此 API  Icssg_updateLinkSpeed100Mb ()、那么您不应该看到该问题。 如果手动覆盖 TX_IPG1、则必须遵循我建议的上述顺序(“检查注释“部分)。  [/报价]

    是的。 正在调用该 API、因此会将 0x17 写入 TX_IPG0。 但是、实际的 IPG 基准似乎是 TX_IPG1。
    我已经确认、手动写入 TX_IPG1、然后写入 TX_IPG0 会反映 TX_IPG1 中的值并更改 IPG、
    但我仍然很好奇为什么一开始引用 TX_IPG1。

    使用的 PHY 是 DP83822l。

    TX_CLK 为 25MHz、下面显示了波形图。

    TXCFG0 为 0x00001903 地址:300B2010
    TXCFG1 为 0x00001803 地址:300B2014
    作为参考、​​将存储器值直接粘贴到图中。

    在前面的问题和答案中、我参考了寄存器 0x30032030 (ICSSG0)、但正确的值是寄存器 0x300B2030 (ICSSG1)。

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

    尊敬的 Nishimori:  

    感谢您分享日志。  

    您能分享原理图吗?

    我仍然看到 0x0000000B、似乎已交换 MII 引脚。

    0x0000000B = 100M = 480ns

    BR
    Jc.  

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

    您好、

    我附上了 PHY 电路图(某些器件已被屏蔽)。
    虽然我还没有使用它、但还有另一种类似的电路、称为 PHY2。

    ↓PHY2(未使用)

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

    我很好奇:为什么 TX_IPG 寄存器中仍然写入 0x0B? 您是否可以将 IPG 都设置为 0x17(请记住按照上面提到的 TX_IPG1 寄存器编程顺序进行操作)?

    我已确认手动写入 TX_IPG1、然后写入 TX_IPG0 反映 TX_IPG1 中的值并更改 IPG、
    但我仍然很好奇为什么一开始引用 TX_IPG1。

    这是我上面提到的硬件错误。

    我没有看到与上面原理图相关的任何问题。  

    BR
    Jc.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我很好奇:为什么还在 TX_IPG 寄存器中写入 0x0B? 您是否可以将 IPG 设置为 0x17(请记住按照上述 TX_IPG1 寄存器编程的序列进行操作)?

    此寄存器图显示了​​按原样使用 SDK 时的寄存器值、未进行任何修改。
    当然、我可以修改源代码并将 0x17 写入 TX_IPG0/1 寄存器。
    此外、我确认、按照规程并将 0x17 写入 TX_IPG1 会将 IPG 校正为 960ns。
    →IPG 问题本身已经解决。

    然而,目前它被调用 Icssg_updateLinkSpeed100MB(),将 TX_IPG0 设置为 0x17 (TX_IPG1 保持不变,默认为 0x0B )。
    我想确定问题的原因、即实际 IPG 引用 TX_IPG1 的值。

    哪个模块读取 TX_IPG1 中写入的 0x0B 并将 IPG 设置为 480ns?
    是否在 PHY 源中?

    ]与上述原理图相关、我没有看到任何问题。  [/报价]

    感谢您的检查。 我知道这不太可能是硬件问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“647905" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569332/am2432-how-is-the-tx_ipg-register-used/6049552

    然而,目前它被调用 Icssg_updateLinkSpeed100MB(),将 TX_IPG0 设置为 0x17 (TX_IPG1 保持不变,默认为 0x0B )。
    我想确定问题的原因、即实际 IPG 引用 TX_IPG1 的值。

    哪个模块读取 TX_IPG1 中写入的 0x0B 并将 IPG 设置为 480ns?
    是否在 PHY 源中?

    [/报价]

    在您的案例中、PHY 链路建立/断开映射到 Enet 驱动程序的情况如何交换?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是、目前、调用 Icssg_updateLinkSpeed100MB ()、将 TX_IPG0 设置为 0x17 (TX_IPG1 保持不变、默认为 0x0B)。
    我想确定问题的原因、即实际 IPG 引用 TX_IPG1 的值。
    Icssg_updateLinkSpeed100MB() 是按 MAC 端口链接速度更新调用的(仅当有速度更新或链接检测时)。
    可能是端口 1  Icssg_updateLinkSpeed100MB() 没有执行/调用? 您能否仔细检查 链接打开后是否调用了 Icssg_updateLinkSpeed100MB () API 两次(每个端口)?
    在测试期间、您是否连接到两个端口?
    BR
    Jc.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我再次检查了一下。
    结果表明、Icssg_updateLinkSpeed100MB() 只调用一次。在测试过程中、LAN 电缆只连接到端口 0。

    (类似地,连接到端口 1 时、该函数仅调用一次。 在这种情况下、LAN 电缆仅连接到端口 1。)

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

    好的。  只是为了确认:您运行了 两个测试场景

    场景 1:

    • 将电缆连接到端口 0、调用 Icssg_updateLinkSpeed100Mb () API 、并将 TX_IPG0 寄存器中的 IPG 更新为 0x17
    • 已运行测试
    • 端口 0 上出现 480ns IPG。
    • TX_IPG1 =未修改= 0x0B

    场景 2:

    • 将电缆连接到端口 1、 调用 Icssg_updateLinkSpeed100Mb () API 、并将 TX_IP1 寄存器中的 IPG 更新为 0x17
    • 已运行测试
    • 960ns IPG 出现在端口 1 上。
    • TX_IPG0 =未修改= 0x0B

    您能否证实这一点?

    BR、
    Jc.

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

    我想更正我之前的回答。
    Icssg_updateLinkSpeed100MB() API 实际上被调用了两次:
    (仅连接端口 0 时两次。   仅连接端口 1 时两次)

    [引用 userid=“514290" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569332/am2432-how-is-the-tx_ipg-register-used/6067996

    场景 1:

    • 将电缆连接到端口 0、调用 Icssg_updateLinkSpeed100Mb () API 、并将 TX_IPG0 寄存器中的 IPG 更新为 0x17
    • 已运行测试
    • 端口 0 上出现 480ns IPG。
    • TX_IPG1 =未修改= 0x0B
    [/报价]

    是的。 它的表现如所述。

    [引用 userid=“514290" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569332/am2432-how-is-the-tx_ipg-register-used/6067996

    场景 2:

    • 将电缆连接到端口 1、 调用 Icssg_updateLinkSpeed100Mb () API 、并将 TX_IP1 寄存器中的 IPG 更新为 0x17
    • 已运行测试
    [/报价]

    我已进行了这项检查、并确认 TX_IPG0 =未修改= 0x0B。
    但是、由于代码相关的问题或 SDK 中的错误、没有从端口 1 传输任何帧。

    我觉得这里可能有一些提示、但我不确定它如何影响问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“647905" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569332/am2432-how-is-the-tx_ipg-register-used/6072213

    是的。 它的表现如所述。

    [/报价]

    由于 在我们的最终使用 LP-AM243x 重现此过程、我建议您共享 PRU ICSS 存储器转储?

    您可以根据 您正在使用的 ICSSG 实例转储以下存储器地址。

    ICSSG0:0x030000000 至 0x03003C0FF

    ICSSG1:0x030080000 至 0x0300BC0FF

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

    注:在运行以下测试并遇到问题时转储地址。  

    [引述 userid=“647905" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1569332/am2432-how-is-the-tx_ipg-register-used/6072213
    • 将电缆连接到端口 0、调用 Icssg_updateLinkSpeed100Mb () API 、并将 TX_IPG0 寄存器中的 IPG 更新为 0x17
    • 已运行测试
    • 端口 0 上出现 480ns IPG。
    • TX_IPG1 =未修改= 0x0B
    [/报价]

    BR
    Jc.

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

    在运行此问题的测试时、我转储以下地址的内存:
    ICSSG1:0x030080000 至 0x0300BC0FF

    e2e.ti.com/.../memory.dat