第二讲:交换机硬件架构——交换芯片内部框图与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错误帧暴增,排查了好久。
小提示:调试MAC时,建议先用回环模式测试。把发送和接收短接,看看能不能自收自发。这一步能快速排除PHY和SerDes的问题。

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这些复杂功能。

重点:Packet Processor的查表速度决定了交换机的线速转发能力。如果查表太慢,就会丢包。车载场景下,丢包可能导致控制指令丢失,后果很严重。

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测试:上电后先测静态电流,排除短路问题。
警告:RGMII的TX_CLK和RX_CLK必须独立。不要试图共用时钟,否则会出现不可预知的时序问题。我吃过这个亏,希望大家别重蹈覆辙。

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 实战经验:接口调试顺序

我个人调试交换芯片时,会按这个顺序来:

  1. 先调MDIO:确保能读写PHY寄存器。这是基础,否则后面都白搭。
  2. 再调RGMII:用回环模式测试MAC和PHY之间的通路。
  3. 然后调SerDes:检查眼图,确保信号质量。
  4. 最后调PCIe:链路训练成功,批量数据传输正常。

这个顺序能帮你快速定位问题。我曾经跳过MDIO直接调RGMII,结果折腾了两天才发现是PHY没配置好。嗯,从那以后我再也不敢偷懒了。

2.10 本章小结

这一讲我们聊了交换芯片的内部架构:MAC负责帧处理,PHY负责信号编码,SerDes负责串行传输,Packet Processor负责转发决策。CPU和交换芯片之间通过PCIe、RGMII、MDIO通信,每种接口各有用途。

下一讲,我们会深入交换芯片的寄存器配置,看看怎么用代码控制这些模块。到时候我会分享一些具体的寄存器配置示例,敬请期待。

个人建议:如果你刚开始接触车载以太网交换机,建议先找一块开发板,把MDIO和RGMII调通。这两个接口调通了,你就掌握了交换机调试的“七寸”。