メインコンテンツまでスキップ

STUSB4500をUSB-PD電源基板に組み込んだ際の知見まとめ

  • 作成:
  • 更新:
  • 著者:
    Takeshi Takatsudo

概要

USB-PDコントローラICのSTUSB4500を自作のモジュラーシンセ用電源基板に組み込んだ際の知見メモ。24ピンのQFN-24パッケージで、ピン接続のミスやNVMプログラミングの必要性など、初めて使う人にとって難しいポイントが多い。自分のv1基板では3つの致命的なバグが出て完全に失敗したので、その辺りの話も含めてまとめておく。

背景

自分はモジュラーシンセサイザー用の電源基板を設計している。USB-C PDで15Vを受けて、+12V/-12V/+5Vを生成する基板。USB-PD交渉用のICとして最初はCH224Dを使っていたのだが、GaN充電器との互換性が約33%しかないらしく、実用上かなり厳しそうだった。基板を完成させた上に互換性問題で破棄というのは悲惨なので、予めベターな部品を選ぶことにした。

STUSB4500はSTMicroelectronics製のUSB-IF認証済みICで、互換性は約95%以上。ただ、CH224Dと比べるとはるかに複雑なICで、v1基板では3つの致命的なバグが発生した。

STUSB4500とは

STMicroelectronics製のUSB Power Delivery(PD)シンクコントローラ。主な特徴は以下の通り。

  • USB-IF認証済み。充電器との互換性は約95%以上
  • QFN-24パッケージ(4mm x 4mm)、24ピン + 裏面GNDパッド
  • MCUなしで動作する(auto-runモード)。NVM(不揮発メモリ)に設定を書き込んでおくと、電源投入時に自動でPD交渉する
  • JLCPCB部品番号: C2678061、単価約$2.50

CH224Dとの比較

なぜCH224DからSTUSB4500に切り替えたかという話。比較テーブルは以下。

FeatureCH224DSTUSB4500
USB-IF CertifiedNoYes
Charger Compat.~33%~95%+
Error RecoveryNoneBuilt-in
Power SequencingNoneVBUS_EN_SNK
ConfigurationResistorNVM + I2C
CC Protection8V22V

CH224DはSOP-8パッケージでピン数が少なく、抵抗1本で電圧設定できるシンプルなICだった。ただ互換性が低すぎて、手持ちのGaN充電器で動かないものが多かった。STUSB4500は高機能だがその分ピン数も多く、設計上の注意点が多い。

回路設計で気をつけるべきポイント

STUSB4500 QFN-24ピン接続図(上面図)

自分のv1基板での失敗の根本原因は、STUSB4500のデータシートPDFをちゃんと読んでいなかったことに尽きる。ピン接続の設計はClaude Codeにやらせて、自分ではあまりチェックしなかった。

JLCPCBに発注 → 海外から届く → 動かない、という流れは精神的にかなりつらかった。失敗後にデータシートを隅々まで読んで、リファレンスデザイン(STEVAL-ISC005V1、SparkFun Power Delivery Board)と照合して、ようやく原因がわかった。

以下は、データシートを読み込んだ上でのピンごとの接続ガイド。STUSB4500はQFN-24で24ピン+裏面GNDパッドがある。

Pin 1: CC1DB(CC1 Dead Battery)

CC1 (pin 2) に直結する。Dead Batteryモード(バッテリー完全放電時のPD交渉)を有効にするためのピン。CC1と同じネットに繋ぐだけ。

Pin 2: CC1(Configuration Channel 1)

USB-CコネクタのCC1ピンに接続する。ESD保護IC(USBLC6-2SC6等)を経由させるのが推奨。STUSB4500は内部でRd(シンク側プルダウン抵抗)を持っているので、外付け5.1kΩは不要。

Pin 3: NC

未接続。何も繋がない。

Pin 4: CC2(Configuration Channel 2)

USB-CコネクタのCC2ピンに接続する。CC1と同様にESD保護IC経由で。

Pin 5: CC2DB(CC2 Dead Battery)

CC2 (pin 4) に直結する。CC1DBと同様。

Pin 6: RESET

アクティブHIGHのリセットピン。内部プルダウンがあるので、GNDに接続するかNCでもよい。自分の設計ではGNDに接続している。

Pin 7: SCL(I2Cクロック)

I2C通信用。NVMプログラミング時のみ使用する。通常動作ではNCでよい。NVMプログラミング用にボード端にポゴピンパッドを用意して、4.7kΩでVREG_2V7にプルアップしておくと便利。

Pin 8: SDA(I2Cデータ)

I2C通信用。SCLと同様の扱い。

Pin 9: DISCH(VBUS Discharge)

ケーブル切断時にVBUSのコンデンサを放電するためのピン。IC内部でDISCHピンからGNDへのパスが開く。470Ω経由でVBUS_OUTに接続する。USB-C規格でVBUSを素早く安全な電圧(0.8V以下)に下げる必要がある。

Pin 10: GND

システムGNDに接続。

Pin 11: ATTACH(Cable Attach Indicator)

ケーブル接続検出の出力ピン。LED接続やMCU連携に使えるが、必須ではない。NCで問題ない。

Pin 12: ADDR0(I2Cアドレスbit 0)

GNDに接続。I2Cアドレスが0x28になる。

Pin 13: ADDR1(I2Cアドレスbit 1)

GNDに接続。ADDR0と合わせてI2Cアドレス0x28。

Pin 14: POWER_OK3(PDO3選択インジケーター)

PDO3が選択されたときにHIGHになる出力ピン。LED接続等に使える。NCで問題ない。

Pin 15: GPIO

汎用I/O。NCで問題ない。

Pin 16: VBUS_EN_SNK(Load Switch Enable)

PD交渉が成功してVBUSが目標電圧に達したらHIGH(約2.7V)になる出力ピン。外付けのP-ch MOSFETロードスイッチのゲートを駆動する。自分の設計ではR12(56kΩ)経由でAO3401AのゲートへR11(100kΩ)でVBUSにプルアップ(デフォルトOFF)、C35(100nF)でソフトスタートとしている。

Pin 17: A_B_SIDE(Cable Orientation)

USB-Cケーブルの向き(A面/B面)を示す出力ピン。NCで問題ない。

Pin 18: VBUS_VS_DISCH(VBUS Voltage Sense / Discharge)

重要なピン。 VBUS電圧のセンシングと放電の2つの機能を持つ。VBUS_INに470Ω経由で接続する必要がある。このピンを未接続にするとPD交渉が失敗する。 v1基板ではここをNCにしてしまい、ICがまったく動作しなかった。

Pin 19: ALERT(Interrupt Output)

オープンドレインの割り込み出力。MCU連携用。NCで問題ない。

Pin 20: POWER_OK2(PDO2選択インジケーター)

PDO2が選択されたときにHIGHになる出力ピン。NCで問題ない。

Pin 21: VREG_1V2(内部1.2Vレギュレータ出力)

IC内部の1.2Vレギュレータの出力。1uFのセラミックコンデンサでGNDへデカップリング。

Pin 22: VSYS(System Voltage Input)

外部LDOやバッテリーからの3.0-5.5V入力用。使わない場合はGNDに接続する。 フローティング厳禁。v1基板ではルーティングエラーでVREG_2V7 (pin 23) にショートしてしまい、さらにトレースカット後はフローティングになっていた。

Pin 23: VREG_2V7(内部2.7Vレギュレータ出力)

IC内部の2.7Vレギュレータの出力。1uFのセラミックコンデンサでGNDへデカップリング。I2Cプルアップ抵抗の電源としても使用する。このピンは出力専用なので、他のピンと繋いではいけない。

Pin 24: VDD(Main Power Supply)

VBUS_INに接続する。4.1-22Vの範囲で動作する。10uF(バルク)と100nF(HFデカップリング)のコンデンサをできるだけピンの近くに配置する。

Pin 25: GND / Exposed Pad

裏面の放熱パッド。システムGNDに接続し、複数のビアでGNDプレーンに落とす。

v1基板で発生した3つの致命的バグ

最初のPCBA(v1)でSTUSB4500がまったく動作しなかった。原因は3つあった。上のピンガイドでも触れているが、まとめると以下の通り。

  1. VBUS_VS_DISCH (pin 18) 未接続: VBUS_INに470Ω経由で接続する必要があるが、NCのままだった。ICがVBUS電圧をモニタできず、PD交渉が動かない。R14(470Ω)を追加して修正。
  2. VSYS (pin 22) フローティング: Issue 3のトレースカット後、pin 22がどこにも繋がっていなかった。データシートでは「使わない場合はGNDに接続」。ボッジワイヤでGNDへ接続して修正。
  3. VSYS (pin 22) と VREG_2V7 (pin 23) のショート: ルーティングエラーでpin 22(入力)がpin 23(内部レギュレータ出力)に接続されていた。トレースカットで修正。

これらはすべてデータシートとSTのリファレンスデザイン(STEVAL-ISC005V1)を詳細に照合することで発見した。

NVMプログラミングの必要性

STUSB4500は工場出荷時のデフォルトで20Vを最優先で交渉する設定になっている。15V設計の回路に20Vを入力してしまう可能性があり、そのままでは使えない。

工場デフォルトのPDO設定は以下の通り。

PDOVoltageCurrentPriority
PDO15V1.5A最低
PDO215V1.5A中間
PDO320V1.0A最高

これを以下のように書き換える必要がある。

PDOVoltageCurrentPriority
PDO15V1.5A最低
PDO215V3A最高
PDO320V1.5A中間

さらにPOWER_ONLY_ABOVE_5Vを有効にして、5VでのVBUS_EN_SNK有効化を防ぐ必要がある。5Vの状態でロードスイッチが有効になると、後段のDC-DCコンバーターに想定外の電圧が入る。

プログラミング方法

2つの方法がある。

  • Option A: NUCLEO-F072RB + STSW-STUSB002 GUIツール(Windows)。NucleoをUSB-I2Cブリッジとして使用する
  • Option B: Arduino + SparkFunライブラリでI2C経由プログラミング

基板にはI2Cプログラミング用のポゴピンパッド(J2)を用意し、SCL/SDAにR15/R16(4.7kΩ)でVREG_2V7にプルアップしている。

注記

NVM書き込み回数は約1,000回の制限がある。開発中に頻繁に書き換えるようなものではないが、一応頭に入れておく必要がある。

まとめ

初めてこの手の複雑なIC(QFN-24、24ピン、NVMプログラミング必要、リファレンスデザインとの照合が必須)を使ったが、結構難しかった。特にデータシートの「NC可」と読める記述のピンが実は必須だったり(VBUS_VS_DISCH)、ピン同士のショートがルーティングエラーで発生したりと、v1基板では完全に失敗した。

振り返ると、SparkFun Power Delivery BoardのようなSTUSB4500搭載のテスト基板を先に入手して、ICの動作を確認してから自分の基板に組み込むべきだった。テスト基板があれば、NVMプログラミングの手順確認や正常動作時の各ピンの電圧確認ができるので、自作基板のデバッグが格段に楽になる。