我在学校为一个机器人项目买了一台Variense VMU931惯性测量单元(IMU),我很难让它与Ubuntu的笔记本电脑进行可靠的通信。我使用C++和termios连接到它,使用8n1,没有奇偶,诸如此类。我已经尝试了我能想到的每一个设置的排列,但我仍然无法向IMU可靠地发送命令。
我给Variense支持部门打了电话,并与编写他们软件的工程师进行了交谈,他说这是一个众所周知的问题。显然,它在Windows中工作得很好( Windows演示软件在我的设备上运行得很好),但我们都不知道Windows中的USB串行仿真和Linux中的USB串行仿真有很大的不同。
该文件顶部的构造函数显示了如何打开和配置端口:
https://github.com/jsford/FFAST/blob/master/VMU931/src/vmu.cpp
任何帮助都会很好。我一直在为这件事而发狂!谢谢!
发布于 2017-10-27 09:36:56
使用cu实用程序运行具有不同参数的测试。
要调试这个问题:直接在Linux上运行带有Wireshark的USB数据包捕获,并在运行在VirtualBox/VmWare中的Windows上运行。比较一下交通情况。
检查为该USB设备选择并加载了哪个内核模块。为此使用/sys/文件系统:这个虚拟fs包含来自内核的关于使用什么的信息。此外,命令的lsmod-kind显示了内核模块的使用情况。USB的驱动程序选择取决于类似于<usb-manufacturer-id>:<usb-product-id>的内容。
将一些printf放到内核模块中,看看哪里失败了。使用DKMS构建系统重建内核模块。Linux中的某个地方有一个配置文件,用于黑名单/白名单内核模块--这对于确保正确的模块被加载非常有用。
这就是我在修复USB串行设备的驱动程序时所做的。
https://stackoverflow.com/questions/46967066
复制相似问题