Особенности AMI UEFI firmware
В одной из предыдущих публикаций[1] мы затронули такой, казалось бы, очевидный вопрос: «Как убедиться в том, что флешка работает в USB 3.0?» Голоса в обсуждении сначала ехидно отметили, что той статье не хватает тэга «садомазо», а затем как бы испугавшись собственного эго, вычеркнули эту мысль из нашего сознания.Но эта мысль уже ранила неокрепшие умы экспериментаторов. Появилось желание проверить доступность USB 3.0 для любого подключенного устройства еще на этапе старта (например, в UEFI Shell) до запуска операционной системы. Для начала была написана небольшая утилита CheckUSB (которая, правда, пока рассчитана только на работу с некоторыми реализациями 8-й версии чипсетов Intel).
Рис 1. Эксперименты с утилитой CheckUSB на ноутбуке ASUS T300LA
В подходе к мобильной платформе оказалось, что в ряде случаев, при перезагрузке, UEFI firmware ноутбука инициализирует USB-подсистему не полностью, оставляя часть работы операционной системе.
Рис 2. Опция xHCI Pre-Boot Mode в установках UEFI firmware ноутбуке ASUS T300LA
Например, если в CMOS Setup исходное состояние опции xHCI Pre-Boot Mode установлено Disable, заменяем на Smart Auto, и не загружая операционную систему запускаем утилиту CheckUSB, то видим, что список устройств, подключенных к контроллеру xHCI пуст. Это означает, что для обслуживания подключенных USB-устройств используется контроллер EHCI.Рис 3. Подключение USB-устройств к Enhanced Host Controller Interface на ноутбуке ASUS N750JK до запуска Windows
Итак, если сразу после включения загрузиться в UEFI, не запуская Windows, то получаем:
USB 2.0 Port Routing = 0, 14 соединений USB2 подключены к EHCI USB 3.0 Port SuperSpeed Enable = 0, 4 соединения USB3 отключены При этом значения масок показывают, что операционная система имеет право переключить соединения на обслуживание xHCI: USB 2.0 Port Routing Mask = 00003FFFh USB 3.0 Port Routing Mask = 0000000Fh Список устройств пуст, поскольку мы отображаем только регистры xHCI, а устройства переведены на обслуживание EHCI с использованием RMH. Описание битовых полей доступно в статье «Диагностическая утилита CheckUSB»[2], [3].Если перезагрузку повторить после старта операционной системы, все устройства оказываются корректно подключенными к контроллеру xHCI.Рис 4. Подключение USB-устройств к eXtensible Host Controller Interface на ноутбуке ASUS N750JK при загрузке после Windows
Логика управления доступом к портам «помнит» состояние, имевшее место до перезагрузки:
USB 2.0 Port Routing = 03FFFh, 14 соединений USB2 подключены к USB2-подсистеме xHCI USB 3.0 Port SuperSpeed Enable = 0Fh, 4 соединения USB3 могут использовать режим SuperSpeed .Напомним, что количество внешних USB3-портов на исследуемой платформе ASUS N750JK равно 4.СсылкиКак убедиться, что флешка работает в USB 3.0? Диагностическая утилита CheckUSB Как проверить режим USB3?