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.
工具与软件:
您好、TI
我们将使用 LP-AM243测试 CPSW 端口、我们删除了一个之前连接到 RGMII1的以太网 Phy、并将其替换为我们的 FPGA、RGMII1 TX 通道不会连接到 FPGA、因为我们不会将数据发送到 FPGA。 我们希望从 FPGA 接收广播以太网帧、但什么都没有得到。
我该如何调试这个问题、您能给我们一些建议吗、
RGMII1的寄存器状态为3、这意味着100Mbps、μ s
我们将在 SDK 中使用演示 enet_lwip_cpsw、并修改函数
你好
我还更改了函数 enet_lwip_example 函数代码
e2e.ti.com/.../cpsw_5F00_regs.zipI还从 CCS 上传 CPSW 寄存器十六进制文件、请检查。
尊敬的 Cheng Guo:
感谢您的提问。
我会检查一下、然后回复给您。
我假设您参考的是以下文档。
此致
Ashwani
你好、Ashwani
感谢您的答复。
是的、我们正在使用此 SDK、但我们不集成外部 Phy、我们将 RGMII1连接到 FPGA、仅 RX 引脚被连接、因为我们只接收来自 FPGA 的数据、不会向 FPGA 发送任何内容。 FPGA 向 RGMII1 RX 接口发送广播消息、我们无法接收数据。 请检查、非常感谢。
谢谢 Cheng Guo、
MAC2MAC 连接。
此致
Ashwani
你好、Ashwani
是的、它是 Mac 到 Mac 的连接。
我们不测试产品 PCB、我们使用从 TI 飞线连接到另一个单独 FPGA 板的 LP-am243板。 我们需要测试通过此测试,然后我们可以设计我们的原理图。
在 该 SDK 演示的函数 enet_lwip_example 中、已添加了广播 Mac 地址。
int enet_lwip_example(void *args) { Enet_Type enetType; uint32_t instId; int32_t status; Drivers_open(); Board_driversOpen(); DebugP_log("==========================\r\n"); DebugP_log(" ENET LWIP App \r\n"); DebugP_log("==========================\r\n"); EnetApp_getEnetInstInfo(CONFIG_ENET_CPSW0, &enetType, &instId); EnetAppUtils_enableClocks(enetType, instId); EnetApp_driverInit(); status = EnetApp_driverOpen(enetType, instId); if (status != ENET_SOK) { EnetAppUtils_print("Failed to open ENET: %d\r\n", status); } EnetAppUtils_assert(status == ENET_SOK); { const uint8_t testBCastAddr[ENET_MAC_ADDR_LEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; EnetApp_addMCastEntry(enetType, instId, EnetSoc_getCoreId(), testBCastAddr, CPSW_ALE_ALL_PORTS_MASK); } #if (ENET_SYSCFG_ENABLE_EXTPHY == 1U) { uint8_t numMacPorts; uint32_t i; Enet_MacPort macPortList[ENET_SYSCFG_MAX_MAC_PORTS]; EnetApp_getEnetInstMacInfo(enetType, instId, macPortList, &numMacPorts); #if (ENET_SYSCFG_ENABLE_MDIO_MANUALMODE == 1U) EnetApp_createPhyRegisterPollingTask(1000, true, enetType, instId); #else EnetApp_mdioLinkIntHandlerTask(enetType, instId); EnetApp_enableMdioStateMachine(enetType, instId, EnetSoc_getCoreId()); #endif portENTER_CRITICAL(); uint32_t phyAddMask = 0; bool islinked = false; #if 1 /* port0 use RGMII1 interface, is connected to FPGA, do not poll */ for (i = 1; i < ENETAPP_EXT_PHY_NUM_ENABLED_PORTS; i++) { EnetApp_waitForPhyAlive(enetType, instId, EnetSoc_getCoreId(), macPortList[i]); EnetApp_initExtPhy(enetType, instId, macPortList[i]); phyAddMask |= (1 << EnetApp_getExtPhyHandle(i)->phyCfg.phyAddr); } do { for (i = 1; i < ENETAPP_EXT_PHY_NUM_ENABLED_PORTS; i++) { islinked |= EnetExtPhy_WaitForLinkUp(EnetApp_getExtPhyHandle(i), ENETEXTPHY_TIMEOUT_MS); } } while (!islinked); #endif #if (ENET_SYSCFG_ENABLE_MDIO_MANUALMODE == 1U) EnetApp_enablePhyLinkPollingMask(phyAddMask); #else (void)phyAddMask; #endif portEXIT_CRITICAL(); } #endif // #if (ENET_SYSCFG_ENABLE_EXTPHY == 1U) /* no stdio-buffering, please! */ //setvbuf(stdout, NULL,_IONBF, 0); main_loop(NULL); return 0; }
您能否帮助检查 包含所有 cpsw 寄存器的 cpsw_regs.zip 中的 cpsw 配置。 我们的配置不正确。 谢谢。
你好、Ashwani
感谢你的帮助。 我手动将寄存器 CPSW_PN_MAC_CONTROL_REG_k 0x08022330的值更改为0x000200A1、然后我可以看到 Mac TX 寄存器计数器不是0、但第一个 MAC 端口的 Rx 值仍然为0。
我们的测试套件已更改、现在我们只需将 RGMII1的 TX 线连接到 RGMII1的 Rx 线、我们要测试当 Mac 端口向自身发送时我们是否可以接收帧。 当前我们在 Rx 中仍然什么也没有得到。 我们稍后将检查我们的硬件信号。
感谢您提供信息。
[报价 userid="613289" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392213/lp-am243-rgmii-interface-can-not-receive-data-from-fpga/5328448 #5328448"]我手动更改了值为0x000200A1的寄存器 CPSW_PN_MAC_CONTROL_REG_k 0x08022330、然后我可以看到 Mac TX 寄存器计数器不是0很高兴听到这个消息。。。
e2e.ti.com/.../nok2.zipHinok2.zip 是我们手动将 CPSW_PN_MAC_CONTROL_REG_k 0x08022330更改为值0x000200A1后的最新寄存器转储。 请检查此包。
我找到了
该寄存器值不是0。 与另一个端口相比、plase alse 有助于检查是否存在其他可疑差异。 谢谢。
如需相关说明、请参阅 AM64x-TRM。 您能否捕获并验证帧是否没有任何错误?
12.2.1.4.6.1.1错误处理
在正常操作中、以太网端口模块配置了包含错误的丢弃接收包(runt、frag、超大尺寸、Jabber、crc、 对齐、代码等)。 但是、当 C 语言时 PSW_PN_MAC_CONTROL_REG_k 设置配置位 RX_CEF_EN、RX_CSF_EN 或 RX_CMF_EN、接收到的有错误的以太网包 传输到主机。 当 ALE 接收到包含错误的数据包(由于置1标头错误位)或 MAC 控制帧而没有接收到中止时、该数据包将仅转发到主机端口(端口0)。 由于速率限制、转发到主机的错误数据包没有 VLAN 解压或丢弃。 在有错误的数据包或 Mac 控制帧上不会进行 ALE 学习。 学习基于源地址、查找基于目标地址。 不学习、更新或触摸来自主机的定向数据包。
此致
Ashwani
你好、Ashwani
寄存器的值与 RGMII2相同、因此我认为这不是 RGMII 无法接收帧的原因。 我们只在另一个 PHY-PHY 板上进行测试、当我们发送帧(目标 MAC 地址为 FF:FF:FF:FF:FF、且源地址为 RGMII1 Mac 地址 F4:84:4c:fb:bf:35)时、我们发现 RGMII1无法接收该帧、但当我们将源地址更改为另一个值时、RGMII1可以接收该帧。 在 mac2mac 情况下,我们要将 RGMII1的 TX 通道连接到 RGMII1的 Rx 通道,所以从 RGMII1发出的帧绝不会被 RGMII1接收? 因此、 当源 MAC 地址与 RGMII MAC 地址相同时、RGMII 无法接收帧、这是正确的吗?
或者如何从同一个 Mac 端口发送具有不同 Mac 地址的帧? 有可能吗?
顺便说一下、我们优化了导线连接电气条件、CPSW_STAT1_IET_RX_SMD_ERROR_REG_k 寄存器现在不报告错误。
我还附上了我们的延迟集寄存器转储、请查看 nok3.zip。
源 MAC 地址与 RGMII Mac 地址相同
此功能被称为源地址违规。 这是预期行为。
或者如何从同一个 Mac 端口发送具有不同 MAC 地址的帧? 是否可能?
我没有向您发送数据包流。 正在将帧从 FPGA-MAC 发送到 CPSW-RGMII-MAC。 正确吗?
此致
Ashwani
Ashwani 您好
我们的数据包流是 cpsw-rgmi-mac-tx 至 cpsw-rgmi-mac-rx、位于同一个 rgmii1接口中。 由于存在源地址违规问题、我们现在没有长器进行测试。
我们 刚才进行了一个从 FPGA-MAC 到 CPSW-RGMII-MAC 的新测试发送帧。
但我们收到了所有错误帧。 CPSW_STATn_RXCRCERRORS_k 和 CPSW_STATn_RXALIGNCODEERRORS_k 不是0.e2e.ti.com/.../nok4.zip
请检查 nok4.zip、转储了 CPSW 的所有寄存器。
我们使用的 FPGA 可以发送正确的帧。 因此、该问题可能是由电信号干扰引起的、是否正确?
这是我们的测试用例、请查看。
郑国 先生
[报价 userid="613289" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392213/lp-am243-rgmii-interface-can-not-receive-data-from-fpga/5331368 #5331368"]我们的数据包流为 cpsw-rgmi-mac-tx 至 cpsw-rgmi-mac-rx、位于同一 rgmii1接口中对于此用例、可以参考"C:\ti\mcu_plus_sdk_am243x_09_02_01_05\examples\networking\enet_loopback\enet_cpsw_loopback\am243x-lp"
在这里、你可以设置/复位"安全"位来控制源地址冲突的使用。
如果您在运行 CPSW MAC 环回时仍遇到问题、请告诉我。
此致
Ashwani
你好、Ashwani
当我们使用 phy 在板上进行测试时、我们可以获得正确的结果。 但是、当我们使用没有 Phy 的板进行测试、仅手动将 RGMII1 TX 通道连接到 RGMII1 Rx 通道时、我们仍然无法接收到消息。
Enet_Type enetType = ENET_CPSW_3G; Enet_Handle hEnet = Enet_getHandle(enetType, instId); uint32_t coreId = EnetSoc_getCoreId(); uint8_t hostMacAddr[6] = {0xf4, 0x84, 0x4c, 0xfb, 0xc0, 0x86}; Enet_IoctlPrms prms; CpswAle_SetUcastEntryInArgs setUcastInArgs; uint32_t entryIdx; /* ALE entry with "secure" bit cleared is required for loopback */ setUcastInArgs.addr.vlanId = 0U; setUcastInArgs.info.portNum = CPSW_ALE_HOST_PORT_NUM; setUcastInArgs.info.blocked = false; setUcastInArgs.info.secure = false; setUcastInArgs.info.super = false; setUcastInArgs.info.ageable = false; setUcastInArgs.info.trunk = false; EnetUtils_copyMacAddr(&setUcastInArgs.addr.addr[0U], hostMacAddr); ENET_IOCTL_SET_INOUT_ARGS(&prms, &setUcastInArgs, &entryIdx); ENET_IOCTL(hEnet, coreId, CPSW_ALE_IOCTL_ADD_UCAST, &prms, status); if (status != ENET_SOK) { EnetAppUtils_print("Failed to add ucast entry: %d\r\n", status); }
我们为 RGMII1添加代码。 但仍然无法接收自身发送的消息。
我将寄存器转储附在后面、您能帮助检查吗?e2e.ti.com/.../nok5.zip
这是我们的电路板、移除了 Phy、时钟长30cm、可产生2ns 的延迟。
这是我们的电路板、移除了 phy、clk 长30cm、可产生2ns 延迟。 [报价]我将与硬件专家讨论这一点并与您联系。
此致
Ashwani
郑国 先生
这是我们的电路板、移除了 phy、clk 长30cm、可产生2ns 延迟。
抱歉、是 TI-HW (EVM、LP、SK...) 不适合您正在尝试的用例。
此致
Ashwani
你好、Ashwani
感谢您的帮助。
RGMII TX 时钟通道存在延迟、因此我们不需要这么长的导线来产生额外的延迟。 现在我们缩短 RGMII1 TX 时钟和 RGMII1 Rx 时钟之间的时钟线、我们现在可以接收消息。
TX 寄存器和 Rx 寄存器现在相同。
感谢您的大力帮助。
感谢 Cheng Guo 的 更新。
我们现在可以收到消息
很高兴听到这个消息。
此致
Ashwani