如何使用gpio模拟mdio通信?

原创 一口Linux 2024-11-11 11:51

点击左上方蓝色“一口Linux”,选择“设为星标

第一时间看干货文章 

【干货】嵌入式驱动工程师学习路线
【干货】Linux嵌入式知识点-思维导图-免费获取
【就业】一个可以写到简历的基于Linux物联网综合项目
【就业】找工作简历模版



 

一、前言

实际项目开发中,由于设计原因,会将phy的mdio引脚连接到SoC的2个空闲gpio上,

这样就无法通过Gmac自有的架构实现修改phy,

因此只能通过GPIO模拟的方式实现MDIO,

好在Linux支持MDIO via GPIO功能。

该功能需要用到内核驱动mdio-bitbang.c和mdio-gpio.c。

本例 :

  • 平台:
复旦微
  • kernel 版本:
linux 4.14.55-xxxxx
  • phy芯片
yt8521
  • phy连接到
gmac0
  • mdio总线连接到:
gpioc 2
portc 3

二、mdio基础概念

1、SMI接口

SMI是MAC内核访问PHY寄存器接口,它由两根线组成,双工:

  • MDC(Management Data Clock)为时钟,

  • MDIO(Management Data Input/Output)为双向数据通信,

原理上跟I2C总线很类似,也可以通过总线访问多个不同的phy。

MDIO协议是以太网标准IEEE802.3中专门用于MAC和PYH之间管理的串行接口总线,该接口主要用于MAC控制器对PYH层的状态读取和设置(寄存器操作)、获取链路状态,控制物理层协商等操作。

MDC/MDIO基本特性:

  • 两线制    :MDC(时钟线)和MDIO(数据线)。分主从设备。
  • 时钟频率:2.5MHz
  • 通信方式:总线制,可同时接入的PHY数量为32个
  • 通过SMI接口,MAC芯片主动的轮询PHY层芯片,获得状态信息,并发出命令信息。

其中主设备称作STA,从设备称作MDI,一个主设备可以对多个从设备进行命令读写操作。

三、mdio协议波形

1、MDIO接口数据帧

在IEEE802.3协议中,把MDIO接口数据帧分为两种,一种是Clause22,另一种是Clause45

前者主要用于百兆千兆以太网,后者用于千兆以上的以太网。

2、Clause22

MDIO 接口的读写通信协议如下图所示:

CLAUSE22 数据帧协议


  • Preamble:

    32 位前导码,由 MAC 端发送 32 位逻辑“1”,用于同步 PHY 芯片。

  • ST(Start of Frame):

    2 位帧开始信号,用 01 表示。

  • OP(Operation Code):

    2 位操作码,读:10 写:01。

  • PHYAD(PHY Address):

    5 位 PHY 地址,用于表示与哪个 PHY 芯片通信,因此一个 MAC 上可以连 接多个 PHY 芯片。

  • REGAD(Register Address):

    5 位寄存器地址,可以表示共 32 位寄存器。

  • TA(Turnaround):

    2 位转向,

    在读命令中,MDIO 在此时由 MAC 驱动改为 PHY 驱动,在第一个 TA 位,MDIO 引脚为高阻状态,第二个 TA 位,PHY 将 MDIO 引脚拉低,准备发送数据;

    在写命令中,不需 要 MDIO 方向发生变化,MAC 固定输出 2’b10,随后开始写入数据。

  • DATA:

    16 位数据,在读命令中,PHY 芯片将读到的对应 PHYAD 的 REGAD 寄存器的数据写到 DATA 中;在写命令中,PHY 芯片将接收到的 DATA 写入 REGAD 寄存器中。需要注意的是,在 DATA 传 输的过程中,高位在前,低位在后。

  • IDLE:

    空闲状态,此时 MDIO 为无源驱动,处于高阻状态,但一般用上拉电阻使其上拉至高电平。

波形举例

向phy:3 寄存器0x00 写入 数据0x4140

3、Clause45

四、YT8521

YT8521S是一款高度集成的以太网收发器,符合10BASE-Te、100BASE-TX和1000BASE-T IEEE 802.3标准。

1、引脚

其中与mdio相关引脚:

14  MDC         Management Data Clock
15  MDIO        Input/Output of Management Data.
      Pull up 3.3V/2.5V/1.8V for 3.3V/2.5V/1.8V I/O respectively

2、模块图

3、MDIO协议时序-[重要]

下面YT8521的SMI时序图:

上升沿读数据,下降沿写数据

五、驱动移植

1、驱动文件及移植

mdio-gpio.c
mdio-bitbang.c
在这里插入图片描述

勾选 下面几项:

  │ │                   <*>   Bitbanged MDIO buses                                            │ │  
  │ │                   <*>   GPIO controlled MDIO bus multiplexers                           │ │  
  │ │                   <*>   MMIO device-controlled MDIO bus multiplexers                    │ │  

2、移植设备树

 aliases {
    …………
     mdio-gpio0 = &mdio0;
 };
 
 mdio0: mdio {
     compatible = "virtual,mdio-gpio";
     gpios = <&portc 2 0 >,<&portc 3 0>;                                               
     #address-cells = <1>;
     #size-cells = <0>;
   
     phy0: ethernet-phy@7 {
         reg = <0x7>;
         yt,phy-delay = <0xfc>;
         phy-connection-type = "rgmii-id";
     };
 };
 &gmac0 {
  status = "okay";
  phy-handle = <&phy0>;
 };

由设备树可知,

  1. 我们创建了1个独立的mdio设备节点,
  2. 当用命令mdio修改phy时,就会根据gmac0的phy-handle,
  3. 找到mdio0节点从而调用mdio-gpio驱动模块来配置phy:8521。

下图,是phy直接连接到gmac0的mdio接口,mdio命令执行的通路:

下图是phy连接到gpio口,mdio命令执行的通路:

3、查看log

开机有以下log,说明驱动 移植成功:

# dmesg | grep MDIO
[    3.257270] libphy: GPIO Bitbanged MDIO: probed
[    3.274202] libphy: Fixed MDIO Bus: probed
# cd /sys/class/mdio_bus/
# ls
fixed-0   gpio-0    stmmac-0  stmmac-1
# cd gpio-0/
# ls
device     gpio-0:03  of_node    power      subsystem  uevent
# cd gpio-0\:03/
# ls
attached_dev    phy_has_fixups  power
driver          phy_id          subsystem
of_node         phy_interface   uevent

4、操作

修改eth0为百兆速率,则设置Speed_Selection位为01,同时自动协商为Autoneg_En要禁用,即设置该寄存器值为0x2140:

# mdio eth0 0x00 0x2140
 write phy addr: 0x3  reg: 0x0  value : 0x2140

抓取波形如下:

end



一口Linux 


关注,回复【1024】海量Linux资料赠送


精彩文章合集

文章推荐

【专辑】ARM
【专辑】粉丝问答
【专辑】所有原创
专辑linux入门
专辑计算机网络
专辑Linux驱动
【干货】嵌入式驱动工程师学习路线
【干货】Linux嵌入式所有知识点-思维导图


一口Linux 写点代码,写点人生!
评论
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 63浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 99浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 74浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 69浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 60浏览
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 166浏览
  • 光耦合器,也称为光隔离器,是一种利用光在两个隔离电路之间传输电信号的组件。在医疗领域,确保患者安全和设备可靠性至关重要。在众多有助于医疗设备安全性和效率的组件中,光耦合器起着至关重要的作用。这些紧凑型设备经常被忽视,但对于隔离高压和防止敏感医疗设备中的电气危害却是必不可少的。本文深入探讨了光耦合器的功能、其在医疗应用中的重要性以及其实际使用示例。什么是光耦合器?它通常由以下部分组成:LED(发光二极管):将电信号转换为光。光电探测器(例如光电晶体管):检测光并将其转换回电信号。这种布置确保输入和
    腾恩科技-彭工 2025-01-03 16:27 171浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 65浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 63浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 68浏览
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 39浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦