打印

F407开发板网线实现热插拔方法

[复制链接]
416|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3月的尾巴|  楼主 | 2018-7-10 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实现网线热插拔,不必开机前就插上网线。就要把lwip_comm_init()放在while(1)循环里。但是当插上网线发现也不能初始化,打断点发现是申请内存失败ETH_Mem_Malloc(),lwip_comm_mem_malloc();这是因为未插网线时多次进行初始化(LAN8720_Init()初始化失败),多次申请内存且没有释放导致可用内存不足;所以在初始化失败后要释放内存        ETH_Mem_Free();lwip_comm_mem_free();。这样就可以随时插入网线都可以初始化成功连接网络了。插网线连接实现了,那么拔掉网线不断开连接怎么办呢?
这就可以查询lan8720的中断来实现。LAN8720A的寄存器29的第4位中断位为1时掉线中断,可以查询此位来判断网线的连接状态,当中断置1时可以断开网络,重新等待连接。
u8 LAN8720_Get_link(void)
{
u8 link;
link=((ETH_ReadPHYRegister(0x00,29)&0x10)>>4); //从LAN8720的29号寄存器中读取连接状态中断:1为断开
return link;
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

433

主题

433

帖子

0

粉丝