PYH与MAC的桥梁MII/MIIM

news/2025/1/31 19:50:16/

        在学习车载互联网时,看到了一句话,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.ppmy.cn/news/1568224.html

相关文章

sem_init的概念和使用案例

sem_init 是 POSIX 线程库中用于初始化未命名信号量&#xff08;unnamed semaphore&#xff09;的函数&#xff0c;常用于多线程或多进程间的同步。以下是其概念和使用案例的详细说明&#xff1a; 概念 函数原型&#xff1a; #include <semaphore.h>int sem_init(sem_t …

服务器机房迁移,centos系统root无法登录,也无法联网等问题

介绍 服务器迁移之后问题太多了&#xff0c;就关了一次机而已。开机之后root也没法登录&#xff0c;网络也无法访问。这个问题我们整整修复了两天两夜。废话不多说了。过程就不记录了&#xff0c;直接写方法&#xff0c;以免下次再遇到此问题。 问题记录 root账号无法登录 …

JavaScript系列(43)--依赖注入系统实现详解

JavaScript依赖注入系统实现详解 &#x1f489; 今天&#xff0c;让我们深入探讨JavaScript的依赖注入系统实现。依赖注入是一种设计模式&#xff0c;它通过将依赖关系的创建和管理从代码中分离出来&#xff0c;提高了代码的可维护性和可测试性。 依赖注入基础概念 &#x1f…

TVS选型设计

TVS选型距离 以实际的案例举例。电路的正常工作电压VCC是24V&#xff0c;最高工作电压Vmax是26V,后级电路可承受的最高瞬态电压为50V&#xff0c;实验的测试波形为 8/20μs波形&#xff0c;测试电压500V&#xff0c;测试电源内阻及PPTC的静态电阻合计为2Ω。根据上述信息选择合…

【SpringMVC】——Json数据交互处理

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

用 Scoop 优雅管理 Windows 软件:安装、配置与使用全指南

本篇将主要讲讲如何用「Scoop」优雅管理 Windows 软件&#xff1a;安装、配置与使用全指南 一、Scoop 是什么&#xff1f; Scoop 是一款专为 Windows 设计的命令行软件包管理工具&#xff0c;它能让你像 Linux 系统一样通过命令快速安装、更新和卸载软件。其核心优势包括&…

Jenkins下载 Maven、Allure 插件并且配置环境

文章目录 Jenkins在插件中心下载 maven、allure插件maven插件下载allure插件下载 配置maven、allure 往期推荐&#xff1a; 最新! 在 Linux上搭建Jenkins环境! Jenkins邮件通知的详细配置含邮件通知模板&#xff01; Jenkin配置企业微信通知 Jenkins在插件中心下载 maven、…

[C语言日寄] <stdio.h> 头文件功能介绍

在C语言的世界里&#xff0c;<stdio.h> 是一个极其重要的头文件&#xff0c;它提供了标准输入输出功能&#xff0c;是C语言程序与用户交互的核心工具。今天&#xff0c;我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…