
Допустим, у меня есть ноутбук и внешний аккумулятор (или два ноутбука) с портом 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 выполняет две функции
- передача данных
- подача электроэнергии.
Это почти независимые функции. Вся функциональность зависит от того,
- оба порта являются USB-хостами
- оба порта являются USB-устройствами
- один порт имеет двойную роль — данные, а другой — нет
- один порт имеет двойную функцию питания
...
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 и мне нужно отключать его примерно на полсекунды - только пока индикатор зарядки не перестанет мигать.