Як перевірити режим USB3?

  1. Чому все так складно
  2. Умови експерименту і системні об'єкти
  3. утиліта CheckUSB
  4. аналізуємо результати
  5. резюме

Якщо 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), контролер «бачить» пристрій через одну з двох груп регістрів.

Рис
Рис .1. Біти [13-10] регістра Port N Status and Control USB2 индицируют тип з'єднання: Low-Speed, Full-Speed або High-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-протоколів.

аналізуємо результати

Отже, утиліта відпрацювала, рапорт згенерований.

Мал
Мал. 3. Рапорт, згенерований утилітою CheckUSB

Звернемо увагу на список підключень до портів контролера USB. Спочатку йдуть три пристрої, що входять до складу ноутбука, а четверте - це наш шуканий зовнішній жорсткий диск Transcend StoreJet 35T3. Режим SuperSpeed ​​включений. Детальний аналіз вмісту реєстрових полів наведено тут .

резюме

Низькорівневе дослідження, виконане на рівні фізичного доступу до регістрів контролера USB3.0 xHCI в середовищі UEFI firmware, однозначно свідчить - режим Super Speed ​​включений. Але справність обладнання необхідне, але не достатня умова його коректної роботи в сеансі операційної системи. Причиною проблем може бути, наприклад, драйвер контролера xHCI або сама ОС. Тому, логічним продовженням буде проведення подібного експерименту в сеансі ОС, наприклад Windows. Це завдання складніше, так як регістри контролера є привілейованим системним ресурсом, для доступу до якого потрібно написати власний драйвер. Крім того, в сеансі операційної системи, з контролером USB взаємодіє його штатний драйвер, необхідно подбати про безконфліктності.