问题:当连接到串行端口的串行设备上电时,我的 Ubuntu 操作系统无法处理两个串行端口。如何克服这个问题并防止我的端口崩溃?我该如何解决它?
症状概要:当两个串口转USB转换器连接到PC时(没有连接任何串口设备)一切正常;它们显示为 ttyUSB0 和 ttyUSB1。但是,一旦我将串行设备连接到它们并打开串行设备的电源,其中一个串行端口就会崩溃(它从 /dev 目录中消失)。这不是硬件问题或接线问题。操作系统中发生了一些事情,使我的头上出现了白发……您能帮忙吗?请继续阅读以了解详细信息。
我在联想笔记本电脑上运行 Ubuntu 14.04.3。
我现在可以用最少的硬件和软件重新创建错误。以下步骤重现问题:
我启动电脑。
PC 启动后,我运行
dmesg
并将输出保存到文件中。见https://pastebin.com/4fXxK1hV我插入了一个名为“Labjack U3”的 2.0 USB 设备。这是一个我不认为与此事非常相关的事实,但必须注意。
我将 RS422 插入 USB 设备,没有任何连接。我跑
lsusb
。它是Bus 003 Device 003: ID 0856:ac11 B&B Electronics
设备。输出是:Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 004: ID 04f2:b44d Chicony Electronics Co., Ltd Bus 001 Device 003: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad] Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 003: ID 0856:ac11 B&B Electronics Bus 003 Device 002: ID 0cd5:0003 LabJack Corporation U3 Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub`
我又跑
dmesg
了。输出在这里: https ://pastebin.com/uTGra1h7我跑
/dev
过去ls -l | grep USB
。串口出现:constructor@constructor-pc:~$ cd /dev constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0
我打开连接到 RS422 端口的设备。
/dev
orls -l | grep USB
和的输出没有变化lsusb
我将 RS232 连接到 USB 转换器。串行设备尚未连接到转换器。我跑了
lsusb
。它是Bus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
设备。输出是:constructor@constructor-pc:/dev$ lsusb Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 004: ID 04f2:b44d Chicony Electronics Co., Ltd Bus 001 Device 003: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad] Bus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 003: ID 0856:ac11 B&B Electronics Bus 003 Device 002: ID 0cd5:0003 LabJack Corporation U3 Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
接下来我在目录中运行
ls -l | grep USB
命令。/dev
这是输出:constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 crw-rw---- 1 root dialout 188, 1 Nov 21 18:47 ttyUSB1
到目前为止一切正常。我运行
dmesg
命令来捕获所有内容以进行故障排除。见:https ://pastebin.com/3kZNLtr6这时问题就出现了。我将串行设备连接到 RS232 到 USB 转换器。到现在一切都还可以。我打开串行设备的电源(通常这是控制我的原型的软件崩溃的地方)。我立即
ls -l | grep USB
多次运行该命令。这是输出:constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0`
您可以看到我丢失了一个串行端口!
现在我要找
dmesg
一个更有知识的人来做诊断。请参阅:https ://pastebin.com/sCYXeKa9
我在过去 5 天中得出的测试结论:
- 当一次只插入一个设备时,连接到 RS232 和 RS422 的串行设备的工作方式与制造商在手册中的描述完全相同。串行设备没有以任何方式发生故障或损坏。如果一次只插入一个设备,我可以与它通信并控制它,它运行正常。
- 所有设备的接线良好(使用图纸和仪表进行双重和三重检查)
- 我已经卸下了我正在使用的 USB 集线器,并且花了很长时间才弄清楚这不是集线器的错。
- 我已经排除了我用来读取串行数据的各种软件包(我觉得这篇文章中概述的步骤证明了这一点)。
- 有趣的是,我什至没有向串行设备发送或接收命令就发生了这个问题!当我打开连接到 RS232 到 USB 转换器的设备时,串行设备尚未发送消息(或者至少我不相信它是),但串行端口立即被操作系统丢弃。
附加信息:在提出这个问题后的上周,我购买了更多的串行到 USB 端口,以防其中一个出现故障,并且行为没有改变。我还用备用单元替换了导致端口在打开时崩溃的串行组件,并且行为没有改变。我还尝试了另一台 PC,但行为没有改变。
您能否提供解决此问题的答案?或者如何解决这个问题?
同样,如果我可以提供任何信息或运行任何命令,请不要犹豫让我知道!
这是一个电气问题,而不是 O/S 问题。我按照制造商的文档将设备的串行端口连接到 USB 到 RS485 转换器的串行端,方式如下:
最终解决此问题的是断开 gnd 到 gnd 的连接。一定有接地回路。