USB Type-C,供电方向如何控制?

use*_*438 7 linux usb

假设我有一台笔记本电脑和一个移动电源(或两台笔记本电脑),并通过 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.
Run Code Online (Sandbox Code Playgroud)

那么说这个问题的 Linux 内核驱动程序在 4.10 中正在开发中是否正确?

Ale*_*ski 5

USB Type C连接在一起,那么如何决定哪个充电哪个呢?

到目前为止,这一切都令人费解,难以理解。Type-C连接器有两个作用

  1. 数据通讯
  2. 电力输送。

这些是几乎独立的功能。整个功能取决于是否

  1. 两个端口都是 USB 主机
  2. 两个端口都是 USB 设备
  3. 一个端口是双角色数据,另一个不是
  4. 一端口双用电源

...

名词 两个端口都是 DRD 和 DRP,

我在这里失去了所有排列。UCSI 是 Microsoft 将这种巨大的可变性纳入 API 标准的尝试。有关主要想法,请参阅此演示文稿以及有关“UCSI 接口”的更多出版物。


Mar*_*and 5

在 Linux 中,您可以通过将“source”或“sink”写入适当的 sysfs 控件来控制给定端口上的电源方向,例如:

# echo source >/sys/class/typec/port0/power_role
# cat /sys/class/typec/port0/power_role
[source] sink
Run Code Online (Sandbox Code Playgroud)

括号中的术语表示当前功率如何流动。请参阅内核文档,请参阅:https : //www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-typec

当然,只有当连接到 USB Type-C 端口的设备支持 Power Delivery 时,所有这些才有效。因此它不适用于典型的 Type-C 电源适配器或大多数 Type-C 便携式电池,因为它们在 2019 年很少支持 PD。

  • 如果您执行 `sudo echo sink > /sys...` shell 会在运行 sudo 之前尝试打开文件进行写入。您是否尝试过 sudo bash -c 'echo sink > /sys...`? (3认同)
  • Ale..chenski:一点也不天真。如果端口不支持 PD,或者远程设备不支持 PD,echo 命令将明确指示输入/输出错误或操作不支持错误。请参阅 drivers/usb/typec/class.c 中的 power_role_store()。括号中显示的内容是端口支持的内容、设备支持的内容以及*和*在硬件级别成功配置的内容。 (2认同)