我的自定义电子设备通过 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 评论添加,测试台通常比真正的应用程序更快地轮询设备:这可能解释了为什么测试性能比另一个更好。