假设我有一台笔记本电脑和一台移动电源(或两台笔记本电脑),它们通过 USB C 型连接在一起,那么如何决定哪个给哪个充电?
是由驱动程序控制的吗?Linux内核支持这样的控制吗?
更新:
我看到了这组补丁(目前是 v14)但是它还没有进入主线。
https://lwn.net/Articles/710741/
但是 4.10 中已经有一个叫做 UCSI 的东西了:
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 便携式电池配合使用,因为截至 2019 年,它们很少支持 PD。
答案2
USB Type C 连接在一起,那么如何决定哪个给哪个充电?
到目前为止,这一切都令人费解。Type-C 连接器有两个作用
- 数据通讯
- 电力输送。
这些几乎是独立的功能。整个功能取决于
- 两个端口都是 USB 主机
- 两个端口都是 USB 设备
- 一个端口是双角色数据,另一个不是
- 一个端口为双角色电源
...
n. 两个端口均为 DRD 和 DRP,
我在这里失去了所有的排列。UCSI 是微软试图将这种巨大的排列纳入 API 标准的一种尝试。有关主要想法,请参阅推介会,以及更多关于“UCSI 界面”的出版物。
答案3
正如 Marc 上面所回答的,可以通过 控制 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 移动电源,我需要拔下它大约半秒钟——直到充电指示灯停止闪烁。