如何使用gpio模拟mdio通信?
一、前言
实际项目开发中,由于设计原因,会将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 接口的读写通信协议如下图所示:

-
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个独立的mdio设备节点,
- 当用命令mdio修改phy时,就会根据gmac0的phy-handle,
- 找到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 0x2140write phy addr: 0x3 reg: 0x0 value : 0x2140
抓取波形如下:

相关文章:
如何使用gpio模拟mdio通信?
一、前言 实际项目开发中,由于设计原因,会将phy的mdio引脚连接到SoC的2个空闲gpio上, 这样就无法通过Gmac自有的架构实现修改phy, 因此只能通过GPIO模拟的方式实现MDIO, 好在Linux支持MDIO via GPIO功能。 该功能…...
C# 中的事件和委托:构建响应式应用程序
C#中的事件和委托。事件和委托是C#中用于实现观察者模式和异步回调的重要机制,它们在构建响应式和交互式应用程序中发挥着重要作用。以下是一篇关于C#中事件和委托的文章。 引言 事件和委托是C#语言中非常重要的特性,它们允许你实现观察者模式和异步回…...
科技赋能健康:多商户Java版商城系统引领亚健康服务数字化变革
在当今社会,随着生活节奏的加快和工作压力的增大,越来越多的人处于亚健康状态。据《The Lancet》期刊2023年的统计数据显示,全球亚健康状态的人群比例已高达82.8%,这一数字背后,隐藏着巨大的健康风险和社会成本。亚健康…...
区块链网络示意图;Aura共识和Grandpa共识(BFT共识)
目录 区块链网络示意图 Aura共识和Grandpa共识(BFT共识) Aura共识 Grandpa共识(BFT共识) Aura与Grandpa的结合 区块链网络示意图 CP Blockchain:这是中央处理区块链(或可能指某种特定的处理单元区块链)的缩写。它可能代表了该区块链网络的主要处理或存储单元。在这…...
Javaweb梳理18——JavaScript
今日目标 掌握 JavaScript 的基础语法掌握 JavaScript 的常用对象(Array、String)能根据需求灵活运用定时器及通过 js 代码进行页面跳转能通过DOM 对象对标签进行常规操作掌握常用的事件能独立完成表单校验案例 18.1 JavaScript简介 JavaScript 是一门跨…...
面向对象-接口的使用
1. 接口的概述 为什么有接口? 借口是一种规则,对于继承而言,部分子类之间有共同的方法,为了约束方法的使用,使用接口。 接口的应用: 接口不是一类事物,它是对行为的抽象。 2. 接口的定义和使…...
失落的Apache JDBM(Java Database Management)
简介 Apache JDBM(Java Database Management)是一个轻量级的、基于 Java 的嵌入式数据库管理系统。它主要用于在 Java 应用程序中存储和管理数据。这个项目已经过时了,只是发表一下以示纪念,现在已经大多数被SQLite和Derby代替。…...
Vue3+SpringBoot3+Sa-Token+Redis+mysql8通用权限系统
sa-token支持分布式token 前后端代码,地球号: bright12389...
MySQL 三大日志详解
在 MySQL 数据库中,binlog(二进制日志)、redo log(重做日志)和 undo log(回滚日志)起着至关重要的作用。它们共同保障了数据库的高可用性、数据一致性和事务的可靠性。下面将对这三大日志进行详…...
Java 岗面试八股文及答案整理(2024最新版)
春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,小刀在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能…...
Web3.0安全开发实践:Clarity最佳实践总结
在过去的一段时间里,CertiK团队对比特币生态系统及其发展进行了深入研究。同时,团队还审计了多个比特币项目以及基于不同编程语言的智能合约,包括OKX的BRC-20钱包和MVC DAO的sCrypt智能合约实现。 现在,我们的研究重点转向了Clar…...
基于Springboot+Vue动漫推荐平台管理系统(源码+lw+讲解部署+PPT)
前言 详细视频演示 论文参考 系统介绍 系统概述 核心功能 用户角色与功能 具体实现截图 1. 热门动漫功能 2. 文章专栏功能 3. 会员分享功能 4. 热门动漫管理功能(管理员端) 5. 动漫分类管理功能 技术栈 后端框架SpringBoot 前端框架Vue …...
秋意浓,森林披金装
秋意浓,森林披金装, 枫叶如火,漫山遍野狂。 松间轻风送寒意, 鸟鸣悠扬入云翔。 林间小径蜿蜒行, 落叶铺成金色毯。 溪水潺潺绕石转, 映出天边一抹霞。 野菊点缀在草间, 白云悠悠随意闲。…...
Chrome离线安装包下载
1、问Chrome的官网:https://www.google.cn/chrome/ 直接下载的是在线安装包,安装需要联网。 2、如果需要在无法联网的设备上安装Chrome,需要在上面的地址后面加上?standalone1。 Chrome离线安装包下载地址:https://www.google.c…...
安卓手机5G网络频繁掉4G 问题解决 手机5G网络优化方案
问题环境 在某个长期停留的位置(例如:躺平)使用手机时网络突然从5G跳到4G,偶尔跳来跳去导致网络体验很差,经过调整5G网络情况下网速及其他体验都要更好,基于这样的情况使用一种简单的操作,锁定5…...
使用LLaMA-Factory微调时的问题与解决方案记录
文章目录 如何指定微调使用的显卡如何解决显卡通信导致的报错模型微调的实际epoch和step如何计算如何实现多卡全量微调模型微调后的结果如何查看模型测试后的指标如何理解如何指定微调使用的显卡 启动网页时使用这种执行命令 CUDA_VISIBLE_DEVICES=5,6,7 llamafactory-cli we…...
Go语言switch语句
在Go语言中,switch,是一个高度灵活,其功能强大的控制结构,相比较Java中的switch,更受到语言重视。 目录 1.基础用法2.多值匹配3.不指定表达式的 switch4.使用 fallthrough 强制进入下一个分支5.使用类型断言的 switch…...
JavaScript DOM使用
DOM Document Object Model 简单而言,就是JavaScript将HTML文档的各个组成部分封装为对象。 封装的对象分别为: Document:整个HTML的文档对象 Element:元素对象(也就是HTML中的标签) Attribute:…...
人工智能|计算机视觉——微表情识别(Micro expression recognition)的研究现状
一、简述 微表情是一种特殊的面部表情,与普通的表情相比,微表情主要有以下特点: 持续时间短,通常只有1/25s~1/3s;动作强度低,难以察觉;在无意识状态下产生,通常难以掩饰或伪装;对微表情的分析通常需要在视频中,而普通表情在图像中就可以分析。由于微表情在无意识状态…...
耿恭坚守城池的方法
疏勒城之战中,耿恭坚守城池的方法主要有以下几点: 选择有利地势:耿恭深知疏勒城依山傍水、地势险要,易守难攻,于是果断放弃金满城,移师至疏勒城据守,为长期坚守创造了良好的地理条件.运用心理战…...
Phi-3-mini-4k-instruct-gguf快速部署:7860端口网页服务+独立venv隔离环境实录
Phi-3-mini-4k-instruct-gguf快速部署:7860端口网页服务独立venv隔离环境实录 1. 模型简介 Phi-3-mini-4k-instruct-gguf 是微软 Phi-3 系列中的轻量级文本生成模型 GGUF 版本。这个模型特别适合以下场景: 智能问答文本改写与润色内容摘要生成简短创意…...
Oracle 12c安装实战:解决PRVG-0449堆栈软限制配置难题
1. 初识PRVG-0449错误:堆栈软限制的"拦路虎" 第一次在Oracle 12c安装过程中遇到PRVG-0449错误时,我盯着屏幕上的红色警告愣了好几秒。错误信息明确告诉我:"Proper soft limit for maximum stack size was not found"&…...
高效漫画收藏解决方案:打造你的离线数字漫画库
高效漫画收藏解决方案:打造你的离线数字漫画库 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mirrors…...
ncmdump:解决网易云音乐NCM格式限制的轻量级转换方案
ncmdump:解决网易云音乐NCM格式限制的轻量级转换方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 一、音乐自由的阻碍:NCM格式的隐形枷锁 🎵 你是否经历过这样的场景:精心收藏的网…...
如何快速打造高效办公界面:Office功能区的终极定制指南
如何快速打造高效办公界面:Office功能区的终极定制指南 【免费下载链接】office-custom-ui-editor 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-ui-editor Office Custom UI Editor 是一款由微软官方开源的强大工具,让您无需编写…...
效率倍增:用快马平台自动化生成类qoderwork官网的高质量模板
在开发企业级工具类官网时,效率往往是团队最关注的核心指标之一。最近尝试用InsCode(快马)平台自动化生成类似qoderwork官网的模板,发现它能将传统需要数天的手动搭建过程压缩到几分钟内完成,这种效率提升对中小团队尤其有价值。以下是具体实…...
告别“AI只会聊天”:用OpenClaw+星链4SAPI打造你的办公自动化Agent
你有没有过这种时刻——邮箱右上角的红点像一道催命符,文件夹乱得像个数据坟场,日程表排得跟俄罗斯方块似的,领导一句“把本周情况汇总下”,你就得在聊天记录里搞考古发掘。打开AI,发现它除了陪你聊天,什么…...
3步让旧款iOS设备重获新生:Legacy-iOS-Kit性能拯救全指南
3步让旧款iOS设备重获新生:Legacy-iOS-Kit性能拯救全指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...
Java TCC到底要不要用?90%团队踩坑的4个认知误区,今天一次性说透
第一章:Java TCC到底要不要用?90%团队踩坑的4个认知误区,今天一次性说透TCC(Try-Confirm-Cancel)作为分布式事务的一种经典模式,在 Java 生态中常被误认为“高可用银弹”或“微服务标配”。但真实生产实践中…...
CES Asia 2026打造低空经济生态圈:从整机到核心部件全链覆盖
北京,2026年3月31日电——低空经济产业正迈向全链协同、规模化落地的关键阶段。CES Asia 2026将于6月10—12日在北京举办,以全产业链覆盖精准供需对接资本赋能为核心,构建从整机到核心部件的完整低空经济生态圈,助力企业一站式打通…...
