USB Type-C, как контролируется направление подачи питания?

USB Type-C, как контролируется направление подачи питания?

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

Управляется ли это драйвером? Поддерживает ли ядро ​​Linux такое управление?

Обновлять:

Я вижу этот набор патчей (в настоящее время v14), но он пока не включен в основную ветку.

https://lwn.net/Articles/710741/

Но нечто под названием UCSI уже есть в версии 4.10:

http://lxr.free-electrons.com/source/drivers/usb/misc/Kconfig

270 config UCSI
271         tristate "USB Type-C Connector System Software Interface driver"
272         depends on ACPI
273         help
274           UCSI driver is meant to be used as a convenience tool for desktop and
275           server systems that are not equipped to handle USB in device mode. It
276           will always select USB host role for the USB Type-C ports on systems
277           that provide UCSI interface.

Так правильно ли будет сказать, что драйвер ядра Linux для решения этой проблемы находится в стадии разработки по состоянию на версию 4.10?

решение1

В Linux вы можете управлять направлением питания на определенном порту, прописав «source» или «sink» в соответствующем элементе управления sysfs, например:

# echo source >/sys/class/typec/port0/power_role
# cat /sys/class/typec/port0/power_role
[source] sink

Термин в скобках указывает, как в данный момент течет питание. См. документацию ядра:https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-typec

Конечно, все это работает только в том случае, если устройство, подключенное к порту USB Type-C, поддерживает Power Delivery. Поэтому оно не будет работать с типичным адаптером питания Type-C или большинством портативных аккумуляторов Type-C, поскольку они редко поддерживают PD по состоянию на 2019 год.

решение2

Если соединить вместе USB-кабели типа C, то как определить, какой из них какой заряжает?

Все это запутано до сих пор и не поддается пониманию. Разъем Type-C выполняет две функции

  1. передача данных
  2. подача электроэнергии.

Это почти независимые функции. Вся функциональность зависит от того,

  1. оба порта являются USB-хостами
  2. оба порта являются USB-устройствами
  3. один порт имеет двойную роль — данные, а другой — нет
  4. один порт имеет двойную функцию питания

...

n. оба порта — DRD и DRP,

Я потерял все перестановки здесь. UCSI — это попытка Microsoft укротить эту огромную перестановку в стандарт API. Для основных идей см. здесьпрезентацияи многие другие публикации по теме «Интерфейс UCSI».

решение3

Как ответил Марк выше, направление PD можно контролировать с помощью /sys/class/typec/port*/power_role, однако, если это НЕ работает, как это происходит на моем Thinkpad Yoga 6:

sudo bash -c 'echo sink > /sys/class/typec/port1/power_role'
bash: line 1: echo: write error: Invalid argument

Затем вы можете попробовать «аппаратный» метод, быстро переподключив свой внешний аккумулятор, как указаноэтот ответ.

Я изначально был настроен скептически, но на удивление это работает! Потребовалась некоторая практика - нужно быстро отключать и подключать его обратно, но не слишком быстро. В моем случае я использую Romoss PPD20 powerbank и мне нужно отключать его примерно на полсекунды - только пока индикатор зарядки не перестанет мигать.

Связанный контент