老旧并口设备接入工控机:三条改造路线的能力边界与判断顺序

  2026-11-03   hermes     4   0  

为什么这件事要先判断、再买卡

产线上还在跑的并口设备,通常是老式针式打印机、标签打标机、老款测试仪器或早期数控系统的通信口。主机换代时,这些设备往往还能用,问题出在主机这一端:新工控机基本不再提供板载并口。于是现场常见的做法是买一块“转并口”的卡或线,插上试。试不通再换一个型号,几次下来时间和成本都花掉了。

多数失败并不是卡坏了,而是路由选错了层次:设备需要的是寄存器级的并口访问或 EPP/ECP 的反向通道,而买来的方案只提供单向打印通道。这篇文章给出一套判断顺序,先把手上的设备归类,再决定走哪条路线,最后给出可以在采购前就跑完的验证清单。

第一步:确认设备用的是哪一种“并口”

IEEE 1284 定义的并不只是一个 25 针接口,而是五种工作模式。设备真正依赖的是其中某一种模式的握手方式与数据方向,这一点决定了后面所有选择。

模式数据方向速率量级典型用途
Compatibility(SPP)单向,主机到设备几十至数百 KB/s传统针式/票据打印机
Nibble反向 4 位低打印机状态回读、模式协商的起点
Byte(反向)反向,8 位并行(设备到主机)中等早期扫描仪、需要读回数据的设备
EPP半双工,8 位双向最高约 2 MB/s扫描仪、存储设备、采集类外设
ECP半双工,8 位双向最高约 2.5 MB/s需要 DMA 与压缩的高速外设

几个关键事实需要先建立:IEEE 1284 各模式的实际速率上限大致为 EPP 约 2 MB/s、ECP 约 2.5 MB/s,系统整体吞吐通常按 2.5 MB/s 量级描述,实际往往更低;EPP 由 Intel、Xircom、Zenith 在 1991 年提出,把普通并口的速率提高了约一个数量级;ECP 由 HP 与 Microsoft 随后提出,在 x86 平台上传统上依靠 ISA 风格的 DMA(常见为通道 3)搬运数据,并支持行程编码压缩。所有模式都使用 TTL 电平,这是并口电缆长度通常只能做到数米的根本原因;线材的屏蔽、电容与走线同样影响可用长度。

还要注意一点:按 IEEE 1284 的描述,双向通信需先通过 Nibble 模式完成协商。主机收不到回应,就按传统打印机处理,退回 Compatibility 模式;收到回应后,双方再协商出共同支持的最快模式。这条规则解释了大量“新卡带老设备不工作”的现象——老设备可能根本不参与协商。

第二步:软件是怎么访问并口的(真正的分水岭)

模式只是第一层,真正决定路线的是上位软件访问并口的深度。按侵入程度从深到浅排列:

  1. 直接端口 I/O:程序里出现 0x378 这类固定地址,或用 inp/outp、inportb/outportb 一类的调用直接读写数据、状态、控制三个寄存器。这种软件要求主机端存在地址兼容的真实并口寄存器,任何“看起来像打印机”的转接方案都不满足。
  2. LPT 驱动 + 模式控制:通过操作系统的并口设备节点或驱动接口访问,允许指定 SPP/EPP/ECP 模式。这类软件需要驱动把模式设置真正下发到控制器。
  3. 打印子系统:只把字节流交给打印机队列,不关心寄存器与时序。这类软件对底层是板载并口、扩展卡还是 USB 转接线最不敏感。
  4. 厂商自带驱动或 DLL:设备厂商提供中间层,底层由它自己适配。此时要问的是“这个驱动支持哪些主机接口”,而不是并口本身。

判断方法很直接:找到上位软件的安装目录,检查是否出现固定端口地址、inpout32/dlportio 之类的端口访问库,或文档里是否要求“设置 LPT 端口地址”。出现任一项,就应当按第 1 类处理,路线选择空间会立刻收窄。

第三步:三条路线的能力边界

路线一:板载并口

这是兼容性最好的方案:并口由主板上的超级 I/O(Super I/O)芯片提供,传统 I/O 地址与 IRQ、DMA 资源由 BIOS 分配,BIOS 里通常还能选择 SPP、EPP、ECP/EPP 自动。但近十年的商用与工控主板大多已经取消了板载并口,只在部分带超级 I/O 芯片的工业主板上保留。如果现役机型还有,优先用它,可以省掉整轮验证。

路线二:PCIe 转并口卡

由桥接芯片在 PCIe 与传统并口之间做转换,向系统暴露并口寄存器与中断资源。Linux 的 parport_pc 就负责这类 PCI 并口卡,I/O 基地址由系统自动探测,不需要手工指定。这类卡的强项是寄存器级访问、可设置 EPP/ECP 模式、时序由本地总线保证,适合直接端口 I/O 的存量软件和需要反通道的设备。代价是占用一个插槽、需要对应操作系统的驱动,并且在 UEFI 平台上要确认传统 I/O 资源确实分配给了这张卡。

路线三:USB 转并口

这类产品大多以 USB 打印机类设备的形式工作,在系统里表现为一个字符打印机或 /dev/usblp 设备。常见型号只实现 IEEE 1284 的单向兼容模式,也就是说:只往设备写数据可以,反向通道、EPP、ECP 基本没有。少数芯片(例如 USS720 一类)提供寄存器模式,能暴露 PCSPP、TRISTATE、COMPAT、EPP、ECP 等模式位,但仿真速度慢,时序敏感的应用仍可能失败。结论很清楚:USB 转并口适合纯打印场景,不适合需要寄存器访问、反通道或严格时序的设备。

能力项板载并口PCIe 转并口卡USB 转并口
寄存器级访问(固定端口地址)支持支持一般不提供
Nibble/Byte 反向通道支持支持取决于芯片,常见型号不支持
EPP / ECP 模式BIOS 可选芯片与驱动支持少数寄存器模式芯片支持,速度受限
ECP 的 DMA 搬运需要 DMA 通道取决于桥接芯片实现不适用
时序确定性高高低(受 USB 调度影响)
驱动与系统适配系统自带Linux 常由 parport_pc 支持,Windows 视卡而定多数系统自带打印机类驱动;部分工业型号为厂商私有类
占用资源—一个插槽 + I/O 资源一个 USB 口

第四步:把场景落到路线上

把前两步的结论组合起来,现场常见的几种情形基本可以直接定路线:

  • 只打印票据或标签,软件走打印驱动:三条路线都能用。优先 USB 转并口,省插槽;需要长时间连续打印、担心 USB 调度抖动的,选 PCIe 卡。
  • 软件直接读写 0x378 之类的固定地址:只能用 PCIe 转并口卡(或板载并口)。要注意并非所有 PCIe 并口卡都会被分配到 0x378,需确认卡支持传统地址解码、或软件允许修改基址;选定后在系统里确认 I/O 资源已分配、地址与软件配置一致。
  • 设备是扫描仪、老式存储或需要读回数据:按 EPP/Byte 处理,选 PCIe 卡,并实测反向通道能否正常读取。
  • 设备使用 ECP 且依赖 DMA 吞吐:选 PCIe 卡,同时确认桥接芯片与驱动是否真正实现了 ECP 的 DMA 路径;只标注“支持 ECP”不等于 DMA 可用。
  • 一台主机挂多台并口设备:IEEE 1284.3 定义了菊花链方式,最多可接 8 台,但要求设备与主机都支持该扩展,实际项目里更常见的做法是插多口卡或分主机。
  • 多功能外设走 1284.4 逻辑通道:这类设备依赖 IEEE 1284.4 的多路数据交付能力,需要驱动明确支持,选型前应向设备厂商确认,而不是自行推断。

第五步:采购前的验证清单

以下五项可以在正式采购或批量改造前完成,成本很低,能挡掉大部分返工:

  1. 查模式位:Linux 下查看 /proc/sys/dev/parport/parport0/modes,会列出 PCSPP、TRISTATE、COMPAT、EPP、ECP 等模式位,以及 DMA 能力位(DMA 是资源能力,不属于 IEEE 1284 的工作模式);同一目录下的 base-addr、irq、dma 文件分别给出地址、中断与 DMA 资源。没有列出的能力,驱动不会去用。
  2. 确认中断资源:按内核文档说明,parport 当前实现只有在端口有可用 IRQ 时才会启用 COMPAT 与 ECP 的硬件加速;没有 IRQ 时仍能以轮询方式工作,但高速传输会明显变慢,ECP 的 DMA 加速还需要可用的 DMA 通道。
  3. 确认 ECP 的 DMA 通道:需要走 DMA 时,BIOS 要把并口设为 ECP 并记下 DMA 通道,驱动侧也要按该通道加载(例如 dma=3);两者不一致时,实际退化为 PIO。
  4. 实测反向通道:用一个会读回状态或数据的设备跑一次完整流程,而不是只打印一页测试页。打印正常但读回失败,说明反向模式没有协商成功。
  5. 按最坏情况算时序:连续传输几十分钟,观察是否出现丢字符、重复行或设备报错;并口是 TTL 电平,电缆长度以米计,长线与强干扰环境要单独评估屏蔽与走线。

常见误判

  • “USB 转并口能替代并口卡”:只在纯打印场景成立。设备一旦需要寄存器访问或反向通道,这条路线基本走不通。
  • “BIOS 里设成 EPP/ECP 自动就行”:不支持 1284 协商的老设备可能无法进入双向模式,需要把控制器强制到更基础的模式再试。
  • “端口地址随便配”:传统 I/O 地址、IRQ 与 DMA 都是共享资源,与其它 legacy 设备冲突时表现为时通时不通,而不是直接报错。
  • “按标称上限估产能”:EPP 约 2 MB/s、ECP 约 2.5 MB/s 是模式上限,实际吞吐受设备机械结构与处理能力制约,通常更低,不能用上限直接推算节拍。

写在最后

并口改造的难点不在接口本身,而在“设备的模式要求 + 软件的访问深度”这两个变量的组合。先把这两项确认清楚,三条路线的取舍就变成了查表;反过来,先买卡再试,等于把这两个未知量交给运气。文中给出的速率与模式值取自 IEEE 1284 标准的技术资料与操作系统驱动文档,具体设备的实现细节仍应以设备手册和芯片数据手册为准。

客服微信:18025338165点击复制并跳转微信