Русский
Русский
English
Статистика
Реклама

Издеваемся над USB


В очередной раз втыкая скоростную USB флешку в порт USB 3.0, я увидел надпись "Это устройство может работать быстрее...". Но подождите, я и так его воткнул в порт 3.0! Неужели контакт барахлит? И если так, то как флешка определяет, на какой скорости ей работать? Ведь современные ПК поддерживают целых три стандарта соединения USB 1.1, 2.0 и 3.0. Можно ли понизить стандарт USB, насильно заставив устройство работать, к примеру, на USB 1.1? Не на все эти вопросы в сети удалось найти ответ, и я решил разобраться сам, по ходу столкнувшись с довольно неочевидными ситуациями.

Понижаем USB 3.0 до 2.0

Вы сейчас скажете да что может быть проще, просто возьми USB 2.0 кабель и будете совершенно правы. Если в кабеле или разъёме нет USB 3.0 контактов, у устройства не будет иного выхода, кроме как завестись на скорости USB 2.0:

Но отключение каких конкретно проводков приведёт к переключению на USB 2.0? Что будет, если отключить только один, или замкнуть соседние? Интересно же выйти за рамки стандарта и поэкспериментировать!
Для экспериментов я спаял USB-маму и USB-папу проводками на макетной плате:

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

Более того, если отключить все USB 3.0 контакты, кроме SS_TX, девайс продолжает считать, что он подключен к USB 3.0 и вообще никак не обнаруживается в системе. Честно говоря, я был уверен, что соединение в этом случае переключится на 2.0 режим:
здесь отключены SS_RX-, SS_RX+ и SS_TX+

Итого делаем вывод, что USB 3.0 устройство проверяет наличие SuperSpeed соединения по линии SS_TX, причём трансивер настолько устойчив к ошибкам, что ему плевать на обрыв одной из линий пары. Для гарантированного переключения устройства на USB 2.0 нужно рвать обе линии: SS_TX- и SS_TX+.

Понижаем USB до 1.1

USB 2.0 всем хорош, да больно уж шустрый. Если вы когда-нибудь пытались заснифать его логическим анализатором, у вас либо очень крутой анализатор, либо вы нашли древний USB-хаб вроде такого:

Несмотря на то, что интернет пестрит вопросами как понизить USB 2.0 до 1.1, простого решения я нигде не увидел:


Давайте глянем внимательнее! По стандарту USB, скорость работы согласуется на сигнальном уровне. Устройство поднимает вольтаж D- до 0.8в, а хост отвечает пилообразным сигналом:

То же самое видим на нашем экспериментальном стенде на осциллографе:

То есть, нужно сделать так, чтобы хост не увидел этого повышения напряжения. А значит ставим диод в разрыв линии D- (Шоттки, чтобы минимизировать падение):

Ииии он успешно подавляет сигнал от устройства, не мешая обычной передаче данных:

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

Собираем даунгрейдер

Как обобщение вышеописанных экспериментов, я сделал простенький пассивный переключатель USB режимов 1.1/2.0/3.0

Моё стремление к простоте порой невозможно сдерживать. Захотелось всё реализовать на единственном трёхпозиционном переключателе, вот таком:



Первоначальная идея была один ряд контактов переключает D- между:
  • диод (USB 1.1)
  • пусто (USB 3.0)
  • D- (USB 2.0)

А другой ряд контактов соединяет SS_TX- только в режиме USB 3.0:
  • пусто (USB 1.1)
  • SS_TX- (USB 3.0)
  • пусто (USB 2.0)
Но эту идею я отбросил из-за сомнений вряд ли все USB 3.0 устройства смогут работать только на одной линии дифф. пары. Поэтому я переделал выключатель кусачками:

Теперь средний контакт переключается между крайними, а в среднем положении выключатель замыкает две пары независимых контактов. Идеально! Осталось припаять и готово:
TODO: развести печатную платку и сделать красиво

Всё, теперь можно быть уверенным, что флешка работает именно в 3.0 (2.0, 1.1) режиме, а иначе она просто не обнаружится в системе. В заключение, тестируем наш картридер в различных положениях выключателя:
3.0:
2.0:

почему-то скорость USB 1.1 не понравилась Crystal Disk Mark, и в результате теста он показал нули

Вопрос на засыпку

В USB 3.0 разъёме две пары контактов USB 2.0 и USB 3.0, мы уже выяснили, что устройство (флешка, картридер) сначала лезет на контакты 3.0, а если не получается, переходит в 2.0 режим.

Что, если к 3.0 контактам подключить одно устройство, а к 2.0 контактам другое? Какое из устройств увидит компьютер?

Попробуйте ответить в опросе ниже перед тем, как заглядывать под спойлер :)
Ответ
Для этого эксперимента, спаяем вместе USB 3.0 SATA-адаптер и USB 2.0 флешку:


Вставляем в комп и

Увиделось оба устройства! Да, на самом деле в каждом физическом USB 3.0 порту сразу два независимых порта. По крайней мене, у ПК на чипсетах Intel.
Источник: habr.com
К списку статей
Опубликовано: 08.08.2020 22:12:45
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Компьютерное железо

Периферия

Usb

Железо

Downgrade

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru