TI中文支持网
TI专业的中文技术问题搜集分享网站

Beaglebone Black 把Lan8710a的连接方式改为RMII 只能发送不能接收

打算使用RMII扩展外部网络,想在BBB上面做一下前期验证。经过修改硬件和代码后,在uboot和内核里面,ping外部网络,用wireshark可以监视到BBB,向外发送数据,可是接收不到。用示波器查看RXD1,和RXD0 CRS_DV上面都有波形数据。

BBB板子默认是MII,修改为RMII,硬件做了一下改动:

1. RMIISEL电阻改为上拉

2. 断开外部25MHz晶振,改为50MHz晶振(采用的另一个板子上面的Lan8720的ref_clk的输出信号)

3. Txd2,txd3,接地(发现不接地也能正常发出)

软件方面,uboot里面

修改Pinmux

static struct module_pin_mux rmii1_pin_mux[] = {
{OFFSET(mii1_crs), MODE(1) | RXACTIVE}, /* RMII1_CRS */
{OFFSET(mii1_rxerr), MODE(1) | RXACTIVE}, /* RMII1_RXERR */
{OFFSET(mii1_txen), MODE(1)}, /* RMII1_TXEN */
{OFFSET(mii1_txd1), MODE(1)}, /* RMII1_TXD1 */
{OFFSET(mii1_txd0), MODE(1)}, /* RMII1_TXD0 */
{OFFSET(mii1_rxd1), MODE(1) | RXACTIVE}, /* RMII1_RXD1 */
{OFFSET(mii1_rxd0), MODE(1) | RXACTIVE}, /* RMII1_RXD0 */
{OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN}, /* MDIO_DATA */
{OFFSET(mdio_clk), MODE(0) | PULLUP_EN}, /* MDIO_CLK */
{OFFSET(rmii1_refclk), MODE(0) | RXACTIVE}, /* RMII1_REFCLK */
{-1},
};

configure_module_pin_mux(rmii1_pin_mux); 

board.c里面做下面的修改

//writel(MII_MODE_ENABLE, &cdev->miisel);
writel(RMII_MODE_ENABLE, &cdev->miisel); //这里添加RMII,
puts("setup RMII!\n");
cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =
PHY_INTERFACE_MODE_RMII;

修改  gmii_sel 寄存器,为0x45,在uboot下面查看确实已经配置成功。

 在论坛里面看到有人曾经问道过此类问题,不过最后不知怎样解决的。请专家指教,谢谢!!

Shine:

网口灯亮了吗?外部晶振是否用的是lowjitter的?检查一下phy_id配置

dongming yuan:

回复 Shine:

你好,谢谢回复。网口灯亮了,可以发现Phy芯片,在uboot下面配置ipaddr后,向外ping其他电脑,用wireshark监视,可以看到bbb向外发出的广播帧,在RMII总线的RXD0和RXD1也可以看到接收数据的波形。可是在终端显示无法Ping通。不知后面如何排除问题。

hui wang1:

你好 请问当时您咋做测试的时候直接将lan8710 的25M晶振换成50M的晶振的么???lan8710 手册里面看好像不能放置50M的晶振 ,能指教一下您是怎么操作的么???

yongqing wang:

回复 hui wang1:

上面他说了,采用另外一个板子板子上面的Lan8720的ref_clk的输出信号

赞(0)
未经允许不得转载:TI中文支持网 » Beaglebone Black 把Lan8710a的连接方式改为RMII 只能发送不能接收
分享到: 更多 (0)