Linux中USB上的串口发生了意外变化



我有一个自定义电子设备通过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下面的评论,测试平台对设备的轮询通常比实际应用程序快:这可能解释了为什么测试比其他应用程序表现得更好。

这个问题是由于电源管理:盒子决定设备是空闲的,并在一段时间后移除电源。然后,该设备显然会在几乎零的时间内再次激活。所以奇怪的行为

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

您可以尝试其他库,如'串行通信管理器',purejavacom等。看看问题是否还存在。我觉得,首先要确定到底是谁在制造问题;您的应用程序,串行库或驱动程序。然后继续前进。驱动程序已经过测试,可能库或应用程序可能有我们需要纠正的东西。

相关内容

  • 没有找到相关文章

最新更新