工具/软件:Linux
主席先生,
我们拥有专为2个1Gbps 以太网端口通过 RGMII 接口设计的定制板。 我们使用基于 Yocto 的 Linux 3.12。
通过 rgmii2总线连接的 ksz9021是 id=1的 emac1、而通过 rgmii1总线连接的 ksz9021接口是 id 2的 emac0。
我们已在 DTS 文件中针对引脚多路复用和 RGMII 模式的 emac0和 emac1进行了修改。
am33xx_pinmux{(am33xx_pinmux)}
Ethernet0_pins:pinmux_ethernet0{
pinctrl-single、pins =<
0x114 (PIN_OUTPUT 下拉| MUX_Mode2)/* mii1_TX_en.rgmii1_tctl *
0x118 (PIN_INPUT_PULLUX | MUX_MODE2)/* mi1_RX_dv.rgmii1_rctl *
0x11c (PIN_OUTPUT 下拉| MUX_Mode2)/* mii1_txd3.rgmii1_td3 */
0x120 (PIN_OUTPUT 下拉| MUX_Mode2)/* mii1_txd2.rgmii1_td2 */
0x124 (PIN_OUTPUT 下拉| MUX_Mode2)/* mii1_txd1.rgmii1_TD1 *
0x128 (PIN_OUTPUT 下拉| MUX_Mode2)/* mii1_txd0.rgmii1_td0 */
0x12c (PIN_OUTPUT 下拉| MUX_Mode2)/* mii1_TX_clk.rgmii1_tclk *
0x130 (PIN_INPUT_PULLUX | MUX_MODE2)/* mii1_Rx_clk.rgmii1_RCLK *
0x134 (PIN_INPUT_PULLUX | MUX_MODE2)/* mii1_rxd3.rgmii1_rd3 *
0x138 (PIN_INPUT_PULLUX | MUX_MODE2)/* mii1_rxd2.rgmii1_RD2 *
0x13c (PIN_INPUT_PULLUX | MUX_MODE2)/* mii1_rxd1.rgmii1_RD1 *
0x140 (PIN_INPUT_PULLUX | MUX_Mode2)/* mii1_rxd0.rgmii1_rd0 *
>;
};
MDIO_Pins:pinmux_MDIO{
pinctrl-single、pins =<
/* MDIO */
0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)/* MDIO_DATA.MDIO_DATA *
0x14c (PIN_OUTPUT 上拉| MUX_MODE0)/* MDIO_clk.MDIO_clk *
>;
};
};
cpsw_emac0{&cpsw_emac0}
PHY_ID =<&Davinci_MDIO>、<1>;
PHY-MODE ="RGMII";
DUAL_EMAC_res_vlan =<1>;
/*寄存器260 (104h)–RGMII 时钟和控制板偏差*/
RXC-SKET-ps =<1400>;
rxdv-skie-ps =<0>;
txc-skim-ps =<1400>;
txen-skim-ps =<0>;
/*寄存器261 (105h)–RGMII RX 数据垫偏斜*/
rxd3-skie-ps =<0>;
rxd2-skie-ps =<0>;
rxd1-skie-ps =<0>;
rxd0-skie-ps =<0>;
/*寄存器262 (106h)–RGMII TX 数据垫偏斜*/
txd3-skim-ps =<0>;
Txd2-skim-ps =<0>;
txd1-skim-ps =<0>;
txd0-skim-ps =<0>;
状态="正常";
};
DaVinci_MDIO{
pinctrl-names ="default";
pinctrl-0 =</MDIO_PINs>;
状态="正常";
};
Mac{(&M)
从器件=<1>;
pinctrl-names ="default";
pinctrl-0 =<和 ethernet0_pines>;
状态="正常";
};
/*以太网*/
am33xx_pinmux{(am33xx_pinmux)}
Ethernet1_pins:pinmux_ethernet1{
pinctrl-single、pins =<
0x40 (PIN_OUTPUT 下拉| MUX_Mode2)/* GPMC_a0.rgmii2_tctl *
0x44 (PIN_INPUT_PULLUX | MUX_MODE2)/* GPMC_A1.rgmii2_rctl *
0x48 (PIN_OUTPUT 下拉| MUX_Mode2)/* GPMC_A2.rgmii2_td3 */
0x4c (PIN_OUTPUT 下拉| MUX_Mode2)/* GPMC_A3.rgmii2_td2 *
0x50 (PIN_OUTPUT 下拉| MUX_Mode2)/* GPMC_A4.rgmii2_TD1 *
0x54 (PIN_OUTPUT 下拉| MUX_Mode2)/* GPMC_A5.rgmii2_td0 */
0x58 (PIN_OUTPUT 下拉| MUX_Mode2)/* GPMC_A6.rgmii2_tclk *
0x5c (PIN_INPUT_PULLUX | MUX_MODE2)/* GPMC_A7.rgmii2_RCLK *
0x60 (PIN_INPUT_PULLUX | MUX_MODE2)/* GPMC_A8.rgmii2_rd3 *
0x64 (PIN_INPUT_PULLUX | MUX_MODE2)/* GPMC_A9.rgmii2_RD2 *
0x68 (PIN_INPUT_PULLUX | MUX_MODE2)/* GPMC_A10.rgmii2_RD1 *
0x6c (PIN_INPUT_PULLUX | MUX_MODE2)/* GPMC_A11.rgmii2_rd0 *
>;
};
};
cpsw_emac1{&cpsw_emac1}
PHY_ID =<&Davinci_MDIO>、<2>;
PHY-MODE ="RGMII";
DUAL_EMAC_res_vlan =<2>;
/*寄存器260 (104h)–RGMII 时钟和控制板偏差*/
RXC-SKET-ps =<1400>;
rxdv-skie-ps =<0>;
txc-skim-ps =<1400>;
txen-skim-ps =<0>;
/*寄存器261 (105h)–RGMII RX 数据垫偏斜*/
rxd3-skie-ps =<0>;
rxd2-skie-ps =<0>;
rxd1-skie-ps =<0>;
rxd0-skie-ps =<0>;
/*寄存器262 (106h)–RGMII TX 数据垫偏斜*/
txd3-skim-ps =<0>;
Txd2-skim-ps =<0>;
txd1-skim-ps =<0>;
txd0-skim-ps =<0>;
状态="正常";
};
Mac{(&M)
从器件=<2>;
pinctrl-names ="default";
pinctrl-0 =<ðernet0_pins ðernet1_pines>;
DUAL_EMAC;
状态="正常";
};
在硬件配置中、对于 RGMII2 (emac1)、TX 线路中有22 Ω 串联端接电阻器、RX 线路中有33 Ω。 跟踪长度在 TX 和 Rx 组的时钟和数据线内匹配。 rgmii2的所有布线长度为40mm。 我们能够完美地 ping 10/100和1000 Mbps。
对于 RGMII1 (emac0)、我们使用了相同的配置、TX 线路中有22欧姆串联端接电阻器、RX 线路中有33欧姆。 跟踪长度在 TX 和 Rx 组的时钟和数据线内匹配。 rgmii2的所有布线长度为70mm。 我们无法 ping 通10/100和1000 Mbps。
对于 RGMII1、我们将所有终端电阻器更改为22欧姆。 10/100Mbps ping 已顺利启动、但仍有1000Mbps 未 ping 通。
此后、我们更改了所有电阻为0欧姆的串联端接电阻。 此后、1Gbps ping 开始、但每3到4个 ping 中断一次。 我们将 RXC-SKET-ps 和 txc-SKET-ps 的偏移值更改为3000和1Gbps Ping 启动良好。
但是、由于移除了终端电阻器、rgmii1上的第二个 ksz9021在大约78摄氏度的情况下通过1Gbps 通信变得过热。
您能不能指导我为什么 emac0上的 phy (rgmii1)在1Gbps 和10/100Mbps 上与 emac1上的 phy (rgmii2)不能使用相同的硬件和软件配置。