我们是在freescale imx6q-sabresed开发板的基础上layout的新板子,把它的AR8031 phy芯片换成了lan8720,我们使用了RMII模式,用GPIO16管脚作为外部时钟,其管脚连接见附件!现在主要的问题是phy芯片能够发送数据,而不能接收数据,波形都是有的。经示波器测量50MHZ的频率也是有的,phy芯片也注册上了,其他管脚也都工作正常,但就是ping不通主机或者网关(自己ping自己是没问题的)。
CPU:IMX6Q
LTIB版本:L3.0.35_4.1.0_130816_source
Linux内核:linux-3.0.35
Board-mx6q_sabresed.h文件中
/* ENET */
MX6Q_PAD_ENET_MDIO__ENET_MDIO,
MX6Q_PAD_ENET_MDC__ENET_MDC,
MX6Q_PAD_ENET_RXD0__ENET_RDATA_0,
MX6Q_PAD_ENET_RXD1__ENET_RDATA_1,
MX6Q_PAD_ENET_CRS_DV__ENET_RX_EN,
MX6Q_PAD_ENET_RX_ER__ENET_RX_ER,
MX6Q_PAD_ENET_TXD0__ENET_TDATA_0,
MX6Q_PAD_ENET_TXD1__ENET_TDATA_1,
MX6Q_PAD_ENET_TX_EN__ENET_TX_EN,
MX6Q_PAD_GPIO_16__ENET_ANATOP_ETHERNET_REF_OUT, /* Internal connect for 1588 TS Clock 50M clock*/
MX6Q_PAD_ENET_REF_CLK__GPIO_1_23, /* RMII reset*/
MX6Q_PAD_GPIO_5__GPIO_1_5, /*PHY interrupt*/
Board-mx6q_sabresed.c文件中
static void __init mx6_sabresd_board_init(void)
{
/*reset*/
gpio_request(SABRESD_LAN8720_RST, "lan-reset");
gpio_direction_output(SABRESD_LAN8720_RST, 0);
msleep(10);
gpio_direction_output(SABRESD_LAN8720_RST, 1);
val = phy_read(phydev, 0x0);
if (val & BMCR_PDOWN)
phy_write(phydev, 0x0, (val & ~BMCR_PDOWN));
|