2、以太网基础:OSI模型、MAC与PHY的分工、以太网帧结构、速率与双工模式
以太网从诞生至今已走过半个世纪,从最初的10Mbps同轴电缆总线,演进到如今400Gbps甚至800Gbps的光纤与铜缆互连。无论速率如何提升,其底层架构始终遵循一套清晰的分层逻辑。对于硬件工程师而言,理解OSI模型与MAC/PHY的分工,是进行芯片选型、原理图设计、信号完整性与功耗分析的前提。本节将系统梳理以太网的分层架构、帧结构、速率演进与双工模式,帮助你在设计之初就建立起正确的全局观。
2.1 OSI模型与以太网分层映射
OSI(开放系统互连)参考模型将网络通信划分为七层,从物理介质到应用软件逐层抽象。以太网技术主要涉及最底部的两层:物理层(Layer 1)和数据链路层(Layer 2)。物理层负责将原始比特流转换为适合在介质上传输的电信号或光信号;数据链路层则负责将比特流组织成帧,实现介质访问控制、错误检测和流量控制。
在实际工程中,我们更常接触的是IEEE 802.3标准定义的以太网分层结构。该结构将OSI的物理层细分为PCS(物理编码子层)、PMA(物理介质附加子层)、PMD(物理介质相关子层)和MDI(介质相关接口);将数据链路层细分为MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。这种细分对于芯片设计至关重要——不同厂商的PHY芯片可能只实现部分子层,而MAC则通常集成在SoC或FPGA中。
| OSI层 | IEEE 802.3子层 | 硬件实现 | 主要功能 |
|---|---|---|---|
| 数据链路层 | LLC | 软件/驱动 | 逻辑链路控制、复用上层协议 |
| 数据链路层 | MAC | SoC/FPGA/独立MAC芯片 | 帧封装/解封装、地址过滤、CRC校验 |
| 物理层 | PCS | PHY芯片 | 编码/解码(8B/10B、64B/66B)、扰码 |
| 物理层 | PMA | PHY芯片 | 串行/解串、时钟恢复、均衡 |
| 物理层 | PMD | PHY芯片 | 信号驱动、接收、电平转换 |
| 物理层 | MDI | 连接器/光模块 | 物理接口(RJ45、SFP+等) |
2.2 MAC与PHY的分工与协作
MAC与PHY的分工是硬件设计中最容易混淆的部分。简单来说,MAC负责“帧”的智能处理,PHY负责“比特”的物理传输。MAC子层完成帧的组装与解析、源/目的MAC地址的识别、VLAN标签处理、流量控制(PAUSE帧)以及CRC校验。PHY芯片则负责将MAC传来的并行数据转换为串行比特流,进行线路编码(如1000BASE-T的4D-PAM5编码),并通过双绞线或光纤发送出去。
两者之间的接口标准决定了硬件设计的复杂度。常见的接口包括:
- MII(介质独立接口):100Mbps速率,4位数据总线,时钟25MHz,引脚数约16根。
- RMII(精简MII):100Mbps速率,2位数据总线,时钟50MHz,引脚数约10根,适合MCU。
- GMII(千兆MII):1000Mbps速率,8位数据总线,时钟125MHz,引脚数约24根。
- RGMII(精简GMII):1000Mbps速率,4位数据总线,DDR双沿采样,时钟125MHz,引脚数约12根,目前应用最广。
- SGMII(串行GMII):1000Mbps速率,1对差分线,时钟625MHz,引脚数仅4根,适合高速背板。
设计要点:选择MAC-PHY接口时,需综合考虑引脚预算、PCB布线难度、功耗和成本。RGMII是当前性价比最高的选择,但需要注意其DDR时序约束——数据在时钟的上升沿和下降沿均被采样,对PCB走线等长要求较高。SGMII虽然引脚少,但需要额外的SerDes通道,且PHY芯片成本略高。
2.3 以太网帧结构详解
以太网帧是数据链路层的基本传输单元。理解帧结构对于调试网络问题、分析抓包数据至关重要。一个标准的以太网帧(IEEE 802.3格式)包含以下字段:
| 前导码(7B) | SFD(1B) | 目的MAC(6B) | 源MAC(6B) | 长度/类型(2B) | 数据(46-1500B) | FCS(4B) |
- 前导码(Preamble):7字节的0x55,用于接收端的时钟同步。
- SFD(帧起始定界符):1字节的0xD5,标志帧的开始。
- 目的/源MAC地址:各6字节,全球唯一(由IEEE分配OUI)。
- 长度/类型字段:若值小于0x0600(1536),表示数据长度;若大于等于0x0600,表示上层协议类型(如0x0800为IPv4)。
- 数据字段:最小46字节(保证碰撞检测),最大1500字节(MTU)。
- FCS(帧校验序列):4字节CRC32,覆盖从目的MAC到数据字段的所有内容。
在硬件设计中,MAC芯片通常自动生成前导码、SFD和FCS,并自动剥离接收帧的相应字段。因此,软件驱动看到的帧是从目的MAC地址开始的。但PHY芯片在传输时会将整个帧(包括前导码)进行编码发送,接收端PHY则负责恢复时钟并剥离前导码。
经验提醒:在调试PHY环回(Loopback)测试时,注意区分MAC环回和PHY环回。MAC环回在MAC内部完成,不经过PHY;PHY环回则在PHY的PMA子层完成,可以验证PHY的收发通路。若PHY环回正常但MAC环回失败,问题大概率出在MAC-PHY接口时序上。
2.4 速率与双工模式
以太网速率经历了10Mbps、100Mbps、1Gbps、10Gbps、25Gbps、40Gbps、100Gbps、400Gbps的演进。不同速率对应不同的物理层编码方案和传输介质要求。双工模式则分为半双工(共享介质,同一时刻只能单向传输)和全双工(点对点连接,可同时收发)。现代以太网几乎全部采用全双工模式,半双工仅存在于早期10BASE-T和100BASE-TX的集线器网络中。
PHY芯片通过自动协商(Auto-Negotiation)机制与对端设备协商速率和双工模式。自动协商通过发送/接收快速链路脉冲(FLP)来实现,协商结果存储在PHY的寄存器中。硬件工程师需要特别注意:
- 若对端设备不支持自动协商(如某些工业交换机),PHY必须手动配置为固定速率和全双工模式。
- 速率不匹配会导致链路不通或大量CRC错误;双工不匹配会导致严重丢包和延迟。
- 在PCB设计时,PHY的时钟源(通常为25MHz或50MHz晶振)精度需满足±50ppm,否则会影响链路稳定性。
| 速率 | 标准 | 编码方式 | 介质 | 典型PHY接口 |
|---|---|---|---|---|
| 10Mbps | 10BASE-T | 曼彻斯特编码 | Cat3及以上双绞线 | MII |
| 100Mbps | 100BASE-TX | 4B/5B + MLT-3 | Cat5双绞线 | MII/RMII |
| 1Gbps | 1000BASE-T | 4D-PAM5 | Cat5e及以上 | GMII/RGMII/SGMII |
| 10Gbps | 10GBASE-T | DSQ128 | Cat6a及以上 | XFI/SFI |
2.5 实战场景:RGMII接口时序调试
在某工业主控板项目中,我们使用i.MX8M Plus SoC的MAC连接Marvell 88E1512 PHY芯片,接口为RGMII。板卡在实验室环境工作正常,但部署到客户现场后出现间歇性网络丢包,且丢包率随温度升高而增加。
初步排查:通过MDIO读取PHY寄存器,发现链路已协商为1000Mbps全双工,但接收错误计数(Register 0x15)持续增长。进一步抓包发现,错误帧均为CRC校验失败,且帧长度异常。
分析判断:CRC错误通常由物理层信号质量问题或MAC-PHY接口时序问题引起。由于实验室环境正常,现场温度更高(约60℃),怀疑是RGMII的时钟-数据偏斜(Skew)在高温下恶化。RGMII规范要求数据相对于时钟的建立/保持时间满足一定裕量,而PCB走线长度差和温度漂移会改变这一裕量。
解决方案:在SoC的IOMUX配置中,启用RGMII的TX时钟延迟(TX_CLK Delay)和RX时钟延迟(RX_CLK Delay)调整功能。通过反复试验,将TX延迟设置为0.5ns,RX延迟设置为1.0ns,并重新编译设备树。修改后,在高温箱中进行72小时老化测试,丢包率降为零。
复盘经验:RGMII接口的时序裕量设计是高速数字电路中的常见陷阱。建议在原理图设计阶段就预留串阻(22Ω-33Ω)和调试焊盘,便于后期调整。同时,PCB布线时TX和RX差分对应分别等长,且时钟线应比数据线长0.5-1mm(约对应0.25-0.5ns延迟),以补偿芯片内部的时钟偏斜。
风险提示:不要盲目依赖PHY芯片的“自适应”功能。某些PHY在检测到链路异常时会自动降速或切换双工模式,这虽然能保持链路不断,但会显著降低吞吐量。在关键设备中,建议将自动协商关闭,强制设置为预期速率和全双工模式,并通过软件监控链路状态。
2.6 常见误区与总结
在以太网硬件设计中,以下误区需要特别警惕:
- 误区一:认为PHY芯片自带MAC功能。实际上,绝大多数PHY芯片只实现物理层功能,需要外部MAC配合。少数“集成MAC+PHY”的芯片(如Microchip LAN9303)是例外,但通常用于低端应用。
- 误区二:忽略MDIO管理接口的上拉电阻。MDIO和MDC信号需要上拉电阻(通常4.7kΩ至10kΩ)到IOVDD,否则PHY寄存器读写不稳定。
- 误区三:将PHY的电源域混淆。PHY通常有多个电源域:AVDD(模拟)、DVDD(数字)、IOVDD(接口)。上电顺序要求AVDD先于DVDD,否则可能损坏芯片。
- 误区四:忽视PHY的复位时序。PHY的复位信号(RESET_N)需要保持至少10ms的低电平,且在时钟稳定后才能释放。复位释放后,PHY还需要约5ms完成内部初始化。