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.

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下面查看确实已经配置成功。

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