我们正在使用 sia1110,现在我们注意到,当 TCP 客户端和服务器同时运行时,其中一个会在一段时间后随机断开连接。客户端可以通过点击主机上的重新连接按钮成功重新连接,但服务器无法重新连接。
同样的流程在不同的平台上不会出现这个问题。请问您能解释一下原因吗?
我目前的想法是使用 MDIO 来监测 MCU 和开关之间的状态,但我目前遇到了一些问题。
status_t Dwmac_LLD_Mii_Read_Reg(volatile DwmacReg *dwmac_reg, uint32_t phy_addr, uint32_t reg_addr, uint32_t *reg_data)
{
while (dwmac_reg->MAC_MDIO_ADDRESS.B.GB != 0U) {; }
dwmac_reg->MAC_MDIO_DATA.B.RA = reg_addr;
dwmac_reg->MAC_MDIO_DATA.B.GD = 0;
dwmac_reg->MAC_MDIO_ADDRESS.B.PA = phy_addr;
dwmac_reg->MAC_MDIO_ADDRESS.B.RDA = reg_addr;
dwmac_reg->MAC_MDIO_ADDRESS.B.GOC = 2U;
dwmac_reg->MAC_MDIO_ADDRESS.B.CR = 0xB;
dwmac_reg->MAC_MDIO_ADDRESS.B.GB = 1U;
while (dwmac_reg->MAC_MDIO_ADDRESS.B.GB != 0U) {; }
*reg_data = (uint16_t) (dwmac_reg->MAC_MDIO_DATA.R & 0x0000FFFFU);
返回 STATUS_SUCCESS;
}
Dwmac_LLD_Mii_Read_Reg(ÐERNET_0, 0x1B, 0x2U, ®_val);
这里使用的底层函数中,reg_val 始终保持为 0。
SJA110 2.0 和使用 RMII
我想使用 MDIO 来监测寄存器,并在其中一个端口断开连接时检查交换机和 MCU 的状态。这只是其中一种检测方法,因为我还不确定是什么原因导致TCP服务器和客户端无法同时存在。不确定是哪个版本。
xingyun_0-1788248086523.pngxingyun_0-1788248086523.png星云_0-1788248086523.png
你好@星云,
在分析 TCP 断开连接和 MDIO 读取功能之前,能否请您提供一些关于您设置的其他信息?
- 您使用的是哪种具体型号和芯片版本的SJA1110设备?
- 哪个MCU或处理器连接到SJA1110?它们之间使用哪个接口,例如RGMII、RMII、SGMII或其他接口?
- 能否提供一个简化的连接图,图中需显示MCU、SJA1110端口以及运行TCP客户端和服务器的设备?
- 您使用的是哪个 TCP/IP 协议栈及其版本?
- 项目中使用的是哪个版本的SJA1110 SDK/RTD?
- TCP客户端和服务器是在同一个MCU和同一个以太网接口上运行,还是在不同的设备和接口上运行?
-
您能否进一步说明一下,您打算使用 MDIO 读取功能具体监测什么内容?具体来说,在您的设置中,PHY 地址 0x1B 和寄存器地址 0x02 分别指的是哪个设备和寄存器?请同时分享相关的原理图部分或连接细节,说明 MCU 和 SJA1110 之间如何连接 SMI 接口(包括 MDC 和 MDIO 信号)。
请您提供以上问题的详细资料,以便我们能够清楚地了解您的设置,避免在分析初期出现任何潜在的误解。
顺祝商祺!
帕维尔
你好@星云,
为了更好地帮助您,我需要更多信息。请回答以下所有问题:
1.您使用的是哪种型号的SJA1110设备?SJA1110A、B、C还是D?
2. SJA1110 上的哪些端口连接到 TCPS 和 TCPC?
3. TCPS 和 TCPC 都使用了 RMII 端口吗?
4. TCPS 和 TCPC 直接连接到 RMII,还是它们之间有 PHY?
5. SJA1110是如何配置的?SJA1110 上是否运行任何软件,还是 SJA1110 仅用作交换机?
6. 配置 SJA1110 时使用了什么软件?S32 设计工作室?
顺祝商祺!
帕维尔