![](https://habrastorage.org/webt/xm/31/ba/xm31baoycfzpr_4ftbowctc7svo.png)
Когда мы в SberDevices делаем новое устройство, работаем над его аппаратной частью, перед нами встаёт вопрос выбора интерфейсов. Важным моментом при выборе является их доступность и совместимость с другими устройствами.
В своих устройствах мы не могли пройти мимо интерфейса USB-C. Помимо того, что он очень популярен в современных девайсах, он серьёзно расширил функциональность USB по сравнению со своими предшественниками. Давайте расскажу о нём поподробнее.
Краткий обзор особенностей USB TYPE-C
Стандарты USB существуют много лет, развиваются и совершенствуются по мере увеличения технологических потребностей и возможностей. Несмотря на свою универсальность, которая следует из аббревиатуры, привычный USB перестал удовлетворять по объему своей функциональности. В частности, не может решить задачу по обеспечению питания многих современных устройств, потребление которых серьёзно увеличилось. Первая версия USB TYPE-C появилась в 2013 году. Помимо возможностей USB 2.0 и USB 3.0, USB-C стал поддерживать существенно более энергоёмкие профили питания, а также альтернативные режимы работы. В альтернативных режимах контакты разъёма используются для передачи данных высокоскоростных стандартов, таких как Display Port, Thunderbolt, HDMI, Mobile High-Definition Link (MHL). Недавно была опубликована новая реализация стандарта — USB4, которая также ориентируется на спецификацию USB-C.
Описание и назначение контактов разъёма
Разъём включает в себя 24 контакта. Такое большое число контактов по сравнению с привычными разъёмами USB связано как с добавлением новых контактов, расширяющих функциональность, так и с дублированием контактов на противоположную часть разъёма. Так группы сигналов USB 2.0 и USB 3.0 задублированы, разъем стал симметричным, поэтому теперь его можно вставлять любой стороной.
Рассмотрим группы сигналов USB-C соединителя:
Группа | Цепи |
---|---|
Питание | VBUS (4 контакта), GND (4 контакта) |
USB 2.0 | DP (2 контакта), DN (2 контакта) |
USB 3.0 | TX1+, TX1-, TX2+, TX2-, RX1+, RX1-, RX2+, RX2- |
Конфигурационные контакты | CC1, CC2 |
Дополнительные (Альтернативный режим) | SBU1, SBU2 |
Видно, что под питание заложено 4 пары контактов. Это намекает на то, что через разъём стала возможна доставка существенно большей энергии для питания устройства. Через контакты питания возможна передача до 100 Ватт в нагрузку.
Профили питания доступные через USB TYPE-C:
USB 2.0 | 5 В 500 mA |
USB 3.0/USB 3.1 | 5 В 900 mA |
USB BC 1.2 | 5 В, до 1.5 А |
USB Type-C Current 1.5A | 5 В 1.5 A |
USB Type-C Current 3.0A | 5 В 3.0 A |
USB Power Delivery | до 20 В, до 5A |
Режим питания зависит от того, какая функциональность USB-C используется. Появившиеся контакты CC позволяют установить требуемый режим питания и открывают некоторые дополнительные возможности, но об этом позже.
Чтобы иметь возможность использовать профиль питания с большим током, при установке соединения нужно воспользоваться конфигурационными контактами CC.
Конфигурационные контакты СС
С помощью конфигурационных контактов CC (Configuration channel) происходит подключение двух устройств, установка параметров соединения, профилей питания, а также информационный обмен протокола USB Power Delivery. Функционально CC1- и CC2-пины решают следующие задачи:
- Определение ориентации кабеля.
В разъёме есть два конфигурационных контакта, но только один из них через кабель подключается к CC-пину на противоположной стороне. По тому, какой из двух контактов подключён, можно понять ориентацию кабеля. Второй может быть переназначен как контакт VCONN для питания активных кабелей.
- Определение ролей подключённых устройств.
При установлении соединения необходимо определить, кто будет выступать в качестве источника питания (Power Source) и потребителя (Power Sink). С точки зрения обмена данными, нужно определить хост Downstream Facing Port (DFP) и девайс Upstream Facing Port (UFP).
![](https://habrastorage.org/webt/ri/xb/nd/rixbnd0pzbth1rpditnkb-hodx4.png)
Источник (он же DFP) подтягивает линии CC к плюсу через резисторы Rp или использует источники тока. Потребитель (UFP) в свою очередь через резисторы Rd подтягивает линии CC к минусу.
Выставляя определённый номинал Rp (или создавая определённый ток на линии СС), host сообщает, какой ток для питания устройства он может обеспечить. Измеряя падение напряжения на Rd, потребитель понимает, какой Rp используется на противоположном конце и, следовательно, определяет ток питания, который может обеспечить host. Без использования USB Power Delivery по такой схеме возможно установить соединение c током до 3А с единственно возможным напряжением 5В.
- Канал для обмена сообщениями при работе по протоколу USB Power Delivery.
Об этом подробно расскажу в отдельной статье.
Экономичный вариант реализации без USB PD
Описание
Как видно выше, спецификация USB-C поддерживает широкий спектр стандартов передачи данных и профилей электропитания, но это не означает, что разработчик обязан использовать всю функциональность. Минимальный набор USB TYPE-C может включать в себя USB 2.0 с контактами CC и единственным напряжением питания 5V. В такой конфигурации можно обеспечить потребителю до 15 Вт (5 В, 3А), что значительно больше, чем может дать стандартный порт USB 3.0 – 4,5 Вт (5В, 900 мА).
Реализация
Чтобы реализовать логику подключения между DFP и UFP, можно использовать микросхему контроллера конфигурации CC, например, PTN5150. Этот вариант значительно проще и дешевле навороченных контроллеров, поддерживающих USB Power Delivery. Структурная схема выглядит так:
![](https://habrastorage.org/webt/pc/rc/km/pcrckmdgb6xv03c1smfpc5kctlg.png)
Как видно, основные узлы представляют собой: монитор напряжений на СС контактах, набор источников тока, резисторов для переключения состояния выводов, модуль управления ролями устройства.
Микросхема имеет интерфейс I2C, с его помощью можно определить или изменить роль устройства (DFP, UFP, DRP).
Когда выбирается роль DFP, устройство предполагается как Power Source, для которого есть возможность выбрать 3 профиля питания. После выставления соответствующих бит в регистре управления, происходит подключение соответствующего источника тока на линию CC.
Ток на СС-линии | Режим питания |
---|---|
80 uA | 5V / 0.9 A |
180 uA | 5V / 1.5 A |
330 uA | 5V / 3 A |
В случае определения микросхемы в качестве UFP, контакты CC подключаются через резистор 5,1 кОм на землю. Монитор измеряет падение напряжения на этом резисторе и в статусный регистр заносится текущий режим питания.
Также возможно установить роль Dual Role Power (DRP), в этом режиме микросхема последовательно изменяет состояние СС-контактов от “pull-up Rp” до “pull-down Rd” и обратно до тех пор, пока не будет установлено соединение. Соединение возможно только между одним источником (Power Source) и одним потребителем (Power Sink). Таким образом, когда микросхема находится в режиме DRP и монитор напряжения CC-контактов замечает понижение напряжения на противоположном конце (подключён “pull-down Rd”), устройство понимает, что подключено к Sink, и начинает играть роль Source. Такой режим полезен в том случае, когда заранее неизвестно, в каком режиме должно работать устройство.
Рассмотрим пример использования контроллера
Кроме описанных выше СС-пинов и I2C-шины стоит отдельно отметить контакты ID, CON_DET, PORT. Контакт ID отображает режим, в котором в данный момент находится контроллер. Когда устройство определило себя в качестве DFP, ID примет значение LOW. Контакт CON_DET находится в HIGH, когда соединение установлено, LOW — в обратном случае. Эти два логических сигнала будем использовать далее для включения (когда мы DFP) и отключения (UFP) питания подключённого устройства.
Port — это вход, которым задаётся начальный режим устройства после включения питания. В случае, когда используется “pull-up”, контроллер становится DFP, если “pull-down” — UFP. Если нога осталась «висеть в воздухе», будет использоваться режим Dual Role, и устройство будет ждать подключения, чтобы определиться со своей ролью. Это состояние может быть изменено позднее, после конфигурирования по I2C или изменения уровня напряжения на PORT. Таким образом можно управлять режимами работы без использования I2C.
Нужно управлять питанием внешнего устройства, для этого можно воспользоваться дополнительной микросхемой логики и ключом.
![](https://habrastorage.org/webt/nj/qj/kz/njqjkztdxetq2g19n7f-1lebuty.png)
Наша задача подавать питание на разъём USB-C только в том случае, когда к нам подключён UFP. ID в таком случае примет значение LOW, CON_DET — значение HIGH. Для того, чтобы открыть ключ высоким уровнем HIGH, надо реализовать функцию Y = CON_DET& (NOT ID). Таким образом, если снаружи подключён UFP, он от нас питается, если DFP, то напряжение на разъём не подаётся и не происходит конфликта двух источников.
В случае, если нет задачи менять роль устройства в процессе работы, а также не требуется определения ориентации кабеля, можно выполнить вариант проще, без микросхемы вообще. Допустим, ваше устройство играет строго одну роль — UFP/Power Sink, например, это флешка. В таком случае достаточно выводы СС1 и СС2 на разъёме подключить через 5,1 кОм на землю.
В случае, если ваше устройство играет только роль DFP/Power source и оно должно подключаться к устройству USB-C Dual Role, также можно обойтись резисторами. В этом случае подбираем номиналы в зависимости от напряжения источника, к которому подключаем резисторы.
Ток на СС-линии | Режим питания | Подтяжка к 5 В, кОм | Подтяжка к 3,3 В, кОм |
---|---|---|---|
80 uA | 5V / 0.9 A | 56 ± 20% | 36 ± 20% |
180 uA | 5V / 1.5 A | 22 ± 5% | 12 ± 5% |
330 uA | 5V / 3 A | 10 ± 5% | 4,7 ± 5% |
Мы рассмотрели относительно простые и дешёвые способы сделать наше устройство совместимым с другими USB-C устройствами, когда мы хотим использовать лишь часть функций спецификации. Этим возможности стандарта не ограничиваются, Power Delivery и Альтернативные режимы существенно расширяют доступные функции, но удорожают и усложняют устройство. Об этих возможностях расскажу в следующих статьях.