牛津半导体桥接芯片:PCIe转Local Bus与多串口扩展实战指南
2026/6/5 13:10:01 网站建设 项目流程

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是四串口UART,OX16C950是单串口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:这是PCMCIA(PC卡)或CompactFlash接口转串口的经典芯片。在笔记本电脑还是标配PCMCIA插槽的年代,它是扩展串口的主流方案。OXCFU950还集成了USB Host功能。
  • OXCB950:CardBus(32位PCMCIA)接口转串口芯片。
  • OXUSB950/954:USB接口转单串口/四串口芯片。为设备添加USB转串口功能提供了单芯片方案,比外置的USB转串口线方案更集成化。

注意:选型时,务必查阅官方数据手册的“订购信息”部分。同一个基型号(如OX16PCI954)可能有多个后缀,代表不同的封装(如LQFP、BGA)、温度范围(商业级、工业级)以及是否包含铅(RoHS)。工业级应用必须选择宽温型号。

3.2 高速存储与USB桥接方案(选读参考)

虽然与本次主题关联度稍低,但作为知识扩展,了解牛津半导体在其他领域的实力有助于理解其技术底蕴。其FireWire(1394)和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从设备接口。我们选择使用OX9160(PCI to Local Bus)芯片,但主板只有PCIe插槽。怎么办?这就需要组合方案。

4.1 系统方案设计

由于OX9160是PCI设备,而主板提供PCIe插槽,我们需要一个“PCIe to PCI”的桥接芯片作为中间层。PLX Technology(巧了,后来收购了牛津半导体)的PEX8112PEX8114就是干这个的经典芯片。所以系统链路变为: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,多串口芯片的应用更为普遍。以OX16PCI954(PCI四串口芯片)为例,它的硬件设计和驱动开发已经非常标准化,但仍有不少细节需要注意。

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 io=0x1000,0x1008 irq=10(具体参数名需查驱动源码)。

3. 用户空间配置:使用sttysetserial工具可以配置串口参数。对于RS-485自动方向控制,可能需要特定的ioctl命令来开启。这些信息通常在内核驱动的文档或头文件中有说明。

常见问题与排查技巧:

  1. 问题:系统识别到了卡,但/dev/ttySX无法打开,或收发数据全错。排查:首先,用dmesg | grep oxdmesg | grep tty查看内核启动信息,确认驱动是否成功探测并注册。其次,用示波器测量串口TX引脚,发送数据时应有波形。如果没波形,检查电平转换芯片的供电和使能。如果波形有但数据错,检查波特率设置(计算器算一下)和时钟源精度。
  2. 问题:多串口卡在高负载下丢数据。排查:检查UART的FIFO设置。默认的16550驱动可能只使用1字节触发深度。对于OX16PCI954这类带大FIFO的芯片,需要在驱动中或通过setserial命令启用并设置更大的FIFO触发深度(例如16字节或64字节),以减少中断次数,提升吞吐量。
    setserial /dev/ttyS4 fifo 64
  3. 问题: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,或者全新的总线标准所改变。但万变不离其宗,掌握接口协议、时序分析和软硬件协同设计的核心思想,才是工程师应对各种技术变迁的立身之本。牛津半导体的这些芯片,作为特定历史时期非常优秀的技术解决方案,其设计思路和解决问题的方法,依然值得我们仔细研究和借鉴。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询