Уровни сигналов в usb

Обновлено: 07.07.2024

Собственно говоря, про то, как происходит передача данных мы уже начали говорить ещё в прошлой статье (помните, мы обсуждали конечные точки, коммуникационные каналы и прочее), просто здесь мы обсудим это более детально и обстоятельно.

А дальше с ними начинает работать USBD.

Кадры следуют друг за другом с периодичностью 1 кадр в мс. Ещё раз замечу, что в одном кадре не обязательно должны присутствовать сеансы связи со всеми устройствами на шине или сразу все кусочки информации, предназначенные для одного устройства. Расписание транзакций планируется USBD с учётом приоритета выбранных типов передач и с какими-то конечными точками хост может не осуществлять транзакций несколько фреймов подряд, даже при наличии запроса на обмен данными с этими точками (помните, мы в первой части обсуждали, что принтер может и подождать, а вот передача музыки в USB колонки ждать никак не может). Образно кадры и транзакции показаны на рисунке справа, подробнее их структуру мы рассмотрим позднее.

Вот теперь, с учётом новой информации, мы можем снова вернуться к типам передач и пропускной способности канала. Что для изохронных передач означает способность занять 90% пропускной способности канала. Это значит, что в каждом кадре 90% времени может быть отведено для транзакций этого типа передач. Аналогично, 10% пропускной способности канала, гарантированных для управляющих передач, означают, что в каждом кадре 10% времени гарантированно могут занять транзакции управляющих передач.

Далее ещё раз внимательно посмотрите на рисунок выше. На рисунке я не случайно выделил небольшие интервалы в начале и в конце каждого кадра. В реальности, в начале и конце каждого кадра тоже выделяются небольшие интервалы времени, которые используются специальным образом.

Начало каждого кадра помечается посылкой специального маркер-пакета SOF (start of frame), в состав которого входят 11 младших бит номера кадра. Этот маркер-пакет используется для синхронизации изохронных точек и хабов. В режиме HS каждый кадр делится на 8 микрокадров по 125 мкс, каждый из которых начинается с посылки маркер-пакета SOF (при этом в SOF всех микрокадров, относящихся к одному кадру, передаётся одинаковый номер).

Теперь вернёмся к транзакциям и разберём более подробно, что же происходит во время сеанса связи с конечной точкой и из чего состоят транзакции.

Далее подробнее поговорим про пакеты. Всего существует 4 типа пакетов: маркер-пакеты (token), пакеты данных (data), пакеты подтверждения (handshake) и специальные пакеты (special). Эти пакеты имеют строго определённую структуру, которая зависит от типа пакета, хотя у всех типов пакетов можно выделить и некоторые общие поля. Общая структура пакетов показана на рисунке справа (для скоростей передачи LS/HS). Пакет можно условно разделить на заголовок (2 байта), имеющий общую для всех пакетов структуру (Sync+PID+Check), и тело, защищённое контрольной суммой. Наличие, размер и структура тела, а также количество бит контрольной суммы зависят от типа пакета.

Остальные специальные пакеты не будем рассматривать, поскольку они нам пока не понадобятся.

Идём дальше. Во всех полях пакетов, кроме поля CRC, данные передаются младшим битом вперёд.

Все пакеты состоят из целого числа байт (разрядность полей, входящих в пакет, специально так подобрана, чтобы сумма разрядов всех этих полей была кратна восьми).

Кроме того, нам нужно уметь вычислять CRC5 и CRC16. Вычисление CRC вообще отдельная тема, про неё подробно написано тут. А вот тут можно найти специальные процедурки для вычисления наших CRC5 и CRC16 .

Ну и раз уж мы заговорили про битовые интервалы, то следует сказать, что длительность битового интервала для скорости LS составляет примерно 667 нс (1,5 Мбит/с), для FS примерно 83 нс, для HS примерно 2 нс.

Ладно, с Data0, Data1 всё ясно, а для чего нужны PID Data2 и MData? Да примерно для того же самого. Они позволяют различить пакеты данных внутри микрокадра для широкополосных изохронных точек (USB2.0).

Для передачи битов используется дифференциальный сигнал между проводами D+ и D-. Провода +5В и GND используются для питания устройства, а так же для индикации некоторых специальных состояний (вместе с D+ и D-).

На линиях D+ и D- высокий уровень соответствует напряжению +3,3 В (от 2,7 до 3,6).

Дифференциальный сигнал, при котором разница между D+ и D- больше 200 мВ при уровне напряжения на линии D+ > 2В называется Diff1.

Дифференциальный сигнал, при котором разница между D- и D+ больше 200 мВ при уровне напряжения на линии D- > 2В называется Diff0.

Состояние, когда на обоих сигнальных линиях присутствует низкий уровень относительно GND (D+


Данные внутри пакета на шине USB передаются дифференциальными сигналами. Прием­ник видит дифференциальную единицу, если уровень сигнала на шине D+ по крайней мере на 200 мВ больше, чем на D-, и видит дифференциаль­ный 0, если уровень сигнала на D- по крайней мере на 200 мВ больше, чем на D+ (табл. 1). Точка пересечения при смене уровня сигнала должна находиться между 1,3 В и 2,0 В.

Таблица 1. Уровни передачи сигналов

Состояние тины

Уровни передачи и время удержания сигналов

(D+) - (D-) > 200 мВ и D+ или D- > Vse(min)

(D+) - (D-) < -200 мВ и D+ или D- > Vse(min)

Дифференциальный "0" и D- > Vse(max) и D+ < Vse(min) Дифференциальная "1" и D+ > Vse(max) и D- < Vse(min)

Дифференциальная "1" и D+ > Vse(max) и D- < Vse(min) Дифференциальный "0" и D- > Vse(max) и D+ < Vse(min)

Начало пакета (SОР)

Линии данных переключаются от IDLE-состояния к К-состоянию

Конец пакета (ЕОР)

D+ и D- < Vse(min) в течение 2 битовых интервалов, далее следу­ет переход в IDLE-состояние в течение 1 битового интервала

(Только вверх по иерархии)

D+ и D- < Vse(max) > 2,5 мкс

(Только вверх по иерархии)

D+ или D- > Vse(max) > 2,5 мкс

(Только вниз по иерархии)

D+ и D- < Vse(min) > 2,5 мкс (должен быть распознан в течение

Примечание. Уровень Vse - уровень ассиметричного "0" (Single Ended Receiver Threshold), нахо­дится в пределах от 0,8 до 2,0 вольт.

Все пакеты имеют четкие разграничители начала пакета (SOP), который яв­ляется частью поля SYNC, и конца пакета (ЕОР). Начало пакета (SOP) обнаруживается портом (рис.1) по переходу сигналов на ли­ниях D+ и D- от неактивного IDLE-состояния к противоположному логи­ческому уровню (К-состояние). Этот перепад уровня представля­ет первый бит поля SYNC. Состояние асимметричного 0 используется, чтобы сообщить о конце пакета (ЕОР). Состояния асимметричного 0 фиксируется по нахождению сигна­лов на линиях D+ и D- ниже 0,8В в течение двух битовых интервалов (рис. 1). ЕОР будет сообщен переводом D+ и D- в состояние асиммет­ричного 0 в течение удвоенного времени передачи бита, что сопровождается дальнейшим переводом линии в lDLE-состояние в течение одного битового интервала. Переход от асимметричного 0 к неактивному состоянию опреде­ляет конец пакета. IDLE-состояние удерживается в течение 1 битового ин­тервала, а затем схемы выходных драйверов переводят линии D+ и D- в состояние высокого импеданса. Согласующие резисторы шины удержива­ют шину в неактивном состоянии.

QIP Shot - Image: 2016-06-27 16:48:51

Рис. 1. Уровни напряжений при передаче пакета на шине USB

Сигнал "Сброс" может быть сгенерирован командой хоста в любом концен­траторе или порте хост-контроллера и распространяется только в направле­нии вниз по иерархии USB-дерева. Сигнал сброса должен быть выдержан минимум 10 мс. Сигнал сброса распространяется через все работающие downstream-порты любых концентраторов к порту передачи сигналов, но не распространяется через неработающие порты. Подключенный к шине кон­центратор, который получает сброс по корневому порту, убирает питание со всех downstream-портов. Порт, который генерировал сброс, пошлет состоя­ние логического разъединения в конце сигнала сброса, а затем будет пере­веден в выключенное (disabled) состояние. Активное устройство, включенное и не находящееся в состоянии останова (suspend), наблюдает за асимметричным нулем, который наблюдается на upstream-порте в течение более чем 2,5 мкс, и может обрабатывать этот сиг­нал как сброс, но должно выполнить распознавание этого сигнала за 5,5 мкс. После снятия сброса устройство будет находиться в присоединенном, но еще не в адресованном (они инициализируются своими заданным по умол­чанию адресам USB) или не сконфигурированном состоянии. Все порты на получившем сброс концентраторе находятся в нерабочем состоянии. Кон­центраторы должны быть способны установить связь, и все устройства должны быть способны принять адрес устройства в команде SET_ADDRESS не позже чем через 10 мс после того, как был удален сигнал "сброс". Невы­полнение этого условия может привести к тому, что устройства не будут корректно распознаны. Сброс может выводить устройство из suspend-режима с выключенным пита­нием. Устройство может выходить из suspend-состояния в течение 10 мс.

Синхроимпульсы передаются закодированными вместе с дифференциаль­ными данными. Самосинхронизирующаяся последовательность реализована по схеме NRZI with bit stuffing. NRZI - Non Return to Zero Invert to ones - метод без возврата к нулю с инвертированием для единиц. В методе NRZI применяются два уровня сигнала, но уровень, используемый для кодирова­ния текущего бита, зависит от уровня, который применялся для кодирова­ния предыдущего бита (так называемое дифференциальное кодирование). Если текущий бит имеет значение 1, то текущий уровень представляет собой инверсию уровня предыдущего битового интервала, независимо от его зна­чения. Если же текущий бит имеет значение 0, то текущий уровень повторя­ет значение на предыдущем битовом интервале.

Таким образом, для того чтобы обеспечить частые изменения сигнала, а значит и для поддержания самосинхронизации приемника, нужно исключить из кодов слишком длин­ные последовательности нулей. Это действие называется "бит-стаффинг" (bit stuffing). Специальное поле SYNC из семи 0 следующих за 1 (0х80= 10000000В) вклю­чено в заголовок каждого пакета, чтобы позволить приемнику подстроиться под частоту передатчика. Битовый шаблон NRZI для поля SYNC представ­ляет собой тактовый сигнал с периодом, равным 2 битовым интервалам.

USB 3.0 может передавать дан­ные со скоростью 4,8 Гб/с. На­помним, что заявленная пропус­кная способность USB 2.0 состав­ляет 480 Мб/с, однако на прак­тике наиболее типичными пока­зателями являются 30-35 МБ/с.

Радикально улучшена работа с мелкими файлами - бичом прошлой ревизии стандарта. SuperSpeed предусматривает возможность передачи данных несколькими потоками по од­ному соединению: теперь все операции проводятся в рамках потока внутри уже существую­щего соединения и не требуют больших накладных расходов.

Во второй версии USB, в ходе одной операции, данные передаются только в одну сторону. Шина SuperSpeed, в отличие от USB 2.0, является полнодуп­лексной, поэтому контроллер мо­жет одновременно и принимать, и передавать данные без потерь производительности. Существу­ющие в настоящий момент конт­роллеры содержат два хоста, по­тому возможна одновременная работа с двумя устройствами в таком режиме. Для поддержки полного дуплекса введены две до­полнительные пары проводов и обязательное экранирование ка­беля.


В данном цикле статей будет рассмотрен под разными углами интерфейс USB (USB 2.0) Попробуем разобраться, как он работает и закрепить полученные знания практически. «Копать» мы будем достаточно глубоко, не коснемся только физического уровня передачи данных (вернее коснемся вскользь). Физический уровень возьмет на себя соответствующий периферийный модуль МК.

Все примеры, которые я буду приводить, будут привязаны к линейке МК AT91SAM7S. Так как эта линейка МК не очень популярна в Сообществе, я постараюсь акцентировать внимание на работе самого интерфейса и по минимуму затрону специфические для этого МК особенности реализации.

Примеры будут базироваться на «глубоко модернизированном» и достаточно низкоуровневом примере реализации USB от Atmel. Готовые библиотеки рассматривать не будем. Не по тому, что это плохо, просто наша цель разобраться — как работает интерфейс.

В качестве практического задания – давайте поставим целью создать CDC-ACM устройство. На практике, за сокращением CDC-ACM стоит «обыкновенный» виртуальный СОМ-порт. С терминологией разберемся позже, пока скажем так: на уровне ОС устройство будет автоматически распознаваться как последовательный интерфейс (COM-порт в Win, /dev/ttyS в Linux и т. д.).

Общие сведения.

USB –последовательный интерфейс, используемый для подключения периферийных устройств. Соответственно, существуют понятие «главное устройство» (хост, он управляет обменом данными через интерфейс, выступает инициатором обмена) и «периферийное устройство» (клиент, в процессе обмена данными «подчиняется» хосту).

Логика работы у хоста и клиента принципиально отличается, соответственно нельзя напрямую соединять устройства «хост – хост» и «клиент – клиент».

Есть специальные устройства – хабы, которые подключаются в качестве клиента к одному хосту и, в тоже время, выступают хостом для других периферийных устройств. Хабы используют для «разветвления» шины USB.

Полагаю, изложенные факты общеизвестны, двигаемся далее.

Физический уровень.

Физически интерфейс USB использует 4 провода: «земля (GND)», «+5В (VBUS)», «D+», «D-». Первые два могут использоваться для питания периферийного устройства (максимальный ток 500 мА). Два последних служат для передачи данных (обозначение D+ и D- условны, с электрическими потенциалами это никак не связанно).

Как я уже сказал, физическую передачу данных через D+ и D- нам обеспечит USB модуль МК.

Нам нужно знать следующее:

1. Питание на периферийное устройство подается сразу после подключения к USB разъему хоста. Сам разъем сконструирован таким образом, что первыми входят в «зацепление» контакты «GND» и «VBUS», только потом «D+» и «D-».

2. Подключение устройства к USB разъему хоста не означает, что хост сразу определит подключение нового устройства. Если не вдаваться в подробности, подключение/отключение устройства хост определяет по наличию вешней подтяжки на линиях D+ и D-. Такая формулировка очень упрощена, детально ознакомиться с вопросом можно в разделе 7.1.7.3 официальной спецификации USB 2.0.

В нашем случае, для того чтобы «заявить о себе» нужно подтянуть линию D+ посредством сопротивления 1.5 кОм к напряжению 3.3 вольта. Если мы уберем данную подтяжку – хост определит отключение устройства.

Подтяжку можно сделать постоянной (в таком случае хост будет определять подключение / отключение устройства одновременно с подключением / отключением устройства к разъему USB), либо управлять подтяжкой через ключ, дергая ногой МК (тогда наше устройство сможет самостоятельно подключатся и отключатся от хоста).

Логический уровень

На логическом уровне, обмен данными происходит через некоторые логические, виртуальные каналы внутри одного физического USB интерфейса. Такие каналы называют «Конечными точками» (EndPoints).

Конечные точки (каналы) бывают 4 видов:

Control – данный тип канала используется хостом для управления периферийным устройством. Хотя иногда данный тип канала используется для передачи данных.

Bulk — данный тип канала используется для обмена данными. Гарантирование целостности данных и гарантированная доставка данных для данного типа канала реализована «в железе». Однако скорость передачи данных по такому каналу ограничена.

Isochronous — данный тип канала в основном используется для обмена потоковыми данными. Целостность и доставка данных не контролируются, зато скорость значительно выше чем для Bulk каналов.

Interrupt – используются для реализации подобия «прерываний». Такие «прерывания» являются логическими, и никак напрямую не связанны с аппаратными прерываниями МК или прерываниями ОС.

Минимальная реализация USB устройства требует наличие всего одного Control канала (так называемая «нулевая конечная точка»). Остальные типы каналов, как и их количество определяет разработчик устройства исходя из функций устройства.

Однако, существуют некоторые стандартизированные классы USB устройств. Для каждого такого класса количество каналов, их типы и назначение установлено стандартом для данного класса устройств.

Мы стремимся создать устройство класса CDC (communications device class). Использование стандарта, в данном случае, избавит нас от необходимости писать драйвер для ОС. Как правило, драйвера для стандартных классов устройств уже «вшиты» во все популярные ОС.

Детально ознакомляться с типами каналов будем по ходу реализации нашего устройства. Забегая наперед, скажу, что в нашем устройстве будет 3 канала. Control канал для управления и два Bulk канала для предачи данных по направлению «ПК-МК» и, соответственно «МК-ПК».

Первая — вводная статья получилась слишком теоретической.

В следующей статье мы поговорим о дескрипторах USB устройства и рассмотрим процедуру инициализации устройства (запрос дескрипторов хостом и т. д.). Увы, но опять будет много теории, запаситесь терпением. :) Ничего, нам осталось «пережевать» дескрипторы устройств, после чего появятся примеры кода.

image

Для начала сравнительные фото сегодняшнего героя в компании заслуженных предков.


Коннектор USB Type-C немного крупнее привычного USB 2.0 Micro-B, однако заметно компактнее сдвоенного USB 3.0 Micro-B, не говоря уже о классическом USB Type-A.
Габариты разъема (8,34×2,56 мм) позволяют без особых сложностей использовать его для устройств любого класса, включая смартфоны и планшеты.



Сигнальные и силовые выводы размещены на пластиковой вставке пожалуй это самое слабое его место в центральной части разъёма. Контактная группа USB Type-C содержит 24 вывода. Напомню, что у USB 1.0/2.0 имелось всего 4 контакта, а разъемам USB 3.0 потребовалось уже 9 выводов.



image

Если внимательно присмотреться к рисунку слева, то видно, что контакты имеют разную длину. Это обеспечивает их замыкание в определённой последовательности. На рисунке в центре мы видим наличие защёлок, которые должны удерживать воткнутый кабель и обеспечивать тактильный щелчок в процессе соединения-рассоединения. На правом графике изображена зависимость усилия в процессе вставки-вынимания разъёма.

Пики, которые мы видим на нём — это моменты срабатывания защёлки.

Можно констатировать, что разработчики стандарта сделали если не всё, то почти всё, чтобы разъём стал максимально удобным и надёжным: он вставляется любым концом и любой стороной с ощутимым щелчком. По их мнению, он способен пережить эту процедуру более 10 тысяч раз.

Многоликий симметричный янус

Крайне приятной и полезной особенностью USB-C стал симметричный дизайн разъёма, позволяющий подключать его к порту любой стороной. Достигается это благодаря симметричному расположению его выводов.


По краям расположены выводы земли. Плюсовые контакты питания также расположены симметрично. В центре находятся контакты, отвечающие за совместимость с интерфейсом USB2 и младше. Им повезло больше всего — они дублируются и поэтому поворот на 180 градусов при соединении не страшен. Синим цветом помечены выводы, отвечающие за высокоскоростной обмен данными. Как мы видим тут всё хитрее. Если мы повернём разъём, то к примеру, выход TX1 поменяется местами с TX2, но одновременно и место входа RX1 займёт RX2.

Выводы Secondary Bus и USB Power Delivery Communication служебные и предназначены для общения между собой двух соединяемых устройств. Ведь им необходимо очень о многом друг другу рассказать, прежде чем начать обмен, но об этом позже.

А пока ещё об одной особенности. Порт USB Type-C изначально разрабатывался в качестве универсального решения. Помимо непосредственной передачи данных по USB, он может также использоваться в альтернативном режиме (Alternate Mode) для реализации сторонних интерфейсов. Такую гибкость USB Type-C использовала ассоциация VESA, внедрив возможность передачи видеопотока посредством DisplayPort Alt Mode.

image

USB Type-C располагает четырьмя высокоскоростными линиями (парами) Super Speed USB. Если две из них выделяются на нужды DisplayPort, этого достаточно для получения картинки с разрешением 3840×2160. При этом не страдает скорость передачи данных по USB. На пике это все те же 10 Гб/с (для USB 3.1 Gen2). Также передача видеопотока никак не влияет на энергетические способности порта. На нужды DisplayPort может быть выделено даже 4 скоростные линии. В этом случае будут доступны разрешения вплоть до 5120×2880. В таком режиме остаются не задействованы линии USB 2.0, потому USB Type-C все еще сможет параллельно передавать данные, хотя уже с ограниченной скоростью.

В альтернативном режиме для передачи аудиопотока используются контакты SBU1/SBU2, которые преобразуются в каналы AUX+/AUX-. Для протокола USB они не задействуются, потому здесь тоже никаких дополнительных функциональных потерь.

При использовании интерфейса DisplayPort, коннектор USB Type-C по-прежнему можно подключать любой стороной. Необходимое сигнальное согласование предусмотрено изначально.

image

Подключение устройств с помощью HDMI, DVI и даже D-Sub (VGA) также возможно, но для этого понадобятся отдельные переходники, однако это должны быть активные адаптеры, так как для DisplayPort Alt Mode, не поддерживается режим Dual-Mode Display Port (DP++).

Альтернативный режим USB Type-C может быть использован отнюдь не только для протокола DisplayPort. Возможно, вскоре мы узнаем о том, что данный порт научился, например, передавать данные с помощью PCI Express или Ethernet.

И этому дала, и тому дала. В общем… о питании.

Еще одна важная особенность, которую привносит USB Type-C – возможность передачи по нему энергии мощностью до 100 Вт. Этого хватит не только для питания/зарядки мобильных устройств, но и для работы ноутбуков, мониторов, а если пофантазировать, то и небольшого лабораторного источника питания.

При появлении шины USB, передача энергии была важной, но всё же второстепенной её функцией. Порт USB 1.0 обеспечивал всего 0,75 Вт (0,15 А, 5 В). Достаточно для работы мыши и клавиатуры, но не более того. Для USB 2.0 номинальная сила тока была увеличена до 0,5 А, что позволило получать от неё уже 2,5 Ватта для питания, например, внешних жестких дисков формата 2,5”. Для USB 3.0 номинально предусмотрена сила тока в 0,9 А, что при неизменном напряжении питания в 5В гарантирует мощность в 4,5 Вт. Специальные усиленные разъемы на материнских платах или ноутбуках способны были выдавать до 1,5 А для ускорения зарядки подключенных мобильных устройств, но и это “всего лишь” 7,5 Вт. На фоне этих цифр возможность передачи 100 Вт выглядит чем-то фантастическим.

Для того чтобы наполнить такой энергией порт USB Type-C служит поддержка спецификации USB Power Delivery 2.0 (USB PD). Если таковой нет, порт USB Type-C штатно сможет выдать на гора 7,5 Вт (1,5 А, 5 В) или 15 Вт (3А, 5 В) в зависимости от конфигурации. Для подробного описания этой спецификации в данной статье недостаточно места, да и всё равно я не сделаю это лучше, чем уважаемый stpark в своей замечательной статье.

Однако, совсем обойти эту архиважную тему не получится.

Для того, чтобы обеспечить мощность в 100 ватт при напряжении пять вольт потребуется ток в 20 ампер! Такое при габаритах кабеля USB Type-C возможно пожалуй только если изготовить его из сверхпроводника! Боюсь, что сегодня это будет обходиться пользователям дороговато, поэтому разработчики стандарта пошли по другому пути. Они увеличили напряжение питания до 20 Вольт. “Позвольте, но ведь оно выжжет напрочь мой любимый планшет” — воскликните вы, и будете совершенно правы. Для того, чтобы не пасть жертвой разъярённых пользователей, инженеры задумали хитрый трюк — они ввели систему силовых профилей. Перед соединением любое устройство находится в стандартном режиме. Напряжение в нём ограничено пятью вольтами, а ток двумя амперами. Для соединения с устройствами старого типа этим режимом всё и закончится, а вот для более продвинутых случаев, после обмена данными, устройства переходят в другой согласованный режим работы с расширенными возможностями. Чтобы познакомиться с основными существующими режимами глянем на таблицу.


Профиль 1 гарантирует возможность передачи 10 Вт энергии, второй уже – 18 Вт, третий – 36 Вт, четвёртый целых – 60 Вт, ну а пятый нашу заветную сотню! Порт, соответствующий профилю более высокого уровня, поддерживает все состояния предыдущих по нисходящей. В качестве опорных напряжений выбраны 5В, 12В и 20В. Использование 5В необходимо для совместимости с огромным парком имеющейся USB-периферии. 12В – стандартное напряжение питания различных компонентов систем. 20В предложено с учетом того, что для зарядки аккумуляторов большинства ноутбуков используются внешние БП на 19–20В.

Пара слов о кабелях!

Поддержка описываемого в статье формата в полном объёме потребует огромной работы не только программистов, но и производителей электроники. Потребуется разработать и развернуть производство очень большого количества компонентов. Самое очевидное это разъёмы. Для того, чтобы выдерживать высокие токи питающего напряжения, не оказывать помех передаче сигналов очень высокой частоты, да ещё при этом не выходить из строя после второго коннекта и не вываливаться в самый неподходящий момент, качество их изготовления должно быть радикально выше по сравнению с форматом USB 2.

Для совмещения передачи энергии большой мощности и сигналом с гигабитным трафиком, производителям кабелей придётся серьёзно напрячься.

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


Кстати, об ограничениях на длину кабелей при использовании интерфейса USB 3.1. Для передачи данных без существенных потерь на скоростях до 10 Гб/c (Gen 2) длина кабеля c разъемами USB Type-C не должна превышать 1 метр, для соединения на скорости до 5 Гб/c (Gen 1) – 2 метра.

Схемотехники производителей материнских плат, докстанций и ноутбуков долго будут ломать голову, как сгенерировать мощность порядка сотни ватт, а трассировщики, как подвести её к разъёму USB Type-C.

Производители чипов на низком старте.

Симметричное подсоединение и работа сигнальных линий в разных режимах потребует применения микросхем высокоскоростных коммутаторов сигналов. Сегодня уже появились первые ласточки. Вот, например, коммутатор от фирмы Texas Instruments, который поддерживает работу в устройствах как в режиме хоста так и ведомого устройства. Он способен коммутировать линии дифференциальных пар с частотой сигнала вплоть до 5ГГц.


При этом размеры чипа HDC3SS460 3.5 на 5.5 мм и в режиме покоя он потребляет ток порядка 1 микроампера. В активном же режиме — меньше миллиампера. Существуют и более продвинутые решения, например чипы производства NXP поддерживают частоту обмена до 10 ГГц.

Стали появляться и менеджеры питания, совмещённые с цепями защиты сигнальных линий от статики, например вот такое изделие от NXP


Оно предназначено для корректной обработки момента подключения разъёма, а так же размыкания цепи питания в случае неполадок. Данный чип уже поддерживает напряжение на VBUS до 30 вольт, а вот с максимальным коммутируемым током всё много хуже — он не должен превышать 1 ампера, что и понятно, учитывая габариты — 1.4 на 1.7 мм!

Безусловным лидером в этой области выступила Cypress, которая выпустила специализированный микроконтроллер с ядром ARM Cortex M0 поддерживающий все пять возможных для стандарта профилей питания.

Типичная схема включения для использования в ноутбуке даёт о нём некоторое представление, а подробнее с ним можно будет ознакомиться скачав даташит.


В отличие от чипа NXP он ориентирован на управление внешними силовыми ключами и поэтому может обеспечить коммутацию требуемых токов и напряжений, не смотря на свои малые размеры.


Внимание, Важная особенность для тех кто уже торопится заказать первые образцы — микроконтроллер не имеет USB интерфейса и не является полным и законченным решением. Он может служить только в качестве менеджера питания. В данный момент открыт предзаказ на поставку образцов и демонстрационных плат. Судьба этого микроконтроллера видимо будет во многом зависеть от того, снабдит ли фирма — производитель разработчиков референсными библиотеками для его использования в разных режимах.

Тот факт, что уже для него уже создано несколько демокитов сильно повышает вероятность последнего.


Лифт в небеса или Вавилонская башня.

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


Новый стандарт породил невиданную активность. Флагманы электронной индустрии — Apple, Nokia, Asus готовят к выпуску свои первые гаджеты с поддержкой USB Type-C. Китайцы уже штампуют кабели и переходники. На подходе докстанции и хабы с поддержкой высокой нагрузки по мощности. Производители чипов разрабатывают новые микросхемы и думают как бы запихнуть драйвер нового порта в микроконтроллер. Маркетологи решают куда воткнуть новый разъём, а инженеры чешут репу пытаясь реализовать многопрофильные устройства из уже имеющихся электронных компонентов.

Пока не ясно только одно. Что мы получим в результате? Удобный и надёжный разъём, который заменит львиную долю интерфейсов и найдёт повседневное применение, или вавилонское столпотворение, ведь ситуация может начать развиваться по не самому благоприятному сценарию:

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



Но даже если получится, то это вряд ли решит проблему — китайцы без зазрения совести легко поставят на любой шнур любой значок. А если надо, то до кучи на каждую сторону одного кабеля разные, их не смутит даже если они будут взаимоисключающими.

Рынок наводнится невероятным количеством переходников разного калибра и сомнительного качества.


Пытаясь подключить одно устройство к другому никогда в результате не будешь знать к какому результату этот процесс приведёт и из-за чего коннект либо вовсе отсутствует, либо всё жутко глючит. То ли один из гаджетов не поддерживает нужный профиль, то ли поддерживает но не слишком корректно, то ли вместо качественного кабеля попалась его грубая китайской подделка. А что прикажете делать, если вдруг на вашем ноутбуке выйдет из строя единственный оставшийся на нём разъём?

Поживём — увидим как оно выйдет. Пока же будем надеяться на лучшее, хотя в переходный период точно придётся не легко. Понимаю, что моя статья ответила далеко не на все вопросы о новом стандарте, но пора закругляться и браться уже за работу, а то у меня вырисовывается как раз первый клиент, который уже мечтает о плате с поддержкой USB Type-C. Есть шанс протестировать это чудо технологий на практике и затем поделиться уже личным опытом.

Интерфейс USB

Сегодняшняя статья будет посвящена, как уже видно из названия, обсуждению основ интерфейса USB. Рассмотрим основные понятия, структуру данных, разберемся, как происходит передача данных, а в ближайшем будущем реализуем все это на практике. Приступаем!

Существует ряд различных спецификаций USB. Началось все с USB 1.0 и USB 1.1, затем интерфейс эволюционировал в USB 2.0, относительно недавно появилась окончательная спецификация USB 3.0. Но на данный момент наиболее распространенной является реализация USB 2.0.

Ну и для начала основные моменты и характеристики. Интерфейс USB 2.0 поддерживает три режима работы:

Командует на шине USB хост (например, ПК), к которому можно подключить до 127 различных устройств. Если этого мало, то нужно добавить еще один хост. Причем немаловажно, что устройство не может само послать/принять данные хосту/от хоста, необходимо, чтобы хост сам обратился к устройству.

USB разъемы.

Помимо изображенных на рисунке, существуют также другие варианты исполнения USB-коннекторов, например, mini-USB и другие, ну это вы и так знаете 🙂

Отдельно стоит обсудить питание устройств USB. И тут также возможно несколько вариантов.

Во-первых устройства могут питаться от шины, тогда их можно разделить на два класса:

Разница тут заключается в том, что low-power устройства не могут потреблять больше, чем 100 мА. А устройства high-power должны потреблять не более 100 мА лишь на этапе конфигурации. После того, как они сконфигурированы хостом их потребление может составлять до 500 мА.

Кроме того, устройства могут иметь свой собственный источник питания. В этом случае они могут получать до 100 мА от шины, а все остальное забирать у своего источника.

С этим вроде бы все, давайте потихоньку переходить к структуре передаваемых данных. Все-таки это представляет для нас наибольший интерес!

Структура данных интерфейса USB.

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

Интерфейс USB, структура данных.

Каждая транзакция имеет следующий вид:

USB транзакции.

Структура Token пакета интерфейса USB.

Пакеты Token бывают трех типов:

Пакет In сообщает нашему USB-устройству, что хост готов принять от него информацию. Пакет Out, напротив, сигнализирует о готовности и желании хоста поделиться информацией. Пакет Setup нужен для использования управляющих передач. Ну а пакет Start Of Frame используется для того, чтобы инициировать начало кадра.

Тут есть еще один важный момент. PID включает в себя 4 бита, но при передаче они дополняются еще 4-мя битами, которые получаются путем инвертирования первых 4-ых бит.

Структура Data пакета.

Тут все в принципе так же, как и в пакете Token, только вместо адреса устройства и номера конечной точки здесь у нас передаваемые данные.

Осталось нам рассмотреть Status пакеты и пакеты SOF:

Структура Status пакета.

Тут PID может принимать всего лишь два значения:

И, наконец, Start Of Frame пакеты:

Структура SOF пакета.

Давайте в качестве примера рассмотрим процесс записи данных в USB-устройство. То есть рассмотрим пример структуры кадра записи.

Кадр, как вы помните состоит из транзакций и имеет следующий вид:

Кадр интерфейса USB.

Что представляют из себя все эти транзакции? Сейчас разберемся! Транзакция SETUP:

Транзакция Setup.

Транзакция Out.

Аналогично при чтении данных из USB-устройства кадр выглядит так:

Кадр USB при чтении данных.

Транзакцию SETUP мы уже видели, посмотрим на транзакцию IN:

Транзакция In.

Как видите, все эти транзакции имеют такую структуру, как мы обсуждали выше 🙂

В общем, думаю достаточно на сегодня. Довольно-таки длинная статья получилась, в ближайшее время обязательно попробуем реализовать интерфейс USB на практике!

Читайте также: