PYH与MAC的桥梁MII/MIIM

news2025/2/2 9:08:12

        在学习车载互联网时,看到了一句话,Processor通过DMA直接存储访问与MAC之间进行数据的交互,MAC通过MII介质无关接口与PHY之间进行数据的交互。常见的以太网硬件结构是,将MAC集成进Processor芯片,将PHY留在Processor片外,做成单独的收发器芯片。但是他并没有讲解MII使用的具体流程。本篇博客将聚焦MII与MIIM讲述PYH与MAC以及MAC与Processor是如何进行信息传递的。

        在开始之前我们先简单介绍一下这些是什么。Processor也就是处理器,也就是MCU微控制器,SOC/CPU,域控制前。他是执行数据处理和协议栈的软件/硬件模块。其主要作用是:1.协议处理2.应用逻辑处理3.通信协调。PHY也就是我们常说的OSI七层模型中的物理层,在OBD连接,也就是车身诊断系统中,他与外部通过100BaseTX(2对非屏蔽双绞线)连接,而内部通常采用100BaseT1(1对非屏蔽双绞线))或者1000BaseT1相连接。通常CAN/LIN走的就是这些线路。在发送数据时,PHY接收从MAC过来的数据,将并行的数据转化为串行流数据,按照物理层的编码规则把数据编码,再变为模拟信号把数据发出去。接收数据时的流程则相反。那么PHY是如何接收MAC传递来的数据呢?

        MAC是物理链路层的一部分,负责以太网帧的生成/解析与差错校验。MAC通过MII接口与PYH层进行数据交互,通过MIIM对PHY进行管理。PHY通过MDI接口发送模拟信号。

        MII(Media Independent Interfaces)是MAC与PHY之间的标准接口,支持数据的收发和接受。

        MIIM(Management Data I/O Interface)也称为MDIO/MDC。MDC(Management Data Clock)和 MDIO(Management Data Input/Output)是两个独立的信号线,它们共同组成 MDIO 接口(MIIM,Management Interface)。MDC是 MDIO 管理接口的时钟信号,由 MAC 端主动产生,用于控制 MDIO(Management Data Input/Output) 数据的传输时序。MDIO管理数据线,用于 MAC 读写 PHY 寄存器.他们共同负责对PHY芯片寄存器进行读写,管理配置,设置工作模式,监控PHY等操作。

       MDI: MII 是 MAC 层和 PHY 层之间的接口,主要用于 逻辑信号的交互,以并行数字信号形式传输数据。而 MDI 是 PHY 层与物理介质(如双绞线或光纤)之间的接口,主要用于 模拟信号的传输。由于讨论的重点是 从 MAC 到 PHY 的信号转换和编码 ,MDI 只在最终物理信号传输时使用。

解析 MDIO/MDC 接口管理帧格式

MDIO 传输数据的格式由多个字段组成,每个字段有特定的作用:

  1. PRE(预同步字段)

    • 由多个连续的 1 组成(通常是 32 个 1)。
    • 主要用于同步时钟信号,确保 MDIO 和 PHY 设备可以正确通信。
  2. ST(起始字段,Start of Frame)

    • 固定值 01,用于标志帧的开始,告诉 PHY 一次新的传输即将开始。
  3. OP(操作码,Operation Code)

    • 用于区分本次传输是 读取(READ,10 还是 写入(WRITE,01
  4. PHYAD(PHY 地址,5 位)

    • 该字段用于指定要访问的 PHY 设备地址,支持最多 32 个不同的 PHY(0~31)。
  5. REGAD(寄存器地址,5 位)

    • 指定 PHY 内部的寄存器地址,最多支持 32 个寄存器。
  6. TA(转接字段,Turnaround)

    • 数据方向切换字段,用于协调主机(MAC)和从机(PHY)之间的数据传输:
      • 写操作时,由主机(MAC)驱动,总是 10
      • 读操作时,由从机(PHY)驱动,值是 Z0(其中 Z 表示高阻态,PHY 释放总线)。
  7. DATA(数据字段,16 位)

    • 主要用于存储数据:
      • 写操作:主机发送的数据,写入 PHY 指定寄存器。
      • 读操作:从 PHY 读取的数据。
  8. IDLE(空闲字段)

    • 当总线空闲时,MDIO 线进入 高阻态(Z),表示当前无数据传输。

        MDIO 接口的读写操作流程如下:读取操作(READ,操作码 10 由主机发送帧的前半部分(包括 PHY 地址和寄存器地址),然后 PHY 在 TA 阶段接管总线并返回 16 位数据,主机读取数据完成操作。写入操作(WRITE,操作码 01 由主机发送完整帧(包括 PHY 地址、寄存器地址和 16 位数据),PHY 在接收到数据后将其写入指定寄存器。

MII 的具体使用流程

MII 主要用于 数据发送数据接收 两个过程,每个过程都由多个信号线协同工作。

1. MII 发送流程(MAC → PHY)

当 MAC 层有数据需要通过 PHY 发送出去时,它会按照以下流程操作:

  1. MAC 准备数据

    • MAC 层按照以太网帧格式组织数据,并将其拆分为 4 位宽度(TXD[3:0])的数据块(10/100Mbps 以太网使用 MII,千兆以太网使用 GMII/SGMII)。
  2. 发送数据和控制信号

    • MAC 层通过 MII 接口的 TXD[3:0] 数据总线逐个发送数据块。
    • TX_EN(Transmit Enable):当有有效数据时,MAC 层拉高该信号,指示 PHY 接收数据。
    • TX_ER(Transmit Error):用于标记传输错误。
    • TX_CLK(Transmit Clock):PHY 生成的时钟信号,MAC 层在时钟的上升沿发送数据。
  3. PHY 编码数据并发送

    • PHY 层接收 TXD[3:0] 传输的数据,并将其转换为物理层的信号(如 MLT-3 编码、NRZ 编码)。
    • 最终 PHY 将数据发送到 MDI 端口(Medium Dependent Interface),再传输到物理网络介质(如双绞线)。

2. MII 接收流程(PHY → MAC)

当 PHY 接收到来自网络的以太网数据时,它会按照以下流程传递给 MAC 层:

  1. PHY 解析物理信号

    • PHY 层从 MDI 接口接收模拟信号,并解码成数字信号(例如 Manchester 编码 → 二进制数据)。
  2. 发送数据到 MAC

    • PHY 层通过 RXD[3:0] 数据总线逐步将数据发送给 MAC 层。
    • RX_DV(Receive Data Valid):当 PHY 发送有效数据时,拉高此信号。
    • RX_ER(Receive Error):如果 PHY 检测到错误(如 CRC 校验失败),则拉高该信号。
    • RX_CLK(Receive Clock):PHY 生成的接收时钟信号,MAC 在时钟的上升沿采样数据。
  3. MAC 处理数据

    • MAC 层从 RXD[3:0] 获取数据,并将其重新拼接成完整的以太网帧进行处理。

    TXD[3:0]MII(Media Independent Interface) 中的 发送数据总线,用于在 MAC 层和 PHY 层之间传输数据。

 同时我们也注意到MAC与Processor通过DMA进行信息传递。那么

        什么是 DMA?

DMA(Direct Memory Access,直接内存访问) 是一种计算机系统中的数据传输机制,允许 外设(如网卡、硬盘、显卡等)直接与内存交换数据,而不需要 CPU 进行数据搬运。这大大提高了数据传输效率,减少了 CPU 的负担,使其可以专注于计算任务。

DMA 的工作原理

通常,数据传输可以分为以下几种方式:

  1. 程序控制方式(CPU 控制)

    • CPU 负责从内存读取数据,然后再写入外设,或者从外设读取数据再写入内存。
    • 缺点:CPU 需要全程参与数据搬运,占用大量计算资源,影响系统性能。
  2. 中断驱动方式

    • 设备通过中断请求 CPU 进行数据传输,CPU 响应后执行数据搬运操作。
    • 缺点:虽然减少了一些 CPU 轮询的开销,但 CPU 仍然需要执行数据搬运,影响效率。
  3. DMA(直接内存访问)方式最优方式

    • DMA 控制器(DMAC)接管数据传输,允许数据 直接内存和外设(如 MAC 网卡) 之间传输,而不经过 CPU。
    • CPU 仅需要发起 DMA 传输请求,剩下的传输过程由 DMA 控制器完成
    • 优点
      • 释放 CPU 资源,让 CPU 可以处理其他任务。
      • 提高数据传输效率,尤其是大块数据传输时效果明显。

        

        

        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2289704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用SliverList组件

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了沉浸式状态栏相关的内容,本章回中将介绍SliverList组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的SliverList组件是一种列表类组件,类似我们之前介…

单细胞分析基础-第一节 数据质控、降维聚类

scRNA_pipeline\1.Seurat 生物技能树 可进官网查询 添加链接描述 分析流程 准备:R包安装 options("repos"="https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packages("BiocManager",update = F,ask =…

HTML<hgroup>标签

例子&#xff1a; 使用hgroup元素标记标题和段落是相关的&#xff1a; <hgroup> <h2>Norway</h2> <p>The land with the midnight sun.</p> </hgroup> 定义和用法&#xff1a; 标签<hgroup>用于包围标题和一个或多个<p&g…

【已解决】黑马点评项目Redis版本替换过程的数据迁移

黑马点评项目Redis版本替换过程的数据迁移 【哭哭哭】附近商户中需要用到的GEO功能只在Redis 6.2以上版本生效 如果用的是老版本&#xff0c;美食/KTV的主页能正常返回&#xff0c;但无法显示内容 上次好不容易升到了5.0以上版本&#xff0c;现在又用不了了 Redis 6.2的windo…

mybatis辅助配置

驼峰映射 sql里面定义字段通常是使用下划线定义 比如dept_id 而我们的后端属性通常就是驼峰命名 deptId 所以这两匹配进行自动赋值就比较麻烦 可以使用 select dept_id as deptId 来解决&#xff08;起别名&#xff09; 也可以用mybatis的辅助配置解决 第三种就是推荐的在spr…

基于YOLO11的肺结节检测系统

基于YOLO11的肺结节检测系统 (价格90) LUNA16数据集 数据一共 1186张 按照8&#xff1a;1&#xff1a;1随机划分训练集&#xff08;948张&#xff09;、验证集&#xff08;118张&#xff09;与测试集&#xff08;120张&#xff09; 包含 nodule 肺结节 1种…

C#面向对象(继承)

1.什么是继承 在 C# 编程语言中&#xff0c;继承是一个核心概念&#xff0c;它允许一个类&#xff08;称为派生类&#xff09;继承另一个类&#xff08;称为基类&#xff09;的成员&#xff0c;如方法、属性和其他成员。继承机制使得代码重用成为可能&#xff0c;简化了应用程…

Qt事件处理:理解处理器、过滤器与事件系统

1. 事件 事件 是一个描述应用程序中、发生的某些事情的对象。 在 Qt 中&#xff0c;所有事件都继承自 QEvent &#xff0c;并且每个事件都有特定的标识符&#xff0c;如&#xff1a;Qt::MouseButtonPress 代表鼠标按下事件。 每个事件对象包含该事件的所有相关信息&#xff…

为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1

为大模型提供webui界面的利器&#xff1a;Open WebUI Open WebUI的官网&#xff1a;&#x1f3e1; Home | Open WebUI 开源代码&#xff1a;WeTab 新标签页 Open WebUI是一个可扩展、功能丰富、用户友好的自托管AI平台&#xff0c;旨在完全离线运行。它支持各种LLM运行程序&am…

17.1 图像操作

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 17.1.1 Image类 Image类为源自 Bitmap 和 Metafile 的类提供功能的抽象基类。 Image的属性大多数是只读的&#xff1a; FrameDim…

软件工程概论试题五

一、多选 1.好的软件的基本属性包括()。 A. 效率 B. 可依赖性和信息安全性 C. 可维护性 D.可接受性 正答&#xff1a;ABCD 2.软件工程的三要素是什么()? A. 结构化 B. 工具 C.面向对象 D.数据流! E.方法 F.过程 正答&#xff1a;BEF 3.下面中英文术语对照哪些是正确的、且是属…

深入解析“legit”的地道用法——从俚语到正式表达:Sam Altman用来形容DeepSeek: legit invigorating(真的令人振奋)

深入解析“legit”的地道用法——从俚语到正式表达 一、引言 在社交媒体、科技圈甚至日常对话中&#xff0c;我们经常会看到或听到“legit”这个词。比如最近 Sam Altman 在 X&#xff08;原 Twitter&#xff09;上发的一条帖子中写道&#xff1a; we will obviously deliver …

行业规范要当作业务实体画出来吗

第五元素 总觉得这些没有逻辑的实体&#xff0c;在绘制的时候不应该绘出来&#xff0c;他们没有责任啊。 比如以下:查阅规范 感觉不太对 UMLChina潘加宇 你这个规范是一个电脑系统还是一本书 第五元素 是书 UMLChina潘加宇 书没有智能&#xff0c;唯一暴露的接口是“翻”…

Cubemx文件系统挂载多设备

cubumx版本&#xff1a;6.13.0 芯片&#xff1a;STM32F407VET6 在上一篇文章中介绍了Cubemx的FATFS和SD卡的配置&#xff0c;由于SD卡使用的是SDIO通讯&#xff0c;因此具体驱动不需要自己实现&#xff0c;Cubemx中就可以直接配置然后生成SDIO的驱动&#xff0c;并将SD卡驱动和…

[Linux]从零开始的STM32MP157 U-Boot移植

一、前言 在上一次教程中&#xff0c;我们了解了STM32MP157的启动流程与安全启动机制。我们还将FSBL的相关代码移植成功了。大家还记得FSBL的下一个步骤是什么吗&#xff1f;没错&#xff0c;就是SSBL&#xff0c;而且常见的我们将SSBL作为存放U-Boot的地方。所以本次教程&…

前端 | 深入理解Promise

1. 引言 JavaScript 是一种单线程语言&#xff0c;这意味着它一次仅能执行一个任务。为了处理异步操作&#xff0c;JavaScript 提供了回调函数&#xff0c;但是随着项目处理并发任务的增加&#xff0c;回调地狱 (Callback Hell) 使异步代码很难维护。为此&#xff0c;ES6带来了…

【数据结构】_链表经典算法OJ:合并两个有序数组

目录 1. 题目描述及链接 2. 解题思路 3. 程序 3.1 第一版 3.2 第二版 1. 题目描述及链接 题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给…

C++ 字母大小写转换两种方法统计数字字符的个数

目录 题目&#xff1a; 代码1&#xff1a; 代码2&#xff1a; 题目&#xff1a; 大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100 100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。 输入格式 输入一行&#x…

终极版已激活!绿话纯净,打开即用!!!

今天我想和大家聊聊一个非常实用的工具——视频转换大师最终版。 视频转换大师终极版&#xff0c;堪称一款全能型的视频制作神器&#xff0c;集视频转换与编辑功能于一体。它搭载的视频增强器技术&#xff0c;能够最大限度地保留原始视频质量&#xff0c;甚至还能实现质量的进…

【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)

文章目录 【2025年最新版】Java JDK安装、环境配置教程 &#xff08;图文非常详细&#xff09;1. JDK介绍2. 下载 JDK3. 安装 JDK4. 配置环境变量5. 验证安装6. 创建并测试简单的 Java 程序6.1 创建 Java 程序&#xff1a;6.2 编译和运行程序&#xff1a;6.3 在显示或更改文件的…