Usb enumeration delay что это

Обновлено: 05.07.2024

When the EP0 size (bMaxPacketSize0 in descriptor) is 16 or 8 in Linux there is a delay of about 7s before enumeration and enumeration fails on Windows 10, device manages says that the device descriptor is invalid.

I'm testing the cdcacm example in the stm32-h103 folder and a similar program in a stm32f105 device.

The text was updated successfully, but these errors were encountered:

FabianInostroza commented Sep 20, 2018

I don't have OSX to test.

FabianInostroza commented Sep 20, 2018

karlp commented Sep 24, 2018

I confirm there's an issue. On my linux host, with stm32l1, and ep0 of 16:

karlp commented Sep 24, 2018

I'd like to diagnose this further, I've asked a friend to see what's happening with a usb analyser.

In the meantime, "stop doing that" :) Do you have any particular reason to use 16 or 8 bytes for EP0? (Other than, "the spec allows it")

karlp changed the title stm32f1: USB enumeration delay/fail when EP0 size <= 16 Sep 24, 2018

karlp commented Sep 24, 2018

Same thing happens on an F4 device with dwc_otg.

I don't have any reason to use an EP size minor than 32. By chance I found the problem and was trying to fix it for fun and learning.
I have been analyzing the problem and found that after the first reset of the interface the host requests the device descriptor and after the device sends the first packet, the host starts sending out tokens (status stage) but the peripheral is sending NAK and the driver doesn't receive interrupt.
Then the get descriptor request times out after 5s and seems that for linux the first bytes of the descriptor is enough to assign an address and continues the enumeration, issuing other reset and requesting the descriptor again, windows seems to no tolerate this (short descriptor and timeout).

I analyzed the enumeration process of a FT232RL, a FS device with bMaxPacketSize0 = 8 and it ACKs the status stage that the driver in libopencm3 is ignoring/not receiving.

FabianInostroza commented Sep 24, 2018

I pushed a sigrok/pulseview capture during enumeration to the sample repo, there are some errors due to sampling frequency and/or test leads but it shows the problem.

FabianInostroza commented Sep 24, 2018

From usb specs, 5.5.3 Control Transfer Packet Size Constraints

In order to determine the maximum packet size for the Default Control Pipe, the USB System Software
reads the device descriptor. The host will read the first eight bytes of the device descriptor. The device
always responds with at least these initial bytes in a single packet. After the host reads the initial part of the
device descriptor, it is guaranteed to have read this default pipe’s wMaxPacketSize field (byte 7 of the
device descriptor).

karlp commented Sep 24, 2018

yeah, I know it's allowed, and it's definitely a bug, I was just curious if there was any reason for it :)

zyp commented Sep 25, 2018

I've looked into this a bit and to me it seems like it's caused by deliberate non-specified behavior on the host, designed to deal with certain devices that also doesn't comply with the spec.


Here's a trace I did last night with MPS set to 16:

First capture is with macos. Here we see the host is first requesting the first 8 bytes, learns the MPS from it and then correctly reads the whole descriptor split into 16 byte chunks.

Second capture is with linux. Here we see linux sends a SETUP packet for a 64-byte read and device replies with the first 16-byte chunk. While device is waiting to send the second chunk, host believes the data stage is over and tries to send the status OUT packet, so neither gets accepted by the other side and the control request times out after five seconds. Even though the request partially timed out, linux appears to have learned the MPS from it and subsequently enumerates the device correctly.

Somebody in the IRC channel linked this article, which suggests that Windows is doing more or less the same and offers some insight into why. I'll try to make a trace of enumeration on Windows tonight to see if I can figure out why it fails.

I suspect that this issue might have been exacerbated by the flow control improvements that got merged recently. Before the change, I guess that the status OUT packet would have been accepted even when it was unexpected.

I'm not sure what we should do about this issue. If it was only about the timeout, it would have been fair enough to say that you'll have to live with it when you insist on using a less common MPS, but since it makes enumeration fail completely on Windows, we should probably do something.

The cleanest solution from an outside perspective would be just accepting the status OUT stage after the first chunk, but this is something which we would only want to do for this particular request and that introduces a bunch of special casing in the control state machine.

Если на вашем ПК не работают порты USB, а настройки Windows и обновление драйверов не помогают, возможно, контроллер был отключен в БИОСе. В этом случае вам потребуется зайти в меню конфигураций и включить все назад.

Существует множество различных версий BIOS со своими интерфейсами и тонкостями работы. Также на вашем компьютере может работать более современный комплекс — UEFI, который поддерживает полноценный графический интерфейс. В данной статье рассмотрены дистрибутивы, которые чаще всего устанавливаются на материнские платы.

first boot device

Чтобы приступить к изменению конфигурации, нужно попасть в соответствующее меню. Его можно открыть во время включения персонального компьютера — до того, как началась загрузка Windows с жесткого диска.

Включите ПК. В случае, если он уже работает: перезагрузите. Дождитесь звукового сигнала спикера: короткий одиночный гудок свидетельствует о том, что все внутренние компоненты, необходимые для работы компьютера, обнаружены.

Теперь необходимо нажать горячую клавишу для вызова конфигурации. Это нужно сделать до смены экрана. Если вы не успели, и началась загрузка Windows — перезагружайтесь. Клавиши зависят от модели установленной материнской платы и версии прошивки BIOS. Узнать ее можно в руководстве пользователя, которое прилагается к материнке, на официальном сайте производителя или посмотреть на экране вашего ПК при его загрузке:

Экран ПК при загрузке

Если вы не знаете модель платы — ничего страшного. Просто попробуйте нажимать следующие клавиши: Tab , Delete , Esc , F1 , F2 , F8 , F10 , F11 , F12 . Одна из них наверняка подойдет.

Необязательно пробовать только 1 вариант за раз. Вы без проблем можете быстро нажать все кнопки из списка. Одна из них подойдет и запустит настройки БИОСа, а остальные будут проигнорированы.


Многие современные компьютеры загружаются так быстро, что попасть методом нажатия клавиш при включении не получится. Также это актуально для ноутбуков. Поэтому последние версии ОС Windows обзавелись новой особенность запуска. Покажем на примере ОС Windows 8.1.

Перезагрузка в особом режиме

  1. Проведите мышью сверху-вниз или снизу-вверх по правому краю экрана и в появившемся окне нажмите «Параметры».
  2. Кликните на надпись «Изменение параметров компьютера»
  3. Нажмите «Обновление и восстановление».
  4. Далее: «Восстановление».
  5. В разделе «Особые варианты загрузки» нажмите кнопку Перезагрузить сейчас .

Восстановление - перезагрузка

Ваш компьютер или ноутбук перезагрузится в режиме настройки. После перезагрузки ПК вы также сможете выбрать вариант запуска с USB-накопителя или DVD-диска.

Навигация в меню

Практически все версии БИОС лишены графического интерфейса. Это значит, что вам придется работать только с помощью клавиатуры, как, например, в консоли Windows. Навигация осуществляется с помощью стрелок «вверх-вниз» и «вправо»-«влево». Чтобы открыть какой-либо раздел, используйте клавишу Enter , чтобы вернуться назад – «Escape». Небольшая памятка по используемым клавишам всегда показывается на экране.

bios setup utility

Комплекс микропрограмм UEFI устанавливается на самых дорогих и мощных материнских платах. Он поддерживает большее количество драйверов и умеет работать с мышью. Его интерфейс будет привычен пользователям Windows и других современных операционных систем.

asus efi bios utility

Каждая версия обладает собственным интерфейсом и наборами опций. Даже названия одних и тех же параметров могут различаться. Далее в статье описано несколько популярных релизов БИОС.

AMI BIOS

Очень распространенный вариант, который можно встретить на многих современных компьютерах. Главное меню разделено на 2 части: список категорий и различные действия, вроде выхода или сохранения. Вы будете работать с левой частью.

award bios

Вам необходимо перейти в раздел, который называется «Integrated Peripherals». Русскоязычной версии интерфейса нет, поэтому все команды только на английском. С помощью стрелки «Вниз» выделите данный пункт и нажмите Enter .

Здесь нужно включить (Enabled) 4 опции:

  • USB EHCI controller – основной контроллер. Если на материнской плате есть порты версии 3.0, этот пункт будет разделен на 2 части: «Controller» и «Controller 2.0»;
  • USB Keyboard Support – поддержка клавиатур;
  • USB Mouse Support – поддержка мышек;
  • Legacy USB storage detect – работа с внешними хранилищами данных: флешками, дисковыми накопителями, дисками смартфонов и цифровых фотоаппаратов.

legacy usb storage detect

В некоторых старых версиях присутствует всего 2 пункта «USB controller» и «Legacy USB storage support».

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

Phoenix AwardBIOS

Другая популярная версия, которую часто можно встретить на современных ноутбуках. Не имеет главной страницы, как AMI, но снабжен удобными тематическими закладками вверху. Перемещаться между разделами можно с помощью стрелок «влево»-«вправо», а между пунктами — с помощью «вверх» и «вниз».

advanced bios

Перейдите в раздел «Advanced» с помощью стрелки «Вправо». В ней найдите категорию «USB configuration». Все пункты этого раздела необходимо перевести в положение «Enabled». В некоторых версиях категория «USB configuration» может находиться во вкладке «Peripherals» а не в «Advanced».

Для завершения работы в меню нажмите F10 и подтвердите выход.

AMI BIOS for Asus

Версия AMI, используемая на ноутбуках Asus. Внешне очень похожа на Phoenix — аналогичная панель закладок. Настройки USB находятся в разделе «Advanced». Перейдите туда, включите все опции и выйдите с помощью кнопки F10 .

Вопреки распространенному мнению, UEFI — не часть BIOS. Его скорее можно назвать более продвинутым, но менее популярным конкурентом. Существует большое количество различных версий, каждая со своими интерфейсами. Однако здесь управление похоже на привычную Windows, поэтому вы без труда найдете нужные опции.

uefi dualbios

Настройки Windows

Если на уровне БИОСа все порты и контроллеры включены, но USB порты все-равно не работают, возможно, проблема в настройках вашей системы Windows.

Во-первых, попробуйте просто отключить и подключить устройство заново. Это вызовет проверку корректности драйверов. Если с ними что-то не так, Windows постарается переустановить их.

Если при переподключении ничего не происходит — попробуйте включить контроллер в реестре Windows. Для этого необходимо сделать следующее:

Чаще всего мы вспоминаем про BIOS (Базовую Систему Ввода/Вывода) лишь тогда, когда нам нужно переустановить операционную систему и нужно в нём как то выставить загрузку с диска или флешки. Я часто писал об этом в таких статьях как: Установка windows 7 на новый ПК, Установка Windows XP с USB-флешки, 4 способа установить Windows 7 с флешки. Создание загрузочной флешки, Установка Windows 8 на компьютер, ноутбук или планшет и другие. Теперь же я хочу собрать воедино и ссылаться лишь на эту статью при необходимости. Эта статья полезна будет для всех версий БИОСа и для разных фирм. Этакий единый справочник

Первое, что Вам нужно знать - BIOS разделяется по производителям и версиям.

Чтобы изменить способ загрузки в BIOS - нужно вначале в него войти.
Можно, конечно, узнать какая версия и производитель Вашего биоса, из руководства идущего с компьютером.
Так же это можно узнать посмотрев на строку вверху на черном экране при загрузке (там будет указан производитель).
Ну а затем уже войти в биос, зная какой он у Вас.

В некоторых версиях биоса нет такого экрана с показом строк. Там просто стоит логотип и внизу написано что то наподобие "Press F2 to enter SETUP" значит и нажимаем F2. Если стоит просто логотип и нет никаких надписей - жмите ESC, а затем del или f2

Вот небольшой список производителей и сочетаний клавиш для входа в БИОС:

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

Как видите - чаще всего нужно нажимать клавишу F2 или Del.

Теперь нужно поставить в загрузку флешку или диск.
Рассмотрим на нескольких примерах, отличающихся от производителя BIOS.

Настройка Award Bios для загрузки с флешки или диска:
Главное окно представляет собой вот такой вид, в которым нам нужен второй пункт:


Далее зависит от версии прошивки. В одном случае нужно будет зайти в пункт похожий на «Boot Seq & Floppy Setup»

в другом случае никуда не нужно заходить - всё и так будет перед глазами

Щелкам на First Boot Device (Первое загрузочное устройство), жмем Enter и появится такое окошко

в котором нужно выбрать диск или флешку, которые будут запускаться первыми. Можете указать Второе загрузочное устройство, например жесткий диск (HDD), но обычно биос сам заполняет эти данные.

Если Вы выберете флешку, то помимо прочего нужно ещё зайти в пункт «Hard Disk Boot Priority» и передвигаем нашу флешку на самый верх с помощью кнопок «+» и «-» или «PageUp» и «PageDown»:


Так же стоит помнить - что для того, чтобы БИОС увидел флешку, её нужно подключить до включения или до перезагрузки

Затем нажимаем «F10» (точную клавишу смотрите в подсказке внизу экрана с названием «Save», «Exit») или выйти в главное меню БИОСа и выбрать пункт «Save and Exit Setup». В красном окошке выбираем «Yes» кнопкой «Y» на клавиатуре и нажимаем «Enter»

Компьютер перезагрузиться и при загрузке с установочного диска с Windows может возникнуть такой запрос на несколько секунд «Press any key to boot from CD or DVD…»

Press any key to boot from CD or DVD

Что переводится как «Нажмите любую кнопку чтобы загрузиться с CD или DVD».
Это значит, что если в этот момент не нажать любую кнопку на клавиатуре, то компьютер продолжит загружаться со следующего по списку устройства.

Ещё разновидность этого биоса:


Я такую встречал только на старых компьютерах десятилетней давности до 2003 года. Главное меню выглядит так:

Как поставить в BIOS загрузку с диска или USB флешки?


Чтобы настроить порядок загрузки, надо зайти в меню BIOS FEATURES SETUP:

Как поставить в BIOS загрузку с диска или USB флешки?


В этом пункте как раз и выбираем кнопками PageUp и PageDown (или Enter и стрелками) что выставить первым - CDROM или флешку. НЕ забудьте про второе и третье устройство

Как выбрать с чего грузиться в AMI BIOS
Если, войдя в Биос, Вы видите такой экран, значит у Вас AMI BIOS:

главное окно AMI BIOS


Кнопкой на клавиатуре «стрелка вправо» двигаемся до вкладки Boot:

как выбрать загрузку с диска или флешки в AMI BIOS

как выбрать загрузку с диска или флешки в AMI BIOS
Заходим в "Hard Disk Drives" и в строчке «1st Drive» (может называться «First Drive») выбираем диск или флешку:

как выбрать загрузку с диска или флешки в AMI BIOS

как выбрать загрузку с диска или флешки в AMI BIOS
Далее идём в "Boot Device Priority" , заходим в «1st Boot Device» и выбираем из списка то, что выбрали в предыдущей вкладке (т.е. если в Hard Disk Drives выбрали флешку, то и тут нужно её указать. Это важно! )

как выбрать загрузку с диска или флешки в AMI BIOS

как выбрать загрузку с диска или флешки в AMI BIOS

Чтобы загрузиться с CD/DVD диска нужно в этом меню выбрать «ATAPI CD-ROM» (или просто «CDROM»), при этом нет надобности заходить в предыдущее меню «Hard Disk Drives».
Теперь сохраняем результаты кнопкой «F10» или переходим в раздел БИОСа «Exit» и выбираем «Exit Saving Changes».

Еще один AMI BIOS, но тут всё понятно:

как выбрать загрузку с диска или флешки в AMI BIOS

как выбрать загрузку с диска или флешки в AMI BIOS

Настройка Phoenix-Award Bios для загрузки с флешки
Если, войдя в Биос, вы видите такой экран, значит у вас Phoenix-Award BIOS:

как выбрать загрузку с диска или флешки в Phoenix-Award


Идем во вкладку “Advanced” и напротив “First Boot Device” выставляем то, что нужно (флешку или диск):

как выбрать загрузку с диска или флешки в Phoenix-Award

как выбрать загрузку с диска или флешки в Phoenix-Award

Настройка EFI (UEFI) Bios с графическим интерфейсом для загрузки с флешки
Сейчас уже этим никого не удивишь. Практически все новые компьютеры снабжаются подобной оболочкой. Подробнее о ней Вы можете прочитать в статье Чем UEFI лучше обычного BIOS и каковы отличия.
При загрузке, в нижней части экрана есть раздел "Boot Priority", где можно с помощью мышки (перетаскиванием) картинок выставить нужный порядок загрузки.
Также можно нажать в правом верхнем углу кнопку «Exit/Advanced mode» и выбрать в появившемся окне Advanced mode (расширенный режим).


Как загрузиться с флешки или с диска без входа в БИОС
Это то, о чем я писал почти в самом начале статьи.
Это когда нужно один раз нажать клавишу и появится окно с выбором загрузки. Этот способ не меняет настройки биоса.
Обычно Award BIOS предлагает нажать «F9» для вызова загрузочного меню, а AMI просит нажать «F8» . На нотбуках это может быть клавиша «F12».
В общем - смотрите нижнюю строчку и ищите пункты наподобие «Press F8 for BBS POPUP» или «Press F9 to Select Booting Device after POST».

Как поставить в BIOS загрузку с диска или USB флешки?

Почему не получается загрузиться с флешки в BIOS?

    Отключён контроллер USB в BIOS.
    Чтобы это проверить в биосе Award, нужно зайти в раздел «Advanced Chipset Features» или «Integrated Peripherals».
    Ищем опцию «USB Controller», должно быть «Enabled»

Как поставить в BIOS загрузку с диска или USB флешки?


В AMI в разделе «Advanced» опция «USB 2.0 Controller» должна быть «Enabled» и «USB 2.0 Controller Mode» в состоянии «HiSpeed»

Как поставить в BIOS загрузку с диска или USB флешки?


На древних компах вообще нет возможности загружаться с USB-флешек. Если не существует более нового БИОСа, тогда может помочь проект PLOP .
1) Скачиваем по ссылке выше последнюю версию "Plop Boot Manager" и распаковываем.
2) В архиве есть файлы: plpbt.img – образ для дискеты, и plpbt.iso – образ для CD-диска.
3) Записываем образ на диск и загружаемся с него (или с дискеты).
4) Появится меню, в котором выбираем свою флешку и загружаемся уже с неё.

Не забудьте после того, как Вы сделали то, что хотели (а именно - зачем меняли загрузку в биосе) - верните настройки загрузки обратно, чтобы компьютер загружался с жесткого диска.

Читайте также: