直接访问PCI串口

你好,我有一个应用程序内置在C ++前几次。

它用于通过串口控制设备。

我记得那个开发它的人说他的软件直接访问串口(直接访问内存)。

由于目前使用串行端口的个人电脑变得很less,如果使用PCI扩展串口,软件是否还能直接访问串口?

谢谢

这取决于您的PCIe串行端口具有多少向后兼容的驱动程序支持。

如果它提供(可能是虚拟的) 16550 UART的寄存器的直接I / O空间映射,则需要更改软件中的“基址”,但这可能起作用。 如果司机不这样做,那么这是行不通的。

前四个标准串行端口具有以下基地址和与其相关的中断:

| base IRQ ----------------- COM1 | 0x3f8 IRQ4 COM2 | 0x2f8 IRQ3 COM3 | 0x3e8 n/a COM4 | 0x2e8 n/a 

应该重写软件以使用更高级别的端口。

我相信绝大多数本地总线串行端口卡模拟一个16×50 RS-232 UART 。 除非你打算使用一些特殊的卡,例如那些用于管理调制解调器银行的昂贵的多端口卡,否则可能会好的。

USB / RS-232转换器完全不同,通常它们不能直接访问串行端口的软件,因为它们的驱动程序只能通过OS串行端口子系统访问。 即使他们的驱动程序设法模拟一个适当的本地总线UART,这些转换器通常具有不同的行为,信号时序可能会导致与串行端口做不寻常的事情的软件的问题。 例如,我在将IR遥控接收器连接到某些USB / RS-232转换器时遇到了问题。 使用支持USB 2.0的转换器有一定的帮助,但与实际情况相差甚远。

您还应该记住,如果您的应用程序是为较旧的操作系统而设计的,则该操作系统的较新版本可能不允许再直接访问串行端口。

如果一切都失败了,您可能仍然可以通过使用虚拟机来改善这种情况。 例如, VirtualBox允许访客操作系统访问主机串行端口,模拟16550A UART。 这可能允许您解决不支持或不允许直接访问串行端口的驱动程序或操作系统。

我周围搜索,发现一些PCI卡,将他们的串行端口映射到内存。 我会尝试其中的一个。

谢谢你们。

我有另一个解决方案。 电脑主要是USB端口。 所以你可以使用任何USB串口转换器。 这是非常便宜,工作正常。