最近在调试一款Phy的驱动,从没有任何头绪到略有了解经历了太多的痛苦,于是决定写这个系列篇记录一下。特别感谢无数优秀的博主无私奉献很多优秀的博文给予了我很大的帮助。在这个系列篇中,我也会转载部分优秀的博文(会附上链接),以及增添自己的理解,如果部分内容有侵权的地方,麻烦联系我。

概述

管理MII接口的MDIO接口是一个双线的串行接口,用来对PHY芯片等物理层信息进行操作管理。

MDIO的历史

MDIO是Management Data Input/Output 的缩写,有两根线,分别为双向的MDIO和单向的MDC,用于以太网设备中上层对物理层的管理。之所以能够管理这些PHY芯片,是因为能够对PHY芯片的各类寄存器进行访问和修改。

MDIO接口最初是由IEEE RFC802.3中的22号条款定义的,在最初的定义中,一个单独的MDIO接口可以访问32个不同的PHY设备中的32个寄存器,这些寄存器提供状态和控制信息,例如:连接状态、传输速度能力、当前选择的传速、低压消耗时的下电情况、全双工还是半双工、自动协商、错误提示以及反馈信息等等。

为了满足10G以太网设备的普及发展,在IEEE 802.3ae 的45号条款中为MDIO接口提供了额外的规范:

  • 能够通过32个端口访问32个不同设备的65536个寄存器;
  • 为访问10G以太网提供额外的OP码和ST码,从而可以直接访问寄存器地址;
  • 端到端的报错信号;
  • 环回模式控制;
  • 低压电气标准。

操作原理

MDIO总线有两个信号:管理数据时钟(MDC)和管理数据输入/输出(MDIO)。
MDIO接口中有特定的术语定义总线上的各种设备。驱动MDIO总线的设备被定义为站管理实体(STA)。而被MDC管理的目标设备称为可被MDIO管理的设备(MMD)。
STA初始化MDIO所有的通信,同时负责驱动时钟MDC。MDC的频率可以高达2.5 MHz。

22号条款

22号条款的MDIO通信的帧格式定义如下:

45号条款

为了弥补22号的条款中定义的缺陷,45号条款中增添了对低压设备的支持,最低可到1.2V,同时扩充了帧格式,能够访问更多的设备和寄存器。

45号MDIO通信帧格式如下:

第45号条款的主要变化是如何访问寄存器。在第22中,一个单独的帧指定要读或写的地址和数据,同时完成了这些工作。45号中改变这种范式,第一个地址帧发送到指定的MMD和寄存器,然后发送第二帧来执行读或写。

添加这个依次循环访问的好处是45条款是向后兼容22条款的,允许设备的互操作。其次,通过创建一个框架的登记地址,地址空间从5位增加到16位,这使得STA访问65536个不同的寄存器。

为了做到这一点,在数据帧的组成部分进行了一些变化。定义了新的ST代码(00),用于标识第45号条款的数据帧。运算码扩展到指定地址帧,写帧,读帧,或读和读后增量地址帧。由于寄存器地址不再需要,这个字段被指定目标设备类型的内容代替。扩展后还允许STA接入除了PHY以外的其他设备。

转载博文地址: 了解与MDIO/MDC接口相关的22号、45号条款

PHY驱动调试之 --- MDIO/MDC接口22号和45号条款(一)的更多相关文章

  1. MDIO/MDC(SMI)接口

    转载:http://blog.chinaunix.net/uid-24148050-id-132863.html 1. 简介 The MDIO interface is a simple, two-w ...

  2. 以太网PHY 芯片之 MII/MDIO接口详解

    本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在10/100模式下和1000M模式下的设计方法. ...

  3. 【转】android 电容屏(三):驱动调试之驱动程序分析篇

    关键词:android  电容屏 tp 工作队列 中断 坐点计算  电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0  平台:S5PV310( ...

  4. 【转】Android LCD(四):LCD驱动调试篇

    关键词:android LCD TFTSN75LVDS83B  TTL-LVDS LCD电压背光电压 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台 ...

  5. 驱动调试(三)oops确定函数PC

    目录 驱动调试(三)oops确定函数PC 什么是oops 流程简述 代码仓库 模块例子分析 找到PC值 判断是否属于模块 查看符号表 找到模块 反汇编模块 内核例子分析 找到PC值 判断是否属于模块 ...

  6. 驱动调试(一)-printk

    目录 驱动调试(一)-printk 引入 框架 入口console_setup add_preferred_console register_console s3c24xx_serial_initco ...

  7. MTK camera 闪光灯Flashlight驱动调试流程

    MTK camera 闪光灯Flashlight驱动调试流程 分类: MtkDev  |  作者: topicdev 相关  |  发布日期 : 2014-09-26  |  热度 : 153°   ...

  8. Android驱动调试利器Busybox之初体验

    工欲善其事必先利其器,之前做WinCE开发时,经常写一些小工具以提高开发调试的效率,如WinCE驱动调试助手.WinCE串口调试助手.WinCE6.0寄存器访问工具.WinCE远程桌面助手和S3C24 ...

  9. [windows驱动]windows8.1驱动调试前戏

    人们都说在干正事之前,得先做足前戏才会爽,我一直很认同这个观点,下面我来总结下进行windows8.1的WDK调试所要做的准备工作. 软件安装: 1.VS2013. 2.WDK8.1 3.Window ...

  10. Linux驱动设计—— 驱动调试技术

    参考博客与书籍: <Linux设备驱动开发详解> <Linux设备驱动程序> http://blog.chinaunix.net/uid-24219701-id-2884942 ...

随机推荐

  1. Sentinel源码分析-滑动窗口统计原理

    滑动窗口技术是Sentinel比较关键的核心技术,主要用于数据统计 通过分析StatisticSlot来慢慢引出这个概念 @Override public void entry(Context con ...

  2. Bypass Windows Defender Dump Lsass(手法拙劣)

    0x00.前言 Windows Defender是一款内置在Windows操作系统的杀毒软件程序,本文旨在记录实战环境中,服务器存在Windows Defender情况下转储凭证的渗透手法,技术简单粗 ...

  3. Linux查看文件内容和压缩文件命令

    查看文件内容 一些重要的目录: /usr/share/    帮助文档.说明文档/var/log/       日志/var/run/       运行中程序/var/tmp       临时文件 根 ...

  4. fastapi教程进阶

    一个简单的栗子 from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return ...

  5. Solutions:网站搜索 - Elastic Site Search

  6. 浏览器的 JavaScript 控制台功能调试vue

    原始显示结果: 调试其中一个变量的值: 页面上呈现出调试后的效果了

  7. Fluentd部署:系统配置

    Fluentd的全局配置项,诸如开启RPC.使用多worker模式等.可在配置文件中通过<system>进行配置,或通过命令行进行配置. 参数 workers:指定worker进程数,默认 ...

  8. 在客户端电脑使用 kubectl 远程管理 Kubernetes

    日常工作中,可能需要在自己的笔记本电脑上执行 kubectl 命令以管理远程 Linux 服务器上的 Kubernetes 集群.通过调用 kubernetes API 来实现对 Kubernetes ...

  9. Opengl ES之VBO和VAO

    前言 本文主要介绍了什么是VBO/VAO,为什么需要使用VBO/VAO以及如何使用VBO和VAO. VBO 什么是VBO VBO(vertex Buffer Object):顶点缓冲对象.是在显卡存储 ...

  10. C/C++ 关于默认构造函数

    前言: 在C++中,对于一个类,C++的编译器都会为这个类提供四个默认函数,分别是: A() //默认构造函数 ~A() //默认析构函数 A(const A&) //默认拷贝构造函数 A&a ...