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.
工具与软件:
尊敬的支持团队:
我正在尝试将 DP83869HM 集成到我们的 FoxBMS 中(github - foxbms/foxbms-2:foxBMS 2、网址为 https://docs.foxbms.org)。 在 PHY 和 TMS570LC4357之间、MII 与铜缆的连接会出现一些问题。 通过 PC 对 RXINTSTATRAW 寄存器执行 Ping 操作时、我们未在 MAC 侧接收到任何中断。 对于配置 m、我们当前使用的是经过修改的 轻量级 IP (lwIP)演示版本(http://git.ti.com/hercules_examples/hercules_examples/trees/master/Application/LwIP)
MDIO 寄存器显示 PHY 活跃且带有地址0x00上的链路。
寄存器配置如下:
0x0 BMCR = 0x1140、
0x1 BMSR = 0x796D、
0x2 PHYIDR1 = 0x2000、
0x3 PHYIDR2 = 0xA0F1、
0x4 ANAR = 0x01E1、
0x5 ALNPAR = 0xCDE1、
0x6 ANER = 0x6F、
0x7 ANNPTR = 0x2001、
0x8 ANLLNPTR = 0x4006、
0x9 GEN_CFG1 = 0x0、
0xA GEN_STATUS1 = 0x0800、
0xD REGCR = 0x401F、
0xE ADDAR = 0x60、
0xF 1KSCR = 0xF000、
0x10 PHY_CONTROL = 0x5048、
0x11 PHY_STATUS = 0x7C02、
0x12 INTERRUPT_MASK = 0x0、
0x13 INTERRUPT_STATUS = 0x1C42、
0x14 GEN_CFG2 = 0x29C7、
0x15 RX_ERR_CNT = 0x0、
0x16 BIST_CONTROL = 0x0、
0x17 GEN_STATUS2 = 0x40、
0x18 LEDS_CFG1 = 0x6150、
0x19 LEDS_CFG2 = 0x4404、
0x1A LEDS_CFG3 = 0x2、
0x1E GEN_CFG4 = 0x12、
0x1F GEN_CTRL = 0x0
我们还在0x01DF = 0x0060中进行运行模式设置、然后使用 0x001F=4000重新启动软件。
还有我们可能遗漏的其他内容吗?
此致、
斯文
尊敬的 Sven:
您是否具有 MAC 布线的测试点? 我想验证 MAC 是否在接收数据、因为我认为 RXINTSTATRAW 应该在任何数据输入上递增。
是否还可以共享原理图以便我回顾 MAC 连接? (可以通过电子邮件发送至 e-mayhew@ti.com 以进行私人共享)
PHY 的 LED_1/RX_ER 是否连接到 MAC、并与 PHY 寄存器0x18 = 0xE 进行多路复用? 此引脚是可选的、但尚不清楚它是否对 MAC 的中断寄存器产生影响。 如果可能、请检查工作案例中 RX_ER 是否与不同的 PHY 连接。
谢谢!
Evan
尊敬的 Evan:
我检查了 LED_1/RX_ER 引脚。 它连接到 MAC、我将寄存器配置为0xE0、因为 LED_1/RX_ER 是通过位 7-4配置的、对吧? 此操作无效。 在不同 PHY 的情况下、还连接了 RX_ER。
原理图的相关部分如下:
此处还提供了完整的原理图:
尊敬的 Sven:
MAC TX 线在此处似乎具有反转映射(MAC 的 TXD3 = PHY 的 TXD0):
我怀疑这是 MAC 没有接收到有效数据来标记中断的原因。
这些线路是否可以在 MAC 侧进行内部多路复用以适应此映射?
谢谢!
Evan
尊敬的 Evan:
是的、可以解释这个问题。 遗憾的是、无法在内部更改它的多路复用。 我们尝试更改线映射、然后查找结果。
谢谢!
斯文
尊敬的 Sven:
听起来不错。 如有任何问题、请联系我们。
谢谢!
Evan
尊敬的 Evan:
同时、我找到了一种正确连接处理器和 DP83869的方法。 我相应地使用跳线连接了 DP83869电路板、并且获得了接收中断。
但是、数据似乎是错误的。 当我发送 ping 信号时、我希望消息标头中包含 ICMP 类型+代码0x0800。 我工作的装配体也是如此。 在另一个汇编语言中、我得到类型0x0000。
当我探测信号时、时钟在传输开始时看起来有点接线。 我将 RX 时钟频率降低到2.5MHz、以便获得更清晰的画面。 请参阅以下内容:
CH0 -时钟
CH1 - RXD0
CH2 - RXD1
CH3 - RXD2
CH4 - RXD3
此致、
斯文
尊敬的 Sven:
您是否在帧的信号中看到 EtherType = 0x0、或者说 MAC 是通过这种方式来解释帧的?
在后一种情况下、这可能是由于 MAC 信号上的跳线连接所导致的信号完整性/时序。
请查看是否可以调整连接以获得更清晰的信号、以及在任何迭代中是否可以看到类型0x0800。
谢谢!
Evan
尊敬的 Evan:
我查看了信号线。 在线路上正确传输数据。 但是、当我查看缓冲区描述符所指向的存储器或 MAC 时、我发现元数据(如数据包长度和标志)、而不是负载。 它始终为空。 我目前正在软件中查看为什么会出现这种情况。
此致、
斯文
尊敬的 Sven:
感谢您的确认。
由于信号具有正确的 EtherType、问题似乎在于 MAC 如何对接收器上的数据进行采样。 我建议在10M 处测试热接线连接的边缘性较小。
如果对 MDI 侧的信号质量有疑问、可以选择 MII 环回。 这可通过0x16[2]='1'来实现。
如果从 MAC 发送数据到 PHY 并直接循环回 MAC、那么 MAC 解释帧的方式有何差异?
谢谢!
Evan
尊敬的 Evan:
正如您建议的那样、我将数据速率降低至10M。
当我尝试 MII 环回时、我没有得到任何响应。 用于发送数据包的代码正在工作、正如我在 Launchpad 配置上尝试的那样。
我认为问题是在发送过程中。 调用 HALCoGen 生成的 EMACTransmit 函数之后、我永远不会访问 EMACTxIntHandler 函数。 查看头描述符指针寄存器时、 TX0HDP 的指针未被复位。 问题是否出在此处采用不同的引脚多路复用配置?
此致、
斯文
尊敬的 Sven:
在启用 PHY 环回的情况下进行探测时、您是否看到 TX 和 RX MAC 线路上的数据?
我可以帮助在 PHY 端进行调试、但我对 BMS 软件的熟悉程度有限。
标记 TMS 团队以查看是否有调试 MAC 发送/接收功能或 pinmux 配置的建议。
请分享引脚多路复用配置设置以供查看。
谢谢!
Evan
尊敬的 Evan:
不是的、我只是看到时钟信号。 感谢您、它将非常有帮助。 我附加了源代码(包括 HALCoGen 配置)。 我注意到 phy 地址由 EMACInstConfig 函数中的 HALCoGen 进行了硬编码。 我已将其更改为正确地址。
此致、
斯文
尊敬的 Sven:
您是否看到 MAC 能够识别端口上的 PHY 的指示? 您已经显示了来自链路伙伴数据的 MAC 线路的示波器截图、因此我怀疑原因位于此电路板的 MAC 侧软件配置上。
谢谢!
Evan
尊敬的 Evan:
我一边说着,一边解开她短裤的扣子。 我注意到 PHY 在某个时候挂起。
当在 PHY 进入下电上电后启动程序时、ping 信号经过、且 MAC 中断寄存器指示中断。
我通过程序流程对此进行了监控。 配置回送模式后、它停止工作。 为了精确起见、我写入 0x16[2]='1'时如您所述。 执行此命令后、ping 信号不再通过、并且链路状态寄存器也不再更新(我已拔下 RJ45并将其再次插入)。 以下是我用于配置环回模式的代码:
boolean Dp83869EnableLoopback(uint32 mdioBaseAddr, uint32 phyAddr) { uint32 delay = 0x1FFFU; uint16 regVal = 0x0000U; uint16 *regPtr = ®Val; boolean retVal = TRUE; (void)MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BMCR, regPtr); /* Disabling Auto Negotiate. */ regVal &= (uint16)(~((uint16)PHY_AUTONEG_ENABLE)); MDIOPhyRegWrite(mdioBaseAddr, phyAddr, (uint32)PHY_BMCR, regVal); /* When configuring loopback modes, the Loopback Configuration Register (LOOPCR), address 0x00FE, should be set to 0xE720. */ Dp83869ExtendedAddressSpaceRegWrite(mdioBaseAddr,phyAddr,0x00FE,0xE720); /* In 100Base-TX mode after MII loopback is enabled through register 0x00, it is necessary to write 0x0004 to register 0x16 for proper operation of MII Loopback*/ MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BIST, regPtr); /* Enable External Loopback*/ regVal |= 0x4; MDIOPhyRegWrite(mdioBaseAddr, phyAddr, (uint32)PHY_BIST, regVal); if(MDIOPhyRegRead(mdioBaseAddr, phyAddr, (uint32)PHY_BIST, regPtr) != TRUE) { retVal = FALSE; } return retVal; }
您是否知道此行为的任何解释?
此致、
斯文
尊敬的 Sven:
应用程序代码的任何其他部分是否与 MDI 侧链路有关?
启用环回会导致 MDI 侧的链路断开、因为使用此配置只能进行 MAC<->PHY 通信。
在这种情况下、应用软件中可能有某种逻辑要求链路状态为高电平才能继续传输。
谢谢!
Evan
尊敬的 Evan:
我认为情况不是这样。 该代码 适用于 Launchpad 上的 dp83630。 在这种情况下、MDI 通信仍然有效:PHY 之间是否有这种不同?
我的问题是我之前提到的传输中断。 我已添加当前配置。 如果你或者 TMS 团队的某些人能够验证一下、这将非常有帮助。
此致、
尊敬的 Sven:
这是在 DP83640上运行0x16[2]='1'的相同环回代码?
DP83640的寄存器映射与 DP83869不同。 0x16[2]='1'将不会在640上启用环回、因此此处仍然可以进行 MDI 通信。
我通过程序流监控了此程序流。 配置回送模式后、它停止工作。 为了精确起见、我写入 0x16[2]='1'时如您所述。 执行此命令后、ping 信号不再通过、并且链路状态寄存器也不再更新(我已拔下 RJ45并重新将其插入)。[/QUOT]当连接至链路伙伴时、程序是否生成/期望 ping 响应? 如果是、这在启用环回时不应起作用。 环回测试的代码应仅检查 MAC 传输路径、而在 MDI 侧未建立链路。
我已通知 TSM 团队此查询、希望他们可以在此处查看和分享反馈。
谢谢!
Evan
尊敬的 Evan:
对于 DP83630、我使用 DP63640的默认 HalCoGen 代码。 此处为寄存器0x0 (BMCR)= 0x4000。 然后回送正常、仍然可以进行 MDI 通信。
由于过程非常复杂、我在这里稍微总结一下我的过程。 我的目标是在我们的 foxBMS 上使用 DP83869。 在第一步中、我希望它回答 Ping 信号。 因此、我 同时拥有3种不同的硬件组合:Launchpad XL2 和板载 DP63630、foxBMS-Master 与 DP83869配合使用、以及 Launchpad XL2与 DP83869EVM 评估板配合使用。 在这些平台上、我尝试了运行两个软件基础:轻量级 IP (lwIP)演示和 EMAC 环回 TxRx 示例。 我根据不同的平台对它们进行了相应的修改。
在 LaunchPad XL2上:
在 foxBMS-Master 上:
在 Launchpad XL2上与 DP83869EVM 结合使用:
/* Make sure that the transmission is over */ while((hdkif_swizzle_data(curr_bd->flags_pktlen) & EMAC_BUF_DESC_OWNER)
/* Wait for the EOQ bit is set */ /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Hardware status bit read check" */ /*SAFETYMCUSW 134 S MR:12.2 <APPROVED> "LDRA Tool issue" */ /*SAFETYMCUSW 45 D MR:21.1 <APPROVED> "Valid non NULL input parameters are assigned in this driver" */ while (EMAC_BUF_DESC_EOQ != (EMACSwizzleData(curr_bd->flags_pktlen) & EMAC_BUF_DESC_EOQ)) { }
因此、我有两种完全不同的方法会导致类似的行为。 我希望这能澄清一下我的程序。
程序是否在连接至链路伙伴时产生/期望 ping 响应? 如果是、这在启用环回时不应起作用。 环回测试代码应仅检查 MAC 传输路径、而在 MDI 侧不建立链路。[/QUOT]程序不需要 ping。 我刚刚注意到、当使用几乎相同的代码时、DP83630会一直在 MII 上传递 ping 信号、而 DP86869不会传递。 启用环回后、MII 时钟速率也会复位到25 MHz、并且不再指示断开 RJ45插头。 这让我得出一个结论、即 PHY 挂起。 为了将其短接、我在这种情况下使用 ping 来检查 PHY 是否仍然有效。 如果在环回模式下、MDI 侧在该 PHY 上断开、当然这不是一个指示。
谢谢、此致、
斯文
尊敬的 Sven:
感谢您分享每个测试用例的摘要。
对于 DP83869环回情况、MII 时钟速率取决于 MDI 连接速度。 启用自动协商后、这将默认为最高时钟速率(25M)、直到 PHY 可以在 MDI 侧进行链接并根据链路速度调整时钟速率。
禁用自动协商(0x0[12]='0')并强制速度为10M (0x0[136]='00')时钟应保持在2.5M。
为10M 环回测试设置强制速度后是否看到 TX 中断?
谢谢!
Evan
尊敬的 Evan:
我已通过 strap 配置禁用自动协商。 然后、在我的代码中、首先我再次禁用自动协商。 然后、速度强制达到10M。 然后、当我启用环回时、速度会重置为25 MHz。
如果我然后再强制它再变为10M / 2.5MHz、它需要几秒钟的时间来更改、但随后它会切换回。
不会、在这些情况中、我都不会看到 TX 中断。
此致、
斯文
奇怪的是、SW 似乎覆盖了寄存器配置。 当时钟重置为25MHz 时、我们可以专注于100M 速度的环回情况。
您能帮助验证在 MII 中、MAC 侧配置是否设置为100M 吗? 在 PHY 侧强制执行100M 速度后、在 MAC TX/RX 线路上仍然未观察到数据帧、似乎没有为 MII 正确设置 MAC 侧设置。
谢谢!
Evan
尊敬的 Evan:
由于 PHY 提供 Tx 和 Rx 时钟信号、我认为 MAC 模块上没有不同速度模式的单独设置。
此致、
斯文
尊敬的 Sven:
我不清楚 MAC 端对有效传输的要求。 我再次与 TSM 团队联系、看看他们是否可以分享反馈。
从 PHY 端、配置和硬件连接对于通信有效。
谢谢!
Evan
尊敬的 Evan:
同时、您是否从 TSM 团队那里听到过任何消息?
此致、
斯文
尊敬的 Sven:
我还没有再联系过他们。
对于此处的延迟、我们深表歉意。
谢谢!
Evan
尊敬的 Evan:
与此同时,我们自己解决了这个问题。 感谢您一直以来的支持。
此致、
斯文
尊敬的 Sven:
很高兴听到您找到解决方案。 您能否分享根本原因是什么、如果是在 PHY 端还是在软件修复?
谢谢!
Evan
尊敬的 Evan:
PHY 的 MII_COL 信号保持悬空、未连接到 GND。 这似乎会导致出现问题。
此致、
斯文