直接访问PCI串口

时间:2012-06-01 10:03:49

标签: c++ c windows serial-port

您好我以前在C ++中构建了一个应用程序。

用于通过串口控制设备。

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

由于具有串行端口的PC现在变得罕见,如果我使用PCI扩展串口,软件是否仍会直接访问串口?

由于

4 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

我相信绝大多数local bus串口卡都会模拟16x50 RS-232 UART。除非您打算使用某些特殊的卡,例如用于管理调制解调器组的昂贵的多端口卡,否则它可能会很好。

USB/RS-232 converters完全不同 - 通常它们不能与直接访问串行端口的软件一起使用,因为它们的驱动程序仅通过OS串行端口子系统提供访问。即使他们的驱动程序设法模拟适当的本地总线UART,这些转换器通常也会有不同的行为w.r.t.信号时序可能会导致与串行端口执行异常操作的软件出现问题。例如,我遇到了将IR remote control receivers附加到某些USB / RS-232转换器的问题。使用支持USB 2.0的转换器有所帮助,但它仍然远非真实。

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

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

答案 2 :(得分:0)

我在周围搜索时发现了一些将其串口映射到内存的PCI卡。 我会尝试其中一个。

谢谢大家。

答案 3 :(得分:-2)

我有另一个解决方案。 PC主要是usb端口。 所以你可以使用任何usb到串口转换器。它非常便宜并且工作正常。