USB について
多くの人が指摘しているように、USB-C で重要なのは規格だけではなく実装です。 結局のところ、実際に対処しなければならないのは実装であり、USB-C に関するほとんどの問題が発生するのは実装です。 この規格には、最初からケーブルのマークがないなど、いくつかの欠点がありますが、現時点では、USB-C 規格は一部の人々が考えているよりもはるかに優れていると確信しています。
実際の、オープンソースの、隣接する、興味深い製品における USB-C の実装をいくつか紹介したいと思います。 彼らは皆、何らかの形で不完全です。完璧が稀な厄介な現実世界に対処しなければならないので、そうでないはずはありません。
今日はピネシルをチェックしてみましょう。 数年前に発売された、低価格と高品質を両立させたPine64社のはんだごて。 この製品は、電源入力用にバレル ジャックと USB-C ポートの両方を備えています。これは、バレル ジャックのみの TS100 や低電力の独自チップ TS80 アイアンがそれを実現できなかった Miniware アイアン戦略からの歓迎すべき脱却です。 そして、TS100 T12 スタイルのチップを中心としたデザインを考えると、Pinecil が趣味の世界で当然の地位を占めたのも不思議ではありません。
さて、Pinecil は単純なデバイスであるべきだと考えているかもしれません。 USB-C ポートから大電力を取り出す通常の方法は Power Delivery (PD) トリガー IC であり、それを単に使用することもできます。 ただし、USB-C 電源の記事を読んだことがある人なら、45 W と 60 W の充電器のシナリオを覚えているかもしれません。このような配置ではすぐに失敗します。 全体として、トリガー IC の構成可能性は非常に低く、一部の PSU との PD 互換性の問題が発生した場合、代替品が存在する場合には、その IC をわずかに異なるロジックの IC に交換する以外に何もすることができません。通常はそうではありません。 これはコストが高くつき、実際の製品の使用には制限がかかります。
Pinecil は、「PD スタック ソフトウェア + PD フロントエンド IC」の方法を採用し、MCU の一部を PD 通信のリアルタイム性に特化しました。 使用される PD フロントエンドは FUSB302 で、通常の I2C インターフェイスを介して MCU に接続されます。 マイクロコントローラー自体は、Pinecil v1 の GD32VF103 から Pinecil v2 の BL706 に変更されており、どちらも RISC-V です。
さて、ここでは抽象的な話を始めましたが、PD スタック、実際には Pinecil ソフトウェア スタック全体を可能にする実際の作業を行っているハッカーについて話すのは理にかなっています。 PD および Pinecil ソフトウェア全体の責任者は、TS100、TS80、および MCU を搭載したその他のはんだごて用に最初に開発された IronOS ファームウェアで知られる [Ralim] です。 Pinecil がまだ構想段階だった頃、Pine64 は [Ralim] に連絡を取り、必要な PD 作業を含めて IronOS を移植できるかどうかを尋ねました。
長年にわたり、「フロントエンド + MCU」アプローチは多大な成果を上げてきました。 主な理由は PSU の互換性です。特にエッジケースに関しては PD の実装が難しいため、USB-C 電源通信には多くのばらつきがあります。 確かに、Pinecil アイロンの初期ファームウェアは、一部の Apple 電源ブリックなど、世の中の多くの電源では動作しませんでした。
さて、素晴らしいことに、誰かが GitHub に PSU の互換性の問題を提起すると、[Ralim] はリモートで「このバイナリを試してみる」デバッグするか、同じ PSU を直接購入することによって、この問題を追跡できることです。 次に、スタックがエッジ ケースを処理する方法を変更することで問題を修正し、修正をテストして、誰もが使用できるように新しい Pinecil ファームウェア バージョンを GitHub にアップロードします。 1 年以内に USB-C の問題のほとんどは解消され、Pinecil の問題が発生した場合は、工場出荷時にフラッシュされた古いバージョンからファームウェアを更新するだけで済む可能性があります。
長年にわたり、スタックは非常に成熟しており、最も重要なことに、実戦テストが行われています。現在、Pinecil が動作しない PSU を見つけるのは困難です。 デバッグとハッカーの利便性の理由から、+ ボタンを押しながら USB-C PSU を Pinecil に接続すると、すべてのプロファイルをリストした PD デバッグ メニューが表示されます。ある意味、Pinecil は、ユーザーが使用できる PD デバッガー ツールです。すでに所有しているかもしれません。
このようなアプローチは、小規模な趣味の USB-C 電源を必要とするプロジェクトに有効でしょうか? おそらく、Pinecil が新しかった頃ではないでしょう。 ただし、現在、PD スタックはオープンソースであり、成熟しています。
USB-C PD ソフトウェア スタックの作成は、たとえば ADC ドライバーの作成ほど簡単ではありません。 共存と安全性の要件を強制するために、USB-C はステート マシンを使用します。 USB-C のドキュメント ページから直接このような威圧的な図を誰かに共有されたことがあれば、USB-C は人間が触らないのが最善であると信じてしまうかもしれません。 この見方は完全に間違っているわけではありません。これらのステート マシンの再実装は、必ずしも時間をかけて行うべきことではありません。 一方で、情報的に攻撃的な性質にもかかわらず、関係するステート マシンは見た目よりも単純です。
とはいえ、USB-C で通信するオープンソース プロジェクトを夢見ているのであれば、最初から始める必要はありませんし、その必要もありません。 現在、[Ralim] の働きのおかげで、オープンソースの PD スタックをすぐに利用できるようになりました。 これは C++ で書かれており、RTOS で動作するように設計されています。これは、USB-C が電源側で強制されるプロトコルの一部に対して適度に高速な応答を必要とするためです。 このスタックは、PD Buddy Sink プロジェクトの一環として [Clara Hobbs] によって開始され、独自の USB-C 搭載デバイスの開発を検討している場合に使用したい実際のライブラリに成長しました。
Ralim が所有し、テストできるさまざまな USB-C PSU の注目すべきコレクションのおかげで、このスタックは十分にテストされています。おそらく、これがこのスタックを最も価値あるものにしているのです。 ただし、USB-C プレイグラウンドとしても機能します。 Apple の 140 W 充電器のような EPR 充電器が市場に登場し始めたとき、それらには 28 V が用意されており、Pinecil はこれを利用して先端加熱電力を 50 W から 98 W に上げることができました。 数か月後、SPR 専用スタックは EPR 互換性を獲得し、Pinecils が Apple 充電器から 28 V の電力を取得するのを初めて確認し、これが EPR の追加要件に対処できる最初のオープンソース プロジェクトになりました。
使用されている PD フロントエンド IC、FUSB302 には奇妙な側面があります。そのデータシートでは、VBUS ピンの 2 つの最大電圧、21 V の「推奨最大値」と 28 V の「絶対最大値」が指定されています。 ここで、このピンは USB-C ポートの VBUS 電源トレース、つまり電源入力に接続されました。 初期の段階で、これはコミュニティの懸念を引き起こし、誰かが 24 V の互換性をテストし、説得力のあるカーブ トレーサ グラフを投稿した一方で、Pinecil は 21 V 以下の電源とのみ互換性があると述べてラベルをダウングレードされました (24 V 電源を除く)。 TS100に比べて不利な点。
その後、異なるバッチでの製造公差により、FUSB302 の感度が高くなっていた可能性があります。 私はたまたま Pine64 の Pinecil チャットでボランティアの技術サポートを行っていました。当時私たちが出会ったのはトレンドでした。誰かが安価なバレル ジャック電源を使用していたか、誤って 24 V 電源を差し込んだか、あるいは通常の 20 V を使用していましたUSB-C ブリックを使用すると、FUSB302 は機能しなくなります。 場合によっては、静かに機能が停止し、バレル ジャックまたは QC を介してのみアイアンが動作するようになります。 場合によっては、FUSB302 が内部 3.3 V レールをショートさせてアイロン全体を永久にダウンさせ、Pinecil を復活させるために熱風を除去する必要がある場合がありました。
販売されたピネシルの総量を把握する場合、問題は顕著ではありませんでしたが、間違いなく傾向であり、私たちは興味を持っていました。 ある時点で、仲間のハッカーである [戦車エンジンのサノス] が、それを詳しく調べて、何が修正できるかを見つけ出すことにしました。 [Ralim] と一緒に、彼らは VBUS ピン接続がソフトウェアでまったく使用されておらず、実際には完全に切断される可能性があることを発見しました。 続いて登場したのは「VBUS mod」です。これは、VBUS 接続を削除することで Pinecil に 24 V サポートを追加するハッキングで、トレースを適切に切断する方法に関するビデオ説明が含まれています。
[Ralim] は、初めて銅片を見逃した可能性のあるユーザーに対するフェイルセーフとして、MOD が正しく実行されたかどうかを検出するようにファームウェアを修正しました。 この修正は最終的に新しい Pinecil PCB リビジョン、つまり Pinecil V2 にも反映されました。 全体として、これは、活発なコミュニティを持つ大規模なオープンソース製品がどのようにして力を倍増させるかについての素晴らしい短編小説です。
USB-C は独自の充電規格を排除するように設計されており、USB-C 標準では、USB-C ポートで QC などの USB データ ペア ハイジャック充電器通信規格をサポートしてはならないと規定されているのはこのためです。 ただし、Pinecil の目標はアクセスしやすくすることであり、USB-C 仕様のこの部分は無視する必要がありました。 したがって、PD サポートとは別に、QC 充電器またはパワーバンクを使用する必要がある場合に備えて、QC サポートもあります。USB-C 準拠よりもハッカーのアクセシビリティが重要です。 Pinecil が正当な理由で違反している USB-C 規格の唯一の部分ではありません。
Pinecil の USB-C ポートの高速信号と SBU 信号は、JTAG、SPI、I2C、UART、メイン MCU からのいくつかの ADC など、さまざまな信号に使用されます。 結果として、Pinecil は RISC-V および USB-PD 開発ボードとなり、それに匹敵する安価なブレークアウト ボードを備えています。 これらのシグナルを利用している人はあまり多くありませんが、間違いなく利用可能であり、当初は Pinecil の開発中に使用されていました。それなら、なぜ製品版では省略するのでしょうか?
USB-C 仕様では、デバッグ目的でこれらの信号を再利用できますが、デバッグ モードが呼び出されるまでマルチプレクサが信号を遮断する必要があります。 したがって、Pinecil はその点では準拠していません。 その一方で、Pinecil PCB にはマルチプレクサ用のスペースがなかっただろうし、めったに使用されず、まだ見逃せないほど優れた機能の価格が大幅に上昇する原因となっていたでしょう。 代わりに、誰かが高速ケーブルを使用して Pinecil を USB3 ポートに接続した場合に備えて、出力として設定された GPIO が USB3 の TX ペアに接続されないように信号が配置されました。ユーザーが何か問題を提起したことはありません。 たとえそうしていたとしても、別のケーブルを使用すれば十分であり、問題が頻繁に発生することが判明した場合は、工場で省略できる 0 R ジャンパがあります。 ありがたいことに、そのどれも必要ありませんでした。
FUSB302 の話を読んだとき、バレル ジャックの電圧がどうして FUSB302 の VBUS に到達することができるのかと疑問に思ったかもしれません。 理由は簡単です。バレル ジャックのセンター ピンと USB-C VBUS が一緒に接続されているからです。 デュアル電源入力を備えた製品を設計する場合、これは決してやってはいけないことです。 しかし、Pine64 にはそれを行う以外に方法がなかったようです。 代わりに、バレル ジャックと USB-C ポートの機械的プロファイルを可能な限り低くすることを選択し、これらのソケットの両方に同時にケーブルを挿入することを不可能にし、ある種の機械的インターロックを作成しました。
さて、Pinecil を派手なトリガー ボードとして使用しない限り、これらのコネクタの両方を同時に接続する理由はありません。機械的に不可能でなければ、理論的には可能です。 これを行うように求める指示もありません。 そうは言っても、誰かがファームウェアをフラッシュしようとしてバレル ジャックと USB-C ケーブルの両方を挿入することを決定し、そのために使用していたコンピューターを焼き付けたという 2 つの話があります。 これは不可解な出来事でした。私たちが実際に試してみたにもかかわらず、Pinecil コミュニティでは両方のプラグを同時に取り付けることができた人はいませんでした。
最終的に、これは設計上のトレードオフであり、起こり得る問題を解決するために機械的なルートが取られ、成功した解決策でした。 故障モードが発生する可能性がある状況に到達するには、非常に特殊な一連の状況が必要です。この時点での故障率は、Pine64 に FET スイッチまたはダイオードを追加した場合と同じパーセンテージに近づきます。 USB-Cポートの方法。 結局のところ、電源スイッチングコンポーネントはショート事故を起こしやすいのです。 ただし、コミュニティ側では、すべてのフラッシュ命令とカスタム Pinecil フラッシャー ツールを更新し、フラッシュする前にバレル ジャック PSU を取り外す必要があることをユーザーに警告するというさらなる修正を考え出しました。 警告が追加されて以降、この問題は前例がありません。
何万台も製造され、世界中の愛好家やハッカーの手に渡ったオープンソース プロジェクトの背後には、かなりの力があります。 私の Pinecil は私を決して失望させず、その USB-C 機能は私が最終的に頼りにしているものです。 歴戦のオープンソース PD スタックという贈り物を過小評価すべきではありません。 Pinecil の USB-C 実装は完璧ではありませんが、世界中のハッカーにとって大きなメリットとなっています。 学ぶべき話もたくさんあります。