网络科普系列之一网络概述以及物理层实现(2)
以太网的媒体访问控制器,物理层编码芯片,介质和MDI接口、信号编码、MII接口
引言
为了能适应现代信息化社会长距离、高速率和高吞吐量的通讯需求,以太网协议设计了专门的传输介质和传输编码。作为一个讨论嵌入式产品如何实现网络连接的系列科普文章(兼本人的学习笔记),本章以国际电子电气工程师协会发布的IEEE802.3为基准依据,以以太网具体使用的现状事实为切入点开展叙述。在IEEE802.3系列协议中,以太网物理层被进一步划分,如图2所示:
图2 以太网物理层的结构设计
Link speed不同的以太网物理层结构也是不同的。以百兆为例,可以看出,物理层被划分为PCS(物理编码子层)、PMA(物理媒体访问)、PMD(物理介质关联层接口,这个可选)、AUTONEG(自动协商层,这个也是可选的)这几个子层, 我觉得MDI(介质相关接口)和MEDIUM(介质)也可以认为是OSI七层模型中物理层的一部分。上图的右半部分应该是个集线器之类的东西。其中PCS、PMA、PMD和AUTONEG功通组成一个完整的物理层芯片,可以看出物理层芯片就是通过MII接口接MAC层,通过MDI接口连接介质这样完成接收波形,解码,校验,编码成MII时序再转发这样一个工作流程。
以太网使用的介质和MDI
在搭建嵌入式系统的电路设计中,当今市场上有一系列产品来实现以太网,已经非常便捷。在这里我将嵌入式设备实现以太网连接分为这么几个组件或设备:媒体访问控制器(即MAC)、物理信号编码芯片(即PHY,或称为物理层芯片)、网络变压器,网口,双绞线四个部分。本章我们将讨论日常用到的网线,网口连接器,网络变压器,物理信号编码和实现物理信号编码的芯片,不讨论除数据帧之外的各种流控帧,也不讨论半双工模式,而媒体访问控制器将放到下章数据链路层来讨论。
本章只讨论UTP双绞线(即常说的电口连接的铜质缆线)做以太网介质的情况,不讨论光纤。在实际使用中,10M/100M以太网使用的是两对差分线,而1000M则需要四对差分线。在五类和六类网线中,剥开最表面的绝缘皮,你可以发现有4对双绞线,线色为橙绿蓝综。经常可以听闻“网线只要接一半就可以用”的言论,其实这只是局限在link速率在10M和100M的情况下,而目前家庭铺设局域网都是千兆起步万兆为佳的,你书房墙上的网线面板还只接四根线就跑不到千兆了。而千兆的连接速率需要用满网线的四对共八根双绞线。注意,这里的10M/100M/1000M连接速率指的是位(比特)每秒,即Mbps,换算成字节还需要除以八。
早在我师傅教我接网线的时候,他告诉我插入RJ45水晶头的网线线序是橙绿蓝综,再交换中间某几根线。这个知识我一只没用上,因为我都是买成品线的,一个网线钳的价格就抵上好几十米的五类线,自己做还不如买的便宜和漂亮,此处手打一个眼角冒星星的表情。其实我师傅表达的意思是网线要用交叉线。在网线工作在10M/100M的连接速率时,有一对双绞线专门负责发送的,另一对专门负责接收。这种能同时进行收发的通讯方式是标准的全双工模式,不过如果物理层芯片进行速度协商时,协商成了半双工模式,那么就只有一对双绞线被使用了。嵌入式产品中最常用的网络变压器和RJ45网口连接器合一的产品,汉仁(HanRun)的HR911105A的结构图体现了这点。
图3 HR911105A的结构图
看结构图的右侧可以看出,连接插入的五类线或者六类线的那八根弹簧件,即右侧连接J1至J8的部分,只有第1,2,3,6这四根线实际连接了网络变压器(即图中两个1:1的那两个变压器),剩下的第4,5,7,8这四根线直接连接了滤波电路,实际上没有起到传输信号的作用,HR911105A是只能用在10M和100M(专指最常用的100BASE-TX标准)的连接速率下的。再看左侧的P1,P2,P3,P6这个接线PAD,就是连接物理层芯片的,可以看到他们分别标注了TD+,TD-,RD+,RD-的名称,也就设计用来发送数据的差分线的positive和negetive端,和接收数据的差分线的positive和negetive端。但是这种需要区分发送和接收两个方向的情况现在已经改变了。
由于这种接收、发送分别独立成两组线的分线设计方式,在制作网线时,需要像串口一样将两端的收和发相对而接。我师傅在教我做网线时还提到,计算机与计算机,计算机与交换机的连接,有时候需要用交叉网线,有时候需要用直连网线,我当时是一头雾水。但我后来买网线时却从没有被询问是要交叉线还是直连线,都是随便买来直接接在各个设备的网口上了。
为什么这样还是能工作正常呢?
因为现在的以太网物理层芯片支持一个功能,称为“MDI/MDIX自动翻转“,即物理层芯片的接收端和发送端可以自动对调,所以即使网线的接收发送两个方向接反了也没事。
但千兆以太网则不是这种情况,千兆以太网以UTP双绞线做介质时是要用满4对双绞线的,而且每一对都同时用作接收和发送(专指最常用的1000BASE-T标准),因此不能以10M/100M的眼光看待千兆以太网的网线,网口和物理层芯片。
上文提到的”MDI”是介质相关接口的意思,两个以太网物理层芯片之间的接口就是MDI接口,双绞线,网络变压器和物理层的MDI测都是在这个范畴。当把网线插到网口上之后,也就是物理层建立电气连接之后,物理层芯片会进行速度协商,然后会确立一个网线两端的物理层芯片和网线都能接受的速度,当然了网线质量越差协商出的速度自然越慢。但一般就五种速度,10M全双工和半双工,100M全双工和半双工,还有1000M(全双工,千兆很少会用半双工)。
MDI接口上的电信号已经是由物理层编码好的信号,可以直接发送发到介质上去了。这个介质一般指双绞线,具体由物理层的功能决定。很多物理层支持通过光模块把光纤当作介质,光纤的通信性能比双绞线更好,且价格更低,但是光模块的价格一直居高不下。
一般人们在MDI接口从物理层芯片引出后,连接双绞线之前之前,会加网络变压器进行隔离。从图3中的结构图中可以看出,HR911105A自带两对绕组网络变压器。网络变压器的的组成可以看成是一个原级线圈和次级线圈匝数一致的隔离变压器串联一个共模电感,而其存在的意义则是将设备电路和介质进行隔离和滤波。
物理层编码芯片
市场上常见的嵌入式微控制器一般都是带以太网控制器(MAC控制器)的,但是一般都不带物理层,原因还是微控制器大多采用数字电路设计,而以太网物理层含有相当的模拟电路部分,工艺不一样不适合集成。不过在图1中展示的Z490 PCH芯片应该不包含2.5G以太网控制器,也就是不包括MAC层,支持2500Mbps的link速率的MAC控制器和物理层都由英特尔的 I225-V网卡芯片实现。这里放两个嵌入式行业实际使用的例子,一是江苏沁恒设计的国产带百兆物理层的CH563单片机,它将MAC控制器和PHY集成在一个芯片上,如图4。
图4 CH563Q引脚分布图
红圈中就是以太网相关的引脚,其中RXN,RXP,TXN,TXP就是MDI接口的收发引脚,剩余的是电源和参考电阻引脚。另一个例子是RTL8211FS,由台湾瑞昱设计的千兆物理层芯片。
图5 RTL8211FS的引脚分布图
红圈中就是以太网MDI接口引脚,和CH563Q不同的是,RTL8211FS的MDI接口包含四对差分线,它支持千兆以太网。另外蓝圈中是MAC控制器连接物理层的MII接口引脚,收发各六个。
物理层芯片主要起编解码的作用,同时它也能把以太网数据帧的有用部分截取下来再转给MAC控制器。以太网上的数据是有固定的格式的,和USB等高速通讯协议类似,以太网传输数据也是以帧为单位,每帧以同步码开头以同步时钟,之后跟着SFD,表示数据即将开始,再之后就是有用的数据,而物理层在把以太网信号解码转发给MAC控制器的过程中,一般会自动去掉同步码和SFD。以太网数据帧的具体格式,会在下章的数据链路层讨论。
10BASE-T
在双绞线上,以太网帧以编码好的信号进行传输。下面讨论几种常见的,且使用双绞线做介质的以太网规范。
标准以太网是最先广泛应用的以太网标准,其速度是10Mbps。10M以太网(这里讨论使用10BASE-T标准的10M以太网)使用的是曼切斯特编码,曼切斯特编码的方式是每个周期中间的下降沿代表“0”,上升沿代表“1”。下图是曼切斯特编码的示意图和实际从双绞线上抓取的10M以太网波形。
图1-6 曼斯斯特编码的波形示意图,最下面的编码波形是以太网使用的
图1-7 10M以太网编码波形
我觉得曼切斯特编码的目的就是为了将时钟和数据调制在一起,并产生足够的跳变,跳变太少不利于交变信号传输。每个曼切斯特编码的信号周期中点必然有一次跳变,这个周期中点的跳变可以被认为是时钟,而以太网帧最开始的同步码可以用来将时钟同步,这样物理层可以很方便地将波形解码成数据。曼切斯特编码也是有缺点的,比如10M以太网波形信号只有10Mbps的比特率,却要可能会编码成20MHz的正弦信号,利用率较低。
100BASE-TX
快速以太网的标准在1980年提出,其速度是100Mbps。100M以太网(这里讨论用到最广泛的100BASE-TX标准)上的波形则不再使用曼切斯特编码。100M以太网的数据需要先经过4B5B编码,也就是每四个比特的数据会先被编码成五个比特,这样100Mbps的比特流就变成了125Mbps。4B5B编码后的数据,如果使用曼切斯特编码,就会大大超出五类线最大传输100MHz带宽的能力。100M以太网使用的是三电平编码(MLT-3),也就是信号会始终遵循从零参考点跳到正峰值,再跳到零,然后跳到负峰值,最后跳到零的一个趋势循环。原始数据经过4B5B编码,再进行三电平编码,如果是1就跳一次,如果是0就不跳,这样大大降低了最终介质上波形的频率。当然也不会降低到波形不跳的情况,经过4B5B编码的数据最少有3个“1”,最多4个“1”。不过三电平的编码也导致解码电路略微复杂。下图是100M以太网三电平编码方案的示意图、眼图和实际的以太网波形。
图1-8 100M以太网三电平编码示意图
图1-9 100M以太网信道编码眼图
图1-10 100M以太网双绞线波形
1000BASE-T
吉比特以太网(IEEE802.3ab),而千兆以太网(这里讨论使用最广泛的1000BASE-T标准)的情况就更为复杂。和百兆以太网类似,千兆以太网使用的是五电平(PAM-5)的编码方案,这里为叙述方便起见,将五个电平分别称为为:-2,-1,0,1,2五个值,一般情况下分别对应-1V/-0.5V/0V/0.5V/1V。千兆以太网不像百兆以太网的电平跳越是朝一个方向连续的,它的跳跃是随机的,-1电平既可能跳到-0.5,还可能跳到1,它的电平和数据表示关系是,一个电平表示两位数据,即00,01,10和11,还有一个电平用作向前纠错码(FEC)不表示数据。如下图是1000BASE-T的编码示意图和信号眼图。
图1-12 1000BASE-T编码示意图
图1-13 1000BASE-T信号眼图
这样看来五电平的编码方案相对于三电平,它的最终频率相对集中一些,不会看起来和三电平一样总是在变。千兆以太网(这里专指1000BASE-T)使用四对双绞线同时做收发,每对双绞线分担250Mbps的速率任务,而由于其采用五电平编码,实际四个电平有效,每个电平代表两位的编码模式,使用1000BASE-T的千兆以太网的单个双绞线上的波形频率为125MHz,勉强能在带宽为100MHz的五类线上跑。1000BASE-T规定信号要能在五类线上传输至少100米。
这里提一下另一个实现千兆以太网走双绞线的标准,即1000BASE-TX。1000BASE-TX并不是由IEEE制定的,而是由美国国家标准协会(ANSI)制定。和百兆以太网的100BASE-TX标准类似,1000BASE-TX固定使用两对双绞线来发送,两外两对双绞线来接收,这样每对差分线将分担500Mbps的速率任务,我只查到1000BASE-TX采用了8B10B编码,但并没有查到其具体采用的波形编码方式,有了解的朋友可以在评论区告诉我一下,先谢过了。可预想的是由于每对双绞线线需要实际传输625Mbps的信息码率,那么经过编码后的波形带宽怎么也难以控制在五类线的100MHz限制下,所以1000BASE-TX是需要传输在六类双绞线上的,如此一来就增加了实施成本,所以1000BASE-TX的方案没有1000BASE-T应用得广泛。
如上面叙述,使用1000BASE-T标准的千兆以太网是收发同时使用全部的四对双绞线同时进行收发的,也就是每对双绞线同时进行收发两个方向的操作。这听起来有点扯淡但实际上确实是如此操作的:物理层芯片发出去的信号,不能在自己的接收测引起响应。这需要一个hybrid电路,即混波电路。如下图所示。
图1-14 1000BASE-T的拓朴结构
这里放一个最简单的混波电路进行混波电路的原理的展示,实际物理层的混波电路会更加复杂,这里就此打住不再继续讨论。各位有兴趣的话我们单独开一章讨论混波电路。
图1-15 一个简单的混波电路实例
MII接口
物理层芯片和MAC控制器是通过介质无关接口(也有时译作媒体独立接口)连接起来的,即MII接口,如图2中提到的MII接口就处在物理层和MAC控制器之间。之所以命名为介质无关接口,我的理解是MAC控制器通过此接口连接物理层芯片,并不关心物理层实际使用的介质类型。在MAC允许物理层芯片进行自动协商的情况下,一般MAC控制器会通过MII接口和物理层沟通,获取实际协商出的速度和连接状态,并设置自身的一些参数。
MII接口有很多具体的种类,比如,标准MII接口,RMII接口,GMII接口,RGMII接口,SGMII接口等等,名字带“R”表示这是个简化的接口,带“G”表示这个接口支持千兆比特的通讯速率,带“S”表示这是个串行接口。MII接口的种类很多,IEEE802.3定义的MII接口只有少部分,很多衍生出来MII接口是其他的公司和组织定义的,但市场上也在大量使用。这里详细讨论标准MII接口,RGMII接口,RMII接口。以下面这个表格说明这三者的关系。
表1 标准MII、RMII和RGMII的基本特征
|
标准MII |
RMII |
RGMII |
支持的通讯速率 |
10M/100M |
10M/100M |
10M/100M/1000M |
发送时钟频率 |
2.5MHz/25MHz |
没有发送时钟 |
2.5MHz/25MHz/125MHz |
发送数据线根数 |
4 |
2 |
4 |
接受时钟频率 |
2.5MHz/25MHz |
没有接收时钟 CLK_REF为50MHz注[1] |
2.5MHz/25MHz/125MHz |
接收数据线根数 |
4 |
2 |
4 |
注[1]:RMII的时钟一般是由外部产生的,固定为50MHz,有的MAC控制器或者PHY芯片会从内部产生50MHz通过单独的引脚输出给RMII接口使用。
标准MII接口在10/100MH自适应的PHY上十分常见,有发送时钟(TXC)、发送数据使能(TXEN)、发送数据错误(TXER)、发送数据线(TXD[3:0])、接受时钟(RXC)、接受数据有效(RXDV)、接受数据错误(RXER)、接收数据线(RXD[3:0])、载波侦测(CRS)和冲突检测信号(COL)再加上SMI(stationmanagement interface,站点管理接口)的MDC和MDIO共18根线,如下图所示:
图1-16 MII接口(MAC控制器端视图)
和图中结构呈现不同的是,市面上微控制器的MAC控制器的MDC时钟一般是由自己发出的。
各线定义如下:
TXC:发送时钟,为TXD[3:0]、TXER、TXEN信号提供参考时钟,由PHY提供,PHY在TXC信号的上升沿进行数据采样。100M模式下时钟频率为25MHz,10M模式下时钟频率为2.5MHz;
TXEN:发送数据使能,表示发送的数据有效。TXEN信号由MAC控制器提供,与TXC保持同步。
TXER:发送数据错误,TXER有效代表在此段时间内在TXD信号线上传输的数据信号是无效的。TXER信号由MAC控制器提供,与TXC保持同步。
TXD[3:0]:发送数据,4位数据宽度,与TXC保持同步。
RXC:接收时钟,为RXD[3:0]、RXER、RXDV信号提供参考时钟,也由PHY提供,MAC控制器在RXC的上升沿采样数据。100M模式下时钟频率为25MHz,10M模式下时钟频率为2.5MHz。
RXDV:接收数据有效,由PHY驱动,与RXC保持同步,表示接收数据有效。
RXER:接收数据错误,由PHY驱动,与RXC 保持同步。RXER有效且在RXDV有效的情况下,表示 RXD信号线上传输的信号存在错误。
RXD[3:0]:接收数据,4位数据宽度,由PHY提供,与RXC保持同步。
CRS:载波侦测,由PHY提供,不需要和时钟同步。PHY工作在半双工模式下时,当接收或发送媒质中任意一个处于非空闲模式下时由PHY驱动CRS有效,在接收和发送媒质都处于空闲模式时,使CRS信号处于无效。
COL:冲突检测,由PHY驱动,不和时钟同步,当检测到媒质上有冲突的时候驱动有效,并且保持到冲突结束。
MDC:SMI接口的时钟。一般由MAC发出,MAC需要保证这个时钟的频率范围是PHY所接受的。
MDIO:SMI接口的数据,是双向接口,一般有100K的上拉电阻保证其不被驱动时在高电平状态。MDIO上的数据有固定的格式。
RMII接口
RMII接口即精简的MII接口,可以工作在10M/100M的连接速率下,收发共用一个50MHz的REF_CLK时钟,需要由外部产生并输入给MAC和PHY。数据线收发两个方向都改为2根,保留数据有效信号,其中接收有效信号和载波检测信号复用。RMII的引脚一般如下:
TXD[1:0]:发送数据线;
TX_EN:发送数据有效
RXD[1:0]:接受数据线;
CRS_DV:载波/接受数据有效引脚;
REF_CLK:50MHz参考时钟输入,需要注意的是,这个引脚在MAC控制器这一侧一般是输入引脚,而有的PHY支持从REF_CLK引脚输出50MHz而有的不支持。为了实现RMII接口,很多PHY和MAC控制器支持从额外的引脚输出50Mhz。
SMI接口的MDIO和MDC。如图所示是STM32F系列的RMII引脚描述。
图1-17 STM32F系列的RMII引脚描述
一般可以从STM32的MCO输出引脚输出50MHz。
RMII的时钟速率固定为50MHz,数据线位宽为2位,所以RMII的速率可以达到100Mbps。但工作10Mbps的连接速率时,RMII每个数据线的每位数据会保留10个周期,从而使比特流的速率降到10Mbps,如下图。
图1-18 RMII接口工作在10Mbps的数据线和时钟线上的波形。
注:黄色的波形来自一根数据线,绿色的波形来自时钟线
RGMII接口
RGMII接口即精简的千兆位传输速率的MII接口,是我本章的重点讨论接口,是嵌入式产品常用的千兆以太网MII接口。同样能达到此速率的接口还有GMII、SGMII等。RGMII也不是IEEE802.3定义的标准,它是惠普公司定义的。
与标准MII接口类似,MII接口有收发两组信号线组成,每组有一根时钟线,一根数据有效线,四根数据线组成,时钟线的频率在工作速率分别为10M/100/1000M模式时,速率分别为2.5MHz/25MHz/125MHz,其中当工作在千兆位每秒的速率时,RGMII会在时钟线的上升下降两个跳变沿对数据进行采样,也即是DDR模式。
RGMII的各个引脚如下所描述:
TXC,发送时钟,在工作速率分别为10M/100/1000M模式时,频率分别为2.5MHz/25MHz/125MHz,精度要求在±50ppm。
TXCTL,发送数据控制,在时钟上升沿时为TXEN,表示数据有效;时钟下降沿时为TXERR,表示数据错误。
TXD[3:0],发送数据信号,在时钟上升沿时为bit[3:0],时钟下降沿时为bit[7:4]。
以上的信号都是由MAC控制器发送到PHY。
RXC接收时钟,在工作速率分别为10M/100/1000M模式时,频率分别为2.5MHz/25MHz/125MHz,精度要求在±50ppm。
RXCTL,发送数据控制,在时钟上升沿时为RXDV,表示数据有效;时钟下降沿时为RXERR,表示数据错误。
RXD[3:0],接收数据信号,在时钟上升沿时为bit[3:0],时钟下降沿时为bit[7:4]。
以上的信号都是由PHY发送到MAC控制器发送到。
注意,有的MAC控制器或者PHY的TXCTL和RXCTL只有指示数据有效的作用,没有指示数据错误的作用。
如图是瑞昱经典的傻瓜交换机芯片RTL8367RB的RGMII接口。
图1-19 RTL8367RB的RGMII接口(RG2_开头的引脚)
由于采用双边沿采样的模式,因此数据线之间的等长情况更需要注意,一般应该把数据线的长度差控制在9.8mm,时钟线上时钟到达对侧的时间要比数据线延迟1.5ns到2ns之间,走线的特性阻抗建议保持50Ω。需要注意的是,有的MAC和有的PHY在芯片内部做了时钟相对数据延迟2ns的操作,那么外部的走线只需要保证等长即可。
本章总结
本章具体讨论了如何在嵌入式设备的层面实现以太网物理层,以及物理层编解码芯片,MDI和MII接口,10BASE-T/100BASE-TX/1000BASE-T介质层面的标准。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具