七端口千兆交换板设计:RGMII、SerDes与SFP接口调试
简介:面向以太网交换与嵌入式硬件设计人员的88E6320_DB参考设计资料,聚焦QFN108封装开发板的原理图与硬件设计要点,可用于千兆交换板卡选型、接口核对、原理图复盘及调试排错。包内共1个PDF文件,整体约275KB,虽篇幅紧凑,却保留了较完整的电路与接口信息。内容围绕电源方案、88E6320芯片接口、EEPROM与时钟配置、RGMII、Serdes to Fiber、复位及GPHY LED、RJ45铜口、SMI USB/CPLD等模块展开,配有顶层框图、端口划分与器件标注,便于读者梳理多端口千兆以太网板的连接关系和设计取舍。已有9469人学习,适合硬件工程师、网络设备开发者及相关专业学生作为设计对照与学习参考。
1. 七端口千兆交换板的选型起点:为什么 RGMII 和 SerDes 必须分开算
很多人第一次翻开 88E6320_DB_QFN108_REV2 这类图纸,想法都很直接——照着连一遍,板子回来总能跑。真正打样回来才发现链路连 up 都 up 不起来,问题往往不在芯片,而在端口拓扑没有拆清楚。这块板子把七个千兆端口拆成了三条完全不同的信号链:两个口走 SerDes、1000BASE-X 直连 SFP 光模块,三个口用 RGMII 外挂独立 PHY 再进集成磁性 RJ45,剩下两个口直接由芯片内置 GPHY 出 MDI。同一颗 QFN108 封装的交换芯片,配三种前端,电源域、时钟、复位、端接方式全不一样。
这份 REV2 图纸要解决的核心问题就是:在单板面积和 BOM 成本都受限的前提下,把交换芯片、外部 PHY、光模块座、网络变压器这四套器件的对接口径统一起来,让同一块板既能插光纤也能接网线。它适合正在做多口千兆交换板、嵌入式网关卡、网络方向毕业设计的人,当成一份可以逐条对照的落地清单来用。
2. 总体架构设计:七端口拓扑、三类信号链与时钟复位域划分
一块交换板能不能一次点亮,八成取决于架构阶段有没有把端口归类清楚。七端口听起来只是数量,实际是三种电气接口混在一块板子上,任何一处归类错了,后面调试就得靠猜。
2.1 顶层框图的端口拆解
先看顶层框图给出的端口归属。Port0 和 Port1 是芯片内部 SerDes 直接引出的差分对,经过 AC 耦合电容送到两个 SFP 座,工作在 1000BASE-X 模式;Port2、Port5、Port6 从芯片侧走 RGMII,各接一颗 88E1116R 独立 PHY,PHY 的 MDI 侧再经过 1:1 网络变压器进集成磁性 RJ45;Port3 和 Port4 由芯片内置 GPHY 直接输出 MDI 差分对,同样经变压器进 RJ45。
| 端口 | 芯片侧接口 | 中间器件 | 连接器 | 速率与模式 |
|---|---|---|---|---|
| Port0 / Port1 | SerDes 差分对 | AC 耦合电容、磁珠供电 | SFP 座 ×2 | 1000BASE-X 光口 |
| Port2 | RGMII | 88E1116R + 变压器 | 集成磁性 RJ45 | 10/100/1000 Mbps 电口 |
| Port5 | RGMII | 88E1116R + 变压器 | 集成磁性 RJ45 | 10/100/1000 Mbps 电口 |
| Port6 | RGMII | 88E1116R + 变压器 | 集成磁性 RJ45 | 10/100/1000 Mbps 电口 |
| Port3 / Port4 | 内置 GPHY 的 MDI | 变压器 | 集成磁性 RJ45 | 10/100/1000 Mbps 电口 |
这张表就是整块板的骨架。它决定了两件事:第一,板上需要四颗 25MHz 时钟源(交换芯片一颗,三颗外部 PHY 各一颗),而不是一颗时钟走天下;第二,电源域被切成芯片侧和 PHY 侧两套,PHY 的 I/O 电压还要单独可调。我一般会在画原理图之前先把这张表贴在文档第一页,后面每加一个器件都回头对一遍,能省掉大量返工。
2.2 三类信号链的电气差异
SerDes 链路是交流耦合的差分对,芯片侧 TXP/TXN、RXP/RXN 各串一颗 0.1uF 电容再进 SFP 座,耦合电容必须靠近发送端放置,否则直流偏置点会被连接器侧的直流通路拉偏。SFP 座的供电走磁珠加 10uF 与 0.1uF 的组合,磁珠用来挡住光模块内部开关电源倒灌回来的高频噪声。差分对在 PCB 上要求 100Ω 差分阻抗,这一点在原理图阶段只能靠标注约束,但耦合电容的位置和容值必须在图纸上就定死。
RGMII 是单端并行总线,收发各有一组数据线和一条时钟。芯片侧 TXD[3:0] 配 TXC,RXD[3:0] 配 RXC,外加 TX_CTL 和 RX_CTL 两根控制线。图纸里这一组线上普遍串了 22.1Ω 的源端匹配电阻,作用是压住边沿过冲,值不要随便改大,改成 33Ω 之后千兆下的建立时间会变紧。RGMII 的另一个坑是 2ns 的时钟数据偏斜,通常的做法是让 PHY 内部打开 RX 延时,PCB 上不再绕等长,图纸上则通过 PHY 的 CONFIG 引脚把延时模式固定下来。
MDI 侧是变压器耦合的差分对,变压器中心抽头要接对应的电源轨,再并 1000pF 与 0.1uF 到地做共模端接,这一组电容和电阻构成常见的共模抑制网络。三个外部 PHY 的 MDI 和两个内置 GPHY 的 MDI 在图纸上长得几乎一样,但中心抽头接的电压不同,看图纸时如果只扫一眼很容易抄错。
2.3 时钟域与复位域的划分
整块板有四个独立的 25MHz 晶体,交换芯片一颗,三颗 88E1116R 各一颗。每颗晶体配 18pF 或 27pF 的负载电容和一颗 4.7k 的反馈电阻,晶体的地单独走 XTAL_GND 再单点回主地。四颗时钟意味着四个时钟域,SGMII 与 RGMII 之间的速率适配由芯片内部完成,但 PHY 侧如果没有独立参考时钟,链路训练会变得很不稳。这一点在早期方案评审时最容易被砍掉——"能不能共用一颗时钟"——我的建议是除非有明确的时钟缓冲器方案,否则不要省这四颗晶体。
复位域同样分成两级。整板复位由一颗复位监控芯片产生,输出 SW_RESETn 送到交换芯片的 RESETn 引脚;同一路复位再扇出成三路 E1116_RESETn,分别送到三颗外部 PHY。图纸上还并了一个手动复位按键,串了 RC 做去抖。复位信号是低有效,走线上不做上下拉,靠监控芯片的推挽输出驱动,这样按键按下时不会和芯片输出打架。
2.4 地址与模式引脚的空间分配
QFN108 的引脚密度很高,大量功能引脚是复用的。ADDR[0..4]n 这一组决定芯片的启动配置,包括从 EEPROM 加载还是由 CPU 通过 SMI 配置;P0_SMODE 和 P1_SMODE 决定两个 SerDes 口工作在 SGMII 还是 1000BASE-X;P5_VDDOS[0] 和 P6_VDDOS[0] 决定 Port5、Port6 的 RGMII I/O 电压,编码是 0X 对应 1.8V、10 对应 3.3V、11 对应 2.5V。
外部 PHY 侧还有 CONFIG[0..3] 四个配置脚,负责 PHY 地址低位、RGMII 延时模式、自协商使能。这些引脚大多用 4.7k 电阻上拉或下拉,图纸上标了 NOB 的位号表示默认不贴。地址分配阶段我会画一张单独的表格,把每个 PHY 的 Phy_Addr[0..4] 写死,避免两颗 PHY 撞地址——这是调试阶段最难查的一类问题,因为总线上读得到东西,就是读到的不是你以为的那颗。
3. 电源与复位链路:多路电源域、POR 芯片与 REV2 的五处改动
电源这部分,图纸上看着是一堆 0.1uF 和 10uF 排列组合,实际每一路都对应一个独立的噪声敏感区。哪一路省了去耦,表现出来往往不是不工作,而是高温下偶发丢包。
3.1 电源域清单与去耦策略
按图纸梳理,主要电源域有这么几路:VDD_CORE 是芯片内核电压,由芯片内部集成的开关稳压控制器产生,外接电感和电容,反馈引脚是 VOUT11_SEN 与 VOUT15_SEN;VDD33 是数字 I/O 与大部分外设的 3.3V;VDD33_PLL 是锁相环专用的 3.3V,必须单独用磁珠从主 3.3V 隔离出来;AVDD15 是 SerDes 的 1.5V 模拟电源;VDD_2.5V 和 VDD_3.3V 则按 P5、P6 的 I/O 电压选择分别供给。
| 电源域 | 典型值 | 主要负载 | 去耦方式 |
|---|---|---|---|
| VDD_CORE | 约 1.1V | 交换芯片内核 | 内部稳压输出 + 10uF 与 0.1uF 就近放置 |
| VDD33 | 3.3V | 数字 I/O、EEPROM、LED | 每脚 0.1uF,每域 10uF |
| VDD33_PLL | 3.3V | 锁相环 | 磁珠隔离 + 0.1uF 与 10uF |
| AVDD15 | 1.5V | SerDes 模拟电路 | 每对差分 0.1uF,独立铺铜 |
| VDD_2.5V 或 VDD_3.3V | 2.5V 或 3.3V | 外部 PHY 的 VDDO | 按 I/O 选择配置,每脚 0.1uF |
去耦的排布原则很朴素:0.1uF 贴着引脚放,10uF 放在电源入口,两者之间不要串任何器件。锁相环那一路必须单独走磁珠,磁珠后面只挂 PLL 的电容,不要顺手把别的负载也挂上去,那样等于把磁珠白加了。
3.2 上电时序与 POR 复位链路
REV2 的改动记录里有一条"板载 POR 芯片",这一条的价值在调试阶段体现得最明显。早期版本靠 RC 延时产生复位,电容公差大、温度特性差,冬天和夏天释放复位的时刻能差出几十毫秒,表现出来就是同一块板子有的能起有的不能起。
现在图纸上是一颗独立的复位监控器件,VCC 接 3.3V,GND 接地,输出低有效的 RESET 直接驱动 SW_RESETn。这颗器件的阈值固定,输出是推挽结构,释放时刻只跟 VCC 上升沿有关,跟温度关系很小。手动复位按键并在输出端,按下时把复位拉低,松开后由器件重新计时。三颗外部 PHY 的复位由同一路信号扇出,每条支路各串一颗 0 欧电阻,方便调试时单独隔离某颗 PHY。
上电顺序上,芯片内部稳压先建立 core 电压,再是 3.3V 数字域,然后 SerDes 的 1.5V 模拟域。实际板上做不到严格排序,所以复位必须晚于所有电源稳定,这就是 POR 器件的意义——它的释放阈值保证了 3.3V 到位之后芯片才开始工作。
3.3 REV2.1 五条变更的工程含义
图纸的版本历史列了五条改动,每一条都对应一次实际踩坑,值得逐条拆开看。
第一条是把稳压器换成支持 5V 和 12V 两种输入。原来的方案只支持单一输入电压,换一个电源适配器就得换一版板子。改成宽压输入之后,前级要加 TVS 和共模电感,输入电容的耐压从 16V 提到 25V,这是硬件上必须跟着改的。
第二条是板载 POR 芯片,前面已经说过,本质是把复位从"凑合能用"变成"确定可用"。
第三条是把所有端口的 MAGJACK 统一成同一个型号。原来不同端口用了不同厂家的集成磁性连接器,变压器变比和共模参数不完全一致,导致几个口的链路裕量参差不齐。统一型号之后,BOM 简化,测试数据也能横向对比。
第四条是把外部 PHY 上的串联端接电阻换成 0 欧。原来 RGMII 线上串的是几十欧的电阻,实测在千兆下眼图裕量不够,换成 0 欧之后由 PHY 内部驱动能力来匹配。这里要注意,换成 0 欧不代表可以不贴,焊盘必须保留,因为不同批次的 PHY 驱动强度可能有差异,留一个位置就留了一条后路。
第五条是某款电源器件的 V_Set 分压电阻取值修正。这类修正通常是因为原分压比算错,输出电压偏离设计值几个百分点,芯片能跑但不在规格内。分压电阻要用 1% 精度,算完之后用万用表实测确认,不要只看计算值。
4. 接口与配置落地:RGMII 引脚映射、SMI 地址分配与 EEPROM 引导
到了这一层,图纸上的网络名就是你的调试地图。RGMII 的每一根线、SMI 的每一颗上拉、EEPROM 的每一根地址脚,都会在第一次上电时给你反馈。
4.1 RGMII 接口的引脚映射与端接
三组 RGMII 的命名规律是 P2_、P5_、P6_ 前缀加信号名。发送方向是 OUTD[0..3]、OUTCLK、OUTEN,接收方向是 IND[0..3]、INCLK、INDV。以 Port5 为例,P5_OUTD0 到 P5_OUTD3 送到 PHY 的 TXD0 到 TXD3,P5_OUTCLK 对应 TX_CLK,P5_OUTEN 对应 TX_CTRL;接收侧 P5_IND0 到 P5_IND3 对应 RXD0 到 RXD3,P5_INCLK 对应 RX_CLK,P5_INDV 对应 RX_CTRL。
每根数据线和时钟线上都串了 22.1Ω 电阻,位置靠近驱动端。这个阻值的选取和 PCB 走线阻抗相关,如果板上走线偏长,可以适当减小;如果过冲明显,可以增大到 27Ω。但不要三组 RGMII 用不同的值,一致性比单点最优更重要。
时钟方向要特别留意:TXC 由交换芯片输出,PHY 接收;RXC 由 PHY 输出,交换芯片接收。图纸上这两根线的驱动方向如果画反,链路在百兆下可能还能协商上,千兆下必然不通,因为千兆用的是 DDR 采样,方向和延时都必须精确。
4.2 SMI 总线拓扑与 PHY 地址分配
管理接口分成两段。一段是 MDC_CPU 和 MDIO_CPU,走向板上主控或 CPLD;另一段是 MDC_PHY 和 MDIO_PHY,挂在三颗外部 PHY 上。两段之间通过 0 欧电阻或跳线连接,调试时可以断开,避免主控和调试工具同时驱动总线。
MDIO 是双向线,必须有上拉,图纸上用的是 4.7k 到 3.3V。上拉只保留一处,多个上拉并联会把总线拉死。MDC 是单向时钟,最高频率通常在 2.5MHz 到 12.5MHz 之间,走线上串 22Ω 电阻抑制反射。
调试阶段最常用的动作是扫地址。下面这段命令是通用写法,工具名可能因环境不同,但参数含义一致:
# 先读 PHY ID 高字节(0x02)与低字节(0x03),确认器件在位 # 参数顺序:<网络接口> <PHY 地址> <寄存器地址> mdio-tool r eth0 0x08 0x02 mdio-tool r eth0 0x08 0x03 # 全地址扫描:0~31 逐个读 ID,有返回的才是在位器件 for addr in $(seq 0 31); do hi=$(mdio-tool r eth0 "$addr" 0x02 2>/dev/null) lo=$(mdio-tool r eth0 "$addr" 0x03 2>/dev/null) if [ -n "$hi" ] && [ "$hi" != "0xffff" ]; then echo "found phy addr=$addr id=${hi}${lo}" fi done先读 0x02 和 0x03 是因为这两个寄存器存放厂商与型号 ID,读出来不是 0xffff 就说明总线通、器件在位。全地址扫描解决的是"知道有几颗但不知道地址"的场景。扫出来如果发现两个地址返回同一个 ID,基本可以判定地址引脚配重了,回头查 Phy_Addr 那几颗上下拉电阻。
4.3 配置引脚与 EEPROM 引导流程
交换芯片支持两种配置来源:由主控通过 SMI 在线配置,或者上电时从两线 EEPROM 自动加载。图纸上有一颗 4Kbit 的 I2C EEPROM,SCL 和 SDA 各有上拉,A0 到 A2 三个地址脚决定器件地址,WP 是写保护脚。
关键在于 EEPROM 的时钟和数据线是和 LED 引脚复用的。图纸上 EE_CLK 复用 C0_LED 和 FLOW,EE_DOUT 复用 C1_LED 和 P4_LED0。这意味着上电瞬间这几根线的状态会同时影响配置加载和 LED 显示,如果 LED 那一侧有强下拉,EEPROM 的时序就会被破坏,表现出来就是配置加载失败、芯片进默认模式。
加载流程通常是:POR 释放 → 芯片采样 ADDR[0..4]n 确定启动模式 → 从 EEPROM 读配置字 → 配置内部寄存器与端口模式 → 释放链路。NO_CPU 引脚用于指示板上无主控,芯片只能靠 EEPROM 自举;EEE_WP 是 EEPROM 写保护,量产板一般拉低保护,调试板拉高允许改写。写保护拉低之前记得把配置固化进去,不然每次上电都是默认值。
4.4 SerDes 到 SFP 光口的接口设计
两个 SFP 座按 20 针主机接口连接。发送差分对从芯片出来经 0.1uF 耦合电容进座的 TD+ 与 TD-,接收差分对从座的 RD+ 与 RD- 出来经耦合电容回芯片。参考时钟由座子提供还是由板上提供,取决于具体的光模块类型,图纸上把两路都预留了。
控制信号这四根线要重点看:TX_DISABLE 是输入,必须上拉到高电平,否则模块默认关闭发射;TX_FAULT 是输出,上拉到 3.3V 后接主控;LOS 是接收丢失指示,同样上拉;MOD_DEF0 在座子侧接地,表示模块在位,MOD_DEF1 和 MOD_DEF2 是模块内部的 I2C 从机接口,用来读厂商信息和温度。这四根线如果漏了上拉,光口不亮是必然的。
供电侧每路 VCC 都串了 1uH 磁珠,后面跟 10uF 和 0.1uF。光模块的功耗波动比较大,尤其是长距模块,磁珠的额定电流要按模块的最大功耗留足余量,不要只看典型值。
5. 避坑与排查:原理图评审最容易翻车的五个点
下面这五条,每一条我都在不同的板上见过,症状各不相同,根因都藏在原理图的一根线或者一颗电阻上。
5.1 电源与复位相关的两类翻车
第一类:上电后 MDIO 读不到任何 PHY,MDC 线上没有波形。现象很像是主控没起来,实际原因是复位释放太早。用示波器同时抓 3.3V 上升沿和 SW_RESETn,能看到复位在电源还没到 3.0V 的时候就释放了,PHY 内部状态机进了未定义状态,SMI 从机不应答。解决办法是把复位监控器件的阈值选在 2.9V 以上,并在复位输出上并一颗 0.1uF 做短延时,确保所有电源稳定之后再释放。
第二类:链路能 up,跑大流量几分钟后整板重启。这类问题查电源最有效。用示波器看 core 电压的纹波,会发现纹波在流量上来之后明显增大,原因是内部稳压的外接电感饱和电流选小了,或者输出电容容量不够。解决方法是按芯片手册推荐值选电感,饱和电流至少留 1.5 倍余量,输出电容从 10uF 加到 22uF 并配 0.1uF。这一条属于典型的"能跑但不稳",最容易在评审时被放过。
5.2 接口与配置相关的三类翻车
第三类:千兆不通、百兆能通,或者反过来。RGMII 的典型症状。先查 2ns 延时有没有配上,PHY 的 CONFIG 引脚决定延时模式,配错了就是千兆全丢。再查 TXC 和 RXC 的方向有没有画反,DDR 采样下方向反了必然不通。最后查串阻,22.1Ω 换成 0 欧有时能通,但眼图裕量会掉,属于治标不治本。
第四类:两个光口只有一个能识别模块。通常是 TX_DISABLE 那一路上拉漏了,或者 MOD_DEF0 没有接地。MOD_DEF0 接地是模块在位检测的硬条件,漏了这颗电阻,主控永远认为槽位是空的。另外 AC 耦合电容要靠近发送端,如果画在了接收端,链路可能在部分模块上能通,换个模块就不行,这种间歇性故障最难查。
第五类:EEPROM 配置加载不上,芯片每次上电都是默认配置。先量 WP 引脚是不是被误拉低,再查 EE_CLK 和 EE_DOUT 复用的那几个 LED 引脚上有没有强下拉或者 LED 限流电阻阻值过小。如果 LED 电路上挂了 330Ω 到地,而 EEPROM 那侧需要靠上拉拉高,电平就会被拉塌。解决办法是在复用节点上串 1k 电阻隔离,或者干脆把 LED 改成高阻驱动方式。
这五条的共同点是:都不在功能框图里,都在细节里。原理图评审时我会专门抽半小时,只看复位、时钟、上拉、复用这四类网络,别的先不看。
6. 验收与答辩:一份能点亮的检查表和三个必答问题
板子回来之前,我会先把验收拆成四步,每一步有明确的通过标准,不通过就不往下走。第一步是静态检查,万用表量每一路电源对地阻抗,3.3V 域正常在几百欧以上,core 域因为有大电容会缓慢爬升,如果量出来接近 0 欧,先别上电,查短路。第二步是分级上电,先只焊电源部分,空载量每一路输出,纹波在满载的 1% 以内算过。第三步才是插芯片,上电后先量复位释放时刻,再量 25MHz 晶振起振。第四步扫 MDIO,能读出三颗 PHY 的 ID 且地址不重复,硬件链路就算通了。
| 验收项 | 检查方法 | 通过标准 |
|---|---|---|
| 电源对地阻抗 | 万用表二极管档 | 3.3V 域大于 300Ω,无短路 |
| 各路输出电压 | 空载与满载分别测量 | 偏差在标称值 ±5% 以内 |
| 复位释放时刻 | 双通道示波器同时抓电源与复位 | 复位晚于电源稳定 |
| 时钟起振 | 示波器探头接 XTAL_OUT | 25MHz ±50ppm,波形无削顶 |
| SMI 扫描 | 全地址读 PHY ID | 三颗 PHY 全部在位且地址唯一 |
| 链路连通 | 电口环回、光口对接 | 千兆协商成功,跑流 10 分钟无丢包 |
答辩环节有三个问题几乎必问。第一个是"为什么 SerDes 口不用变压器",答案在 AC 耦合与直流偏置,光模块侧本身有耦合,再加变压器是重复设计。第二个是"三颗 PHY 为什么不用同一颗时钟",答案在时钟域隔离与抖动预算,共用时钟需要额外的缓冲与匹配,成本不一定更低。第三个是"REV2 改了什么、为什么改",版本历史那五条就是标准答案,能讲清楚每一条对应的实际故障,比背参数有说服力得多。
从那以后我每次做带外部 PHY 的板子,都会在上电之前强制走一遍"复位时刻—时钟起振—SMI 扫描"这三步,一步不跳。跳过任何一步,后面花的时间都是它的好几倍。希望这套流程帮到你。
本文还有配套的精品资源,点击获取