IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> imx6网口上电后连接不稳定link up,link down -> 正文阅读

[嵌入式]imx6网口上电后连接不稳定link up,link down

芯片:LAN8720A

问题:网络不稳定,插入网线后,一直重复link up,link down

fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
fec 2188000.ethernet eth0: Link is Down
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
fec 2188000.ethernet eth0: Link is Down
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready

大概解决思路:
1、如果是使用CPU内部时钟提供给LAN8720 芯片工作,遇到上述问题,可以通过改为外部晶振提供给LAN8720。

2、调节一下复位脚的上电时序,由fec_main.c文件中的static void fec_reset_phy(struct platform_device *pdev)函数接口,默认延迟1ms,
网上大部分说可以增大延迟时间。(我测试了一下,本人遇到的这次情况不行)

可以从设备树中fec网口节点增加以下参数:
phy-reset-gpios = <&gpio3 16 GPIO_ACTIVE_LOW>;
phy-reset-duration = <1>;
static void fec_reset_phy(struct platform_device *pdev)
{
	int err;
	int phy_reset;
	int msec = 1;
	struct device_node *np = pdev->dev.of_node;

	if (!np)
		return;

	err = of_property_read_u32(np, "phy-reset-duration", &msec);
	/* A sane reset duration should not be longer than 1s */
	if (!err && msec > 1000)
		msec = 1;

	phy_reset = of_get_named_gpio(np, "phy-reset-gpios", 0);
	if (!gpio_is_valid(phy_reset))
		return;

	err = devm_gpio_request_one(&pdev->dev, phy_reset,
				    GPIOF_OUT_INIT_LOW, "phy-reset");
	if (err) {
		dev_err(&pdev->dev, "failed to get phy-reset-gpios: %d\n", err);
		return;
	}
	
	msleep(msec);
	gpio_set_value(phy_reset, 1);
}

3、通过跟硬件工程师这边的测试,在系统完全起来后,把芯片中reset引脚再次拉低,重新硬件复位,后面就可以正常运行。所以通过打印信息,定位到需要添加复位函数的位置。

static int fec_enet_mii_probe(struct net_device *ndev)

增加以下代码

static void fec_enet_hyb_reset(void)
{
	printk("%s:%d\n",__FUNCTION__,phy_reset);
	msleep(1);
	gpio_set_value(phy_reset, 0);
	msleep(30);
	gpio_set_value(phy_reset, 1);
}
static int resetCnt = 0;//定义一个静态全局变量
static int fec_enet_mii_probe(struct net_device *ndev)
{
	.......
	if (resetCnt == 0) { //只硬件复位一次
			resetCnt++;
			fec_enet_hyb_reset();
	}
	.......
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:52:42  更:2022-04-22 18:55:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:44:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码