繁体   English   中英

直接访问PCI串口

[英]Direct access PCI serial port

您好,我有一个很久以前用C ++构建的应用程序。

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

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

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

谢谢

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

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

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

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

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

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

USB / RS-232转换器完全不同 - 通常它们不能与直接访问串行端口的软件一起使用,因为它们的驱动程序仅通过OS串行端口子系统提供访问。 即使他们的驱动程序以某种方式设法模拟适当的本地总线UART,这些转换器通常具有不同的信号时序行为,这可能导致与串行端口执行异常事务的软件出现问题。 例如,我遇到了将红外遥控接收器连接到某些USB / RS-232转换器的问题。 使用支持USB 2.0的转换器有所帮助,但它仍然远非真实的东西。

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

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

我四处搜索,发现一些PCI卡将其串口映射到内存。 我会尝试其中一个。

谢谢你们。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM