![](https://habrastorage.org/webt/lw/td/iy/lwtdiyl1wtluo-hamoc8lloefgq.png)
В очередной раз втыкая скоростную 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:![](https://habrastorage.org/webt/k_/l-/xc/k_l-xcqyj07vkjlmg1qlbrhe4ts.png)
Но отключение каких конкретно проводков приведёт к переключению на USB 2.0? Что будет, если отключить только один, или замкнуть соседние? Интересно же выйти за рамки стандарта и поэкспериментировать!
Для экспериментов я спаял USB-«маму» и USB-«папу» проводками на макетной плате:
![](https://habrastorage.org/webt/ox/en/zv/oxenzvykmkxfovlwq979p4zfzv0.jpeg)
На фотографии не просто так один проводок находится в воздухе. Выяснилось, что соединение прекрасно работает даже без одного из проводников SS_TX дифф. пары! (для пары SS_RX такой фокус уже не работает)
Более того, если отключить все USB 3.0 контакты, кроме SS_TX, девайс продолжает считать, что он подключен к USB 3.0 и вообще никак не обнаруживается в системе. Честно говоря, я был уверен, что соединение в этом случае переключится на 2.0 режим:
![](https://habrastorage.org/webt/pn/jc/zo/pnjczo6nuhxftfvkv0ydmv51squ.jpeg)
Итого делаем вывод, что USB 3.0 устройство проверяет наличие SuperSpeed соединения по линии SS_TX, причём трансивер настолько устойчив к ошибкам, что ему плевать на обрыв одной из линий пары. Для гарантированного переключения устройства на USB 2.0 нужно рвать обе линии: SS_TX- и SS_TX+.
Понижаем USB до 1.1
USB 2.0 всем хорош, да больно уж шустрый. Если вы когда-нибудь пытались заснифать его логическим анализатором, у вас либо очень крутой анализатор, либо вы нашли древний USB-хаб вроде такого:
![](https://habrastorage.org/webt/bh/mk/td/bhmktdcucqjgfwnlte309ysddbc.jpeg)
Несмотря на то, что интернет пестрит вопросами «как понизить USB 2.0 до 1.1», простого решения я нигде не увидел:
![](https://habrastorage.org/webt/oi/mh/n4/oimhn4hlprlzajwlff5zbajuaji.png)
Давайте глянем внимательнее! По стандарту USB, скорость работы согласуется на сигнальном уровне. Устройство поднимает уровень D- до 0.8в, а хост отвечает пилообразным сигналом:
![](https://habrastorage.org/webt/je/gw/p_/jegwp_oemzmbhckoqje_t45in30.gif)
То же самое видим на нашем «экспериментальном стенде» на осциллографе:
![](https://habrastorage.org/webt/l5/1p/si/l51psircx83nybkrddm82qk2jrs.png)
То есть, нужно сделать так, чтобы хост не увидел этого повышения напряжения. А значит — ставим диод в разрыв линии D- (Шоттки, чтобы минимизировать падение):
![](https://habrastorage.org/webt/xi/_n/ki/xi_nkiagfuteq7dfvkygcp-ph5i.jpeg)
Ииии он успешно подавляет сигнал от устройства, не мешая обычной передаче данных:
![](https://habrastorage.org/webt/az/7x/dj/az7xdjltkszvyfcj2kxjgjlstnq.png)
![](https://habrastorage.org/webt/6c/vi/rd/6cvirdketd6bvfpjea_g2ktb9uu.png)
![](https://habrastorage.org/webt/qt/m-/9m/qtm-9mwhzdzfw5lqvkyujsses2m.png)
И здесь я был уверен, что диод нарушит передачу данных по линии и ничего не заработает, но нет — я не смог найти ни одного устройства, которое не заработало через такой «переходник».
Собираем «даунгрейдер»
Как обобщение вышеописанных экспериментов, я сделал простенький пассивный переключатель USB режимов — 1.1/2.0/3.0
Моё стремление к простоте порой невозможно сдерживать. Захотелось всё реализовать на единственном трёхпозиционном переключателе, вот таком:
![](https://habrastorage.org/webt/ff/v6/qr/ffv6qr79j1dmui0shc_lxqlomak.jpeg)
![](https://habrastorage.org/webt/d5/a0/kb/d5a0kbg3ksfnsrec5513lxgltma.jpeg)
Первоначальная идея была — один ряд контактов переключает 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 устройства смогут работать только на одной линии дифф. пары. Поэтому я переделал выключатель кусачками:
![](https://habrastorage.org/webt/ud/bf/uj/udbfujj2l_6slbkp5dxalbqqwbc.jpeg)
Теперь средний контакт переключается между крайними, а в среднем положении выключатель замыкает две пары независимых контактов. Идеально! Осталось припаять и готово:
![](https://habrastorage.org/webt/yd/be/a3/ydbea3yagtixdyujwqikd9lmnvk.jpeg)
Всё, теперь можно быть уверенным, что флешка работает именно в 3.0 (2.0, 1.1) режиме, а иначе она просто не обнаружится в системе. В заключение, тестируем наш картридер в различных положениях выключателя.
«3.0»:
![](https://habrastorage.org/webt/t0/dl/hl/t0dlhlfj5-hcwknw3l16qfkd1tg.png)
![](https://habrastorage.org/webt/1a/bq/5u/1abq5u5svnbnnf4efl-hrgwv8ee.png)
почему-то скорость USB 1.1 не понравилась Crystal Disk Mark, и в результате теста он показал нули
Вопрос на засыпку
В USB 3.0 разъёме две пары контактов — USB 2.0 и USB 3.0, мы уже выяснили, что устройство (флешка, картридер) сначала лезет на контакты 3.0, а если не получается, переходит в 2.0 режим.
Что, если к 3.0 контактам подключить одно устройство, а к 2.0 контактам — другое? Какое из устройств увидит компьютер?
![](https://habrastorage.org/webt/7j/o1/oc/7jo1ocxi7vwnqp_cmvfgh9f4qqg.png)
Попробуйте ответить в опросе ниже перед тем, как заглядывать под спойлер.
![](https://habrastorage.org/webt/b8/_9/f5/b8_9f5nuht4xdug5wlgw-1hcgmm.jpeg)
![](https://habrastorage.org/webt/tq/86/tm/tq86tmfj8wlh0yodrnx1djsipnm.jpeg)
Вставляем в комп и…
![](https://habrastorage.org/webt/dh/jc/zq/dhjczqq2lbpejfjvlw6gfc1m1_8.png)
Увиделось оба устройства! Да, на самом деле в каждом физическом USB 3.0 порту сразу два независимых порта. По крайней мере, у ПК на чипсетах Intel.
S-trace
Я в этом убедился, когда статикой выжгло USB2.0 сначала у одного из двух USB3.0 портов на ноуте, а затем ещё и у второго. В итоге получилось, что обычные USB2.0 девайсы ноут видит только на одном из трёх USB портов (который был 2.0 only, располагался в неудобном месте, использовался редко и потому выжил).
При этом USB2.0 девайсы в этих горелых портах ни в какую не определялись (хотя глюкавая гарнитура которая при подключении через датакабель ресетила USB во время зарядки так и продолжала ресетить его — замечено по dmesg и лагам BT мышки контроллер которой хоть и внутренний, но тоже на USB висел на том ноуте — впрочем, как на всех что я видел), но при этом USB3.0 девайсы на "горелых" портах виделись совершенно без проблем.
И даже при использовании USB3.0 хаба подключенные к нему USB3.0 девайсы виделись при подключении хаба к "горелому" порту, а вот USB2.0 не виделись даже через хаб.
15432 Автор
Нашёл USB 3.0 хаб, попробовал подключить его в режиме «3.0», вообще не определился, во дела.
S-trace
Попробуйте отключать только одну линию USB 2.0 порта — может быть, у меня оставалась жива одна из линий данных (судя по поведению глюкавой гарнитуры она же до контроллера как-то достучаться умудрялась ведь).
15432 Автор
У меня только D- отключается в режиме «3.0». Вероятно, у вас была другая модель USB 3.0 хаба, ну либо для такого эффекта нужно две линии отрубать. Почти половина спецификации USB 3.0 — про устройство хаба, там очень заморочились.
DaemonGloom
У меня аналогичная история с мёртвыми usb 2.0 линиями (или контроллером) и живыми 3.0. Что интересно — usb 3.0 хаб несёт в себе сразу два хаба — 3.0 и 2.0. Поэтому через хаб на этом устройстве 2.0 флешки тоже не работают, а 3.0 — легко. Очень интересно — бывают ли хабы, которые контроллер 2.0 реализуют у себя полностью поверх линий 3.0?
me21
По-моему, в стандарте указано, что в случае несовместимости с USB 3 устройство должно заработать в режиме USB 2. То есть линии должны физически быть, как и отдельный контроллер 2.0.
Но у Cypress был какой-то чип для хабов, который вроде как реализовывал желаемый режим работы. Сейчас, правда, найти не могу.
drWhy
Живо представляется разъём USB 5, обратно совместимый со всеми предыдущими версиями путём дублирования контактов и проводников.
me21
Так это USB 3 и есть, там старые контакты для второй версии и новые для третьей.
whitequark
Есть (был) VIA VL-670 и есть VIA VL-671, которые реализуют USB 2 to USB 3 transaction translator. Используется для VirtualLink, где для поддержки DisplayPort в режиме 2?4K@60 реквизированы линии USB 2.
A114n
Скажите, есть какой-нибудь проверенный рецепт борьбы с этим? Не формата «провод на батарею», но доступный всем?
S-trace
Увы, разве что касаться металлической части корпуса ноута перед тем как трогать что-либо ещё всякий раз когда хоть немного от компа отходишь.
Там где это произошло тогда статика была жесточайшая, встать и пройти два шага уже хватало для ощутимого такого разряда при касании любого металла, даже если он не заземлён.
Причём, пробивало и через клаву ноута (пластиковая, разряд уходил в щель куда-то вниз) и через тачпад, и через экраны портов (так даже изображение на экране сбивалось на полсекунды).
iproger
Я когда ставлю процессор в сокет всегда стараюсь потрогать батарею чтобы убрать статику. Как вообще правильно поступать в этой ситуации?
viktoin
Когда касаешься батареи, вероятность привести свой потенциал к земляному 99,9999...%, а вот какой на устройстве- неизвестно, если оно не заземлено тем- же образом. «Убрать статику» можно выравниванием потенциалов, соединив общий проводник устройства и себя, кратковременно. Всегда касаюсь корпуса/ общего проводника устройства находясь подальше от батареи. Способ эффективен и при работе с высокочувствительными к статике полупроводниковыми приборами.
Balling
Батарея обычно не дает заземления, так как она покрашена. Это надо краску колупать.
dimchik_b
Увлажнитель воздуха