【问题标题】:Serial Communnication over USB with a LIVE USB boot使用 LIVE USB 启动通过 USB 进行串行通信
【发布时间】:2016-10-19 14:36:37
【问题描述】:

应用程序通过 USB 使用串行通信,并且在 PC 从 HDD 启动时工作正常。

我创建了工作操作系统的 liveUSB 映像 (.iso)。 从包含 .iso 映像的 USB 驱动器启动同一台 PC。

现在,DUT 已连接并运行应用程序,它报告大部分时间都有Garbage on the Line。但是,它在某些尝试中确实有效,但非常不一致。

我不明白从 Live USB 启动与从 HDD 启动有何不同。

仅供参考,PC 有 Fedora Core 22 和 4.0.4 Linux 内核。

串行通信:波特率为 115200,带 1 个停止位。

非常感谢任何帮助。

谢谢,

沙哈布

编辑

我查了dmesg,发现有区别,

cdc_acm : failed to set dtr/rts 在 Live USB 启动时。在另一种情况下看不到。类似于 stackoverflow 上的 question

另一个观察结果是,当设备连接并且 PC 从 Live USB 记忆棒启动时,串行通信工作正常。如果设备的 USB 数据线被拔下并重新插入,则会报告该问题。

【问题讨论】:

  • Live USB 和 HHD 具有不同的 MBR。这也取决于 BIOS 如何格式化或显示 USB 记忆棒。某些 BIOS 可能允许您选择:HDD、FDD 等。
  • @EugenKonkov 感谢您的评论。但是,我不明白 MBR 是如何导致串行通信中断的。
  • 您的应用程序需要像 HDD 这样的格式的数据,但您以不同的格式 (ISO) 获得它。因此,您不会收到上面显示的错误。您可以逐字节比较两种情况下收到的内容吗?将接收到的数据转储到文件,然后将数据从文件重定向到您的应用程序。如果您的应用程序在您从文件重定向数据时不会发出错误,您将确定问题符合要求。如果会发出错误,那么问题出在数据中。
  • @EugenKonkov 抱歉,我忘了在问题中添加细节。 “垃圾并不总是报告,有时它工作正常。我只是不断断开/连接设备的 USB 电缆,有时它可以工作”。虽然它在本机操作系统上 100% 运行。

标签: linux boot usbserial fedora-21


【解决方案1】:

重新连接 USB 电缆后,您的串行端口号可能会增加,并且您将有一个死 /dev/ttyUSB0 和一个新的工作 /dev/ttyUSBX。由于您的应用程序保持 /dev/ttyUSB0 处于打开状态,因此在您重新启动应用程序之前它不会被删除。继续阅读旧的 ttyUSB0,你会得到垃圾。 第二个提示是,您可能在实时启动时拥有只读文件系统,因此您无法在 /dev 文件夹中创建任何新内容,因此新设备不会出现。

【讨论】:

  • 感谢您的回答。但是,我观察到该设备每次使用dmesg 命令时都会显示为/dev/ttyACM0
  • 我每次都重新启动我的应用程序,我重新插入设备。我杀死了我的应用程序,然后重新插入了设备;只有在它被检测为/dev/ttyACM0 之后,我才启动应用程序。
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2013-11-02
相关资源
最近更新 更多