3、桥接芯片分类:PCIe-to-PCIe桥(Switch)、PCIe-to-PCI桥、PCIe-to-其他总线桥(USB、SATA、UART、GPIO)
好,咱们进入第三个章节。桥接芯片的分类,说白了就是搞清楚一件事:你要把PCIe这头的高速公路,接到哪条路上?
我这些年做项目,见过不少工程师一上来就问“哪个桥接芯片好”,其实这是个伪命题。你得先想清楚——你的系统里,另一端是什么接口?是另一条PCIe链路?还是老掉牙的PCI?又或者是USB、SATA这种完全不同的总线?
嗯,咱们今天就按这个思路,把桥接芯片分成三大类,一个一个说透。
3.1 PCIe-to-PCIe桥(Switch)—— 扩展,而不是转换
先讲最常见的。PCIe Switch,说白了就是一个端口扩展器。它不改变协议,不转换数据格式,只是把上游的一个PCIe端口,拆成下游多个端口。
我举个例子。你有一台服务器,CPU直出的PCIe通道只有x16。但你需要接两块GPU、一块NVMe SSD、一张网卡。怎么办?加一颗Switch芯片,把x16拆成四个x8或者八个x4。
我个人习惯把Switch分成两类:
- 透明桥(Transparent Bridge):系统枚举时自动发现,不需要驱动干预。适合大多数通用场景。
- 非透明桥(Non-Transparent Bridge, NTB):两端系统各自独立枚举,需要软件配合。常用于双主机互联、故障隔离。
我记得有一次做存储服务器,客户要求两个CPU节点共享同一块NVMe盘。普通Switch搞不定,因为两端都是Root Complex。最后选了带NTB功能的Switch,两边各配一个地址映射窗口,才把问题解决。
3.2 PCIe-to-PCI桥 —— 老系统的“救火队员”
这个类别,现在用得越来越少了。但如果你维护过工控设备、航空电子、或者某些医疗仪器,你一定会碰到它。
PCIe-to-PCI桥,就是把PCIe的串行高速信号,转换成传统的并行PCI总线。注意,这里不是简单的电平转换,而是协议层的完全翻译。
为什么会这样?因为PCI总线的电气特性、配置空间、中断机制,跟PCIe完全不同。桥接芯片内部要模拟一个PCI总线树,还要处理PCI的“锁”操作、延迟事务等老古董特性。
我曾经在一个雷达信号处理项目里,遇到一块老旧的FPGA板卡,只支持PCI 2.3。新主板的PCIe插槽根本不认它。最后加了一颗PCIe-to-PCI桥,才让这块老卡“起死回生”。
选型时注意几点:
- 桥芯片是否支持PCI总线仲裁(多主设备场景)
- 是否支持PCI的“延迟事务”和“内存写并无效”
- 电源管理兼容性(很多老设备不支持ASPM)
3.3 PCIe-to-其他总线桥 —— 万物皆可桥
这一大类,才是桥接芯片的“主战场”。因为现实世界里的外设,并不都是PCIe原生接口。你需要把PCIe转成USB、SATA、UART、GPIO……
说白了,这类芯片的核心工作就是协议转换。PCIe这边是TLP包,另一端是USB的帧、SATA的FIS、或者UART的字节流。
3.3.1 PCIe-to-USB桥
最常见。笔记本上的USB口,很多就是通过PCIe转接出来的。典型芯片如ASMedia的ASM1142、TI的TUSB73x0系列。
我建议你注意一点:USB 3.2 Gen2x2需要PCIe x2的带宽。如果你只接了x1,速度会砍半。我在做一款高速数据采集器时就踩过这个坑,USB口标称20Gbps,实际只能跑到10Gbps,最后发现是PCIe通道数配错了。
3.3.2 PCIe-to-SATA桥
主要用于扩展SATA端口。比如NAS主板上的额外SATA口,很多就是通过PCIe Switch加SATA控制器实现的。
这里有个坑:SATA的AHCI协议和PCIe的NVMe协议完全不同。桥芯片内部要维护一个完整的AHCI控制器,还要做命令队列的映射。我见过一些廉价桥芯片,在连续写入时掉速严重,就是因为内部缓存太小。
3.3.3 PCIe-to-UART桥
这个就简单了。工业控制、串口服务器里常用。典型芯片如EXAR的XR17V系列、TI的TL16C系列。
嗯,这里要注意:UART的波特率上限。PCIe转出来的串口,理论上可以做到很高的波特率(比如3Mbps),但实际受限于线缆长度和电气特性。我一般建议不超过921600bps,否则容易丢数据。
3.3.4 PCIe-to-GPIO桥
这个比较小众,但很实用。用于扩展通用IO口,控制继电器、LED、传感器等。
选型时看两点:GPIO的电平标准(3.3V还是5V),以及中断支持。有些桥芯片的GPIO不支持边沿触发中断,只能轮询,这在实时性要求高的场景下很要命。
好了,这一章就到这里。下一章咱们聊聊桥接芯片的电气特性与信号完整性,这可是硬件工程师的硬功夫。到时候我会分享一些我在PCB布局上的血泪教训。