是否可以从 COM 端口的引脚读取值?任何 Linux 下的 C 解决方案都值得赞赏!
这个问题的确切答案取决于所讨论的精确硬件。我知道我工作的一段代码,基于接收字母“a”作为比特率的指示,它会轮询 RX 引脚以检测 0 和 1 之间的转换,以检测位的“宽度”,然后它会计算串行端口的正确时钟速率并配置串行端口以匹配另一端的比特率。
“PC”型硬件解决方案将无法读取 RX/TX 引脚。在其他硬件中,也许可以这样做。许多嵌入式系统允许将各种引脚配置为输入、输出或“具有功能”(在我们的例子中,RX、TX、CTS、RTS 等) - 例如,您可以将 RX 引脚配置为输入,从而读取它的状态。当然,普通的串行端口驱动程序可能会将这些引脚设置为“具有功能”[或者期望在内核启动之前运行的引导代码以这种方式进行配置]。因此,您很可能必须在自己的某些内核代码中重新配置引脚。请注意,这可能会对实际串行端口的驱动程序造成意外的副作用 - 当它尝试对串行端口执行操作时,它可能会“感到不安”,并且由于“配置错误”而“未按预期工作”。
您几乎肯定可以通过 IOCTL 调用读取(和/或写入)控制引脚的状态,例如 CTS、RTS。
我很确定,您无法读取/写入 UART 引脚。 即使在硬件级别,您也必须读/写整个字节。没有位访问或读/写引脚访问。 字节在接收/发送 UART 缓冲区中读取/写入。
无论哪种方式,你都不能直接访问缓冲区,Linux 驱动程序将代表你完成这项工作。您只需在应用程序中使用驱动程序即可使用 UART,UART 的 Linux 驱动程序提供了标准 API,例如 open()、read()、write()、ioctl(),您可以通过它们与 UART 交互设备。
如果您想与司机合作,并且是这个领域的新手,最好的起点是 这本书。