0

我的自定义电子设备通过 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 请求。什么会导致这些奇怪的行为?

根据下面的@DarkFalcon 评论添加,测试台通常比真正的应用程序更快地轮询设备:这可能解释了为什么测试性能比另一个更好。

4

2 回答 2

0

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

于 2015-11-06T08:34:37.100 回答
-1

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

您可以尝试其他库,如“串行通信管理器”、purejavacom 等。看看问题是否仍然存在。我觉得,首先确定谁实际上在制造问题;您的应用程序、串行库或驱动程序。然后相应地前进。驱动程序已经过测试,可能库或应用程序可能有我们需要纠正的问题。

于 2015-06-23T05:10:35.617 回答