
たとえば、USB タイプ C で接続されたノートパソコンとパワーバンク (または 2 台のノートパソコン) がある場合、どちらがどちらを充電するかはどのように決定されるのでしょうか?
ドライバーによって制御されますか? 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 では、適切な sysfs コントロールに「source」または「sink」を書き込むことで、特定のポートの電源の方向を制御できます。例:
# 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 をサポートしている場合にのみ機能します。そのため、2019 年現在、PD をサポートしていることがほとんどない一般的な Type-C 電源アダプターやほとんどの Type-C ポータブル バッテリーでは機能しません。
答え2
USB タイプ C を接続すると、どちらがどちらを充電するかがどうやって決まるのでしょうか?
ここまでは理解できないほど複雑です。Type-Cコネクタには2つの役割があります
- データ通信
- 電力供給。
これらはほぼ独立した機能です。全体の機能は、
- 両方のポートはUSBホストです
- 両方のポートはUSBデバイスです
- 1つのポートはデュアルロールデータで、もう1つはそうではありません
- 1つのポートはデュアルロール電源
...
n. 両方のポートは DRD と DRP です。
ここではすべての順列が失われました。UCSIは、この膨大な順列をAPI標準にまとめようとするMicrosoftの試みです。主要なアイデアについては、こちらを参照してください。プレゼンテーション、および「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 パワーバンクを使用しており、充電インジケータの点滅が止まるまで、約 0.5 秒間プラグを抜く必要があります。