打算使用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下面查看确实已经配置成功。
在论坛里面看到有人曾经问道过此类问题,不过最后不知怎样解决的。请专家指教,谢谢!!
