Linux中的USB串口改变意外

时间:2015-05-15 13:31:13

标签: java linux centos jssc

我的自定义电子设备在USB接口上通过RS232与工作站通信时出现问题。 一旦设备连接,它就会收到地址/dev/ttyUSB0,在发送接收命令的一些(随机)时间后,设备似乎挂起。 通过查看设备事件(dmesg),我们发现了以下错误:

ftdi_sio ttyUSB0: failed to get modem status: -32
...
USB disconnect, device number 29
[66208.321174] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[66208.497613] usb 1-1.5: new full-speed USB device number 30 using ehci-pci
[66208.589052] usb 1-1.5: New USB device found, idVendor=0403, idProduct=6001
[66208.589055] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3

显然系统注意到设备断开/重新连接,因此,设备被安装到另一个端口,即/ dev/ttyUSB1,导致进一步的通信故障。 创建测试平台会改变行为:错误似乎不那么频繁,而使用完整的应用程序时,错误会反复出现。 应用程序使用jSSC-2.8.0与串行端口通信。整个应用程序是用java 8编写的,并使用Restle库向某些Web服务发出一些REST请求。 什么可以导致这些奇怪的行为?

ADDED 根据下面的@DarkFalcon评论,测试床通常比实际应用更快地轮询设备:这可能解释为什么测试穿孔比另一个好。

2 个答案:

答案 0 :(得分:0)

问题是由于电源管理:盒子决定设备处于空闲状态,经过一段时间后它就会断电。然后该设备在几乎0次内显然再次活跃起来。所以奇怪的行为

答案 1 :(得分:-1)

由于管道损坏,驱动程序会打印此错误。请参阅驱动程序文件ftdi_get_modem_status()中的drivers/usb/serial/ftdi_sio.c

您可以尝试其他图书馆,例如'串行通讯管理器',purejavacom等。并查看问题是否仍然存在。我觉得,首先要确定谁在创造问题;您的应用,序列库或驱动程序。然后相应地前进。驱动程序已经过测试,可能是库或应用程序可能有我们需要纠正的问题。