最近在iMX6 SoloX平台上调试千兆以太网Linux PHY驱动调试,使用的是RGMII接口类型。RGMIIReduced 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 = <&ethphy1>;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接收不到。使用示波器抓取TXCRXC的信号,发现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驱动调试相关推荐

  1. linux网卡phy地址修改,【基础技能】Linux PHY驱动调试方法

    https://gitee.com/lee790608/linuxPhyDriver STEP1 准备硬件环境 1. 开发环境,可以修改内核代码,编译 2. 硬件开发板,可以进入系统调试,可以传送代码 ...

  2. 千兆以太网PHY芯片调试-88E1111(RGMII接口-数据收发ECHO测试) Verilog实现python测试

    千兆以太网PHY芯片调试-基于RGMII接口的88E1111(数据收发ECHO测试) 先放结果: Py测试代码: import socket #网络通信 TCP,UDP DST_IP = '192.1 ...

  3. 千兆以太网PHY芯片选型简要推荐

    Hqst盈盛电子导读:千兆以太网PHY芯片选型简要推荐 千兆以太网PHY芯片选型简要推荐 以太网芯片市场规模庞大,而且比较稳固,但该市场每隔几年就会出现一次重大技术转变.该产业目前处于从快速以太网(F ...

  4. 迅为IMX6开发板支持全网通4G模块丨GPS模块丨WIFI蓝牙丨千兆以太网

    迅为i.MX6开发板丨迅为i.MX6Q开发板丨四核imx6开发板丨Cortec-A9开发板丨资料介绍: 特点: 处理器:Freescale Cortex-A9四核i.MX6Q主频1GHz 核心板配置: ...

  5. DM9119NX 千兆以太网PHY芯片 应用

    DM9119NX 千兆以太网PHY芯片介绍 功能 集成10/100/1000Mbps以太网收发器 符合IEEE 802.3.IEEE 802.3u和IEEE 802.3ab 支持IEEE P802.3 ...

  6. 基于亚信AX88179A芯片的USB 3.2转千兆以太网设计

    发布日期: 2023/1/4 透过已被广泛使用于各种消费电子产品的USB接口,亚信电子AX88179A USB 3.2 Gen1转千兆以太网芯片解决方案,可以为轻薄短小的笔记本电脑.智能手机.平板电脑 ...

  7. 【紫光同创国产FPGA教程】【第二十三章】千兆以太网传输实验

    本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(http://www.alinx.com). 适用于板卡型号: PGL22G 1. 简介 本实 ...

  8. 基于米联客MA703FA开发板的MicroBlaze LWIP千兆以太网例程

    Xilinx FPGA MicroBlaze使用AXI 1G/2.5G Ethernet Subsystem(= Tri Mode Ethernet MAC + AXI Ethernet Buffer ...

  9. UDP千兆以太网FPGA_verilog实现(一、知识搜集)

    2018年11月11日 星期日 近段时间打算在FPGA--quartus上实现千兆以太网 一.对网卡的重新认识: 网卡工作在ISO/OSI的最后两层:物理层和数据链路层. 1.物理层:定义了数据传送与 ...

  10. 整理加解释:以太网、快速以太网、千兆以太网和万兆以太网分别的概念和区分 大详解

    一.以太网是什么 以太网(Ethernet)最早是由Xerox(施乐)公司创建的局域网组网规范,1980年DEC.Intel和Xeox三家公司联合开发了初版Ethernet规范-DIX 1.0,198 ...

最新文章

  1. Elasticsearch高并发写入优化的开源协同经历
  2. .NET4.0并行计算技术基础(8)
  3. Java Web的Struts2的多语种网站的多语言切换实例
  4. 拓荒会员电商“无人区”,考拉海购能否拿下“新船票”?
  5. 授人以鱼不如授人以渔,UCHome全面大解析培训【第二集】
  6. 剑指offer 最小的k个数 leetcode 215. Kth Largest Element in an Array
  7. Linux入门之VIM快捷使用
  8. 属于哪个单元_到底怎么挑?动铁、动圈、动铁动圈混合买耳机哪个更好?
  9. HttpComponents HttpCore 4.3 Alpha1 发布
  10. Hbase与pegasus对比
  11. BOOST 升压电路调试笔记
  12. 医院医疗类报表免费用,提反馈,还能赢取P30!
  13. github 下载慢问题 - 代理 - 汇总
  14. Java如何解决模糊查询(数据库SQL语句,报表开发工具)
  15. 基于Flink的JDBC插入Nested结构数据到Clickhouse
  16. 如何编程阶梯形c语言,阶梯式C语言程序设计实验指导书.doc
  17. 基于Snort的入侵检测系统
  18. 德尔玛递交注册:半年营收15亿 小米与欧派是股东
  19. 小程序开发-用户对自己信息的更改
  20. 30.7.1 通过mysqladmin修改用户密码

热门文章

  1. 部分电线电缆产品和标准简介
  2. java json接口加密解密
  3. 视频教程-思科网络工程师CCNP高级路由技术-路由协议
  4. pythonmt4通讯swot矩阵_SWOT矩阵分析法
  5. 越折腾越好用的 3 款开源 APP
  6. linux gprs模块 sim800a 芯片 ppp拨号上网
  7. 不完美破解四川电信中兴B860A高安机顶盒
  8. 安卓学习pdf_【手机电脑全平台通用】手把手教你制作可点读日语PDF!
  9. python视频截图
  10. Java Swing 简易计算器