HW:ACE3 - asfdrwe/asahi-linux-translations GitHub Wiki

2021/11/18時点のHW:ACE3の翻訳


ACE3 は M3 製品の新しい USB-C / USB-PD コントローラーです。ADT に sn201202x 互換値があります。

SPMI トランスポート

従来のものと異なり、ACE3 は I2C (訳注: I2C) ではなく SPMI (訳注: SPMI) 経由でアクセスします。しかし、基本的なインターフェイスは変更されておらず、薄いトランスポート層により、SPMI レジスタを介して、以前は I2C レジスタ だったもの(ここでは「論理レジスタ」と呼びます)にアクセスできるようになっています。

  • 0x00(論理レジスタアドレス)[RW]: 0x80 | logical_register_addressをこの SPMI レジスタに書き込むと、論理レジスタの選択プロセスが開始され、以下の SPMI レジスタが更新される。この選択が終了すると MSB はクリアされる

    注1:『レジスタ 0 書き込み』SPMI コマンドも使用可能。なぜなら、7 ビット値は MSB=1 で完了するため、論理レジスタ選択がトリガーされるから 注2: MSB=0 での書き込みはレジスタの値を更新するが、新しいレジスタを選択しない

  • 0x1F(論理レジスタ・サイズ) [RO]: 論理レジスタが選択されると、そのサイズがバイト単位でここに書き込まれる

  • 0x20..0x5F (論理レジスタデータ) [RW]: 論理レジスタが選択されると、そのデータが読み出され、ゼロパディングされ、ここに書き込まれる。この領域のどこかに書き込むと、その領域の内容は最後に選択された論理レジスタに(適宜切り捨てて)書き込まれる

    注1: 論理レジスタ書き込みの完了をモニターする方法はないようだが、それ以上の選択はブロックされるらしい 注2: 論理レジスタの書き込みを後まで保留する方法はないようなので、アトミックに書き込めるのは サイズ≦16 の論理レジスタのみ

その他の観察事項

  • 最初の 0x60 アドレスのみがマッピングされるが、アドレスビット7 以上は無視されるようで、ブロックが 0x80バイト毎にエイリアスされる。拡張(extended)(または拡張ロング(extended long))コマンドを使用して、一度に多くの連続した SPMI レジスタにアクセス可能

  • 機器はスリープ(sleep)とウェイクアップ(wake up)コマンドもサポートしており、ブート時はスリープ。スリープ中は、書き込みは ACK されるが無視される。コマンド受信後、機器がウェイクアップするまでに時間がかかる

  • 割り込みは GPIO ピンからではなく、SPMI コントローラーの割り込み機能を通して行われるように(これがバスレベルでどのように機能するのかわからない。おそらく、割り込みはマスターライト(master write)コマンドを介してトリガーされる?)

  • 何らかの理由で、各機器は2つの SPMI スレーブを持つ(1つは ADT のアドレスで、もう1つはその次のアドレスでリッスン)。それぞれのスレーブは独自のセレクションを保持しており、どちらかにスリープ/ウェイクアップコマンドを送ると両方に反映...ただし、2番目のスレーブはスリープコマンドを無視

これらの観測は J516c、SN2012024 HW00A1 FW002.062.00 で実施されました。