我将插入的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,如果以下设备已插入设备。
感谢。
答案 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的输出,例如