linux usb设备连接失败怎么办,Linux中使用扩展USB Hub的问题

大家好,我的问题如下:

我有一个嵌入式设备为Linux系统,将主板上的一个USB口连接一个USB Hub扩展出多个USB口连接到多个不同的设备。由我的程序控制设备进行一些自动化工作。当其中的某个设备出现异常问题时,程序会自动的对USB口上挂接的设备进行断电和上电的复位操作,相当于拔插了一次设备,以此来恢复设备的工作。通过大规模测试,发现如下问题:

1、当对某一个USB口上的设备进行断电上电的复位操作时,有时会影响该USB Hub上的其它USB口设备,造成其它USB口设备短暂性的没有数据输出;

2、在某些异常情况下,会连续不断的对某个USB口上的设备进行断电上电的复位操作,知道设备正常为止,但这种频繁的复位操作往往造成USB设备不能正常挂载,造成设备丢失。错误信息如下:

Mar 30 03:28:14 KnowYouLinux kernel: usb 1-6.2: new full speed USB device using ehci_hcd and address 49

Mar 30 03:28:29 KnowYouLinux kernel: usb 1-6.2: device descriptor read/64, error -110

Mar 30 03:28:44 KnowYouLinux kernel: hub 1-6:1.0: unable to enumerate USB device on port 2

哪位大侠能否解释一下上述现象的原因,驱动问题?跟autosuspend有关?还是其它。

|

1、当对某一个USB口上的设备进行断电上电的复位操作时,有时会影响该USB Hub上的其它USB口设备,造成其它USB口设备短暂性的没有数据输出;

//感觉是电源问题,测试下板子和usb的整体供电,或者换个大些电流的电源,这是我的常规做法,

如果是生产类似的现场还要特别数据线尽量做短些,严格考虑抗干扰问题,因为usb是高速通讯,细节要考虑

2、在某些异常情况下,会连续不断的对某个USB口上的设备进行断电上电的复位操作,知道设备正常为止,但这种频繁的复位操作往往造成USB设备不能正常挂载,造成设备丢失。错误信息如下:

// 看看linux/drivers/usb/core/hub.c的源码:

static int old_scheme_first = 0;

改为

static int old_scheme_first = 1;

#define SET_ADDRESS_TRIES  2

改为

#define SET_ADDRESS_TRIES  4

主要是usb设备兼容性问题,国外有篇文章专门做说明和介绍的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值