打算使用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的输出信号