
1. 项目概述为什么我们需要桥接芯片在嵌入式系统、工控主板或者一些老设备的升级改造项目中我们经常会遇到一个头疼的问题新平台和老外设之间的“语言不通”。比如你手头有一块基于现代x86或ARM架构的工控板它只提供了高速的PCIe接口但你项目里必须连接一个只认8位或16位Local Bus本地总线的老式专用芯片或者需要扩展出多个RS-232/RS-485串口。直接对接信号协议、电气特性、时序控制完全对不上就像让一个说流利英语的人去指挥一个只懂摩斯密码的机器根本无法沟通。这时候桥接芯片Bridge Chip就扮演了至关重要的“翻译官”和“协议转换器”角色。它能在两种截然不同的总线或接口之间建立一座桥梁让数据能够顺畅、可靠地流通。牛津半导体Oxford Semiconductor现已被PLX Technology收购其产品线后来也整合到Broadcom等公司在这一领域曾是绝对的隐形冠军。他们提供了一系列高度集成的单芯片解决方案专门解决从PCI、PCIe、CardBus、USB等现代总线到UART串口、并口以及Local Bus等传统接口的转换难题。对于硬件工程师、嵌入式开发者尤其是从事工业控制、通信设备、金融终端、医疗仪器等领域的同行来说深入理解这类桥接芯片意味着能在系统设计时拥有更大的灵活性和更快的上市时间。你不用再为接口转换去设计复杂的FPGA逻辑和外围电路一颗成熟的桥接芯片配合官方驱动往往能省下数月开发调试周期。今天我就结合自己过去在工控和通信设备开发中的实际项目经验来系统梳理一下牛津半导体那些经典的PCIe/PCI转Local Bus及多串口芯片希望能帮你理清选型思路避开一些我当年踩过的坑。2. 核心需求解析Local Bus与多串口扩展的应用场景在深入芯片型号之前我们必须先搞清楚什么情况下我们会迫切需要这类桥接芯片理解了场景选型才能有的放矢。2.1 Local Bus接口的“顽固”生命力Local Bus顾名思义是一种与CPU紧密耦合的本地总线常见于早期的微处理器如PowerPC、某些MIPS架构或一些专用的ASIC、DSP芯片。它的特点是时序简单、延迟极低、控制直接通常是并行总线数据宽度可能是8位、16位或32位。虽然从PC架构的演进来看它早已被PCI、PCIe等更标准、更高速的总线所取代但在许多特定行业它依然生命力顽强。典型场景一专用协处理器或加速卡。在一些图像处理、加密解密或信号处理的板卡上主CPU通过Local Bus直接访问一块专用的FPGA或DSP芯片实现硬件加速。当主平台升级为标准的PCIe工控机时就需要一个桥接芯片将PCIe协议“翻译”成FPGA能理解的Local Bus时序。典型场景二遗留设备的接口兼容。很多工业现场的传感器、执行器或显示单元其控制板是基于老式CPU设计的对外接口就是Local Bus。为了将这套设备接入新的控制系统就需要在工控机的PCIe插槽上通过桥接芯片“模拟”出一个Local Bus接口。核心需求点这类应用对桥接芯片的要求不仅仅是信号电平的转换更重要的是时序的精准匹配。Local Bus的读写周期、等待状态Wait State、片选Chip Select和就绪Ready信号时序都必须由桥接芯片可靠地产生和响应。2.2 多串口扩展的永恒刚需尽管以太网和USB无处不在但在工业自动化、机房管理、金融POS机、数控机床等领域RS-232和RS-485串口依然是连接PLC、变频器、读卡器、密码键盘、老式打印机的绝对主力。一块现代主板通常只提供1-2个串口而一个机柜可能需要连接十几甚至几十台串口设备。典型场景工控机串口扩展卡。这是牛津半导体芯片最经典、最广泛的应用。通过PCI或PCIe接口扩展出2、4、8甚至16个独立的、带完整16550兼容UART的高性能串口。每个串口都能独立配置波特率、数据位、停止位和校验位并且通常支持高达1Mbps甚至更高的波特率。为什么不用USB转串口线对于一两个临时调试的设备USB转串口线很方便。但在稳定性和可靠性要求极高的工业现场PCI/PCIe内置扩展卡有巨大优势1) 不占用外部USB端口避免因插拔导致松动或接口损坏2) 驱动更稳定通常集成在系统内核中不易出现像USB设备那样因枚举问题导致的掉线3) 中断响应更及时对于需要实时响应的工控应用至关重要4) 便于集中布线和管理。选型关键你需要关注芯片集成的UART通道数量、每个UART的FIFO深度影响大数据量吞吐时的性能、是否支持RS-485自动方向控制、是否提供可编程的GPIO引脚用于控制外部设备如继电器等。3. 牛津半导体桥接芯片家族详解牛津半导体的产品线非常清晰主要围绕“串行通信桥接”、“高速存储桥接”和“USB控制器”三大板块。我们重点剖析与PCIe转Local Bus及多串口相关的系列。3.1 串行通信桥接解决方案Serial Bridge这是牛津半导体最核心、最庞大的产品家族其命名规则也很有规律。通常型号中包含了接口类型和UART通道数信息。1. PCI/PCIe 转多串口系列OX16PCI952/954/958这是经典的PCI接口多串口芯片。952代表双串口954代表四串口958代表八串口。它们内部集成了高性能的16550兼容UART每个UART带有大容量FIFO通常是16字节或更大显著降低了CPU中断负载。后缀如-TQC60-B通常指封装形式如TQFP和温度等级。OXmPCI952/954这里的mPCI指的是Mini PCI接口主要用于笔记本电脑或小型嵌入式主板的扩展。功能与PCI版类似但封装更小功耗更低。OXPCIE952/954/958这是PCI Express时代的升级产品。将传统的PCI总线升级为PCIe x1链路提供了更高的带宽和更现代的电源管理。对于新设计的工控机应优先考虑此系列。OX16C954/950这是UART核心芯片本身提供Local Bus或CardBus接口。OX16C954是四串口UARTOX16C950是单串口UART。它们经常被其他桥接芯片如OXCF950作为后端UART使用或者直接被设计到带有Local Bus的CPU主板上。2. PCI/PCIe 转 Local Bus 并口系列OX12PCI840这是一颗专注于PCI转标准并口IEEE 1284的芯片。在需要连接老式并口打印机、绘图仪或编程器的场合非常有用。OX9160/OX9162这就是实现“PCI转Local Bus”功能的核心芯片。它们不仅提供了一个标准的并口更重要的是提供了一个可配置的Local Bus接口。这个Local Bus接口可以模拟成类似SRAM的访问方式主机的CPU通过PCI配置空间和内存/IO映射窗口可以直接读写Local Bus上的设备时序可以通过寄存器灵活配置。OX9162通常是OX9160的增强或小改款。OXPCIE840这是OX12PCI840的PCIe版本同样提供并口功能。但需要注意的是在PCIe时代单纯的“PCIe转Local Bus”需求很多时候被更通用的方案如FPGA实现或通过PCIe转PCI桥再接OX9160的方案所替代。牛津半导体后期似乎没有推出直接的“OXPCIE9xxx”来实现原生PCIe to Local Bus这反映了市场趋势的变化。3. 其他接口转串口系列OXCF950/OXCFU950这是PCMCIAPC卡或CompactFlash接口转串口的经典芯片。在笔记本电脑还是标配PCMCIA插槽的年代它是扩展串口的主流方案。OXCFU950还集成了USB Host功能。OXCB950CardBus32位PCMCIA接口转串口芯片。OXUSB950/954USB接口转单串口/四串口芯片。为设备添加USB转串口功能提供了单芯片方案比外置的USB转串口线方案更集成化。注意选型时务必查阅官方数据手册的“订购信息”部分。同一个基型号如OX16PCI954可能有多个后缀代表不同的封装如LQFP、BGA、温度范围商业级、工业级以及是否包含铅RoHS。工业级应用必须选择宽温型号。3.2 高速存储与USB桥接方案选读参考虽然与本次主题关联度稍低但作为知识扩展了解牛津半导体在其他领域的实力有助于理解其技术底蕴。其FireWire1394和USB to SATA桥接芯片在早期的外置硬盘盒、磁盘阵列柜市场占有率很高。FireWire桥接如OXFW911,OXFW912提供了1394A/B到IDE或SATA的稳定桥接支持硬件RAID 0/1在视频编辑等专业领域备受青睐。USB/SATA桥接如OXU921S/DS系列实现了USB2.0到SATA的转换。带F的型号如OXUF924DSA通常集成了1394接口带E的型号如OXUF924DSE支持硬件加密非常适合移动安全存储。USB OTG/Host控制器如OXU210HP,TD242LP为嵌入式系统添加USB主机或OTG功能提供了高集成度方案。4. 核心芯片实战解析以OX9160为例设计Local Bus转换卡理论说了这么多我们来点实际的。假设现在有一个项目需要在一块标准PCIe x1的工业主板上通过FPGA实现一个自定义的数据采集功能。FPGA设计为Local Bus从设备接口。我们选择使用OX9160PCI to Local Bus芯片但主板只有PCIe插槽。怎么办这就需要组合方案。4.1 系统方案设计由于OX9160是PCI设备而主板提供PCIe插槽我们需要一个“PCIe to PCI”的桥接芯片作为中间层。PLX Technology巧了后来收购了牛津半导体的PEX8112或PEX8114就是干这个的经典芯片。所以系统链路变为CPU (PCIe) - PEX8114 (PCIe to PCI Bridge) - OX9160 (PCI to Local Bus/Parallel Port) - FPGA (Local Bus Slave)这个方案虽然增加了一颗芯片但非常成熟可靠。PEX8114负责协议转换和物理层适配OX9160则专注于生成符合我们FPGA需求的Local Bus时序。4.2 OX9160关键配置与硬件设计要点拿到OX9160的数据手册和编程指南是硬件设计的第一步。以下是几个需要重点关注的硬件设计环节1. 接口电源与电平OX9160通常是3.3V核心电压其PCI接口和Local Bus接口的I/O电压也多为3.3V。务必确认你的FPGA的Bank电压是否支持3.3V LVCMOS电平。如果不支持需要在Local Bus数据/地址/控制线上添加电平转换器如74LVC4245。PCI接口的电源和时钟必须严格按照PCI规范设计。CLK信号需要从PEX8114等PCI桥片或主板插槽直接提供频率为33MHz或66MHz。2. Local Bus模式配置OX9160的Local Bus工作模式通过硬件引脚如MODE0,MODE1在上电时锁存。你需要根据FPGA的接口需求选择是“复用地址/数据模式”还是“非复用模式”。对于简单的8位或16位FPGA接口非复用模式Separate Address and Data Bus布线更简单但需要更多引脚。关键时序参数如地址建立时间tAS、数据有效时间tDV、读写脉冲宽度tRD, tWR等是通过配置OX9160内部的寄存器来设定的。这部分软件驱动需要配合硬件设计。3. 并口功能取舍OX9160同时提供了一个标准的并口。如果你的项目用不到相关引脚如D0-D7,STROBE,ACK等可以悬空或拉至固定电平。但建议仔细阅读数据手册有些引脚可能有内部上拉/下拉悬空可能导致功耗异常。4. 复位与中断OX9160的复位需要遵循PCI总线的复位规则。通常PRST#信号会连接到PCI桥或插槽的RST#。中断请求IRQ需要连接到PCI的INTA#引脚。在驱动程序中需要正确申请和处理这个中断。如果Local Bus操作不需要中断该引脚可做他用。4.3 驱动开发与内存/IO映射硬件设计完成后更关键的挑战在软件驱动。在Linux系统下我们需要编写一个内核模块来驱动OX9160。1. 探测与初始化驱动程序首先通过PCI Vendor ID和Device ID牛津半导体的ID通常是1415来探测到OX9160设备。然后需要使能设备pci_enable_device并申请其占用的内存区域pci_request_regions。2. 资源配置OX9160的PCI配置空间会报告它需要多少内存空间Memory Space和IO空间I/O Space。Local Bus接口通常被映射到一段PCI内存空间。通过pci_iomap()函数我们可以获得这段内存空间的虚拟地址之后就可以像读写内存一样通过这个地址来访问Local Bus从而控制FPGA。// 示例代码片段 struct pci_dev *pdev; void __iomem *localbus_base; resource_size_t mmio_start, mmio_len; pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, bar0); mmio_start pci_resource_start(pdev, 0); mmio_len pci_resource_len(pdev, 0); localbus_base ioremap(mmio_start, mmio_len);3. 配置Local Bus时序通过写入OX9160的模式配置寄存器具体地址参考数据手册来设置Local Bus的位宽8/16位、等待周期数、是否使用就绪信号等。这一步是驱动与硬件协同工作的核心时序配置不对FPGA就无法正确读写。// 假设配置为16位非复用模式3个等待周期 iowrite16(0x0183, localbus_base MODE_CONFIG_REG_OFFSET);4. 用户空间访问通常我们会通过mmap将驱动映射的物理内存再次映射到用户空间这样用户态程序如数据采集程序就可以直接读写FPGA了。也可以实现read/write等文件操作接口。实操心得调试这类桥接芯片驱动一个逻辑分析仪或带高速数字通道的示波器是必不可少的。你需要同时抓取PCI总线侧或PCIe桥片后的信号和Local Bus侧的信号对比读写时序确保OX9160的配置寄存器设置正确产生的波形完全符合FPGA数据手册的要求。我曾在第一个项目中因为等待周期设少了导致FPGA在高速读时数据不稳定排查了很久才发现是时序裕量不足。5. 多串口芯片如OX16PCI954的实战应用与避坑指南相比于Local Bus多串口芯片的应用更为普遍。以OX16PCI954PCI四串口芯片为例它的硬件设计和驱动开发已经非常标准化但仍有不少细节需要注意。5.1 硬件设计关键点1. 串口电平转换OX16PCI954的UART引脚输出的是TTL电平0V/3.3V。要连接RS-232设备必须外接电平转换芯片如MAX3232系列。要连接RS-485设备则需要外接RS-485收发器如MAX3485。切记RS-485是半双工差分总线需要方向控制。OX16PCI954的某些型号的UART通道支持自动方向控制通过RTS#信号设计电路时要利用这个特性否则就需要用GPIO手动控制收发器方向增加软件复杂度。2. 中断共享与引脚连接一颗OX16PCI954有4个串口但通常只使用一个PCI中断INTA#。这意味着4个串口的中断在芯片内部是“或”起来上报的。在驱动中当中断发生时需要读取芯片的中断状态寄存器来判断是哪个串口产生了中断。硬件上确保PCI的INTA#引脚正确连接即可。3. 时钟与参考设计芯片需要外部输入一个基准时钟通常是24MHz或18.432MHz后者是串口常用时钟的倍数便于生成标准波特率。务必使用高精度的晶体或晶振波特率的准确性依赖于此。牛津半导体的数据手册通常会提供完整的参考原理图强烈建议首次设计时严格遵循。5.2 Linux驱动与系统集成在Linux内核中牛津半导体的多串口芯片驱动通常是serial子系统的一部分驱动文件可能是drivers/tty/serial/8250_ox16c954.c或类似的。对于主流内核版本这些驱动很可能已经内置。1. 确认驱动支持使用lspci -vnn命令查看你的PCI串口卡如果能识别出Oxford Semiconductor的设备ID并且内核已经加载了相应模块如ox16c954那么系统大概率已经自动识别并创建了/dev/ttyS4、/dev/ttyS5等设备文件。2. 手动配置设备树DTS或模块参数如果驱动没有自动识别或者你需要自定义某些参数如某些串口用作RS-485且需要指定方向控制GPIO你可能需要对于较新的内核在设备树中描述该PCI设备及其特殊属性。对于模块化驱动在加载模块时传递参数例如insmod ox16c954.ko io0x1000,0x1008 irq10具体参数名需查驱动源码。3. 用户空间配置使用stty或setserial工具可以配置串口参数。对于RS-485自动方向控制可能需要特定的ioctl命令来开启。这些信息通常在内核驱动的文档或头文件中有说明。常见问题与排查技巧问题系统识别到了卡但/dev/ttySX无法打开或收发数据全错。排查首先用dmesg | grep ox或dmesg | grep tty查看内核启动信息确认驱动是否成功探测并注册。其次用示波器测量串口TX引脚发送数据时应有波形。如果没波形检查电平转换芯片的供电和使能。如果波形有但数据错检查波特率设置计算器算一下和时钟源精度。问题多串口卡在高负载下丢数据。排查检查UART的FIFO设置。默认的16550驱动可能只使用1字节触发深度。对于OX16PCI954这类带大FIFO的芯片需要在驱动中或通过setserial命令启用并设置更大的FIFO触发深度例如16字节或64字节以减少中断次数提升吞吐量。setserial /dev/ttyS4 fifo 64问题RS-485通信只能发不能收或反之。排查这是方向控制问题。确认硬件上收发器的方向控制引脚DE/RE是否连接到了UART的RTS#引脚如果芯片支持自动方向。在软件上确认是否通过ioctl开启了“RS-485模式”。一个简单的测试方法是将RS-485总线A、B线短接自发自收如果能成功说明发送和接收通路基本正常问题可能出在总线终端电阻匹配或外部干扰上。6. 选型总结与替代方案探讨经过以上分析我们可以对牛津半导体这类桥接芯片的选型做一个总结何时选择牛津半导体方案需求明确且稳定你需要的是经过市场长期验证的、稳定的PCI/PCIe转多串口、并口或Local Bus功能。开发周期紧张你希望采用成熟的芯片和现成的驱动尤其是Windows和Linux内核已有驱动快速实现功能避免底层FPGA逻辑开发带来的风险和长周期。成本与产量考量在中小批量生产中一颗几十元人民币的桥接芯片加上标准PCB设计其总体成本通常低于使用高端FPGA并投入人力开发IP核。何时考虑替代方案接口过于特殊或定制化要求极高如果需要转换的接口时序非常特殊或者需要将多种接口如PCIe Local Bus 自定义GPIO高度集成那么使用一颗中等规模的FPGA如Xilinx Spartan-6, Intel MAX 10可能是更灵活的选择。FPGA可以编程实现任意逻辑接口。对功耗和尺寸有极端要求在一些超小型嵌入式设备中一颗单独的桥接芯片加上外围电路可能占空间太大。此时如果主控芯片如某些ARM SoC本身资源丰富可以考虑用它的可编程逻辑单元如Zynq的PL部分或软核CPU配合逻辑来实现接口转换。追求极致性价比超大批量在消费电子级别的海量生产中每一分钱都要计较。如果桥接功能简单可能会被设计进主控芯片的ASIC中或者用一颗极便宜的CPLD/低端FPGA来实现。关于牛津半导体芯片的获取需要注意的是牛津半导体已被收购多年其部分产品线可能已进入维护期或逐步停产。在选择具体型号前务必通过授权代理商或大型分销商如艾睿、安富利、得捷电子查询芯片的供货情况和交期。对于全新的设计也应评估是否有更新的、供货更稳定的替代方案。7. 从项目实践中获得的几点深刻体会回顾这些年使用各类桥接芯片的经历有几点体会特别想分享给正在或即将进行类似设计的工程师第一数据手册是你的圣经但参考设计是你的地图。再复杂的数据手册也比不上官方提供的一个经过验证的参考设计原理图。它不仅能帮你正确连接电源、时钟和信号更能揭示许多数据手册文字中未明确提及的细节比如去耦电容的布局、关键信号线的端接电阻取值。拿到芯片的第一时间就应该全力找到它的评估板资料。第二驱动和软件生态是选型的“隐形”关键。硬件能工作只是成功了一半。一颗芯片是否被主流操作系统尤其是你项目目标的操作系统的原生内核所支持决定了你后期90%的调试工作量。如果内核不支持你需要评估自己移植或编写驱动的能力和时间成本。牛津半导体的芯片在Linux内核和Windows驱动包方面支持通常比较历史久远但正因如此其稳定性和兼容性往往很好。第三预留测试点和调试接口。在设计PCB时一定要把关键的总线信号如PCI的AD线、FRAME#、IRDY#、TRDY#Local Bus的地址、数据、读写、片选通过测试点或排针引出来。在调试驱动和FPGA逻辑时逻辑分析仪是唯一能告诉你真相的工具。为了省几个测试点可能导致调试陷入盲人摸象的困境得不偿失。第四理解“桥”的本质是协议和时序的翻译。无论是PCIe转Local Bus还是USB转串口其核心工作都是在两种不同的通信规则之间进行实时、准确的转换。调试时一定要在“桥”的两侧同时抓取波形对比分析。任何一侧的时序不满足规范都会导致通信失败。养成这种“双边验证”的思维习惯能极大提升解决复杂接口问题的效率。最后技术总是在演进。今天我们用专用桥接芯片解决的问题未来可能会被更高度集成的SoC、更通用的FPGA或者全新的总线标准所改变。但万变不离其宗掌握接口协议、时序分析和软硬件协同设计的核心思想才是工程师应对各种技术变迁的立身之本。牛津半导体的这些芯片作为特定历史时期非常优秀的技术解决方案其设计思路和解决问题的方法依然值得我们仔细研究和借鉴。