检查我在linux中使用的串口

时间:2012-10-02 00:50:04

标签: c linux linux-kernel serial-port

我将插入的usb-serial设备插入我的Windows并使用virtualbox进行串行映射,例如COM1 - >的/ dev / ttyS0来..

现在我怎么知道我的设备正在使用哪个串口...我现在知道我正在使用/ dev / ttyS0。但是如果我不知道怎么办?Linux Debian正在启动时创建这个永久串口设备/ dev / ttyS0-S3。

我怎样才能测试/ dev / ttyS0是我在c中使用的真实端口。

这是我的测试方式,如果它是正确的端口。

devfd=open("/dev/ttyS0",O_WRONLY | O_NOCTTY | O_NDELAY);

        if(s_fd<0) exit(1);

        printf("open\n");    //It will always return true printing open because this device is created on boot time and is always available. so i made another check and that is to write to the port(Assuming i have set the permission to have full access to the serial port). if i can write to the port then it means it is really the port im using.

test=write(devfd,"ATZ",4);

if(test<0) printf("Can't write to port: Maybe not the serial port ur using\n");

printf("Device is avaialable\n");  // returns true because we can write to the port

您能否告诉我其他样品如何检查串口是否有设备插入该串口?

或者在c中测试以下串口/ dev / ttyS0 - / dev / ttyS3,如果以下设备已插入设备。

感谢。

2 个答案:

答案 0 :(得分:0)

正如您所说,Standard Serial ports被映射为/ ttyS0,/ ttyS1,.... 通用USB Serial Ports以及大多数G3 modems可通过/dev/ttyUSB0

访问/dev/ttyUSB255

区分串口与调制解调器“连接”的更好方法是将ATIx命令发送到串口。这些是Identity命令,可用于检测设备的型号名称和许多其他详细信息。

首先,您尝试发送ATIx命令而不更改波特率。如果您没有收到任何有效回复(ASCII多行文字后跟OK<CR><LF> ERROR...<CR><LF>,那么您可以更改波特率并重试。最好先设置支持的最大值端口速度,然后降低它,直到你找到一个调制解调器或你最终得到110波特或其他合理的限制。

有一种方法可以检测是否很可能没有连接到串行端口。背后的想法是检测在一段合理的时间内持续存在的帧错误(以选定的波特率接收一个字节几十次),比如2-3秒。要查看启用/禁用帧错误检测如何查看man termios。但是,我并不完全确定在你描述的设置中这是可能的(从VM内部),所以你必须尝试。

另请查看此帖How to connect to a terminal to Serial-USB device on Ubuntu 10.10?

答案 1 :(得分:0)

请注意,我根据经验发现,写入串口进行测试会产生可怕的后果;当我的脚本挂起时(但仅当在ESXi管理程序上运行时)尝试测试写入已断开连接的设备时

如果有帮助,这是一种更安全的检查方式

cat /proc/tty/driver/serial | \
    grep -v unknown | \
    sed 's/^/ttyS/g'

然后检查ttyS0的输出,例如