Как проверить режим USB3?

05 Мар 2015

Как проверить режим USB3?

Если USB-устройство и платформа поддерживают передачу данных в режиме USB3.0 со скоростью 5 Гб/сек., то, казалось бы, ничто не мешает убедиться в этом воочию. Существует немало утилит для этого, да и наши исследования способствовали поиску ответа на это вопрос. Кроме того, если накопитель демонстрирует скорость, существенно пре­вы­ша­ю­щую 50-60 МБ/сек., то можно заявить — это режим Super Speed, поскольку в режиме USB 2.0 такая скорость физически недостижима, а «промежуточных» вариантов не существует. Но не все так просто...

Почему все так сложно

В силу разных причин, полноценная поддержка новых режимов универсальной последовательной шины в утилитах системной информации, несколько задерживается. В результате мы часто видим только дифференцирование между USB1 и USB2 и распознавание USB3-подключения как USB2. Кроме того, информация, получаемая из дескрипторов устройства, декларирует его потенциальные возможности, а не текущий скоростной режим, выбираемый сугубо аппаратно. Согласно спецификации USB, содержимое дескрипторов должно зависеть от установленной скорости, но разработчики устройств не всегда соблюдают это правило. В итоге, какой бы результат (USB2 или USB3) мы не увидели, есть основания для сомнений.

С учетом постоянного совершенствования технологий опережающего чтения и отложенной записи, делать выводы, ориентируясь исключительно на скорости копирования файлов на жестком диске будет методологически неверно, хотя при больших размерах файлов (единицы гигабайт), такой критерий имеет право на жизнь. Но есть более радикальный, а следовательно и более достоверный путь – получить информацию непосредственно из регистров контроллера USB 3.0 xHCI, написав для этого небольшое UEFI-приложение на ассемблере.

Условия эксперимента и системные объекты

Платформа – ноутбук ASUS N750JK, а подключаемое USB 3.0 устройство – жесткий диск Transcend StoreJet 35T3. Целевым объектом будут регистровые поля контроллера USB3.0 xHCI, индицирующие тип соединения. Заметим, что в зависимости от скоростного режима (USB2 или USB3), контроллер «видит» устройство через одну из двух групп регистров.

Биты [13-10] регистра Port N Status and Control USB2 индицируют тип соединения: Low-Speed, Full-Speed или High-Speed
Рис.1Биты [13-10] регистра Port N Status and Control USB2 индицируют тип соединения: Low-Speed, Full-Speed или High-Speed

Биты [13-10] регистра Port N Status and Control USB3 индицируют тип соединения: Super-Speed
Рис.2Биты [13-10] регистра Port N Status and Control USB3 индицируют тип соединения: Super-Speed

Утилита CheckUSB

Исходные тексты подготовлены в формате Flat Assembler 1.71.17. Утилита CheckUSB предназначена для запуска в среде x64 UEFI. Текущая версия поддерживает только системную логику Intel 8 Series, режим USB 3.0 должен быть включен в CMOS Setup. Такая привязка связана во-первых с поддержкой широкого набора регистров, специфичных для данной системной логики и не предусмотренных спецификацией контроллера xHCI, а во-вторых, в целях упрощения, вычисление адресных смещений и размерностей ряда регистровых полей, а также задание количества портов, реализовано для частного случая, а именно данной системной логики. Подробная информация содержится в документе:

  • Intel 8 Series / C220 Series Chipset Family Platform Controller Hub (PCH). Datasheet. June 2013

Энтузиастам, желающим расширить функциональность нашего простейшего примера и реализовать поддержку различных наборов системной логики, рекомендуем документ:

Кроме того, непосредственный доступ к конфигурационному пространству PCI и memory-mapped I/O рекомендуется заменить на вызовы соответствующих UEFI-протоколов.

Анализируем результаты

Итак, утилита отработала, рапорт сгенерирован.

Рапорт, сгенерированный утилитой CheckUSB
Рис. 3Рапорт, сгенерированный утилитой CheckUSB

Обратим внимание на список подключений к портам контроллера USB. Вначале следуют три устройства, входящие в состав ноутбука, а четвертое – это наш искомый внешний жесткий диск Transcend StoreJet 35T3. Режим SuperSpeed включен. Детальный анализ содержимого регистровых полей приведен здесь.

Резюме

Низкоуровневое исследование, выполненное на уровне физического доступа к регистрам контроллера USB3.0 xHCI в среде UEFI firmware, однозначно свидетельствует – режим Super Speed включен. Но исправность оборудования необходимое, но не достаточное условие его корректной работы в сеансе операционной системы. Причиной проблем может быть, например, драйвер контроллера xHCI или сама ОС. Поэтому, логичным продолжением будет проведение подобного эксперимента в сеансе ОС, например Windows. Эта задача посложнее, так как регистры контроллера являются привилегированным системным ресурсом, для доступа к которому требуется написать собственный драйвер. Кроме того, в сеансе операционной системы, с контроллером USB взаимодействует его штатный драйвер, необходимо позаботиться о бесконфликтности.