Merge pull request #273 from yuht/patch-2

[bsp/lpc176x] Update emac.c
This commit is contained in:
Bernard Xiong 2014-04-25 20:15:03 +08:00
commit 431aa6a955
1 changed files with 49 additions and 33 deletions

View File

@ -195,7 +195,7 @@ static rt_err_t lpc17xx_emac_init(rt_device_t dev)
for (tout = 1000; tout; tout--); for (tout = 1000; tout; tout--);
/* Wait for hardware reset to end. */ /* Wait for hardware reset to end. */
for (tout = 0; tout < 0x100000; tout++) for (tout = 0; tout < 10000; tout++)
{ {
regv = read_PHY (PHY_REG_BMCR); regv = read_PHY (PHY_REG_BMCR);
if (!(regv & 0x8000)) if (!(regv & 0x8000))
@ -204,15 +204,23 @@ static rt_err_t lpc17xx_emac_init(rt_device_t dev)
break; break;
} }
} }
if (tout >= 0x100000) return -RT_ERROR; /* reset failed */ if (tout >= 10000)
{
//return -RT_ERROR; /* reset failed */
rt_kprintf("\tPHY Read PHY_REG_BMSR,Reset timeout,tout: %d.\n",tout);
}
/* Check if this is a DP83848C PHY. */ /* Check if this is a DP83848C PHY. */
id1 = read_PHY (PHY_REG_IDR1); id1 = read_PHY (PHY_REG_IDR1);
id2 = read_PHY (PHY_REG_IDR2); id2 = read_PHY (PHY_REG_IDR2);
if (((id1 << 16) | (id2 & 0xFFF0)) != DP83848C_ID) if (((id1 << 16) | (id2 & 0xFFF0)) != DP83848C_ID)
return -RT_ERROR; {
// return -RT_ERROR;
rt_kprintf("\tPHY Read PHY_REG_IDRx,PHY chip isn't DP83848C,Chip ID is %d.\n",((id1 << 16) | (id2 & 0xFFF0)));
}
else
{
/* Configure the PHY device */ /* Configure the PHY device */
/* Configure the PHY device */ /* Configure the PHY device */
switch (lpc17xx_emac_device.phy_mode) switch (lpc17xx_emac_device.phy_mode)
@ -221,7 +229,7 @@ static rt_err_t lpc17xx_emac_init(rt_device_t dev)
/* Use auto negotiation about the link speed. */ /* Use auto negotiation about the link speed. */
write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG); write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG);
/* Wait to complete Auto_Negotiation. */ /* Wait to complete Auto_Negotiation. */
for (tout = 0; tout < 0x100000; tout++) for (tout = 0; tout < 200000; tout++)
{ {
regv = read_PHY (PHY_REG_BMSR); regv = read_PHY (PHY_REG_BMSR);
if (regv & 0x0020) if (regv & 0x0020)
@ -230,6 +238,10 @@ static rt_err_t lpc17xx_emac_init(rt_device_t dev)
break; break;
} }
} }
if(tout >= 200000)
{
rt_kprintf("\tPHY Read PHY_REG_BMSR,Auto nego timeout,tout: %d.\n",tout);
}
break; break;
case EMAC_PHY_10MBIT: case EMAC_PHY_10MBIT:
/* Connect at 10MBit */ /* Connect at 10MBit */
@ -240,10 +252,11 @@ static rt_err_t lpc17xx_emac_init(rt_device_t dev)
write_PHY (PHY_REG_BMCR, PHY_FULLD_100M); write_PHY (PHY_REG_BMCR, PHY_FULLD_100M);
break; break;
} }
if (tout >= 0x100000) return -RT_ERROR; // auto_neg failed }
//if (tout >= 0x100000) return -RT_ERROR; // auto_neg failed
/* Check the link status. */ /* Check the link status. */
for (tout = 0; tout < 0x10000; tout++) for (tout = 0; tout < 100; tout++)
{ {
regv = read_PHY (PHY_REG_STS); regv = read_PHY (PHY_REG_STS);
if (regv & 0x0001) if (regv & 0x0001)
@ -252,8 +265,11 @@ static rt_err_t lpc17xx_emac_init(rt_device_t dev)
break; break;
} }
} }
if (tout >= 0x10000) return -RT_ERROR; if (tout >= 100)
{
//return -RT_ERROR;
rt_kprintf("\tPHY Read PHY_REG_BMSR,Link on timeout,tout: %d.\n",tout);
}
/* Configure Full/Half Duplex mode. */ /* Configure Full/Half Duplex mode. */
if (regv & 0x0004) if (regv & 0x0004)
{ {