В прошлый раз я рассказывал про минимальный набор компонентов, который может быть включён в устройство для поддержки базовых функций USB-C. Но бывают ситуации, когда этих базовых возможностей недостаточно – например, нужно использовать несколько профилей напряжения, чтобы блок питания от одного устройства подходил к другому. Или же есть необходимость подстроить сами профили. Или просто нужна бОльшая мощность питания (в случае с USB-C доступный максимум – 15 Вт). Во всех этих ситуациях на помощь придёт стандарт Power Delivery. Он, например, используется в линейке зарядных устройств Apple – профили с бОльшим напряжением доставляют бОльшую мощность к устройству и позволяют его быстро заряжать. В нашем смарт-экране SberPortal есть узлы, которые требуют значительной мощности питания – прежде всего это высокопроизводительная система на кристалле (SoС) и акустика. Один только звук требует около 30 Вт. Поэтому при разработке устройства пришлось усложнить систему питания и реализовать Power Delivery. Об этом стандарте и пойдёт ниже речь.
Также разберёмся в его особенностях и посмотрим, как со временем изменился способ передачи данных в стандарте. А ещё я расскажу и покажу с помощью анализатора протокола, что происходит при установлении подключения в устройствах, на примере ноутбука с Power Delivery. Затем посмотрим, как мы реализовали PD в нашем смарт-экране SberPortal.
Особенности Power Delivery
Power Delivery расширяет возможности USB-C, позволяет использовать повышенное, по сравнению с привычным USB, напряжение на контактах VBUS – 20 В (и, как мы увидим, даже выше). При использования стандартного кабеля USB-C возможна доставка потребителю до 60 Вт, а при использовании ECMA кабеля – до 100 Вт.
Эти функции достигаются за счёт информационного обмена по линии СС. Кроме поддержки СС-логики, которая определяет роль устройства при установлении соединения, по этой линии происходит обмен сообщениями типа “запрос-ответ” между источником и потребителем.
Важная особенность стандарта – наличие PDO (Power Delivery Objects). PDO представляет собой профиль питания с заданным напряжением и током. Таких профилей в PD-источнике должно быть больше, либо равно 2. Другими словами, в одном адаптере находится несколько источников питания, выбор нужного при этом делается потребителем. Обязательный профиль – 5V/3А. Благодаря этому допустимо подключение устройства-источника, в котором реализован полноценный PD, к потребителю, где выполнена только базовая функциональность USB-C (СС-логика). В таком случае источник установит на своем выходе 5V.
Физический уровень
BFSK
В первых ревизиях стандарта USB Power Delivery линия питания VBUS использовалась не только по прямому назначению, но и в качестве канала для обмена сообщениями между потребителем и источником энергии.
Обмен сообщениями в таком случае происходит в режиме полудуплекс (устройство в один момент времени может либо передавать, либо принимать информацию) частотно-манипулированным сигналом (FSK). Несущая частота – 23,2 MГц (fcarrier) с отклонением частоты 500 kHz (fdeviation). Другими словами, по линии питания идёт передача цифрового кода, заложенного в скачкообразно изменяющуюся частоту несущего сигнала. Сигнал с частотой (fcarrier + fdeviation) соответствует логической 1, а (fcarrier - fdeviation) – логическому 0. Таким образом, мы имеем дело с простейшим вариантом частотной манипуляции (двоичной) - BFSK.
![Пример двоичной частотной манипуляции (BFSK) Пример двоичной частотной манипуляции (BFSK)](https://habrastorage.org/getpro/habr/upload_files/0b1/459/bc9/0b1459bc9d5b438f88954756c534d1c6.jpg)
Такой вид передачи довольно помехоустойчив, так как помеха искажает в основном амплитуду сигнала, а не частоту. В последней редакции стандарта USB PD 3.0 BFSK больше не используется, и описание этого механизма передачи исключено из спецификации.
BMC
В последней на текущий момент ревизии 3.0 USB Power Delivery поддерживается только Biphase Mark Code (BMC). Передача данных происходит по одному из СС-контактов. Информационный обмен идёт в режиме полудуплекс с предотвращением коллизий и с 4b5b-кодированием для баланса постоянного тока.
BMC представляет собой версию манчестерского кодирования. Логический 0 соответствует отсутствию переключения в середине битового интервала, логическая 1 – наличию переключения. На границе интервалов переключение происходит всегда. Частота сигнала составляет 300 kHz ± 10 %.
Уровень протокола
Уровень протокола формирует сообщения, используемые для передачи информации. Он отвечает за создание запросов, подтверждений, сообщений о возможностях.
Сообщения в зависимости от содержимого можно выделить следующие:
управления;
информационные;
расширенные.
А в зависимости от отправителя сообщения – такие:
от источника;
от потребителя;
от кабеля.
В сети достаточно много хороших статей по описанию пакетов данных, типов сообщений с их описанием, поэтому не буду повторяться.
Наиболее понравившиеся – вот тут и тут.
Последовательность операций
В процессе установления соединения между устройствами происходит несколько стандартных стадий. Рассмотрим их со стороны Sink и Source.
То, как устройства c помощью резисторов Rp и Rd на линии CC обозначают себя в качестве Power Source, Power Sink и Dual Role Power, я описывал в прошлый раз.
Теперь внутри устройства находится не контроллер CC-логики, который умеет только изменять уровень напряжения и тока на конфигурационной линии, а контроллер Power Delivery. Помимо управления логикой он способен проводить информационный обмен по этой линии.
Для наглядности посмотрим, что происходит при подключении ноутбука и зарядного устройства, какой информационный обмен происходит между ними, как и о чём они договариваются. Для этого воспользуемся анализатором протокола Power Delivery CY4500 EZ-PD.
![](https://habrastorage.org/getpro/habr/upload_files/c47/956/fca/c47956fca0003e72f74652d2d7a820b4.jpg)
Итак, мы подключили ноутбук к блоку питания через анализатор.
Перед обменом сообщениями происходит установление ролей устройств по уровням напряжения на СС-линии. В результате Source устанавливает на контактах VBUS напряжение 5V.
Сначала идёт группа сообщений, инициированная Source, для определения типа кабеля:
(1) Source (он же DFP) посылает сообщение для определения типа кабеля.
Активный кабель не был обнаружен, поэтому видим такое сообщение (3):
В результате определяется, что кабель является пассивным.
После определения типа кабеля Source начинает договариваться с Sink о профиле питания, который удовлетворяет их обоих:
(5) Source посылает сообщение Source_Capabilities Message. Здесь источник сообщает, какие профили питания он может обеспечить.
В сообщении должен быть указан по крайней мере один PDO с напряжением 5V, он всегда идёт первым. На скриншоте выше изображен как раз он (PDO1). В нашем случае есть 5 PDO: 5В, 9В, 12В, 15В, 20В.
В ответ Sink отправляет (6) GoodCRC и (7) Request, в котором запрашивает подходящее для него PDO.
Sink выбрал PDO под номером 5, это профиль питания с напряжением 20 В и током 3,25 А. Source посылает (9) Accept в подтверждение запроса от потребителя, на что Sink отвечает (10) GoodCRC. На этом этапе соединение PD установлено, и источник может установить выбранный потребителем профиль питания.
Источник отправляет сообщение PS_RDY (11) и выставляет выбранный профиль питания 20 В на Vbus.
Power Delivery в SberPortal
Для питания SberPortal используется блок питания с интерфейсом USB-C. Он состоит из 2-х основных блоков: AC/DC-преобразователя и Power Delivery-контроллера.
Для PD-контроллера нужно было определиться с профилями питания, которые он будет поддерживать и, соответственно, предлагать потребителю для установления соединения. Первым, что приходит на ум, это реализовать стандартные профили питания, которые используются во многих блоках питания. В примере, который я рассмотрел выше, максимальное напряжение предлагаемое источником – 20 В. Это напряжение вполне можно использовать в большинстве электронных приборов в качестве первичного, которое используется внутренними понижающими DC/DC-преобразователями для получения напряжения питания всех узлов.
В случае SberPortal хотелось напряжения выше для получения лучших характеристик аудиоусилителя, а, следовательно, звучания устройства в целом (вообще тема звука в нашем смарт-экране является особенной и заслуживает отдельного рассказа). С другой стороны, это напряжение должно подходить для остальной системы питания девайса. Оптимальным решением оказался профиль 22 В.
Таким образом, блок питания SberPortal включает в себя 2 профиля: с напряжением 5 и 22 В. В примере выше у блока питания наибольшее напряжение – 20 В. Что же будет, если попробовать запитать ноутбук из примера выше от блока питания SberPortal?
Попробуем.
Происходит та же последовательность действий до пункта (5). Список PDO из сообщения Source_Capabilities Message от блока питания SberPortal выглядит так:
Чтобы задать напряжение PDO, используется 10 бит, где значение младшего бита – 50 mV. Таким образом, при необходимости есть возможность использовать профили питания с большим напряжением. Итак, мы видим 2 профиля: 5 В и 22 В.
В ответ Sink отправляет (6) GoodCRC и (7) Request, в котором запрашивает подходящее для него PDO. Для SINK требуемый профиль должен содержать напряжение 20 В c допустимым отклонением 5%. Поэтому профиль 22 В отклоняется, и выбирается базовый профиль под номером 1.
В ответ на это источник отправляет сообщение PS_RDY и выставляет выбранный профиль на Vbus, но напряжения 5 В недостаточно для системы питания ноутбука.
Таким образом, блок питания от SberPortal не удастся использовать в качестве зарядки ноутбука, когда штатная куда-то подевалась и нужно срочно подзарядиться. Но для подзарядки большинства телефонов с USB-C-разъёмом он может прийти на помощь, так как профиль 5 В присутствует и его достаточно. Правда, для этого на стороне телефона должна быть реализована СС-логика, либо подтянуты к земле СС-пины.
Итак, мы рассмотрели как с помощью Power Delivery может быть усовершенствована функциональность USB-C. Кроме того, что увеличивается доставляемая мощность потребителю, с помощью PD внутри источника может быть реализовано несколько профилей питания под разных потребителей. Помимо этого профили могут быть оптимальным образом настроены под задачу. Также мы посмотрели, как устройства договариваются (или почему это не удаётся) при установлении соединения.
Пишите в комментариях, о чём ещё вам хотелось бы узнать.