usb dp1 что это
Варианты аппаратной реализации USB Type-C, или Когда не требуется Power Delivery
Когда мы в 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-пины решают следующие задачи:
Источник (он же DFP) подтягивает линии CC к плюсу через резисторы Rp или использует источники тока. Потребитель (UFP) в свою очередь через резисторы Rd подтягивает линии CC к минусу.
Выставляя определённый номинал Rp (или создавая определённый ток на линии СС), host сообщает, какой ток для питания устройства он может обеспечить. Измеряя падение напряжения на Rd, потребитель понимает, какой Rp используется на противоположном конце и, следовательно, определяет ток питания, который может обеспечить host. Без использования USB Power Delivery по такой схеме возможно установить соединение c током до 3А с единственно возможным напряжением 5В.
Экономичный вариант реализации без 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. Структурная схема выглядит так:
Как видно, основные узлы представляют собой: монитор напряжений на СС контактах, набор источников тока, резисторов для переключения состояния выводов, модуль управления ролями устройства.
Микросхема имеет интерфейс 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.
Нужно управлять питанием внешнего устройства, для этого можно воспользоваться дополнительной микросхемой логики и ключом.
Наша задача подавать питание на разъём 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, также можно обойтись резисторами. В этом случае подбираем номиналы в зависимости от напряжения источника, к которому подключаем резисторы.
Поговорим о USB.
Я не буду говорить ни о USB2 ни тем более о USB3. Это для меня в пока основном «высокие материи». Давайте поговорим о старом добром USB1.1.
И пожалуйста не смейтесь. На самом деле, если Вы поищите в русскоязычном интернете техническую спецификацию на USB1.1 (я уже не говорю про USB2, а в USB3 наверное Intel вообще не публикует деталей), то вряд ли Вы найдете там что нибудь стоящее. В основном у нас можно найти общие сведения и общие фразы. Нас же, как разработчиков аппаратуры интересуют технические детали стандарта и возможность реализации устройств поддерживающих его.
Еще конкретнее вопрос стоит так: сможем ли мы подключить платку Марсоход через USB к компьютеру?
Естественно прежде всего нужно ознакомиться со спецификацией USB1.1. Теоретически нужно посетить сайт www.usb.org и взять там все, что нужно. Однако не все так просто. Взять оттуда скорее всего у Вас просто так не получится. Спецификации они почему-то продают http://www.usb.org/developers/estoreinfo/USB_product_order_form.pdf да и найти нужное в дебрях этого сайта не просто.
Теперь спецификацию на USB1.1 можно взять на нашем сайте!
Здесь же, в этой статье, я попробую описать основные принципы работы USB1.1.
Сразу сделаю оговорку: во-первых, я не очень люблю USB1.1, слишком уж замудрено он придуман (мне кажется можно было сделать проще), во-вторых, естественно, в маленькой статье невозможно описать все. Прошу заметить, что в файле спецификации USB1.1 целых 327 ужасных страниц текста и картинок. Если у Вас есть мысль напечатать это на принтере, то не советую. Реально полезной информации там не очень много, зато «много букав».
Итак, приступим.
В разъеме USB1.1 всего четыре контакта:
Таким образом, мы видим всего 2 сигнала для обмена данными между хостом (компьютером) и подключаемым устройством. Эти сигналы DP и DM (иногда их обозначают D+ и D-) – это дифференциальная пара. Сигнал передается по ним в противофазе. Это позволяет на приемном конце бороться с помехами.
Как хост определяет, что подключено новое устройство? Довольно просто. На стороне хоста обе линии DP и DM притянуты к GND через резисторы 15кОм. Контроллер хоста проверяет состояние этих линий. Если на обеих линиях ноль, то это значит, что ничего не подключено. На стороне подключаемого устройства один из сигналов притянут через резистор 1,5кОм к напряжению питания. Таким образом, если устройство подключено, то одна из линий либо DP либо DM поднимается в состояние «единица» и хост контроллер видит, что подключено новое устройство.
Устройства для USB1.1 бывают двух типов: полноскоростные (full speed) и низкоскоростные (low speed). Посмотрите на эти две картинки:
Таким образом, полноскоростные устройства имеют подтягивающий резистор на +5В для сигнала D+, а низкоскоростные устройства – для сигнала D-.
Частота передачи данных для полноскоростных устройств 12МГц, а для низкоскоростных 1,5МГц. Низкоскоростное устройство принимает и посылает данные до 8 байт длиной. Высокоскоростное устройство может посылать или принимать до 64 байт данных.
Особо следует отметить, что эти две линии D+ и D- служат для передачи данных в обе стороны. Как же разрешаются конфликты на линиях, если оба и хост и подключенное устройство захотят передавать данные? Такая ситуация не должна случаться в принципе. Дело в том, что передача полностью управляется хост контроллером компьютера. Если хост контроллера должен прочитать данные с устройства, то он посылает соответствующую команду и переключается в режим приема, а затем ждет пакета от подключенного устройства.
Хост контроллер компьютера ведет опрос подключенных устройств каждую миллисекунду – этот временной промежуток называется фреймом. В начале каждого фрейма хост контроллер посылает специальный SOF (Start Of Frame) пакет для полноскоростных подключенных устройств или SE0 для низкоскоростных устройств.
Если устройство не получает SOF или SE0 некоторое время (несколько фреймов), то это означает, что оно должно уйти в спячку (suspend) и по возможности снизить энергопотребление.
Отдельно нужно обратить внимание на состояние SE0. Это состояние, когда обе линии DP и DM находятся «в нуле». Это состояние используется в 3-х случаях.
Во-первых, после подключения устройства программное обеспечение хоста дает ему команду «сброс» (Reset). Хост опускает обе линии DP и DM в «ноль» на время большее 10мс. Подключенное устройство должно воспринять это действие как общий «сброс».
Во-вторых, как я уже сказал, для низкоскоростных утройств каждый фрейм начинается с состояния SE0 (обе линии DP и DM в нуле) длительностью 2 такта от 1.5МГц.
Все данные в любую сторону оформлены в виде пакетов. Давайте посмотрим как они выглядят на физическом уровне. Лучше всего изучать по картинкам, а они в спецификации USB1.1 какие-то не очень понятные. Я нарисовал свою картинку.
Здесь видно, что подключено низкоскоростное устройство, так как фрейм начинается с SE0 – по времени 2 бита DP и DM находятся в нуле.
Дальше видно 3 пакета: хост посылает пакет SETUP, посылает пакет DATA0 и получает от устройства пакет ACK. Каждый пакет всегда начинается со специального символа SYN, его значение 0x80. Байт передается младшими битами вперед. Кодировка несколько странная. Каждый нулевой бит кодируется изменением сигнала DP/DM на противоположный. Каждый единичный бит состояние линий не изменяется. Однако есть исключение – если в передаваемом потоке окажется подряд шесть единиц, то состояние линий DP/DM принудительно меняется на противоположный. Этот нулевой бит должен быть удален на приемном конце при приеме пакета. Этот алгоритм называется «bit stuffing». Обратите внимание на завершение пакетов состоянием SE0 – EOP (End Of Packet). Интервал между пакетами должен быть не менее времени 2 бит, на практике обычно больше. Это был физический уровень связи.
Рассмотрим уровень протокола. Здесь все гораздо более запутанно. Без поллитра не разобраться (конечно если Вам больше восемнадцати). Для чего разработчики стандарта сделали все это так сложно я и сам не пойму.
Существуют пакеты нескольких типов. В каждом типе есть под-типы (это мое определение, в спецификации так не говорят).
Итак вот таблица:
Тип пакета | Идентификатор пакета PID в шестнадцатеричном виде | Описание |
Token OUT | 0xE1 | Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от хоста к уствойству |
Token IN | 0x69 | Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от устройства к хосту |
Token SETUP | 0x2D | Используется для передачи адреса устройства и номера канала (endpoint) во время транзакции передачи данных от хоста к уствойству к специальному управляющему каналу (control pipe) |
Token SOF | 0xA5 | Маркер начала фрейма и номер фрейма |
Data DATA0 | 0xC3 | Используется для передачи четного пакета данных |
Data DATA1 | 0x4B | Используется для передачи нечетного пакета данных |
Handshake ACK | 0xD2 | Подтверждение о приеме данных |
Handshake NAK | 0x5A | Либо приемник не может принят данных либо передатчик не может послать |
Handshake STALL | 0x1E | Останов endpoint или служебный запрос не поддерживается |
Special PRE | 0x3C | Посылается USB хабу, когда требуется переключить скорость в низкоскоростную |
Рассмотрим формат основных пакетов: token, data, handshake.
Не забудьте, что в линии USB пакеты посылаются начиная с символа SYN 0х80, а уж затем вот эти пакеты и завершаются они EOP (2 такта линии DP и DM в нуле).
Для token и data еще нужно посчитать контрольные суммы. Их можно считать вот так (написано на языке C):
//функция принимает двухбайтовое слово где адрес и номер канала, считает CRC5 и //вписывает контрольную сумму прямо в нужное место этого слова
USHORT CalcCrc5ForUsbTokenPacket(USHORT a)
<
ULONG b = 0x1f;
USHORT d = a;
for(int i=0; i >= 1;
b ^= 0x14;
>
else
b >>= 1;
d >>= 1;
>
//функция принимает указатель на пакет данных (без PID) и длину пакета
//возвращает CRC16
USHORT CalcCrc16ForUsbDataPacket(char *pData, int len)
<
USHORT b = 0xFFFF;
for(int i=0; i >= 1;
b ^= 0xa001;
>
else
b >>= 1;
a >>= 1;
>
>
b ^= 0xffffffff;
return (USHORT)b;
>
Ну а на последок, чтобы Вы оценили все «прелесть» диалога между хостом (компьютером) и подключенным устройством посмотрите на следующую картинку:
Это снимок экрана с программы USB Tracker – устройства позволяющего записывать и анализировать весь трафик между хостом и устройством.
На самом деле, сделать что нибудь с USB не имея подобного инструмента практически нереально. У нас он есть и мы попробуем реализовать простую функцию USB в плате Марсоход. А что у нас получится возможно скоро Вы узнаете.
краткая шпаргалка по USB
Вот на картинке ниже все отчетливо видно (один пакет от ведомого):
Сначала все просто:
Пакет всегда начинается с SYN (10000000).
Примерная последовательность пакетов.
Как происходит дальше работа на примере обычной клавиатуры
Хост долбит периодически PID IN по адресу устройства плюс Endpoint устройства (у нас EndP 0x01), который отвечает за прием данных от клавиатуры (IN для хоста).
Если никакая клавиша не нажата ведомый обязан ответить и отвечает NAK. Такие пакеты хост передает примерно 1 раз в 10ms и устройство если не нажата клавиша передает NAK.
А вот когда на клавиатуре нажимается какая-нибудь клавиша, ведомый ответит сначала DATA0 пакетом и следом пакет ACK.
Количество передаваемых байт в DATA0 зависит от типа клавиатуры, то есть каждый решает сколько использовать байт для передачи скан кода нажатой клавиши. Клавиатура сообщает по стандартному протоколу через EP0 о своих настройках.
Видно как хост тупо чередует EP0 и EP2.
Если не возникает какого-то прерывания у девайса
Тут надо в регистры лезть и отсрочки уже не будет. Какие мысли возникают в первую очередь. Прерывания маскируются вроде (надо проверить).
В процессе сверки регистров мы находим отличия в OTG_FS_GLOBAL, исправляем, заодно изучаем назначение регистров и в какой-то момент даже ловим __HAL_PCD_IS_INVALID_INTERRUPT (на картинке выше видно). Ура хоть что-то.
Момент истины
Где эта таблица, где ее адреса.
#define USB_OTG_FS_PERIPH_BASE 0x50000000U [stm32f205xx.h]
.
#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE) [stm32f205xx.h]
.
Опять момент истины
Скан коды USB HID клавиатур это не ASCII коды и не не коды PS/2 клавы.
Революция интерфейсов. USB 3.1 Type-C в деталях. Взгляд электронщика
Электроника — наука о контактах
Для начала сравнительные фото сегодняшнего героя в компании заслуженных предков.
Коннектор 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 выводов.
Если внимательно присмотреться к рисунку слева, то видно, что контакты имеют разную длину. Это обеспечивает их замыкание в определённой последовательности. На рисунке в центре мы видим наличие защёлок, которые должны удерживать воткнутый кабель и обеспечивать тактильный щелчок в процессе соединения-рассоединения. На правом графике изображена зависимость усилия в процессе вставки-вынимания разъёма.
Пики, которые мы видим на нём — это моменты срабатывания защёлки.
Можно констатировать, что разработчики стандарта сделали если не всё, то почти всё, чтобы разъём стал максимально удобным и надёжным: он вставляется любым концом и любой стороной с ощутимым щелчком. По их мнению, он способен пережить эту процедуру более 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.
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 по-прежнему можно подключать любой стороной. Необходимое сигнальное согласование предусмотрено изначально.
Подключение устройств с помощью 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. Есть шанс протестировать это чудо технологий на практике и затем поделиться уже личным опытом.