Linux内核中 SPI以太网W5500问题
Linux内核驱动中将W5500 W5200和W5100集成到了一起,本人只用到了W5500。
问题描述
绿灯LinkLED和黄灯ACTLED交替闪烁,而正常状态应该为LinkLED常亮
ifconfig eth0 报错
经过观察W5500网卡在整个板子复位时大多数情况是可以正常DHCP分配IP的,而adb reboot的时候大多数时候DHCP分配IP失败就会有上述错误状态,怀疑是复位有问题,分析代码果然函数名称为硬件复位(w5100_hw_reset)的函数在内部调用了软件复位函数
在w5100_hw_reset之前加上硬件复位代码,解决该问题。
static int w5100_hw_reset(struct w5100_priv *priv)
{
u32 rtr;
//此处增加硬件复位代码
//w5100_reset为软件复位
w5100_reset(priv);
w5100_disable_intr(priv);
w5100_write_macaddr(priv);
switch (priv->ops->chip_id) {
case W5100:
w5100_memory_configure(priv);
rtr = W5100_RTR;
break;
case W5200:
w5200_memory_configure(priv);
rtr = W5100_RTR;
break;
case W5500:
w5500_memory_configure(priv);
rtr = W5500_RTR;
break;
default:
return -EINVAL;
}
return 0;
}``