|
硬汉哥好:
我用这个例程,然后将以太网的驱动更换成了LAN8720,串口一直提示没有link up,
1、例程中好像没有去自动协商;
2、是不是哪里还要使能,才可以让PYH link up
PHY_LAN8720.c中,这段代码我加了自动协商。
static int32_t PowerControl (ARM_POWER_STATE state) {
uint16_t val;
switch ((int32_t)state) {
case ARM_POWER_OFF:
if ((PHY.flags & PHY_INIT) == 0U) {
/* Initialize must provide register access function pointers */
return ARM_DRIVER_ERROR;
}
PHY.flags &= ~PHY_POWER;
PHY.bmcr = BMCR_POWER_DOWN;
return (PHY.reg_wr(ETH_PHY_ADDR, REG_BMCR, PHY.bmcr));
case ARM_POWER_FULL:
if ((PHY.flags & PHY_INIT) == 0U) {
return ARM_DRIVER_ERROR;
}
if (PHY.flags & PHY_POWER) {
return ARM_DRIVER_OK;
}
/* Check Device Identification. */
PHY.reg_rd(ETH_PHY_ADDR, REG_PHYIDR1, &val);
if (val != PHY_ID1) {
/* Invalid PHY ID */
return ARM_DRIVER_ERROR_UNSUPPORTED;
}
PHY.reg_rd(ETH_PHY_ADDR, REG_PHYIDR2, &val);
if ((val & 0xFFF0) != PHY_ID2) {
/* Invalid PHY ID */
return ARM_DRIVER_ERROR_UNSUPPORTED;
}
PHY.bmcr = 0U;
if (PHY.reg_wr(ETH_PHY_ADDR, REG_BMCR, PHY.bmcr) != ARM_DRIVER_OK) {
return ARM_DRIVER_ERROR;
}
PHY.flags |= PHY_POWER;
SetMode(ARM_ETH_PHY_AUTO_NEGOTIATE);
return ARM_DRIVER_OK;
case ARM_POWER_LOW:
default:
return ARM_DRIVER_ERROR_UNSUPPORTED;
}
}
|
|