USB 插槽有时会突然停止工作

USB 插槽有时会突然停止工作

在我的笔记本电脑上重新安装 Lubuntu 12.04 系统后,几天后又安装了不同的程序,一个老问题又出现了:外接鼠标和其他 USB 连接设备(包括硬盘)无缘无故地停止工作。硬盘显示有张力,因为那里有灯,插入后外接鼠标会闪烁一秒钟。

我之前发布过此问题的不同版本。我暂时将其保留为那里两个答案的示例。它们都不起作用。

注销没有任何作用,重新启动才有作用。

该事件似乎完全是随机的,重启后它会在几天或几周后重新出现,或者很少在几个小时后重新出现。

我想,最重要的是最后的结果:

Nov 24 14:06:55 cprq-HP-Compaq-nx8220-PY518EA-ABB kernel: [29953.822962] usb 3-1: USB disconnect, device number 3
Nov 24 14:06:57 cprq-HP-Compaq-nx8220-PY518EA-ABB kernel: [29955.069427] uhci_hcd 0000:00:1d.0: host controller process error, something bad happened!
Nov 24 14:06:57 cprq-HP-Compaq-nx8220-PY518EA-ABB kernel: [29955.069439] uhci_hcd 0000:00:1d.0: host controller halted, very bad!
Nov 24 14:06:57 cprq-HP-Compaq-nx8220-PY518EA-ABB kernel: [29955.069461] uhci_hcd 0000:00:1d.0: HC died; cleaning up
Nov 24 14:06:57 cprq-HP-Compaq-nx8220-PY518EA-ABB kernel: [29955.069492] usb 2-2: USB disconnect, device number 2
  • 我注意到大多数情况下,只有外接鼠标和键盘受到影响,而不影响外接硬盘。如果受影响,重新插上它即可解决问题

  • 我有 WinXP 双启动:在 Windows 中,这种情况从未发生过,所以这不是硬件问题

  • 我使用过 Lubuntu Quantal 12.10,也遇到了同样的问题. 升级到那个不是解决方案

  • 在某些场合只需重启 2 次甚至 3 次解决了。


使用同一台 PC/硬件和 Linux Mint 14 (Quantal) Xfce,问题几乎消失(它发生了一次从那时起)。我不确定这个“解决方案”是来自使用 Xfce 还是 Mint(我猜 Mint 14 Nadia 使用与 Lubuntu Quantal 相同的内核)。

答案1

类似的事情也发生在我身上。这篇博文提供了部分解决方案。

这对我有用:

sudo -s
cd /sys/bus/pci/drivers/xhci_hcd/
for file in ????:??:??.? ; do
 echo -n "$file" > unbind
 echo -n "$file" > bind
done

正如在该博客文章中所述,不同的系统会在不同的地方挂起,因此,如果上述方法不起作用,您可能需要尝试用/sys/bus/pci/drivers/xhci_hcd//sys/bus/pci/drivers/ehci_hcd/替换/sys/bus/pci/drivers/uhci_hcd/(如果其中之一存在)。

答案2

USB 2.0 的电源问题

USB 2.0 的最大电流消耗为 500mA,但应注意,多个端口上的 +5V 实际上可能位于同一总线上。例如,在台式机上,机器正面的 USB 端口可能全部位于同一总线上,而机器背面的端口通常位于不同的总线上,或者每组 USB 2.0 插槽都有完全独立的 +5V 电源。

USB 2.0 定义的低电流设备标准最大可消耗 100mA(1 个单位)电流,而大电流设备最大可消耗 5 个单位(500mA)。没有外部电源的硬盘通常是大电流设备。

如果 +5V 线路电压降至 4.75V 以下,设备就会停止工作,这就是为什么许多高功率设备会在某些计算机上造成问题的原因。

此外,如果设备消耗的电流足以将 +5V 线路拉得太低,则为每条总线提供 +5V 的电路可能会拒绝重新协商高功率能力。这就是为什么如果高功率设备因电源问题而发生故障,则需要先移除并重新连接才能工作,也是为什么重新启动不允许它们重新连接,而完整的断电/通电循环可以这样做。

请注意,如果已有一个或多个低功率设备插入 USB 总线,则可能没有足够的容量来运行高功率设备(例如外部硬盘)。

因此,使用大功率设备需要做好规划,如果存在问题,则需要在任何一条总线上单独使用该设备或为其提供单独的 +5V 电源。

虽然 USB 2.0 标准文档可能有点难读,但其中有一些非常好的信息和解释有关 USB 2.0 的维基百科页面

还要注意,通过外部 USB 集线器设备等插入许多低功耗设备也会导致总线供电线上的电压下降,从而导致部分或全部设备被禁用。

所用电缆的类型也可能影响高功率设备的可靠性。例如,通过常规长 USB 电缆插入的外部硬盘驱动器在 500mA 时可能会出现足够的电压降,从而禁用自身,以防止损坏其电路或驱动电机。这些设备通常配有特殊的短电缆或“Y”形电缆,可插入两个 USB 端口以解决电源问题。请注意,这只是与电缆问题相关的问题的部分解决方案,它实际上不允许提供超过 500mA 的电流,因为相邻的 USB 端口可能在计算机内部使用相同的 5V 500mA 电源。即使“Y”形电缆上的第二个插头使用单独的总线,它也无法获得高电流供应,因为它没有数据连接来从 USB 总线请求它。只有一个端口将启用为高电流供应。

由于 USB 键盘和鼠标的使用非常普遍,因此当它们都插入同一总线时,有时会出现问题。通电时的峰值负载电流可能超过 USB 总线的设计规格,导致其中一个或两个设备被禁用或发生故障。

解决这些问题的方法通常包括仅使用最少的低功耗设备,仅使用精心设计和制造的低功耗设备,确保它们通过单独的 +5V 线路插入不同的总线,并且当涉及高功率设备时,使用有源集线器来帮助解决许多 USB 2.0 总线电源上出现的供电问题。如果无法使用有源集线器,则应仅在计算机通电并且低功耗设备的电流消耗稳定后才插入高功率设备。

还应注意的是,笔记本电脑和上网本等计算机可能内置有低功耗 USB 设备。内置读卡器、无线 3G 适配器和网络摄像头等硬件通常内部连接到 USB 总线。这可能是具有自己的 +5V 电源的专用总线,也可能与一个或多个外部 USB 端口共享。

答案3

旧帖子和回复与 USB 3.0 无关。因此,以下是如何重置停止提供数据的 3.0 总线:

su -

并以 root 身份运行:

echo -n "0000:06:00.0" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
echo -n "0000:06:00.0" | tee /sys/bus/pci/drivers/xhci_hcd/bind

此后,USB 应该可以再次正常工作,就像重启后一样。


解释

如果您使用的是其他驱动程序,以下是我找到的方法,请将其用作参考:

Alsusb -t将输出此内容 - 记下xhci_hcd快速总线的驱动程序,它是 3.0 驱动程序名称:

$ lsusb -t
        /:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
        /:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
            |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=dvb_usb_it913x, 480M
        /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
            |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
            ...etc

要查找的目录是/sys/bus/pci/drivers/xhci_hcd

        drwxr-xr-x  2 root root    0   5 21:48 ./
        drwxr-xr-x 28 root root    0   1 00:21 ../
        lrwxrwxrwx  1 root root    0   6 00:29 0000:06:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.3/0000:06:00.0/
        --w-------  1 root root 4096   5 22:33 bind
        lrwxrwxrwx  1 root root    0   5 22:32 module -> ../../../../module/xhci_hcd/
        --w-------  1 root root 4096   5 22:32 new_id
        --w-------  1 root root 4096   5 22:32 remove_id
        --w-------  1 root root 4096   5 22:32 uevent
        --w-------  1 root root 4096   5 22:33 unbind

就我而言,我需要解除绑定"0000:06:00.0"

ps. 如果您需要重新绑定 USB 2.0 驱动程序,请按照上述说明操作,但要使用ehci-pci,或查看这里(值得称赞)。

答案4

基于lsusb

#lsusb
Bus 002 Device 002: ID 04f3:0230 Elan Microelectronics Corp. 3D Optical Mouse
Bus 003 Device 002: ID 04f3:0103 Elan Microelectronics Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

执行后lsusb -t,输出将采用以下格式

$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
        |__ Port 6: Dev 3, If 0, Class=HID, Driver=usbhid, 1.5M

注意两个输出中的Bus 00X数字和1.1/ USB 版本。如果鼠标和键盘现在处于打开状态,请尝试将它们移至端口,反之亦然。2.01.12.0

这并不能解决驱动程序问题,但是可以作为一种解决方法(如果有效的话)。

相关内容