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.
我们的定制设计使用缓冲芯片和板对板连接器将两个 TDA4 SOM 的 MCU_RGMII1接口直接连接在一起。 信号交叉传输(SOM1 TX <-> SOM2 RX)、我已将 Linux 配置为固定链路模式:
&cpsw_port1 { phy-mode = "rgmii"; fixed-link { speed = <100>; full-duplex; }; };
并确认了正确的引脚多路复用:
mcu_cpsw_pins_default: mcu_cpsw_pins_default { pinctrl-single,pins = < J721E_WKUP_IOPAD(0x0058, PIN_OUTPUT | DRV_STR_1, 0) /* MCU_RGMII1_TX_CTL */ J721E_WKUP_IOPAD(0x005c, PIN_INPUT, 0) /* MCU_RGMII1_RX_CTL */ J721E_WKUP_IOPAD(0x0060, PIN_OUTPUT | DRV_STR_1, 0) /* MCU_RGMII1_TD3 */ J721E_WKUP_IOPAD(0x0064, PIN_OUTPUT | DRV_STR_1, 0) /* MCU_RGMII1_TD2 */ J721E_WKUP_IOPAD(0x0068, PIN_OUTPUT | DRV_STR_1, 0) /* MCU_RGMII1_TD1 */ J721E_WKUP_IOPAD(0x006c, PIN_OUTPUT | DRV_STR_1, 0) /* MCU_RGMII1_TD0 */ J721E_WKUP_IOPAD(0x0078, PIN_INPUT, 0) /* MCU_RGMII1_RD3 */ J721E_WKUP_IOPAD(0x007c, PIN_INPUT, 0) /* MCU_RGMII1_RD2 */ J721E_WKUP_IOPAD(0x0080, PIN_INPUT, 0) /* MCU_RGMII1_RD1 */ J721E_WKUP_IOPAD(0x0084, PIN_INPUT, 0) /* MCU_RGMII1_RD0 */ J721E_WKUP_IOPAD(0x0070, PIN_INPUT | DRV_STR_1, 0) /* MCU_RGMII1_TXC */ J721E_WKUP_IOPAD(0x0074, PIN_INPUT, 0) /* MCU_RGMII1_RXC */ >; };
ethtool 的输出显示接口已启动并正在尝试发送、但未接收(或甚至丢弃)来自远程端的数据包:(两个 SOM 的结果相同)
NIC statistics: p0_rx_good_frames: 47 p0_rx_broadcast_frames: 23 p0_rx_multicast_frames: 24 p0_rx_crc_errors: 0 p0_rx_oversized_frames: 0 p0_rx_undersized_frames: 0 p0_ale_drop: 0 p0_ale_overrun_drop: 0 p0_rx_octets: 10870 p0_tx_good_frames: 0 p0_tx_broadcast_frames: 0 p0_tx_multicast_frames: 0 p0_tx_octets: 0 p0_tx_64B_frames: 2 p0_tx_65_to_127B_frames: 14 p0_tx_128_to_255B_frames: 8 p0_tx_256_to_511B_frames: 23 p0_tx_512_to_1023B_frames: 0 p0_tx_1024B_frames: 0 p0_net_octets: 10870 p0_rx_bottom_fifo_drop: 0 p0_rx_port_mask_drop: 0 p0_rx_top_fifo_drop: 0 p0_ale_rate_limit_drop: 0 p0_ale_vid_ingress_drop: 0 p0_ale_da_eq_sa_drop: 0 p0_ale_block_drop: 0 p0_ale_secure_drop: 0 p0_ale_auth_drop: 0 p0_ale_unknown_ucast: 0 p0_ale_unknown_ucast_bytes: 0 p0_ale_unknown_mcast: 0 p0_ale_unknown_mcast_bytes: 0 p0_ale_unknown_bcast: 0 p0_ale_unknown_bcast_bytes: 0 p0_ale_pol_match: 0 p0_ale_pol_match_red: 0 p0_ale_pol_match_yellow: 0 p0_ale_mcast_sa_drop: 0 p0_ale_dual_vlan_drop: 0 p0_ale_len_err_drop: 0 p0_ale_ip_next_hdr_drop: 0 p0_ale_ipv4_frag_drop: 0 p0_tx_mem_protect_err: 0 p0_tx_pri0: 0 p0_tx_pri1: 0 p0_tx_pri2: 0 p0_tx_pri3: 0 p0_tx_pri4: 0 p0_tx_pri5: 0 p0_tx_pri6: 0 p0_tx_pri7: 0 p0_tx_pri0_bcnt: 0 p0_tx_pri1_bcnt: 0 p0_tx_pri2_bcnt: 0 p0_tx_pri3_bcnt: 0 p0_tx_pri4_bcnt: 0 p0_tx_pri5_bcnt: 0 p0_tx_pri6_bcnt: 0 p0_tx_pri7_bcnt: 0 p0_tx_pri0_drop: 0 p0_tx_pri1_drop: 0 p0_tx_pri2_drop: 0 p0_tx_pri3_drop: 0 p0_tx_pri4_drop: 0 p0_tx_pri5_drop: 0 p0_tx_pri6_drop: 0 p0_tx_pri7_drop: 0 p0_tx_pri0_drop_bcnt: 0 p0_tx_pri1_drop_bcnt: 0 p0_tx_pri2_drop_bcnt: 0 p0_tx_pri3_drop_bcnt: 0 p0_tx_pri4_drop_bcnt: 0 p0_tx_pri5_drop_bcnt: 0 p0_tx_pri6_drop_bcnt: 0 p0_tx_pri7_drop_bcnt: 0 rx_good_frames: 0 rx_broadcast_frames: 0 rx_multicast_frames: 0 rx_pause_frames: 0 rx_crc_errors: 0 rx_align_code_errors: 0 rx_oversized_frames: 0 rx_jabber_frames: 0 rx_undersized_frames: 0 rx_fragments: 1 ale_drop: 0 ale_overrun_drop: 0 rx_octets: 0 tx_good_frames: 47 tx_broadcast_frames: 23 tx_multicast_frames: 24 tx_pause_frames: 0 tx_deferred_frames: 0 tx_collision_frames: 0 tx_single_coll_frames: 0 tx_mult_coll_frames: 0 tx_excessive_collisions: 0 tx_late_collisions: 0 rx_ipg_error: 0 tx_carrier_sense_errors: 0 tx_octets: 10870 tx_64B_frames: 2 tx_65_to_127B_frames: 14 tx_128_to_255B_frames: 8 tx_256_to_511B_frames: 23 tx_512_to_1023B_frames: 0 tx_1024B_frames: 0 net_octets: 10873 rx_bottom_fifo_drop: 0 rx_port_mask_drop: 0 rx_top_fifo_drop: 0 ale_rate_limit_drop: 0 ale_vid_ingress_drop: 0 ale_da_eq_sa_drop: 0 ale_block_drop: 0 ale_secure_drop: 0 ale_auth_drop: 0 ale_unknown_ucast: 0 ale_unknown_ucast_bytes: 0 ale_unknown_mcast: 0 ale_unknown_mcast_bytes: 0 ale_unknown_bcast: 0 ale_unknown_bcast_bytes: 0 ale_pol_match: 0 ale_pol_match_red: 0 ale_pol_match_yellow: 0 ale_mcast_sa_drop: 0 ale_dual_vlan_drop: 0 ale_len_err_drop: 0 ale_ip_next_hdr_drop: 0 ale_ipv4_frag_drop: 0 iet_rx_assembly_err: 0 iet_rx_assembly_ok: 0 iet_rx_smd_err: 653 iet_rx_frag: 0 iet_tx_hold: 0 iet_tx_frag: 0 tx_mem_protect_err: 0 tx_pri0: 47 tx_pri1: 0 tx_pri2: 0 tx_pri3: 0 tx_pri4: 0 tx_pri5: 0 tx_pri6: 0 tx_pri7: 0 tx_pri0_bcnt: 10870 tx_pri1_bcnt: 0 tx_pri2_bcnt: 0 tx_pri3_bcnt: 0 tx_pri4_bcnt: 0 tx_pri5_bcnt: 0 tx_pri6_bcnt: 0 tx_pri7_bcnt: 0 tx_pri0_drop: 0 tx_pri1_drop: 0 tx_pri2_drop: 0 tx_pri3_drop: 0 tx_pri4_drop: 0 tx_pri5_drop: 0 tx_pri6_drop: 0 tx_pri7_drop: 0 tx_pri0_drop_bcnt: 0 tx_pri1_drop_bcnt: 0 tx_pri2_drop_bcnt: 0 tx_pri3_drop_bcnt: 0 tx_pri4_drop_bcnt: 0 tx_pri5_drop_bcnt: 0 tx_pri6_drop_bcnt: 0 tx_pri7_drop_bcnt: 0
和一些相关的 CPSW 寄存器:
CTRL_MMR0 MCU_ENET_CTRL 0x40f04040 = 0x00000002 CPSW0_NUSS RGMII STATUS 0x46000018 = 0x00000000 CPSW0_NUSS PN_MAC_CONTROL 0x46022330 = 0x00000021 CPSW0_NUSS PN_MAC_STATUS 0x46022334 = 0xF0000008 STAT_0 (RXGOOD, TXGOOD) 0x4603a000 = 0x00000036 0x4603a034 = 0x00000000 STAT_1 (RXGOOD, TXGOOD) 0x4603a200 = 0x00000000 0x4603a234 = 0x00000036 STAT_0 (RXGOOD, TXGOOD) 0x4603a000 = 0x00000036 0x4603a034 = 0x00000000 STAT_1 (RXGOOD, TXGOOD) 0x4603a200 = 0x00000000 0x4603a234 = 0x00000036
除上述外、我还通过示波器确认一个 SOM 的 RXC 输入正在获得远程 SOM 的 TXC 输出、并且时钟是上述配置的预期值:100Mbps -> 25MHz TXC。 (理想情况下、我们需要1G、但我使用的是100M、因此我可以在办公桌上使用我们的廉价示波器之一)
我不确定是什么问题、尽管我对寄存器 CPSW_SS_RGMII_STATUS_REG (0x46000018)为0x0有点担心?
我接下来应该在哪里调查?
您好!
固定链接补丁看起来正确。
请告诉我
1.您使用的是哪个 SDK?
2.您能否共享 Uboot 和 Linux 的 DT 更改(作为补丁)。
3.您是否使用 TI 的 SysConfig 工具进行引脚多路复用?
4.如果您的电路板设计在 TI 内部得到了审查?
此致
葡萄园
1) PSDK 7.0 (Linux 5.4.40)
2) 2)我将看到我是否可以从 Linux DT 中清除客户信息。 我们在 Uboot 下不需要此功能:它是否会对 Linux 产生任何影响?
3)是的、我们确实做到了
4) 4)我不知道它是否是或不是
我们在硬件中发现了一个小错误、现在已解决(总线隔离芯片是削波信号)、但链路仍然没有成功。
不过、有一个小的变化、似乎我得到了稳定的 "IET Receive SMD"错误流。 这会使我感到困惑、因为在链接的两端似乎都没有配置 IET? (CPSW_CONTRAL_REG 0x0C020004 = 0xE00E、位17未设置)
可以忽略"IET"统计信息、它在非 IET 模式时未被禁用。 它将在未来的器件中修复。
运行 RGMII 的时钟速率是多少?
我假设您有
RXC <-远程 TXC
RXD <-远程 TXD
RX_CTL <-远程 TX_CTL
TXC ->远程 RXC
TXD ->远程 RXD
TX_CTL ->远程 RX_CTL
1G 模式的时钟频率为125MHz
Enet_Pn_Mac_Control -(0x330 + 0x1000 + 0x1000n)寄存器值是多少?
这是 J7ES 器件吗?
哪些端口是直接连接的?
2个 J7ES 器件、将 MCU_CPSW0 (也称为 CPSW2G)的外部端口彼此相连。 信号映射与您在上面写的内容匹配
两侧的 Pn_MAC_CONTROL 均为0x21。 下面是我当前正在监控的寄存器:
"左"电路板:
CTRL_MMR0 MCU_ENET_CTRL 0x40f04040 = 0x00000002 CPSW0_NUSS RGMII STATUS 0x46000018 = 0x00000000 CPSW0_NUSS PN_MAC_CONTROL 0x46022330 = 0x00000021 CPSW0_NUSS PN_MAC_STATUS 0x46022334 = 0xF0000008 STAT_0 (RXGOOD, TXGOOD) 0x4603a000 = 0x0000002A 0x4603a034 = 0x00000000 STAT_1 (RXGOOD, TXGOOD) 0x4603a200 = 0x00000000 0x4603a234 = 0x0000002A
"右侧"板:
CTRL_MMR0 MCU_ENET_CTRL 0x40f04040 = 0x00000002 CPSW0_NUSS RGMII STATUS 0x46000018 = 0x00000000 CPSW0_NUSS PN_MAC_CONTROL 0x46022330 = 0x00000021 CPSW0_NUSS PN_MAC_STATUS 0x46022334 = 0xF0000008 CPSW0_NUSS ALE PORTCTL0_y 0x4603e040 = 0x00000013 0x4603e044 = 0x00000813 STAT_0 (RXGOOD, TXGOOD) 0x4603a000 = 0x00000029 0x4603a034 = 0x00000000 STAT_1 (RXGOOD, TXGOOD) 0x4603a200 = 0x00000000 0x4603a234 = 0x00000029
Josh、您好!
尽管两个电路板的 CPSW_PN_MAC_CONTRAL_REG 的位7 (千兆位模式)未设置、但寄存器值看起来正常。 我不知道这会产生什么影响。
您是否尝试连接示波器并查看信号?
此致
葡萄园
抱歉、我忘记了两侧速度限制为100Mbit、这样我就可以在办公桌上使用示波器(50MHz、1GS/s)。 在该速度下、我已经看到了单个信号和时钟(100Mbit 时为25MHz)、但我目前无法一次观察到多个信号。
这是1Gbit 时"左"的寄存器转储:
CTRL_MMR0 MCU_ENET_CTRL 0x40f04040 = 0x00000002 CPSW0_NUSS RGMII STATUS 0x46000018 = 0x00000000 CPSW0_NUSS PN_MAC_CONTROL 0x46022330 = 0x000000A1 CPSW0_NUSS PN_MAC_STATUS 0x46022334 = 0xF0000018 STAT_0 (RXGOOD, TXGOOD) 0x4603a000 = 0x00000023 0x4603a034 = 0x00000000 STAT_1 (RXGOOD, TXGOOD) 0x4603a200 = 0x00000000 0x4603a234 = 0x00000023
和"正确":
CTRL_MMR0 MCU_ENET_CTRL 0x40f04040 = 0x00000002 CPSW0_NUSS RGMII STATUS 0x46000018 = 0x00000000 CPSW0_NUSS PN_MAC_CONTROL 0x46022330 = 0x000000A1 CPSW0_NUSS PN_MAC_STATUS 0x46022334 = 0xF0000018 CPSW0_NUSS ALE PORTCTL0_y 0x4603e040 = 0x00000013 0x4603e044 = 0x00000813 STAT_0 (RXGOOD, TXGOOD) 0x4603a000 = 0x0000001E 0x4603a034 = 0x00000000 STAT_1 (RXGOOD, TXGOOD) 0x4603a200 = 0x00000000 0x4603a234 = 0x0000001E
对于 "RGMII-id"与"RGMII"、我不能100%清楚:对于无 PHY 模式、我应该使用内部延迟模式(RGMII-id)是正确的?
这些值与 EVM 匹配
>对于无 PHY 模式,是否应该使用内部延迟模式(RGMII-id)?
是的、没错。
我将在内部对此进行回顾、但在顶层、这看起来是正确的。
下一步是检查所有线路和时钟的示波器输出。 硬件设计是否已经过 TI 内部人员的审查?
此致
葡萄园
这在10或100Mb 时不起作用有什么原因吗? (以便更轻松地确定信号完整性 问题的范围和帮助排除这些问题)
我不认为这部分设计已经过 TI 的审核。
不能、您也应该能够在100米处进行检查。
此致
葡萄园
由于您处于强制模式、因此无法在10Mbps 模式下运行、因此只有1Gbps/100Mbps 可通过 MAC_CONTROL 中的 Gig 位使用。
0x000000A1的 Pn_MAC_CONTROL 是千兆模式、需要125MHz 时钟、IP 内部需要250MHz 时钟。
对于100Mbps 模式、应该为0x00000021。
为什么将 TXC 引脚定义为输入?
"J721E_WKUP_IOPAD (0x0070、PIN_INPUT | DRV_STR_1、0)/* MCU_RGMII1_TXC */"
我们希望 TXC 引脚成为输出。
昨天的调试结论:
时钟看起来正确。
2. Rx 和 Tx 引脚与数据切换
3.在接口上接收到数据包(分级计数器正在上升),但它们不会被视为正常帧,表明存在某种错误。
SMD 错误与正在接收的数据包相关。
5.需要查看 MAC 2 MAC 原理图以排除任何问题。
Josh、您好!
您能回答 Denis 关于 pinmux 的问题吗?
此致
葡萄园
Pinmux:我之前注意到过奇怪的 pinmux、但在我将其作为一个问题加以考虑的时候:PIN_INPUT 解析为 INPUT_EN|PULL_DISABLE ->(1<<18|1<16)、这意味 着 TX_DIS (1<21)为0。 上述内容是通过 SysConfig 工具生成的、我将测试将其更改为 PIN_OUTPUT (PULL_DISABLE -> 1<<16)。
10Mbps:明白了这一点、我将 只使用100Mbit 或1Gbit 继续进行调试。
100Mbit 的 TXC 信号看起来非常糟糕、我使用驱动强度无法对其产生太大的影响...
灰色:在 FET 开关之前、在"右侧"电路板的 TXC 上
绿色:"左"电路板的 RXC 位于 SOM 至基板连接器(J7 SOM 侧)
青色: "左侧"电路板的 RXC、DRV=0
紫色:"左板的 RXC、DRV=3
我担心我们的迹线太长,RGMII 无法遍历:-(
请注意、DRV=3实际上是保留的。 最强的驱动器应该是 DRV=1。
我同意紫色显示的波形似乎受到负载的影响。
我们重新设计了两个 J7 SOM 中的一个、将22 Ω 电阻器替换为0 Ω、它清理了远端接收到的信号、但仍然没有接收到任何数据包。 在传递任何数据包之前、RGMII 是否需要在两个方向上运行? 或者一个方向是否足够?
只要您已在全双工模式下对接口进行编程、RGMII 就可以在单个方向上运行。
您是否验证了 RXDV 和 RXD[3:0]线路的连接是否分别正确连接到 TXEN 和 TXD[3:0]?
我终于回到了这个问题:我们似乎在两个载板之间的引脚分配上出现了错误,导致 TD 和 RD 方向上出现了3->0、2->1、1->2、0->3。 我不想有办法重新映射 RGMII 接收器中的位?
这确实会导致接收问题!
不能在内部交换引脚。