首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >直接访问PCI串行端口

直接访问PCI串行端口
EN

Stack Overflow用户
提问于 2012-06-01 18:03:49
回答 4查看 1.7K关注 0票数 5

您好,我有一个应用程序在几年前在C++构建。

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

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

由于现在具有串口的PC越来越少,如果我使用PCI扩展串口,软件还能直接访问串口吗?

谢谢

EN

回答 4

Stack Overflow用户

发布于 2012-06-01 18:08:00

这在一定程度上取决于您的PCIe串行端口对向后兼容驱动程序的支持程度。

如果它提供了一个(可能是虚拟的)16550 UARTregisters的直接I/O空间映射,你将需要改变软件中的“基址”,但之后它可能会工作,如果驱动程序不能工作,那么它就不会工作。

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

代码语言:javascript
复制
     | base   IRQ 
-----------------
COM1 | 0x3f8  IRQ4
COM2 | 0x2f8  IRQ3
COM3 | 0x3e8  n/a
COM4 | 0x2e8  n/a

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-02 06:26:02

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

USB/RS-232 converters则完全是另一回事--一般来说,它们不能与直接访问串行端口的软件一起工作,因为它们的驱动程序只提供通过操作系统串行端口子系统的访问。即使它们的驱动程序设法模拟了适当的本地总线UART,这些转换器通常具有不同的行为w.r.t。可能导致软件对串行端口执行不寻常操作的信号计时问题。例如,我在将IR remote control receivers连接到一些USB/RS-232转换器时遇到过问题。使用支持USB 2.0的转换器在一定程度上有所帮助,但它仍然离真正的东西很远。

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-01 20:16:04

我四处寻找,发现一些PCI卡将它们的串行端口映射到内存。我将尝试其中的一个。

谢谢你们所有人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10848253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档