Проблема с USB в Debian после быстрого отключения питания

673
Michael Liesenberg

Я запускаю Debian 8 на iMx6, и все работает нормально, пока я быстро не выключу и не включу питание. (Quick Power Cycle) Я получаю это на dmesg:

usb 1-1.6: device no response, device descriptor read/64, error -32 

Если я захожу с ssh и выполняю команду перезагрузки, я получаю ту же ошибку, что и предыдущая загрузка. Но если я выключу его и подожду не менее 5 секунд, USB запустится без проблем.

Кто-нибудь знает, что означает ошибка -32?

Вот вывод dmesg:

root@vasoport:~# dmesg | grep usb [ 0.234446] usbcore: registered new interface driver usbfs [ 0.234522] usbcore: registered new interface driver hub [ 0.234614] usbcore: registered new device driver usb [ 0.234783] 2000000.aips-bus:usbphy_nop1 supply vcc not found, using dummy regulator [ 0.234907] 2000000.aips-bus:usbphy_nop2 supply vcc not found, using dummy regulator [ 1.319001] usbcore: registered new interface driver rtl8192cu [ 1.323787] usbcore: registered new interface driver cdc_ether [ 1.328389] usbcore: registered new interface driver MOSCHIP usb-ethernet driver [ 1.345027] usbcore: registered new interface driver cdc_acm [ 1.356196] usbcore: registered new interface driver usb-storage [ 1.361036] usbcore: registered new interface driver usbserial [ 1.365648] usbcore: registered new interface driver usbserial_generic [ 1.370922] usbserial: USB Serial support registered for generic [ 1.375698] usbcore: registered new interface driver cp210x [ 1.380013] usbserial: USB Serial support registered for cp210x [ 1.384702] usbcore: registered new interface driver ftdi_sio [ 1.389202] usbserial: USB Serial support registered for FTDI USB Serial Device [ 1.395287] usbcore: registered new interface driver option [ 1.399600] usbserial: USB Serial support registered for GSM modem (1-port) [ 1.406359] 2184800.usbmisc supply vbus-wakeup not found, using dummy regulator [ 1.460961] usb0: HOST MAC 42:3f:32:d8:7c:c0 [ 1.464020] usb0: MAC ea:65:54:9f:3e:fe [ 1.592253] usbcore: registered new interface driver uvcvideo [ 1.621151] usbcore: registered new interface driver bcm203x [ 1.625616] usbcore: registered new interface driver btusb [ 1.629884] usbcore: registered new interface driver ath3k [ 1.773230] usb 1-1: new high-speed USB device number 2 using ci_hdrc [ 2.213248] usb 1-1.1: new low-speed USB device number 3 using ci_hdrc [ 2.313217] usb 1-1.1: device no response, device descriptor read/64, error -32 [ 2.503239] usb 1-1.1: device no response, device descriptor read/64, error -32 [ 2.703225] usb 1-1.1: new low-speed USB device number 4 using ci_hdrc [ 2.793222] usb 1-1.1: device no response, device descriptor read/64, error -32 [ 2.993222] usb 1-1.1: device no response, device descriptor read/64, error -32 [ 3.183224] usb 1-1.1: new low-speed USB device number 5 using ci_hdrc [ 3.190138] usbcore: registered new interface driver usbhid [ 3.194438] usbhid: USB HID core driver [ 3.197772] usbcore: registered new interface driver snd-usb-audio [ 3.371438] usb_otg_vbus: disabling [ 3.603314] usb 1-1.1: device not accepting address 5, error -32 [ 3.703272] usb 1-1.1: new low-speed USB device number 6 using ci_hdrc [ 4.123304] usb 1-1.1: device not accepting address 6, error -32 [ 4.136116] usb 1-1-port1: unable to enumerate USB device [ 4.373263] usb 1-1.6: new low-speed USB device number 7 using ci_hdrc [ 4.453252] usb 1-1.6: device no response, device descriptor read/64, error -32 [ 4.643963] usb 1-1.6: device no response, device descriptor read/64, error -32 [ 4.833317] usb 1-1.6: new low-speed USB device number 8 using ci_hdrc [ 4.943258] usb 1-1.6: device no response, device descriptor read/64, error -32 [ 5.133246] usb 1-1.6: device no response, device descriptor read/64, error -32 [ 5.323272] usb 1-1.6: new low-speed USB device number 9 using ci_hdrc [ 5.743293] usb 1-1.6: device not accepting address 9, error -32 [ 5.843271] usb 1-1.6: new low-speed USB device number 10 using ci_hdrc [ 6.263291] usb 1-1.6: device not accepting address 10, error -32 

Похоже, что-то с напряжением, я думаю, но есть ли способ исправить это на стороне программного обеспечения?

Редактировать: Здесь представлены напряжения 5 В и 3 В 3, а также вывод сброса iMx6, который все больше и больше показывает, что напряжение 3 В 3 в порядке.

Нормальный старт Нормальный старт

Быстрый старт Быстрый старт

0

2 ответа на вопрос

2
dirkt

Вы можете найти коды ошибок в errno.h, который включает в себя errno-base.h . Возвращенные коды ошибок по соглашению отрицательны, поэтому -32 - это «сломанный канал», что, скорее всего, является следствием сбоя чтения или записи через USB.

2184800.usbmisc supply vbus-wakeup not found, using dummy regulator 

выглядит подозрительно, особенно если он не появляется, когда вы ждете, прежде чем включить его снова.

Первое предположение состоит в том, что слишком быстрое отключение питания не приводит к полной разрядке внутренних мощностей в некоторых микросхемах, связанных с USB, поэтому, если вы включите его снова, он окажется в плохом состоянии, и код инициализации устройства либо не справится с этим состоянием, или не может справиться с этим, потому что это состояние никогда не должно было случиться.

Возможно, это можно будет исправить программно, перейдя к таблице данных с тонкой зубчатой ​​гребенкой и параноидально инициализировав все до надлежащего состояния с таймаутами, когда это необходимо. Но это будет неинтересно, займет много времени, и вам понадобятся навыки для написания кода драйвера. И тогда плохое состояние может быть настолько безумным, что это не сработает.

Таким образом, самый простой обходной путь - «не включайте слишком быстро».

Интересно, может ли USB-концентратор полностью отключить все подключенные устройства, затем включить их позже? Или это не способность USB-устройств? Xen2050 5 лет назад 0
Да, концентраторы USB могут [выборочно выключать порты] (https://www.kernel.org/doc/html/v4.16/driver-api/usb/power-management.html#usb-port-power-control) , Когда они включаются снова, устройства должны быть пересчитаны. Но это не поможет, если сам (корневой) хаб находится в плохом состоянии. dirkt 5 лет назад 1
Это сообщение 2184800.usbmisc supply vbus-wakeup не найдено, использование фиктивного регулятора всегда происходит, даже если я жду. Я даже жестко сбросил концентратор, пока все включено, но это тоже не помогло. Я буду измерять напряжения с помощью осциллографа и проверять, что происходит. Michael Liesenberg 5 лет назад 0
С осциллографом вы, вероятно, ничего не увидите, это может быть связано с протоколом питания USB, который довольно сложен и основан на резисторах разных значений, возможно, включенных в разное время. Если это всегда появляется, это, вероятно, не связано с проблемой. Одна вещь, которую вы * можете * сделать, - это пройти через `dmesg` без` grep` и посмотреть, дают ли подавленные вами строки какие-либо дополнительные подсказки. dirkt 5 лет назад 0
Итак, вот отличия от полного dmesg: [2.213301] usb 1-1.1: новое высокоскоростное USB-устройство № 3 с использованием ci_hdrc и [2.223248] usb 1-1.1: новое низкоскоростное USB-устройство № 3 с использованием ci_hdrc [2.323218] usb 1-1.1: устройство не отвечает, чтение дескриптора устройства / 64, ошибка -32 Michael Liesenberg 5 лет назад 0
0
Michael Liesenberg

Таким образом, одним из решений было бы создание разрядной цепи с активным конденсатором с использованием полевых МОП-транзисторов на 5 В и 3 В 3. Как эта схема: https://electronics.stackexchange.com/questions/201343/discharge-power-rail-with-mosfet

Конденсатор разряда Мосфет: Конденсатор разряда Мосфет

Похожие вопросы