大家好,我的问题如下:
我有一个嵌入式设备为Linux系统,将主板上的一个USB口连接一个USBHub扩展出多个USB口连接到多个不同的设备。由我的程序控制设备进行一些自动化工作。当其中的某个设备出现异常问题时,程序会自动的对USB口上挂接的设备进行断电和上电的复位操作,相当于拔插了一次设备,以此来恢复设备的工作。通过大规模测试,发现如下问题:
1、当对某一个USB口上的设备进行断电上电的复位操作时,有时会影响该USBHub上的其它USB口设备,造成其它USB口设备短暂性的没有数据输出;
2、在某些异常情况下,会连续不断的对某个USB口上的设备进行断电上电的复位操作,知道设备正常为止,但这种频繁的复位操作往往造成USB设备不能正常挂载,造成设备丢失。错误信息如下:
Mar3003:28:14KnowYouLinuxkernel:usb1-6.2:newfullspeedUSBdeviceusingehci_hcdandaddress49
Mar3003:28:29KnowYouLinuxkernel:usb1-6.2:devicedescriptorread/64,error-110
Mar3003:28:44KnowYouLinuxkernel:hub1-6:1.0:unabletoenumerateUSBdeviceonport2
哪位大侠能否解释一下上述现象的原因,驱动问题?跟autosuspend有关?还是其它。
|
1、当对某一个USB口上的设备进行断电上电的复位操作时,有时会影响该USBHub上的其它USB口设备,造成其它USB口设备短暂性的没有数据输出;
//感觉是电源问题,测试下板子和usb的整体供电,或者换个大些电流的电源,这是我的常规做法,
如果是生产类似的现场还要特别数据线尽量做短些,严格考虑抗干扰问题,因为usb是高速通讯,细节要考虑
2、在某些异常情况下,会连续不断的对某个USB口上的设备进行断电上电的复位操作,知道设备正常为止,但这种频繁的复位操作往往造成USB设备不能正常挂载,造成设备丢失。错误信息如下:
//看看linux/drivers/usb/core/hub.c的源码:
staticintold_scheme_first=0;
改为
staticintold_scheme_first=1;
#defineSET_ADDRESS_TRIES2
改为
#defineSET_ADDRESS_TRIES4
主要是usb设备兼容性问题,国外有篇文章专门做说明和介绍的
如果觉得《linux usb设备连接失败怎么办 Linux中使用扩展USB Hub的问题》对你有帮助,请点赞、收藏,并留下你的观点哦!