USB Type-C, ¿cómo se controla la dirección de entrega de energía?

USB Type-C, ¿cómo se controla la dirección de entrega de energía?

Digamos que tengo una computadora portátil y un banco de energía (o dos computadoras portátiles) con USB tipo C conectados entre sí, entonces, ¿cómo se decide cuál carga cuál?

¿Está controlado por el conductor? ¿El kernel de Linux admite dicho control?

Actualizar:

Veo este conjunto de parches (actualmente v14) pero aún no está en la línea principal.

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

Pero algo llamado UCSI ya está en 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.

Entonces, ¿es correcto decir que el controlador del kernel de Linux para este problema está en proceso a partir de la versión 4.10?

Respuesta1

En Linux, puede controlar la dirección de alimentación en un puerto determinado escribiendo "fuente" o "sumidero" en el control sysfs apropiado, por ejemplo:

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

El término entre paréntesis indica cómo fluye la energía actualmente. Consulte la documentación del kernel, consulte:https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-typec

Por supuesto, todo esto sólo funciona si el dispositivo conectado al puerto USB tipo C admite Power Delivery. Por lo tanto, no funcionará con un adaptador de corriente tipo C típico ni con la mayoría de las baterías portátiles tipo C, ya que rara vez admiten PD a partir de 2019.

Respuesta2

USB tipo C conectados entre sí, entonces, ¿cómo se decide qué carga cuál?

Hasta ahora todo esto es complicado e incomprensible. El conector tipo C tiene dos funciones

  1. comunicación de datos
  2. la entrega de energía.

Estas son funciones casi independientes. Toda la funcionalidad depende de si

  1. ambos puertos son hosts USB
  2. ambos puertos son dispositivos USB
  3. un puerto es de datos de doble función y otro no
  4. un puerto es de alimentación de doble función

...

norte. ambos puertos son DRD y DRP,

Perdí todas las permutaciones aquí. La UCSI es un intento de Microsoft de domesticar esta enorme permutividad y convertirla en un estándar API. Para ideas importantes, consulte esto.presentación, y muchas más publicaciones sobre "Interfaz UCSI".

Respuesta3

Como respondió Marc anteriormente, la dirección de PD se puede controlar a través de /sys/class/typec/port*/power_role, sin embargo, si NO funciona, como lo hace en mi Thinkpad Yoga 6:

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

Luego, puede probar el método de "hardware" volviendo a enchufar rápidamente su banco de energía como lo mencionaesta respuesta.

Al principio yo también era escéptico, pero, sorprendentemente, ¡funciona! Requirió algo de práctica: debes desconectarlo y volver a enchufarlo rápidamente, pero no demasiado rápido. En mi caso utilizo la batería externa Romoss PPD20 y necesito desconectarla durante aproximadamente medio segundo, justo hasta que el indicador de carga deje de parpadear.

información relacionada