是否有可能知道串口是否在linux中连接/断开?

Raj*_* SO 3 linux-device-driver embedded-linux

是否可以在linux pc上查询特定的串口是否已连接/断开?我们有什么方法可以读取sysfs信息来查询特定端口是否连接?

Chr*_*ton 13

它取决于你所说的"连接"是什么意思.我将首先解决最不准确但最简单的含义.

端口的存在

如果你的意思是找出系统中是否存在端口本身,那么你可以检查是否存在支持它的加载模块,检查是否存在某个设备,例如/ dev/ttyS0或/ dev/ttyUSB0 ,验证您可以打开它(例如,我有一个/ dev/ttyS0设备文件存在于实际上没有该硬件的系统上).USB转换器可以热插拔,所以今天你可以看到实际的"串口"来来去去,在正在运行的系统.

"调制解调器"控制/状态信号

另一种可能性是你想知道是否有任何连接到端口的东西.这不是系统必须知道的东西.有一个调制解调器控制和状态信号,外设可以断言,你可以读取.然而,外围设备不需要使用它们,或者甚至以在调制解调器时代曾经有意义的方式使用它们.您可能发现自己连接的许多系统仅使用接收和发送数据线和接地.

通过接收数据进行检测

剩下的可能性是除了从中查找数据之外,可能无法判断端口是否已连接.某些外围设备可能会定期自动生成数据,因此您可以尝试阅读并查看是否有任何数据.对于其他人,您可以发送一个查询(希望不会有一个具有不良副作用的查询),并查看您是否收到了预期的响应.例如,如果您向其发送字符串"*IDN?\n",则大致实施SCPI标准的工具可能会回复一些识别信息.

另一个主要问题是您必须为端口和外设配置兼容的波特率和字格式.如果没有,您可能会得到看似随机的数据.你可能在某些情况下能够读取帧错误位出实现UART引擎(你必须检查驱动程序公开此),并用它作为一个迹象表明有可能存在的东西,但在错误的波特率率.

通过对来自另一端的硬件和预期数据的细粒度控制,也可以编写自动波特率检测例程,尽管通常在"外围"端而不是"主机"上实现.