一文搞定以太网PHY、MAC及其通信接口 - 知乎切换模式写文章登录/注册一文搞定以太网PHY、MAC及其通信接口Linux内核库本文主要介绍以太网的 MAC 和 PHY,以及之间的 MII(Media Independent Interface ,媒体独立接口)和 MII 的各种衍生版本——GMII、SGMII、RMII、RGMII等。好文推荐:万字讲解你写的代码是如何跑起来的?什么是Linux内核,如何搞懂Linux内核?(Linux内核学习笔记合集来了!)字节终面:CPU 是如何读写内存的?全网最牛Linux内核分析--Intel CPU体系结构一文让你读懂Linux五大模块内核源码,内核整体架构设计(超详细)嵌入式前景真的好吗?那有点悬!一文教你如何使用GDB+Qemu调试Linux内核Linux内核必读五本书籍(强烈推荐)全网独一无二Linux内核Makefle系统文件详解(一)(纯文字代码)带你深度了解Linux内核架构和工作原理!如何读懂GDB底层实现原理(从这几点入手~)一文彻底理解Memory barrier(内存屏障)一篇文带你搞懂,虚拟内存、内存分页、分段、段页式内存管理(超详细)简介从硬件的角度看,以太网接口电路主要由MAC(Media Access Control)控制器和物理层接口PHY(Physical Layer,PHY)两大部分构成。如下图所示:DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数据传输中。但是,在实际的设计中,以上三部分并不一定独立分开的。由于,PHY整合了大量模拟硬件,而MAC是典型的全数字器件。考虑到芯片面积及模拟/数字混合架构的原因,通常,将MAC集成进微控制器而将PHY留在片外。更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合。可分为下列几种类型:CPU集成MAC与PHY。目前来说并不多见CPU集成MAC,PHY采用独立芯片。比较常见CPU不集成MAC与PHY,MAC与PHY采用集成芯片。比较常见MAC及PHY工作在OSI七层模型的数据链路层和物理层。具体如下:什么是MACMAC(Media Access Control)即媒体访问控制子层协议。该部分有两个概念:MAC可以是一个硬件控制器 及 MAC通信以协议。该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。MAC硬件大约就是下面的样子了:在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层。在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC(逻辑链路控制)层。该层协议是以太网MAC由IEEE-802. 3以太网标准定义。以太网数据链路层其实包含MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。一块以太网卡MAC芯片的作用不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的数据交换。MAC从PCI总线收到IP数据包(或者其他网络层协议的数据包)后,将之拆分并重新打包成最大1518Byte、最小64Byte的帧。这个帧里面包括了目标MAC地址、自己的源MAC地址和数据包里面的协议类型(比如IP数据包的类型用80表示,最后还有一个DWORD(4Byte)的CRC码。可是目标的MAC地址是哪里来的呢?这牵扯到一个ARP协议(介乎于网络层和数据链路层的一个协议)。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:“谁是http://xxx.xxx.xxx.xxx这个IP地址的主人?”因为是广播包,所有这个局域网的主机都收到了这个ARP请求。收到请求的主机将这个IP地址和自己的相比较,如果不相同就不予理会,如果相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:“我是这个IP地址的主人”。这个包里面就包括了他的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。(其它的协议如IPX/SPX也有相应的协议完成这些操作)。IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表。由驱动程序和操作系统完成。以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上,它们之间是通过MII接口链接的。一个MAC的结构图如下图所示:什么是PHYPHY((Physical Layer,PHY))是IEEE802.3中定义的一个标准模块,STA(station management entity,管理实体,一般为MAC或CPU)通过SMI(Serial Manage Interface)对PHY的行为、状态进行管理和控制,而具体管理和控制动作是通过读写PHY内部的寄存器实现的。一个PHY的基本结构如下图:PHY是物理接口收发器,它实现OSI模型的物理层。IEEE-802.3标准定义了以太网PHY。包括MII/GMII(介质独立接口)子层、PCS(物理编码子层)、PMA(物理介质附加)子层、PMD(物理介质相关)子层、MDI子层。它符合IEEE-802.3k中用于10BaseT(第14条)和100BaseTX(第24条和第25条)的规范。注:PHY寄存器在IEEE802.3标准的 22.2.4 Management functions 节有介绍,但不涉及所有的寄存器,个别寄存器需要到其它章节中看,当然,文档里面也提到该在哪里找到哪个寄存器。【文章福利】小编推荐自己的Linux内核技术交流群:【749907784】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!零声Linuxc/c++高级开发【免费直播公开课】:零声白金VIP体验卡(含基础架构/高性能存储/golang/QT/音视频/Linux内核)课程:什么是MIIMII(Media Independent Interface)即媒体独立接口,MII 接口是 MAC 与 PHY 连接的标准接口。它是 IEEE-802.3 定义的以太网行业标准。MII 接口提供了 MAC 与 PHY 之间、PHY 与 STA(Station Management)之间的互联技术,该接口支持 10Mb/s 与 100Mb/s 的数据传输速率,数据传输的位宽为 4 位。MII 接口如下图所示:MII接口主要包括四个部分。一是从MAC层到PHY层的发送数据接口,二是从PHY层到MAC层的接收数据接口,三是从PHY层到MAC层的状态指示信号,四是MAC层和PHY层之间传送控制和状态信息的MDIO接口。MII 包括一个数据接口,以及一个 MAC 和 PHY 之间的管理接口:TX_CLK(transmit clock):TX_CLK (Transmit Clock) 是一个连续的时钟信号(即系统启动,该信号就一直存在),它是 TX_EN、TXD、TX_ER(信号方向为从 RS 到 PHY)的参考时钟,TX_CLK 由 PHY 驱动 TX_CLK 的时钟频率是数据传输速率的 25%,偏差 ±100ppm。例如,100Mb/s 模式下,TX_CLK 时钟频率为 25MHz,占空比在 35% 至 65% 之间。TXD<3:0>(transmit data):TXD 由 RS 驱动,同步于 TX_CLK,在 TX_CLK 的时钟周期内,并且TX_EN 有效,TXD 上的数据被 PHY 接收,否则 TXD 的数据对 PHY 没有任何影响。TX_ER(transmit coding error):TX_ER 同步于 TX_CLK,在数据传输过程中,如果 TX_ER 有效超过一个时钟周期,并且此时TX_EN 是有效的,则数据通道中传输的数据是无效的,没用的。注:当 TX_ER 有效并不影响工作在 10Mb/s 的 PHY 或者 TX_EN 无效时的数据传输。在 MII 接口的连线中,如果 TX_ER 信号线没有用到,必须将它下拉接地。TX_EN:发送使能。TX_EN 由 Reconciliation 子层根据 TX_CLK 上升沿同步进行转换。RX_CLK:它与 TX_CLK 具有相同的要求,所不同的是它是 RX_DV、RXD、RX_ER(信号方向是从 PHY 到 RS)的参考时钟。RX_CLK 同样是由 PHY 驱动,PHY 可能从接收到的数据中提取时钟 RX_CLK,也有可能从一个名义上的参考时钟(e.g., the TX_CLK reference)来驱动RX_CLK。RXD<3:0>(receive data):RXD由RS驱动,同步于 RX_CLK,在 RX_CLK 的时钟周期内,并且 RX_DV 有效,RXD 上的数据被RS 接收,否则 RXD 的数据对 RS 没有任何影响。RX_ER(receive error):RX_ER 同步于 RX_CLK,其在 RX 通道中的作用类似于 TX_ER 对于 TX 通道数据传输的影响。RX_DV(Receive Data Valid):RXD_DV 同步于 RX_CLK,被 PHY 驱动,它的作用如同于发送通道中的 TX_EN,不同的是在时序上稍有一点差别:为了让数据能够成功被RS接收,要求RXD_DV有效的时间必须覆盖整个 FRAME 的过程,即starting no later than the Start Frame Delimiter (SFD) and excluding any End-of-Frame delimiter。MII以4位半字节方式传送数据双向传输,时钟速率25MHz。其工作速率可达100Mb/s。COL(collision detected):COL 不需要同步于参考时钟。CRS(carrier sense):CRS 不需要同步于参考时钟,只要通道存在发送或者接收过程,CRS 就需要有效。MDC:由站管理实体向 PHY 提供,作为在 MDIO 信号上传送信息的定时参考。MDC 是一种非周期性的信号,没有最高或最低时间。无论 TX_CLK 和 RX_CLK 的标称周期如何,MDC 的最小高低时间应为 160 ns,MDC 的最小周期为 400 ns。MDIO:是 PHY 和 STA 之间的双向信号。它用于在 PHY 和 STA 之间传输控制信息和状态。控制信息由 STA 同步地针对 MDC 驱动并且由 PHY 同步地采样。状态信息由 PHY 针对 MDC 同步驱动并由 STA 同步采样。PHY 里面的部分寄存器是 IEEE 定义的,这样PHY把自己的目前的状态反映到寄存器里面。MAC 通过 SMI 总线不断的读取PHY 的状态寄存器以得知目前 PHY 的状态。例如连接速度、双工的能力等。当然也可以通过 SMI 设置 PHY的寄存器达到控制的目的。例如流控的打开关闭、自协商模式还是强制模式等。不论是物理连接的MII总线和 SMI 总线,还是 PHY 的状态寄存器和控制寄存器都是由IEEE的规范的。因此不同公司的 MAC 和 PHY 一样可以协调工作。当然为了配合不同公司的 PHY 的自己特有的一些功能,驱动需要做相应的修改。MII 支持 10Mbps 和 100Mbps 的操作,一个接口由 14 根线组成,它的支持还是比较灵活的。但是有一个缺点是因为它一个端口用的信号线太多,如果一个 8 端口的交换机要用到 112 根线,16 端口就要用到 224 根线,到 32 端口的话就要用到 448 根线。一般按照这个接口做交换机是不太现实的。所以现代的交换机的制作都会用到其它的一些从 MII 简化出来的标准,比如 RMII、SMII、GMII等。什么是RMII简化媒体独立接口是标准的以太网接口之一,比 MII 有更少的 I/O 传输。RMII 口是用两根线来传输数据的,MII 口是用 4 根线来传输数据的,GMII 是用 8 根线来传输数据的。MII/RMII 只是一种接口,对于10Mbps 线速,MII 的时钟速率是 2.5MHz 就可以了,RMII 则需要 5MHz;对于 100Mbps 线速,MII 需要的时钟速率是 25MHz,RMII 则是 50MHz。MII/RMII 用于传输以太网包,在 MII/RMII 接口是 4/2bit 的,在以太网的PHY里需要做串并转换,编解码等才能在双绞线和光纤上进行传输,其帧格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN)。以太网帧的格式为:前导符 + 开始位 + 目的 mac 地址 + 源 mac 地址 + 类型/长度 + 数据 + padding(optional) + 32bitCRC。如果有 vlan,则要在类型/长度后面加上 2 个字节的 vlan tag,其中 12bit 来表示vlan id,另外,4bit 表示数据的优先级!什么是GMIIGMII是千兆网的MII接口,这个也有相应的RGMII接口,表示简化了的GMII接口。GMII 采用 8 位接口数据,工作时钟125MHz,因此传输速率可达 1000Mbps。同时兼容 MII 所规定的10/100 Mbps工作方式。GMII 接口数据结构符合IEEE以太网标准,该接口定义见 IEEE 802.3-2000。什么是RGMIIRGMII(Reduced Gigabit Media Independant Interface),精简GMII接口。相对于GMII相比,RGMII具有如下特征:发送/接收数据线由8条改为4条TX_ER和TX_EN复用,通过TX_CTL传送RX_ER与RX_DV复用,通过RX_CTL传送1 Gbit/s速率下,时钟频率为125MHz100 Mbit/s速率下,时钟频率为25MHz10 Mbit/s速率下,时钟频率为2.5MHz信号定义如下:虽然RGMII信号线减半,但TXC/RXC时钟仍为125Mhz,为了达到1000Mbit的传输速率,TXD/RXD信号线在时钟上升沿发送接收GMII接口中的TXD[3:0]/RXD[3:0],在时钟下降沿发送接收TXD[7:4]/RXD[7:4],并且信号TX_CTL反应了TX_EN和TX_ER状态,即在TXC上升沿发送TX_EN,下降沿发送TX_ER,同样的道理试用于RX_CTL,下图为发送接收的时序:什么是SMISMI:串行管理接口(Serial Management Interface),通常直接被称为MDIO接口(Management Data Input/Output Interface)。MDIO最早在IEEE 802.3的第22卷定义,后来在第45卷又定义了增强版本的MDIO,其主要被应用于以太网的MAC和PHY层之间,用于MAC层器件通过读写寄存器来实现对PHY层器件的操作与管理。MDIO主机(即产生MDC时钟的设备)通常被称为STA(Station Management Entity),而MDIO从机通常被称为MMD(MDIO Management Device)。通常STA都是MAC层器件的一部分,而MMD则是PHY层器件的一部分。MDIO接口包括两条线,MDIO和MDC,其中MDIO是双向数据线,而MDC是由STA驱动的时钟线。MDC时钟的最高速率一般为2.5MHz,MDC也可以是非固定频率,甚至可以是非周期的。MDIO接口只是会在MDC时钟的上升沿进行采样,而并不在意MDC时钟的频率(类似于I2C接口)。如下图所示。QA网卡的MAC和PHY间的关系?网卡工作在osi的最后两层,物理层和数据链路层,物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口.物理层的芯片称之为PHY.数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能.以太网卡中数据链路层的芯片称之为MAC控制器.很多网卡的这两个部分是做到一起的.他们之间的关系是pci总线接mac总线,mac接phy,phy接网线(当然也不是直接接上的,还有一个变压装置).PHY和MAC之间如何进行沟通通过IEEE定义的标准的MII/GigaMII(Media Independed Interfade,介质独立界面)界面连接MAC和PHY。这个界面是IEEE定义的。MII界面传递了网络的所有数据和数据的控制。而MAC对PHY的工作状态的确定和对PHY的控制则是使用SMI(Serial Management Interface)界面通过读写PHY的寄存器来完成的。PHY里面的部分寄存器也是IEEE定义的,这样PHY把自己的目前的状态反映到寄存器里面,MAC通过SMI总线不断的读取PHY的状态寄存器以得知目前PHY的状态,例如连接速度,双工的能力等。当然也可以通过SMI设置PHY的寄存器达到控制的目的,例如流控的打开关闭,自协商模式还是强制模式等。我们看到了,不论是物理连接的MII界面和SMI总线还是PHY的状态寄存器和控制寄存器都是有IEEE的规范的,因此不同公司的MAC和PHY一样可以协调工作。当然为了配合不同公司的PHY的自己特有的一些功能,驱动需要做相应的修改。原文作者:【一起学嵌入式】原文地址:一文搞定以太网PHY、MAC及其通信接口编辑于 2023-11-15 14:56・IP 属地湖南Mac赞同 12添加评论分享喜欢收藏申请-1.4
%����
2 0 obj
<>stream
x��]Y�$ɑ~�_ς�����!�+�Ѡ�e��\�z�F���}�gdUef���V5Ct�[D�ef����W��o�'f���?V�^}�B��˛��_?~\?���7�8���z{�(���o����G�����̵j�)��_>*e�Rޖ�=��p�K�Z)�k��e�K���]>/��[>���_�0��[wJ7��S��f�/]�nS!�+k������O�$��|D�^=���IZіZ�������4 fߪ�[e�ލ&?��0��{7�1Ƴ,���cV��=�kw�;iQ��� 0A�tFO��fW[l� �0)�{��f\xeZ��u��B�v�x ΌJ��r!l��-�]�j�{l.����[�{5Pi{Q 6릺�� �?z���ʏ�B��6icr�!ʜ:��X�����@���N�;G��)ުy��uβ�~Ȩ-�dP�@9�Źm���ZwI@�����d4�T� �:�;}{P:�"�u��;� .�b�@� A�?g)�e� �J����ؠ���t�A�Y�>dw��`��������B��{�J��U�F�(p�A=�<̊Miy �^��|A2Lxօ�a�%剧5* ��ٝ"����x��}��_u�/ȩ��\.��K����Fs�o>�Zo��*�����W#{�Wc�u^�n(���~��cLz#��4(���2�<�٠�V�a��M�Q�桻h{��Ep�<")�va��jh�̠���n0ÿ�O��Ӹ�ØP���1Gw��Wڼ�h98Zj�hO�1s���}P�D��cz�<���g��]�}�껦�������i{"��\ �_C�Sp�*m6_� �l���C�o�p��)#p�S����?��b�?W���P����%�����0�m�S�pF���`�l�@��1��p�xsČ6�mx�>?Ȋ�]t�����<�{��r������N�.�S��c�:�3�����.���]����^�Ϊ�����[������۫w�F��� F��Q#*�my]9��2�Av���9��� `��B��F�����߄��:;I�g�-\�8��|M������0����p�0�إ�U?S���I���~�"Kx������r���f��Y�s@���Ȓ�A����FC&3%f�Ϧ����Z{�u��H�����Vgd'���"Fu��}�ji��}}�m�����h_�*��������~��o?����ʓ!]�~Sǒ�,[�����u_�Ǩ\8�x� N�Ю��z r��e��ĺ�x�M}R�?*tՀ���7M{�ʈb����B8�Em$��NXaج �1[��?}���W�|� d�W秕d��\�CPj�j��w�d�Qv3�ڪ�Yy�e�6�_c�_��+�N�����A�ܘ��$Ŝ.�Rf�l�m6ܪ���e����^�֛w�5؋�/�FP���4[ҁOl9�VX�4�b(�cP̵dU��2�è{o="���Z�F��g�4�zc���W�1*���pc,Z��B�uB �������_;����,��`fr��J���V��jn ���/����n"���M�ڛ�K+it���+������*Z[��K'4�Emf¨zm���Sy�);]�P�\���i�yK�3���UAb/W�SI�NxZ̽ɝ`�S9�zq�q�T��z����c,�8Б<�%���@1��X���p����N0����;ve�s砩�9h0 �ޝZ���N�r�v��ԴL�r��Դ ��#[�,��.uB�!�P������M�i�x��M=r�Pp6��#�~�2R�߭1����/k�2XY�6@wpE��Y�!Ŏ�D�R"�� Y:A��8?Ka'�[@��V�>Y��6�Ajp�jE��d#0xc)��TJ�>d��'/�3a�T��
o��`QI�`NW�c't��9��uZ�NH�)� /�<�\xΔ>;>UX��S��U-�ct!�U�q)��0��E{+�7 ��N��A�����/R:�4q�A;�,��g�9�>`!�$��}�v���Y,X'�g-�F�:9^W V*� ��%)iL��hPTa�M�D�:'W��)&k�dY4Dk:hn�bz��E�iw�^J;�x�����O�����N����8m�
����r��iᣠ�
!+����F-��ɞev���H?[|�HjLr��MxZ�@������(��@V(��qt��k�����Iqi}�gr��J�9� j��%h�4�4��k^�����j1�Z`ٯ����/[���DAM��I _E������C��(w(�6W�"�G��s�
�F>�2L���;�(����|�e���F�� ��#ݜ&���3� zT�R�1�`���{u��#`\L�^'�/�(�/����
��r�ďk��>�2�����O�"����^��ğ��5A �1rh