我为学校的机器人项目购买了一个 Variense VMU931 惯性测量单元 (IMU),我正在努力让它与我在 Ubuntu 中的笔记本电脑进行可靠通信。我将 C++ 与 termios 一起使用,使用 8n1 无奇偶校验等连接到它。我已经尝试了我能想到的所有设置排列,但我仍然无法可靠地向 IMU 发送命令。
我调用 Variense 支持并与编写他们软件的工程师交谈,他说这是一个已知问题。显然它在 Windows 中运行良好(Windows 演示软件在我的设备上运行良好),但我们都不知道 Windows 和 Linux 中 USB 串行仿真之间的显着差异。
此文件顶部的构造函数显示了我如何打开和配置端口:
https://github.com/jsford/FFAST/blob/master/VMU931/src/vmu.cpp
任何帮助都会很棒。我一直为此焦头烂额! 谢谢!
最佳答案
使用 cu
用于运行具有不同参数的测试的实用程序。
调试问题:直接在 Linux 上使用 Wireshark 运行 USB 数据包捕获,也在运行在 VirtualBox/VmWare 中的 Windows VM 上运行。比较流量。
检查为该 USB 设备选择并加载了哪个内核模块。使用 /sys/
为此的文件系统:这个虚拟文件系统有来自内核的关于使用什么的信息。此外,lsmod
-kind 命令显示内核模块的使用情况。 USB 的驱动程序选择取决于类似 <usb-manufacturer-id>:<usb-product-id>
的内容.
放一些printf
s 进入内核模块,看看哪里失败了。使用 DKMS 构建系统重建内核模块。 Linux 中某处有一个配置文件,用于将内核模块列入黑名单/白名单 - 有助于确保加载正确的模块。
这就是我修复 USB 串行设备驱动程序的工作。
关于c++ - Windows 和 Linux 中 USB 串口的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46967066/