你好,我有一个以前用 C++ 构建的应用程序。
它用于通过串行端口控制设备。
我记得开发它的人说他的软件是直接访问串口(直接访问内存)。
由于现在带串口的PC越来越少,如果我使用PCI扩展串口,软件还会直接访问串口吗?
谢谢
你好,我有一个以前用 C++ 构建的应用程序。
它用于通过串行端口控制设备。
我记得开发它的人说他的软件是直接访问串口(直接访问内存)。
由于现在带串口的PC越来越少,如果我使用PCI扩展串口,软件还会直接访问串口吗?
谢谢
我相信绝大多数本地总线串行端口卡都模拟16x50 RS-232 UART。除非您打算使用一些特殊的卡,例如那些用于管理调制解调器组的昂贵的多端口卡,否则可能没问题。
USB/RS-232 转换器完全是另一回事——通常它们不能与直接访问串行端口的软件一起使用,因为它们的驱动程序只提供通过 OS 串行端口子系统的访问。即使他们的驱动程序以某种方式设法模拟适当的本地总线 UART,这些转换器通常具有不同的行为 wrt 信号时序,这可能会导致对串行端口执行异常操作的软件出现问题。例如,我在将红外遥控接收器连接到某些 USB/RS-232 转换器时遇到了问题。使用支持USB 2.0的转换器会有所帮助,但与实际情况相去甚远。
您还应该记住,如果您的应用程序是为较旧的操作系统设计的,则该操作系统的较新版本可能不再允许直接访问串行端口。
如果一切都失败了,您仍然可以通过使用虚拟机来改善这种情况。例如,VirtualBox允许客户操作系统访问主机串行端口,模拟 16550A UART。这可能允许您解决不支持或不允许直接访问串行端口的驱动程序或操作系统。
这在一定程度上取决于您的 PCIe 串行端口有多少向后兼容的驱动程序支持。
如果它提供(可能是虚拟的)16550 UART寄存器的直接 I/O 空间映射,您将需要更改软件中的“基地址”,但它可能会起作用。如果驱动程序不这样做,那么它将无法正常工作。
前四个标准串行端口具有以下基地址和与之相关的中断:
| base IRQ
-----------------
COM1 | 0x3f8 IRQ4
COM2 | 0x2f8 IRQ3
COM3 | 0x3e8 n/a
COM4 | 0x2e8 n/a
该软件可能应该被重写以使用对端口的更高级别的访问。
我四处搜寻,发现一些将它们的串行端口映射到内存的 PCI 卡。我会尝试其中之一。
谢谢你们。
我有另一个解决方案。个人电脑主要配备 USB 端口。因此您可以使用任何 USB 转串口转换器。它非常便宜并且工作正常。