以太网中的MAC、MII、PHY 详解

结构

从硬件的角度看,以太网接口电路主要由MAC(Media Access Control,MAC)控制器和物理层接口PHY(Physical Layer,PHY)两大部分构成。如下图所示:

但是,在实际的设计中,以上三部分并不一定是独立分开的。由于PHY整合了大量模拟硬件,而MAC则是典型的全数字器件。考虑到芯片面积模拟/数字混合架构的原因,通常,将MAC集成进微控制器,而将phy留在片外。(现在更灵活,密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合。) 下图是网络接口内部结构图,虚框表示CPU,MAC集成在CPU中,PHY芯片通过MII接口与CPU上的MAC连接:

以上是以太网结构大框架,下面分别介绍各个部分。

MAC

MAC(Media Access Control) 即媒体访问控制层协议。MAC由硬件控制器及MAC通信协议构成。该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。MAC硬件框图如下图所示:

在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC(逻辑链路控制)层。该层协议是以太网MAC由IEEE-802.3以太网标准定义。一般以太网MAC芯片的一端连接PCI总线,另一端连接PHY芯片,中间是RGMII接口。

PHY

PHY是IEEE-802.3中定义的一个标准模块,STA(Station Management Entity,管理实体,一般为MAC或CPU)通过MIIM(MII Manage Interface)对PHY的行为,状态进行管理和控制,而具体管理和控制动作是通过读写PHY内部的寄存器实现的。PHY的节本结构如下图:

PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据)然后把并行数据转换为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去,收数据的流程反之。

PHY还有个重要的功能就是实现CSMA/CD的部分功能,它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将数据送出去。如果两个碰巧同时送除了数据,那样必将造成冲突,这时候冲突检测机制可以检测到冲突,然后等待一个随机的时间重新发送数据。

PHY寄存器的地址空间为5位,从0到31最多可以定义32个寄存器(随着芯片功能不断增加,很多PHY芯片采用分页技术来扩展地址空间以定义更多的寄存器),IEEE802.3定义了0-15这16个进村器的功能,地址16-31的寄存器留给芯片制造商自由定义,如下表所示:

注:

上图B和E表示在特定接口下,寄存器是基本的还是扩展的。例如:MII接口下只有0和1寄存器是基本的,其它的是扩展的。所为扩展是指留给IEEE以后的扩展特性用,不是给PHY厂商的扩展,PHY厂商自定义的只能是16~31号寄存器 。

在IEEE标准文档及某些PHY手册中,某寄存器的比特(bit)用X.y表示,如0.15表示第0寄存器的第15位。

相关推荐
良许Linux3 分钟前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
蜜獾云13 分钟前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小屁不止是运维14 分钟前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
bitcsljl28 分钟前
Linux 命令行快捷键
linux·运维·服务器
ac.char31 分钟前
在 Ubuntu 下使用 Tauri 打包 EXE 应用
linux·运维·ubuntu
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Youkiup1 小时前
【linux 常用命令】
linux·运维·服务器
qq_297504611 小时前
【解决】Linux更新系统内核后Nvidia-smi has failed...
linux·运维·服务器
weixin_437398211 小时前
Linux扩展——shell编程
linux·运维·服务器·bash
小燚~1 小时前
ubuntu开机进入initramfs状态
linux·运维·ubuntu