第二讲:交换机硬件架构——交换芯片内部框图与CPU通信接口
大家好,欢迎来到第二讲。
上一讲我们聊了车载以太网的整体框架。今天咱们深入一点,看看交换机最核心的部件——交换芯片。说白了,交换芯片就是交换机的“大脑”。你想想看,所有数据帧都要经过它处理,它的架构直接决定了交换机的性能和功能。
2.1 交换芯片内部框图
先看一张典型的交换芯片内部框图。我习惯把它分成几个关键模块:MAC、PHY、SerDes、Packet Processor。嗯,这几个模块缺一不可。
| 模块 | 功能 | 我的经验 |
|---|---|---|
| MAC | 媒体访问控制,负责帧封装/解封装、地址过滤 | 车载场景下,MAC的流控机制很重要,我曾经遇到过因为流控配置不当导致丢包 |
| PHY | 物理层,负责信号编码、解码、时钟恢复 | 100BASE-T1和1000BASE-T1的PHY差异很大,选型时要特别注意 |
| SerDes | 串行器/解串器,用于高速串行传输 | SerDes的预加重和均衡参数调不好,眼图就是闭的 |
| Packet Processor | 报文处理器,负责转发决策、ACL、QoS | 这是交换芯片的灵魂,我调试过最久的就是它 |
2.2 MAC模块详解
MAC模块,全称是Media Access Control。它干的事很纯粹:把上层来的数据封装成以太网帧,或者反过来把收到的帧解封装。
在车载环境里,MAC模块有几个关键点要注意:
- MAC地址学习:交换芯片会维护一张MAC地址表。我记得有一次,地址表老化时间设得太短,导致频繁泛洪,网络性能直线下降。
- 流控机制:支持IEEE 802.3x流控。我个人习惯在调试阶段先关闭流控,等基本功能调通再打开。
- 帧校验:CRC校验是必须的。我曾经碰到过因为PCB走线问题导致CRC错误帧暴增,排查了好久。
2.3 PHY模块与SerDes
PHY模块负责物理层的信号处理。车载以太网常用的是100BASE-T1和1000BASE-T1,它们只用一对差分线,和传统四对线的以太网完全不同。
SerDes呢,负责把并行数据转成串行,或者反过来。为什么需要它?因为高速信号在PCB上走并行线,时序很难对齐。串行传输就简单多了。
这里有个坑:SerDes的参考时钟必须干净。我曾经遇到过一个案例,SerDes老是失锁,最后发现是时钟源旁边的DC-DC干扰太大。嗯,布局布线真的很重要。
2.4 Packet Processor——交换芯片的灵魂
Packet Processor,报文处理器,这是交换芯片最复杂的模块。它负责:
- 转发决策:根据目的MAC地址查表,决定从哪个端口发出去
- ACL:访问控制列表,可以过滤特定报文
- QoS:服务质量,给不同报文分配优先级
- VLAN处理:打标签、去标签、转发
说白了,你配置的交换规则,最终都是在这个模块里执行的。我调试Packet Processor时,习惯先配一个最简单的转发规则——所有端口之间互相转发。通了之后,再逐步加上ACL、VLAN这些复杂功能。
2.5 CPU与交换芯片的通信接口
CPU和交换芯片之间怎么通信?主要有三种接口:PCIe、RGMII、MDIO。每种接口的用途不同,我分别说说。
| 接口 | 用途 | 速率 | 我的建议 |
|---|---|---|---|
| PCIe | 高速数据通道,用于批量数据传输 | 数Gbps | 适合需要大量数据交换的场景,比如网关 |
| RGMII | MAC到PHY的接口,也用于CPU和交换芯片 | 1000Mbps | 车载常用,调试简单 |
| MDIO | 管理接口,用于配置PHY寄存器 | 2.5MHz | 只用于管理,不传数据 |
2.6 PCIe接口
PCIe是高速串行总线。在车载交换机里,它通常用于CPU和交换芯片之间的批量数据交换。比如,CPU需要把路由表批量下发到交换芯片,或者从交换芯片读取统计信息。
PCIe的调试相对复杂。我遇到过一个问题:PCIe链路训练不成功,老是停留在Detect状态。后来发现是参考时钟的抖动超标。嗯,时钟质量真的是PCIe的生命线。
2.7 RGMII接口
RGMII是Reduced Gigabit Media Independent Interface的缩写。它用4根数据线,在时钟的双沿采样,实现千兆速率。
RGMII的调试要点:
- 时钟相位:RGMII对时钟和数据线的相对延迟很敏感。我曾经因为PCB走线等长没做好,导致数据采样出错。
- 电压匹配:RGMII有3.3V和1.8V两种电压,不能混用。
- IDDQ测试:上电后先测静态电流,排除短路问题。
2.8 MDIO接口
MDIO是Management Data Input/Output的缩写。它只有两根线:MDC(时钟)和MDIO(数据)。用来读写PHY的寄存器。
MDIO的协议很简单:先发前导码,再发操作码、PHY地址、寄存器地址,最后读写数据。但简单归简单,坑也不少:
- 时序要求:MDC频率不能太高,一般2.5MHz。我曾经试过5MHz,结果PHY不响应。
- 上拉电阻:MDIO是开漏输出,需要外部上拉。忘了加上拉,通信就是失败的。
- 地址冲突:多个PHY共享MDIO总线时,地址不能重复。我见过有人把两个PHY都设成地址0,结果谁也读不到。
2.9 实战经验:接口调试顺序
我个人调试交换芯片时,会按这个顺序来:
- 先调MDIO:确保能读写PHY寄存器。这是基础,否则后面都白搭。
- 再调RGMII:用回环模式测试MAC和PHY之间的通路。
- 然后调SerDes:检查眼图,确保信号质量。
- 最后调PCIe:链路训练成功,批量数据传输正常。
这个顺序能帮你快速定位问题。我曾经跳过MDIO直接调RGMII,结果折腾了两天才发现是PHY没配置好。嗯,从那以后我再也不敢偷懒了。
2.10 本章小结
这一讲我们聊了交换芯片的内部架构:MAC负责帧处理,PHY负责信号编码,SerDes负责串行传输,Packet Processor负责转发决策。CPU和交换芯片之间通过PCIe、RGMII、MDIO通信,每种接口各有用途。
下一讲,我们会深入交换芯片的寄存器配置,看看怎么用代码控制这些模块。到时候我会分享一些具体的寄存器配置示例,敬请期待。