0

是否有可能从 COM 端口的引脚读取值?Linux下的任何C语言解决方案都值得赞赏!

4

3 回答 3

2

是的,例如参见本指南

您使用该ioctl()功能来读取各种控制引脚。当然,最好通过正常read()处理读取数据,您不想轮询异步串行数据。

我不认为您的假设(在评论中表示)驱动程序必须检查引脚状态以处理数据是正确的,通常串行端口由UART “支持”并且通常处理硬件中的 RX/TX 引脚.

于 2013-03-01T10:58:26.723 回答
0

我很确定,你不能读/写 UART 的引脚。即使在硬件级别,您也必须读/写整个字节。没有位访问或读/写引脚访问。字节在接收/发送 UART 缓冲区中读取/写入。

无论哪种方式,您都不能直接访问缓冲区,Linux驱动程序将代表您完成这项工作。您只需要在应用程序中使用驱动程序即可使用 UART,UART 的 linux 驱动程序提供了标准 API,例如 open()、read()、write()、ioctl(),您可以通过这些 API 与 UART 进行交互设备。

如果你想和司机一起工作,并且是这个领域的新手,最好的起点 就是这本书。

于 2013-03-01T11:04:33.323 回答
0

这个问题的确切答案取决于所讨论的精确硬件。我知道我工作的一段代码,基于接收字母“a”作为比特率的指示,它会轮询 RX 引脚以检测 0 和 1 之间的转换以检测位的“宽度”,然后它将计算串行端口的正确时钟速率并配置串行端口以匹配另一端的比特率。

“PC”类型的硬件解决方案将无法读取 RX/TX 引脚。在其他硬件中,可能会这样做。许多嵌入式系统允许将各种引脚配置为输入、输出或“具有功能”(在我们的例子中,RX、TX、CTS、RTS 等) - 例如,您可以将 RX 引脚配置为输入,并因此读取它的状态。当然,普通的串口驱动程序可能会将这些引脚设置为“具有功能”[或者期望在内核启动之前运行的引导代码具有这种配置方式]。因此,您很可能必须在自己的某些内核代码中重新配置引脚。请注意,这可能会对实际串行端口的驱动程序造成意外的副作用 - 当它尝试对串行端口执行操作时,它可能会“感到不安”并且它是“

您几乎可以肯定地通过 IOCTL 调用读取(和/或写入)控制引脚的状态,例如 CTS、RTS。

于 2013-03-01T12:53:43.657 回答