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.

[参考译文] DP83822HF:与 TMS570LC4357快速链路脉冲周期问题进行通信

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1228402/dp83822hf-communication-with-tms570lc4357-fast-link-pulse-period-issue

器件型号:DP83822HF
主题中讨论的其他器件: TMS570LC4357HALCOGEN

大家好、我目前正在尝试在100Base-TX 全双工通信中、使用 MII 模式与 TMS570LC4357设置的以太网中将 DP83822HF 用作 PHY 器件。 目前我看到的问题是 DP83822HF 数据表中列出的周期时序与我看到的不匹配。

正如您在下图中看到的、我使用逻辑分析仪捕获的、我正在以1MHz 的频率(TMS570LC43567数据表中的标准时钟速度)运行 MDClk、但由于某种原因、我对 DP83822HF 的快速链路脉冲得到了非常奇怪的周期

我看到时钟/数据脉冲宽度为16ns、而不是114ns、~时钟脉冲到数据脉冲周期为~22us、时钟脉冲到时钟脉冲周期为~45us、而不是~125

最后要说明的一点:

我也仅在 TMS570下电上电后才会看到这种行为。 在通过 JLink 闪存或 Code Composer Studio 调试会话对 TMS570进行干净刷新后、我会看到 DP83822HF 数据表中概述的标准周期、但一旦我对 TMS570进行下电上电、我就会开始看到这些奇数周期。

非常感谢您对该问题有任何深入了解

谢谢。

托马斯·希奇

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

    尊敬的 Thomas:

    我们下周同一时间再见。

    --

    此致、

    林希尔曼

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

    尊敬的 Thomas:

    我不确定我是否正确理解您的问题、如果我的理解有误、请更正我:

    • 是否在读取 PHY 的寄存器时遇到问题?
    • 您的 MDIO/MDC 通信是否在 PHY 中不工作?
    • MDIO 线路上是否有上拉电阻器?
    • 您能否探测 VDDA、VDDIO、VDD1P8的电压?
    • 您是否还可以探测重置引脚和 Rbias 引脚电压?

    --

    谢谢!

    林希尔曼

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

    尊敬的 Hillman:

    我正在尝试从 DP83822HF 获取链路状态。 我已经尝试在 MII 模式中运行时读取基本模式状态寄存器(寄存器0x0001)和 PHY 控制寄存器(寄存器0x0019)。 我看到的问题是、在刷写 TMS570时、在 TMS570的 MDIO/EMAC 初始化过程中看到 Link Status 位已正确设置、 但是、如果我对 TMS570和 DP83822HF 进行下电上电、尽管尚未更改 TMS570中的任何固件并且从未拔下以太网连接、但我不再看到该位设置正确。

    似乎我在读取寄存器时遇到了问题、好像链接状态位没有正确设置。

    MDIO/MDC 通信似乎对 PHY 起作用。 在 TMS570的初始闪存上、一切都能够正确地初始化、并且 TMS570与 DP83822HF 之间的以太网通信正常工作。

    MDIO 线路上有一个上拉电阻器。

    关于探头、我可以给您回复。

    我提供快速链路脉冲信号图像的原因是 TMS570参考手册描述了它如何检测链路状态:  

    谢谢!

    托马斯·希奇

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

    尊敬的 Thomas:

    我和希尔曼在同一个团队工作。 他会有点不愿意,他的回答会被推迟。 我确实看到 MDC 信号有问题。 这是一个输入引脚、因此我们不控制与该信号相关的时序。 这会是 MCU 问题。 我建议 TMS 团队来解决这个问题。

    此致、

    格罗姆

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

    您好、Gerome、

    您认为 MDC 信号有什么问题? 根据 TMS570参考手册、典型运行速度为1MHz、这是上面的逻辑分析仪捕捉中显示的值。

    谢谢。

    托马斯

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

    尊敬的 Thomas:

    抱歉。 我说错了。 因此、为了理解您的问题、您需要确定 MDIO 线路的范围并检查 MDI 上的 FLP。 简而言之、您总结的问题是您存在的链路问题是正确的吗? 您是否能够读取寄存器0x1? 如果您读取它3次、值是多少?

    此致、

    格罗姆

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

    您好、Gerome、

    是的、我能够读取寄存器0x1。 每次读取它时、我将读取值0x7849。

    谢谢。

    托马斯

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

    尊敬的 Thomas:  

    因此、您会在刷写 TMS 之前看到链接、但在遇到问题之后。 在刷写 TMS 之前、在寄存器0x1中可以看到什么? 此外、链接时 LED_0是否处于活动状态?

    此致、

    格罗姆

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

    您好、Gerome、

    很抱歉这么晚才回复-我因为最近几天生病就离开了办公室。

    让我尝试更好一点地解释一下。

    目前、我们正在创建一个定制电路板、在其中将 TMS570LC4357与 DP83822HF 相连、以进行以太网通信。 正如目前的情况、当我们使用当前固件擦除和刷写 TMS570时、我们将看到 EMAC/MDIO 模块初始化正常、我们将看到根据 PHY 和 TMS570之间的通信设置 MDIO Link 寄存器中的正确位、 我们也看到以太网通信能够按预期运行。 如果我们随后对 TMS570进行下电上电(关闭提供给 TMS570的主电源、然后重新打开提供给 TMS570的主电源)、我们会看到 EMAC/MDIO 模块初始化正常、 但我们看不到 MDIO Link 寄存器中设置了正确的位、因此从未在 EMAC/MDIO 模块和 PHY 之间建立连接。 需要注意的是、该电路板尚未在下电上电时使用新代码重新刷写、我们只是切断了电路板的电源、然后重新供电。

    我提出 FLP 时序问题的原因是由于 TMS570参考手册中描述了链路检测的方式:
     

    系统提示它使用自动检测来记录当前链路状态、据我了解、当前的链路状态是通过快速链路脉冲信号完成的。 如果我弄错了、请更正 TMS570中的链路状态确定方式。  

    我希望这会把事情澄清一点。 如果您需要我为您提供更多信息、例如我们在 EMAC/MDIO 初始化过程中执行的操作、请毫不犹豫地告诉我。 如果您能提供有关我们为什么会看到此行为的任何信息、也请告知我。

    除了回答您先前的问题之外:  
    1) 1)"在刷写 TMS 之前、您在寄存器0x1中看到什么?"
     -在 DP83822HF 的寄存器0x1中建立良好的链路连接后(在 TMS570的新擦除和闪存之后)、我正在读取值0x786D
     -在 DP83822HF 的寄存器0x1中连接不良的链路(在 TMS570上电后)时、我正在读取值0x7849

    2) 2)"此外、LED_0在链路上是否处于活动状态?"
     -我们目前在 LED_0或 LED_1上没有任何连接。

    谢谢。

    托马斯·希奇

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

    尊敬的 Thomas:

    您是否可以在下电上电之前和之后共享0x0 - 0x1E 的寄存器转储?

    如果链路连接错误(在下电上电后)、重新刷写 TMS 将解决该问题? 如果是、闪存到底在做什么? 它是否将任何寄存器写入 PHY?

    谢谢。

    大卫  

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

    尊敬的 David:

    以下是功率循环前的寄存器:

    00>寄存器0:0x3100
    00>寄存器1:0x786D
    00>寄存器2:0x2000
    00>寄存器3:0xA240
    00>寄存器4:0x01E1
    00>寄存器5:0xCDE1
    00>寄存器6:0x000F
    00>寄存器7:0x2001
    00>寄存器8:0x5806
    00>寄存器9:0x0000
    00>寄存器 A:0x0100
    00>寄存器 B:0x1000
    00>寄存器 C:0x0000
    00>寄存器 D:0x0000
    00>寄存器 E:0x0000
    00>寄存器 F:0x0000
    00>寄存器10:0x4015
    00>寄存器11:0x0108
    00>寄存器12:0x6400
    00>寄存器13:0x2800
    00>寄存器14:0x0000
    00>寄存器15:0x0000
    00>寄存器16:0x0100
    00>寄存器17:0x0041
    00>寄存器18:0x0400
    00>寄存器19:0x8C21
    00>寄存器1A:0x0000
    00>寄存器1B:0x007D
    00>寄存器1C:0x05EE
    00>寄存器1d:0x0000
    00>寄存器1E:0x0102

    以下是功率循环后的寄存器:

    00>寄存器0:0x3100
    00>寄存器1:0x7849
    00>寄存器2:0x2000
    00>寄存器3:0xA240
    00>寄存器4:0x01E1
    00>寄存器5:0x0000
    00>寄存器6:0x0004
    00>寄存器7:0x2001
    00>寄存器8:0x0000
    00>寄存器9:0x0000
    00>寄存器 A:0x0100
    00>寄存器 B:0x1000
    00>寄存器 C:0x0000
    00>寄存器 D:0x0000
    00>寄存器 E:0x0000
    00>寄存器 F:0x0000
    00>寄存器10:0x4002
    00>寄存器11:0x0108
    00>寄存器12:0x0000
    00>寄存器13:0x0800
    00>寄存器14:0x0000
    00>寄存器15:0x0000
    00>寄存器16:0x0100
    00>寄存器17:0x0041
    00>寄存器18:0x0400
    00>寄存器19:0x8021
    00>寄存器1A:0x0000
    00>寄存器1B:0x007D
    00>寄存器1C:0x05EE
    00>寄存器1d:0x0000
    00>寄存器1E:0x0102

    在电源循环刷写后、TMS 可以解决该问题。 该闪存只是将引导加载程序与主应用程序写入 TMS570。 唯一向 PHY 寄存器写入的时间是在引导加载程序或主应用程序中、用于初始化以太网通信。

    这些寄存器读取会在 TMS570和 DP83822HF 之间的自动协商后直接发生(在下电上电前)、并且在自协商将发生的那之后(在下电上电后)直接发生

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

    尊敬的 Thomas:

    下面是 Hillman、他 将在下电上电后继续调试链路状态位上的当前问题。

    只是想确保我正确理解您的问题、如果我没有理解什么、请更正我。

    • 现在、您可以在 TMS 上重新刷写驱动器、并且可以看到链路状态正常、而无需任何下电上电。 但是、在进行下电上电时、可以看到链路状态位不再显示链路接通。 我的说法是否正确?

    如果回答正确、我可以问您一些问题以进行进一步调试:

    • 在下电上电之前或链路状态为启动时、您是否能够将任何数据包或帧传输到链路伙伴、而不会出现任何问题?
    • 下电上电后、您是否能够将任何数据包或帧传输到链路伙伴? 我希望看到的更确切地说是上电后的 MDIO 问题或 MDI 问题
    • 当您说"下电上电"时、是对整个电路板 下电上电、还是仅对 TMS 下电对 DP83822 PHY 下电上电?
    • 是否可以在下电上电后多次读取0x0001 、以确保在下电上电后它具有一致的链路关闭?

    --

    谢谢!

    林希尔曼

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

    尊敬的 Hillman:

    要回答您的问题、请执行以下操作:

    • 现在、您可以在 TMS 上重新刷写驱动器、并且可以看到链路状态正常、而无需任何下电上电。 但是、在进行下电上电时、可以看到链路状态位不再显示链路接通。 我的说法是否正确?
      • 是的、这是正确的
    • 在下电上电之前或链路状态为启动时、您是否能够将任何数据包或帧传输到链路伙伴、而不会出现任何问题?
      • 是的、在链路状态为接通时进行下电上电之前、我能够正常发送和接收数据包
    • 下电上电后、您是否能够将任何数据包或帧传输到链路伙伴? 我希望看到的更确切地说是上电后的 MDIO 问题或 MDI 问题
      • 下电上电后、无法将数据包传输到链路伙伴  
    • 当您说"下电上电"时、是对整个电路板 下电上电、还是仅对 TMS 下电对 DP83822 PHY 下电上电?
      • 整个电路板
    • 是否可以在下电上电后多次读取0x0001 、以确保在下电上电后它具有一致的链路关闭?
      • 为了读取状态寄存器、我目前正在使用 HALCoGen 生成的以下函数:
        boolean Dp83640LinkStatusGet(uint32 mdioBaseAddr,
                                           uint32 phyAddr,
                                           volatile uint32 retries)
        {
            volatile uint16 linkStatus = 0U;
            boolean retVal = TRUE;
        
            while (retVal == TRUE)
            {
                /* First read the BSR of the PHY */
                (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)1u, &linkStatus);
        
        		/*SAFETYMCUSW 134 S MR:12.2 <APPROVED> "LDRA Tool issue" */
                if((linkStatus & PHY_LINK_STATUS) != 0U)
                {
                    /* Check if MDIO LINK register is updated */
                    linkStatus = (uint16)MDIOPhyLinkStatusGet(mdioBaseAddr);
        	
        			/*SAFETYMCUSW 134 S MR:12.2 <APPROVED> "LDRA Tool issue" */
                    if((linkStatus & (uint16)((uint16)1U << phyAddr)) != 0U)
                    {
                       break;
                    }
                    else
                    {
        			    /*SAFETYMCUSW 9 S MR:12.2 <APPROVED> "Ternary Operator Expression" */
        				/*SAFETYMCUSW 134 S MR:12.2 <APPROVED> "LDRA Tool issue" */
        				/*SAFETYMCUSW 134 S MR:12.2 <APPROVED> "LDRA Tool issue" */				
        				if(retries != 0U)
        				{
        					retries--;
        				}
        				else
        				{
        					retVal = FALSE;
        				}
                    }
                }
                else
                {
        			/*SAFETYMCUSW 9 S MR:12.2 <APPROVED> "Ternary Operator Expression" */
                 	/*SAFETYMCUSW 134 S MR:12.2 <APPROVED> "LDRA Tool issue" */
                 	/*SAFETYMCUSW 134 S MR:12.2 <APPROVED> "LDRA Tool issue" */			
        				if(retries != 0U)
        				{
        					retries--;
        				}
        				else
        				{
        					retVal = FALSE;
        				}			
                }
            }
        
            return retVal;
        }

        我们以重试次数的形式传递0xFFFF、因此链路状态位会连续发生故障

    谢谢。

    托马斯

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

    尊敬的 Thomas:

    从下电上电后的寄存器转储(0x0005)、我可以看到我们的 PHY 无法识别链路伙伴广播。 链路伙伴似乎未按预期运行。 尝试读取链路伙伴以查看链路伙伴端的状态。

    对于链路伙伴、您能否将其更改为另一个 DP83822 PHY 以查看是否建立了链路?

    --

    谢谢!

    林希尔曼

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

    尊敬的 Hillman:

    正确、它不能识别链路伙伴广播。 但这有点奇怪、因为我们的链路伙伴是运行 Windows 10的 PC。 我们无法将其切换到另一个 DP83822 PHY。 您能否深入了解链路伙伴广告的工作原理? 或许这能让我们调试传入信号、从而更好地了解定制电路板上的故障情况。

    谢谢。

    托马斯

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

    尊敬的 Thomas:

    Link Partner Advertisement 将告诉 DP83822 PHY 能够支持的速度。 以本例为例、在下电上电后、您的链路伙伴会告诉 DP83822 PHY、它不同时支持10Mbps 和100Mbps、从而导致无法建立链路。 由于您的链路伙伴是 PC、您是否能够重新启动 PC 或 PC 中的 PHY 以查看更有助于解决该问题的内容?

    --

    此致、

    林希尔曼

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

    尊敬的 Thomas:

    在对电路板进行下电上电以查看有助于解决链路建立问题的复位按钮时、能否在释放复位按钮之前长时间保持(大约5s)? 我更想看到的是电源序列问题。

    --

    此致、

    林希尔曼