iMX6 SoloX千兆以太网Linux PHY驱动调试
最近在iMX6 SoloX
平台上调试千兆以太网Linux
PHY
驱动调试,使用的是RGMII
接口类型。RGMII
即Reduced GMII
,是RGMII
的简化版本,将接口信号线数量从24根减少到14根(COL/CRS
端口状态指示信号,这里没有画出),时钟频率仍旧为125MHz,TX/RX
数据宽度从8为变为4位,为了保持1000Mbps的传输速率不变,RGMII
接口在时钟的上升沿和下降沿都采样数据。
在这里有一点需要特别说明下,那就是发送参考时钟GTX_CLK
,它和MII
接口中的TX_CLK
是不同的,MII
接口中的TX_CLK
是由PHY
芯片提供给MAC
芯片的,而RGMII
接口中的GTX_CLK
是由MAC
芯片提供给PHY
芯片的。
接下来是调试过程以及解决问题:
- 首先确保
MAC
控制器驱动fec_main.c
和PHY驱动正常加载 - 根据硬件原理图以及参考板
dts
文件配置fec1
如下:
&fec1 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_enet1>;phy-mode = "rgmii";phy-handle = <ðphy1>;status = "okay";mdio {#address-cells = <1>;#size-cells = <0>;ethphy1: ethernet-phy@1 {reg = <1>;};};
};
pinctrl_enet1: enet1grp {fsl,pins = <MX6SX_PAD_ENET1_MDIO__ENET1_MDIO 0xa0b1MX6SX_PAD_ENET1_MDC__ENET1_MDC 0xa0b1MX6SX_PAD_RGMII1_TXC__ENET1_RGMII_TXC 0xa0b9MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0 0xa0b1MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1 0xa0b1MX6SX_PAD_RGMII1_TD2__ENET1_TX_DATA_2 0xa0b1MX6SX_PAD_RGMII1_TD3__ENET1_TX_DATA_3 0xa0b1MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN 0xa0b1MX6SX_PAD_RGMII1_RXC__ENET1_RX_CLK 0x3081MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0 0x3081MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1 0x3081MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2 0x3081MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 0x3081MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN 0x3081>;
};
- 编译烧录后在启动过程的
log
中可以看到网卡可以正常识别和启动,并且和PC
端网口自协商成功,工作模式是1Gbps/Full
Micrel KSZ9031 Gigabit PHY 2188000.ethernet-1:01: attached PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr=2188000.ethernet-1:01)
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
fec 2188000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
- 使用示波器抓取
MDIO
信号,波形是正常的,这时候使用ethtool
工具可以读取网卡eth0
的工作状态(也可以使用类似mdio
的工具直接读取PHY
的寄存器值)
# ethtool eth0
Settings for eth0:Supported ports: [ TP MII ]Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: SymmetricSupports auto-negotiation: YesSupported FEC modes: Not reportedAdvertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: SymmetricAdvertised auto-negotiation: YesAdvertised FEC modes: Not reportedLink partner advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Link partner advertised pause frame use: SymmetricLink partner advertised auto-negotiation: YesLink partner advertised FEC modes: Not reportedSpeed: 1000Mb/sDuplex: FullPort: MIIPHYAD: 1Transceiver: internalAuto-negotiation: onSupports Wake-on: dWake-on: dLink detected: yes
- 到了这里调试工作已经完成一大半了,不过还是不能和
PC
互相ping
通,通过ifconfig
工具看到板子可以接收PC
发过来的包,但是发送出去的包PC
接收不到。使用示波器抓取TXC
和RXC
的信号,发现RXC
的频率是125M,而TXC
的频率只有50M(正常工作频率是125M)。结合前文提到的注意点:RXC
来自于PHY
,而TXC
来自于MAC
,然后我们可以查到clk-imx6sx.c
里面有MAC
参考频率设置,把50M(MII
接口网卡工作频率)修改为125M(RGMII
接口网卡工作频率),重新编译内核烧录到板子就可以和PC
端互相ping
通了,到此千兆网卡驱动基本调试完成。:
imx_clk_set_rate(clks[IMX6SX_CLK_ENET_REF], 125000000);
iMX6 SoloX千兆以太网Linux PHY驱动调试相关推荐
- linux网卡phy地址修改,【基础技能】Linux PHY驱动调试方法
https://gitee.com/lee790608/linuxPhyDriver STEP1 准备硬件环境 1. 开发环境,可以修改内核代码,编译 2. 硬件开发板,可以进入系统调试,可以传送代码 ...
- 千兆以太网PHY芯片调试-88E1111(RGMII接口-数据收发ECHO测试) Verilog实现python测试
千兆以太网PHY芯片调试-基于RGMII接口的88E1111(数据收发ECHO测试) 先放结果: Py测试代码: import socket #网络通信 TCP,UDP DST_IP = '192.1 ...
- 千兆以太网PHY芯片选型简要推荐
Hqst盈盛电子导读:千兆以太网PHY芯片选型简要推荐 千兆以太网PHY芯片选型简要推荐 以太网芯片市场规模庞大,而且比较稳固,但该市场每隔几年就会出现一次重大技术转变.该产业目前处于从快速以太网(F ...
- 迅为IMX6开发板支持全网通4G模块丨GPS模块丨WIFI蓝牙丨千兆以太网
迅为i.MX6开发板丨迅为i.MX6Q开发板丨四核imx6开发板丨Cortec-A9开发板丨资料介绍: 特点: 处理器:Freescale Cortex-A9四核i.MX6Q主频1GHz 核心板配置: ...
- DM9119NX 千兆以太网PHY芯片 应用
DM9119NX 千兆以太网PHY芯片介绍 功能 集成10/100/1000Mbps以太网收发器 符合IEEE 802.3.IEEE 802.3u和IEEE 802.3ab 支持IEEE P802.3 ...
- 基于亚信AX88179A芯片的USB 3.2转千兆以太网设计
发布日期: 2023/1/4 透过已被广泛使用于各种消费电子产品的USB接口,亚信电子AX88179A USB 3.2 Gen1转千兆以太网芯片解决方案,可以为轻薄短小的笔记本电脑.智能手机.平板电脑 ...
- 【紫光同创国产FPGA教程】【第二十三章】千兆以太网传输实验
本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(http://www.alinx.com). 适用于板卡型号: PGL22G 1. 简介 本实 ...
- 基于米联客MA703FA开发板的MicroBlaze LWIP千兆以太网例程
Xilinx FPGA MicroBlaze使用AXI 1G/2.5G Ethernet Subsystem(= Tri Mode Ethernet MAC + AXI Ethernet Buffer ...
- UDP千兆以太网FPGA_verilog实现(一、知识搜集)
2018年11月11日 星期日 近段时间打算在FPGA--quartus上实现千兆以太网 一.对网卡的重新认识: 网卡工作在ISO/OSI的最后两层:物理层和数据链路层. 1.物理层:定义了数据传送与 ...
- 整理加解释:以太网、快速以太网、千兆以太网和万兆以太网分别的概念和区分 大详解
一.以太网是什么 以太网(Ethernet)最早是由Xerox(施乐)公司创建的局域网组网规范,1980年DEC.Intel和Xeox三家公司联合开发了初版Ethernet规范-DIX 1.0,198 ...
最新文章
- Elasticsearch高并发写入优化的开源协同经历
- .NET4.0并行计算技术基础(8)
- Java Web的Struts2的多语种网站的多语言切换实例
- 拓荒会员电商“无人区”,考拉海购能否拿下“新船票”?
- 授人以鱼不如授人以渔,UCHome全面大解析培训【第二集】
- 剑指offer 最小的k个数 leetcode 215. Kth Largest Element in an Array
- Linux入门之VIM快捷使用
- 属于哪个单元_到底怎么挑?动铁、动圈、动铁动圈混合买耳机哪个更好?
- HttpComponents HttpCore 4.3 Alpha1 发布
- Hbase与pegasus对比
- BOOST 升压电路调试笔记
- 医院医疗类报表免费用,提反馈,还能赢取P30!
- github 下载慢问题 - 代理 - 汇总
- Java如何解决模糊查询(数据库SQL语句,报表开发工具)
- 基于Flink的JDBC插入Nested结构数据到Clickhouse
- 如何编程阶梯形c语言,阶梯式C语言程序设计实验指导书.doc
- 基于Snort的入侵检测系统
- 德尔玛递交注册:半年营收15亿 小米与欧派是股东
- 小程序开发-用户对自己信息的更改
- 30.7.1 通过mysqladmin修改用户密码