STM32MP1 - SPI
シリアルペリフェラルインタフェース

1.0 版

こんにちは、STM32 シリアルペリフェラルインタフェースのプレゼ
ンテーションへようこそ。

1

概要

2

• シンプルなシリアル通信インタフェース• 柔軟に設定可能• 標準同期プロトコルをサポート

マスタ
マイクロ
コントローラスレーブ

スレーブ

デバイス 1

デバイス 2

アプリケーション側の利点• インタフェースに必要なのは数本のピンのみ• 外部コンポーネント／デバイスを SPI インタ
フェースに簡単に統合可能

内部シリアルペリフェラルインタフェースまたは SPI は、マイクロコントローラと外部デバイスとの通信をサポートするシンプルな通信インタフェースを提供します。このインタフェースは、多くの標準プロトコルをサポートする柔軟な設定が可能です。
アプリケーションは、数ピンだけ使用するコンポーネントへのシン
プルな直接接続からメリットを得られます。SPI の柔軟に設定可
能な機能により、多くのデバイスを既存のプロジェクトに簡単に組み込めます。

2

主な機能

3

• 動作モード• マスタまたはスレーブ（マルチマスタおよびマルチスレーブのサポート）• 全二重、シンプレックス、または半二重• モトローラおよび TI 規格をサポート• 最大 100MHz の動作（マスタ／スレーブレシーバモード）• デュアルクロックドメイン（PCLK に依存しない IP カーネル、 低電力モードでの動作）• インタフェースに必要なのは最低 2 本のワイヤ（スレーブ選択の管理オプション）• 設定可能なデータとクロック形式、調整可能なタイミングと設定保護• プロトコルレベルでの追加サポート（Tx と Rx FIFO、DMA、CRC）• FIFO とデータのサイズは製品とインスタンスにより異なる• 割込み機能がある幅広いイベントフラグ

STM32 SPI にはさまざまな動作モードがあり、このプレゼンテー
ションで詳細に説明します。
通信速度は内部バス周波数の半分を超えることはできません。
単一方向のクロック信号により同期されるシリアルデータフローを提供するには、最低 2 本のワイヤがあれば十分です。 オプ
ションでハードウェアスレーブ選択の制御信号を追加できます。
データサイズと送信シフトの順序、およびクロック信号の極性と位相、または極性とスレーブ選択信号のタイミング調整を設定できます。重要な設定内容とセッティングは、ロックによって保護できます。
プロトコルレベルでは、ユーザはオプションの自動巡回冗長検査
または CRC 計算を備えた個々のデータバッファを使用でき、データは DMA コントローラにより転送できます。 割込みリクエ
ストを生成するさまざまな SPI イベントを設けています。

3

ブロック図4SPI2SDMA インタフェース

spi_pclk
クロックドメインSYnc

SPI2S_TXDRHRTIM_PCLK

spi_clk

spi_ker_clk

SPI2S_RXDR
SPI2S_I2SCFGRSPI2S_CR1
SPI_CR2
SPI_CFG[2:1]

クロック
コントローラMOSI
Tx シフトレジスタ

MISO

Rx シフトレジスタ

RxFIFOSPI2S_UDRDR
HRTIM_KER_CK

SS

SYnc

SPI2S_IERSPI2S_SRSPI2S_IFCR

TXFIFO

32bit APB バス

COM コントローラ

SPI2S_CRCPOLYSPI2S_TXCRCSPI2S_RXCRC

シリアル
インタフェース
クロックドメイン

SS ロジック

spi_tx_dma
spi_rx_dma

UDR コントローラ

IRQ インタフェース

SYnc

spi_wkup
spi_it

SCK

クロック
ジェネレータspi_ker_ck
クロックドメイン

簡略化して表示した SPI ブロック図は、ペリフェラルの基本的な制御メカニズムと機能を示しています。クロックドメインは区分されて、異なる色で表示されています。ドメイン間のすべての相互接続信号は同期されています。ペリフェラルバスインタフェースから SPI レジスタへのアクセスが必要な場合、PCLK クロックドメイ
ンにクロックを供給する必要があります。SPI マスタはスレーブのクロック信号を出力する必要があるため、少なくともアクティブなカーネルクロックが必要です。シリアルインタフェースドメインは
SCK ピンを経由して外部から完全にクロックが供給されるため、
SPI スレーブは内部クロック信号なしでデータを転送できます。
すべてのデータは、それぞれ個々のインタフェースを経由して、受信バッファと送信バッファを通過します。それぞれの機能は、ペリフェラルの設定に応じて有効、または無効にできます。SPI
ペリフェラルに関連する 4 つの I/O 信号があります。ペリフェラ
ルは、無効になっている場合でも必要に応じて関連する I/O 信号の制御を続け、予期しないグリッチを防止します。

4

SPI ノードの相互接続

5

さまざまなマスタとスレーブ間相互接続をサポート• マスタは常にクロックを供給し、すべてのトラフィックを制御します（通信のためスレーブを選択）• データはパラレルに双方向に交換されます。
• 全二重モード（双方向）では、マスタとスレーブの両方が同時にデータを送受信します。

最大 16bit のRx
シフトレジスタ
最大 16bit の Tx
シフトレジスタ

MISO

MOSI

最大 16bit の Tx
シフトレジスタ
最大 16bit のRx
シフトレジスタ

SCK
クロックジェネレータ

マスタ

SS

スレーブ

SPI マスタは常にバストラフィックを制御し、SCK ラインを経由して専用スレーブにクロック信号を供給します。マスタは、オプショ
ンのスレーブ選択 または SS 信号により、通信するスレーブを選択できます。専用シフトレジスタに格納されたデータは、MOSI（マスタ出力、スレーブ入力）および MISO （マスタ入力、スレー
ブ出力）データラインを経由してマスタとスレーブ間で同時に交換できます。全二重モードでは、両方のデータラインが使用され双方向の同期データが流れます。

5

SPI ノードの相互接続

6

さまざまなマスタとスレーブ間相互接続をサポート• シンプレックスモード（単方向）では、一方のノードがトランスミッタで、もう一方のノードがレシーバです。

最大 16bit の Rx
シフトレジスタ
最大 16bit の Tx
シフトレジスタ

MISO

MOSI

最大 16bit の Tx
シフトレジスタ

最大 16bit の Rx
シフトレジスタ

最大 16bit の Rx
シフトレジスタ

最大 16bit の Tx
シフトレジスタSCK

MOSI

最大 16bit の Tx
シフトレジスタ
最大 16bit の Rx
シフトレジスタ

SCK

クロックジェネレータ

マスタ

MISO

クロックジェネレータ

SS

スレーブ

マスタ

SS

スレーブ

シンプレックスモードでは、一方のノードがデータを送信し、もう一方のノードがデータを受信します。データは一方向にのみ流れます。通信方向に応じて、データラインは 1 本だけ使用されます。
未使用の SPI ピンは他の目的に使用できます。

6

SPI ノードの相互接続

7

さまざまなマスタとスレーブ間相互接続をサポート• 半二重モード（準双方向）では、マスタとスレーブの両方がタイミングを合わせてデータの送信と受信を切り替えます。 ノードは 1 本の共通データラインを共有します。
MISO

最大 16bit の Tx
シフトレジスタ

MOSI

最大 16bit の Tx
シフトレジスタR

最大 16bit の Rx
シフトレジスタ

最大 16bit の Rx
シフトレジスタ

SCK
クロックジェネレータ

マスタ

SS

スレーブ

半二重モードは 1 本の回線を共有して前述の 2 つのモードを統合するもので、データは一度に一方向にしか流れません。このモードでは、マスタの MOSI ピンとスレーブ のMISO ピンが交差接続されます。共通のデータラインを持つマスタとスレーブは、ト
ランスミッタとレシーバの役割を同期して交互に切り替える必要があります。マスタノードとスレーブノードは通常は同期していな
いため、半二重データラインにシリアル抵抗を追加して瞬間的な短絡の可能性を防止するのが一般的です。

7

SPI ノードの相互接続

8

マルチスレーブネットトポロジをサポート• マルチスレーブ：スタートポロジ• データの書込み／読出し時にマスタが単一のスレーブノードを選択• 個別のスレーブ選択信号（GPIO ピンでシミュレート）が必要

最大 16bit の Rx
シフトレジスタ
最大 16bit の Tx
シフトレジスタ

MISO

MISO

MOSI

MOSI

SCK

SCK

GPIO

SS

スレーブ

MISO

最大 16bit の Tx
シフトレジスタ

MOSI

最大 16bit の Rx
シフトレジスタ

最大 16bit の Tx
シフトレジスタ
最大 16bit の Rx
シフトレジスタ

クロックジェネレータ

• スレーブノードは違うクロックとデータ
フォーマットを使用可能

GPIO

GPIO

SCK

マスタ

SS

スレーブ

次のスレーブへ

SPI ネットワークに複数のスレーブが存在する場合、一般的にス
タートポロジが使用されます。マスタは一度に 1 つのスレーブと通信します。これは、共通の MISO ピンを経由してマスタにデータを送信できるスレーブは 1 つに限られるためです。このトポロ
ジでは、マスタは個別のスレーブ選択信号を各スレーブノードに送信する必要があり、マスタはこれで通信相手のスレーブを選択します。複数のスレーブノードに共通の設定がない場合、マスタ
は個別のスレーブ選択信号を使用して各スレーブの SPI データとクロックフォーマットに合わせることができます。

8

SPI ノードの相互接続

9

マルチスレーブネットトポロジをサポート• マルチスレーブ：サーキュラトポロジ（デイジーチェーン）

次のスレーブへ
MOSI• データはすべてのノードを巡回します。
MISO• すべてのノードは共通のデータおよびクロック形式をサポートする必要があります。

最大 16bit の Rx
シフトレジスタ
最大 16bit の Tx
シフトレジスタ
クロックジェネレータ

マスタ

SCK

最大 16bit の Tx
シフトレジスタ
最大 16bit の Rx
シフトレジスタ

SS

スレーブ

MOSI

最大 16bit の Tx
シフトレジスタ

MOSI

MISO

最大 16bit の Rx
シフトレジスタ

SCK

SCK

SS

SS

MISO

スレーブ

もう 1 つのマルチスレーブ設定は、すべてのノードの入力と出力が閉じたシリアルチェーンに一緒に接続されているサーキュラト
ポロジです。通信は同時に行われるため、すべてのノードに対して共通のスレーブ選択信号が使用されます。すべてのノードが同じデータとクロック形式の設定になっている必要があります。マ
イクロコントローラの SPI ノードは通常、内部の送信シフトレジス
タと受信シフトレジスタが異なるため、ノード間で転送するデータ
はサーキュラモードのソフトウェアで処理する必要があります。
スレーブ設定中に個別のアンダーラン機能を選択すれば、ハードウェアによるこれらの転送を自動化できます。

9

SPI ノードの相互接続

10

マルチマスタトポロジのサポート• マルチマスタ：マスタ機能を備えた
2 つのノード• デフォルトではノードはスレーブモードです。

最大 16bit の Rx
シフトレジスタ• ノードは自身をアクティブマスタに切り替えてバスを制御し、通信セッションを開始します。

最大 16bit の Tx
シフトレジスタ

最大 16bit の Tx
シフトレジスタ

MOSI

最大 16bit の Rx
シフトレジスタ

SCK
クロックジェネレータ

• スレーブ選択ピンは、バス競合の可能性を検出するための入力として使用します。
• マスタノードがスレーブモードに戻り、通信
セッションを終了します。

MISO

マスタ

クロックジェネレータ

GPIO

SS

SS

GPIO

マスタ

SPI ネットワークは、マルチマスタ環境で動作できます。 このモードは、2 つのマスタノードの排他的接続に使用します。どちらのノードもアクティブでない場合、デフォルトではスレーブモードになります。一方のノードがバスを制御する場合、それ自身がマ
スタモードに切り替わり、GPIO ピンによりもう一方のノードのス
レーブ選択信号をアサートします。ノードが SPI バスを制御できるのは一度に 1 つだけなので、スレーブ選択（SS）ピンは両方とも、ノード間のバス衝突の可能性を検出するハードウェア入力として使用できます。 セッションが完了すると、アクティブノードマ
スタはスレーブ選択信号を解放し、次のセッションの開始を待機するパッシブスレーブモードに戻ります。

10

データフレームフォーマット

11

完全にプログラム可能で柔軟なフォーマット

• データフレームのサイズ• 4 から最大 16bit• ビットのシフト順序• MSB または LSB ファースト• クロック設定（モード 0-3）
• アイドル時の極性(High/Low)• 奇数または偶数エッジによるサンプリング• SS 極性制御、MOSI と MISO のスワッピング

データ形式の設定には、複数のパラメータが使用されます。ユー
ザは、データフレームサイズとシフトレジスタの送信順序を定義します。クロックは、モトローラ SPI 仕様で定義されている 4 つの基本設定のいずれかにセットできます。2bit の組み合わせで、クロック信号の極性と位相を制御します。 位相制御ビットがクリアされるとデータビットは奇数クロックエッジでサンプリングされ、偶数クロックエッジで同期して次のビットがデータラインにシフトされます。 これは、位相制御ビットが設定されている場合とは逆です。
クロック極性ビットは、クロック信号のアイドル状態と、データのサンプリングまたはシフトに使用するクロックエッジを定義します。
スレーブ選択信号は両極性で使用でき、また MOSI 信号と
MISO 信号の機能は交換できます。

11

調整可能な信号フロータイミング

12

マスタ提供信号の調整機能（オプション）• プログラム可能な最小インターリーブ遅延（最大 15 の SPI クロック周期）• データフレーム間（MIDI – オプションの SS インターリービング付き）• SS の開始と最初のデータトランザクション（MSSI）の間

パラメータをいくつか使用して、オプションでマスタトランザクショ
ンフローのタイミングを調整できます。
マスタノードの信号タイミングは、必要に応じて調整できます。これは、SS アクティブエッジのセットアップ後にスレーブノードが
SLEEP モードからウェイクアップするのにより長い時間が必要な場合、またはデータフローが速すぎてスレーブが処理できない場
合が該当します。MIDI または MSSI パラメータで最大 15 のシ
リアルクロック信号周期遅延を追加挿入できます。データフレー
ムは、オプションで SS パルスによりインターリーブできます。

12データパッキング、FIFO アクセス13

高度な低需要制御• パッキングモード• 複数のデータパターンによる FIFO レジスタへのアクセス• 設定可能な FIFO 閾値レベル• DMA アクセス
• イベント数と必要なサービスが減少• システム負荷が低減

すべての SPI データトランザクションは、バイトで編成された組込み FIFO を通過します。SPI 書込みデータレジスタに書込みアクセスすると、送信 FIFO の送
信キューの最後に書込みデータが保存されます。SPI 読出しデータ レジスタに読出しアクセスすると、受信 FIFO に保管され、まだ読み出しされていない一番古い値が返されます。
通信速度が速くデータフレームが短すぎる場合、特にクロック信号が連続しかつ全二重モードが使用されている場合、正しいデータフローの確保が困難になることがあります。マスタによって提供されるすべてのトランザクションタイミングに適切に従い、データオーバーランまたはアンダーラン状態を防止する必要があ
るスレーブノードは、より重要です。ユーザは、データレジスタへのアクセスを最小限に抑えてデータをより広いパケットに編成すれば、複数のデータ読出しまたは書込みイベントを処理できるようになります。これらのサービスは、パケットレ
ディオペレーションを知らせる FIFO の閾値イベントに基づいています。FIFO 閾
値が適切に設定されている場合、最小限の FIFO 占有イベントで複数のデータ
パケットサービスを実行できます。読出しと書込みイベントは、一般的なデュア
ルイベントに基づいてまとめて処理することもできます。これらの機能はサービス数を効率的に減らし、データフロー処理時のマイクロコントローラの負荷を最小限に抑えます。これは、マイクロコントローラがスリープしている間にデータが送信される低電力モードで特に有効です。DMA が追加で適用されると、RUN
モードでのシステム全体の負荷を大幅に低減するのに役立ちます。
図は、FIFO の容量と最大設定可能数に従って、FIFO に関連付けられた専用
データレジスタへの単一の 32bit または 16bit アクセスに基づいて、4 つの短い
データフレームの書込みと読出しが実行される様子を示しています。

13

Rx および Tx FIFO

14

閾値とデータアクセスのバランス• 送信用および受信用で分けられた 2 つの FIFO
• 8/16/32bit のデータ読出し／書込みアクセス• 柔軟な閾値設定（データフレームは最大 16、FIFO の半分）
• FIFO 占有フラグ（RXP、TXP、DXP）

データサイズ [bit] => パケットサイズ [データ]/FIFO 容量 [パケット]

FIFO 容量[バイト]

4-8bit9-16bit

17-24bit

25-32bit8

1/8、2/4、3/2、4/2

1/4、2/2

1/2

1/2

16

1/16、2/8、3/5、4/4、5/3、6/2、7/2、8/2

1/8、2/4、3/2、4/2

1/5、2/2

1/4、2/2

SPI ペリフェラルは、データフローを処理する 2 つの FIFO を備えています。
FIFO の容量と最大データフレームサイズは、製品とペリフェラルのインスタンスによって異なります。FIFO 占有イベントの頻度は、データをパケットに編成する FIFO 閾値の設定次第で異なります。
1 つのパケットには最大 16 のデータフレームを収めることができますが、パケットのサイズは FIFO のサイズの半分を超えることはできません。表は、使用可能な FIFO スペースに収まるデー
タとパケットサイズの可能な組み合わせを示しています。送信FIFO に、新しい完全なデータパケットを保存できる 1パケット分のスペースができるか、受信 FIFO で、1 つの完全なデータパ
ケットが読み出す準備ができると、対応する TXP または RXP
占有フラグがセットされます。これによりユーザは、1 つのパケッ
トサイズに対応するデータレジスタを適切に書込みまたは読み出すサービスを実行できます。二重占有 DXP フラグをセットすれば、送信および受信パケットの両方を共通の処理手順で処理できます。占有フラグはバストラフィックおよび現在の FIFO コンテ
ンツにより動的に評価決定されるため、関連するパケットサービ
スが完全に終了した後でこれらの占有フラグを対象としたチェックを行う必要があります。
14

データ転送制御

15

オプションの高度なデータフロー制御• トランザクションセッションサイズの制御• オンザフライオプション（TSER）の拡張機能で調整可能なデータ数（TSIZE）• 転送終了時（EOT）の CRC または SS（CRCEN、SSOE）の自動処理• マスタ側でのトランザクションの開始とサスペンドの制御（CSTART、CSUSP）• 進行中ステータスと完了ステータスを転送(CTSIZE、TSERF、SUSP、EOT、TXC、TXFT)• セッションの最後のデータ処理がパケットサイズと一致しないときの処理（RXWNE、RXPLVL）• オーバーランとアンダーラン状態の処理• マスタによる RxFIFO フル時のトランザクション自動サスペンド（MASRX）• 設定可能なアンダーラン状態のスレーブ制御• データフレームトランザクションの開始、データフレームトランザクションの終了、 SS の開始の検出• 定義したパターン、最後に受信したデータ、最後に送信したデータの実装

マスタとスレーブはどちらも、1 つのセッション内で、エンドレスのデータか定義した数のデータを転送します。トランザクションが進行している限り動作中に拡張できるため、データの数は事実上無制限です。セッション中に、巡回冗長検査を自動的に実行することもスレーブ選択信号をマスタ側のハードウェアで処理することもできます。マスタは、進行中の通信をいつでも開始またはサスペンドできます。進行中のデータフレームは、
トランザクションがサスペンドされると終了します。特定の CTSIZE カウンタは、現在のセッションに残っているデータフレーム数をカウントし、トランザクション終了（EOT）と転送完了 TXC フラグはセッションの終了とバスアイドルを示します。また、追加の特定のTXTF フラグは転送すべきすべてのデータを示し、その転送イベントは転送占有イベン
トからの割込みを無効にします。送信 FIFO に追加のデータがある場合でも、マスタ側
でセッションが完了すると送信は自動的に停止します。SPI が無効化されると、すべての FIFO の内容は一掃されます。ユーザは、SPI が無効になる前に、受信したすべてのデータを読み出す必要があります。
偶発的なエラーを除いて、ソフトウェアによる FIFO 占有イベントの処理はセッションの進行中に限る必要があります。セッションが終了しても残りの受信データがパケットサ
イズと一致しない場合、最後の RXP 占有フラグはセットされません。ただし、RXWNE
フラグはアクティブのまま、その時の FIFO 占有のレベルがデータサイズに依存する特定の RXPLVL レベルカウンタによって通知されます。カウンタ値は、受信 FIFO での処理を待つデータフレームの数を知らせます。それでも、FIFO からポップされるのは一貫したデータだけなので、アプリケーションソフトウェアは完全なパケット読出しを問
題なく実行できます。同様に、冗長な書込みは破棄され、FIFO にプッシュされるのは一貫したデータだけなので、送信 FIFO への完全なパケット書込みを実行できます。
DMA が適用されると、このような整合性のないデータは自動的に処理されます。
オーバーラン状態とデータの損失を防ぐために、マスタは受信 FIFO フル時に進行中のトランザクションを一時的にサスペンドします。送信 FIFO に転送すべきデータの用
意がない場合、およびマスタがセッションを継続または新しく始める場合に、アンダーラン状態を検出して対応するようスレーブを設定できます。

15

プロトコルレベルでの追加サポート

16

DMA および CRC 拡張管理
• DMA コントローラは自動的に以下を処理• 正確なデータ数• CRC フレームアップエンド

MOSI

データ 1

データ 2

...

MISO

データ’ 1

データ’ 2...

データ n

CRC[1..n]

CTSIZE = 0
データ’ nCRC’[1..n]• スレーブ選択の制御• データパケットの自動揃え• 柔軟な CRC 制御

SCK

SS

• 受信フローと送信フロー別の CRC 計算機• プログラム可能な CRC 多項式（5-17/33bit>データサイズ）• プログラム可能な CRC フレーム長（データサイズの倍数）• CRC 計算が停止している間、CRC パターンが各トランザクションの終わりに送信されます。
•

トランスミッタは、送信データから計算された CRC 結果を転送します。

•

レシーバは、受信した CRC 値を受信データで計算した内部 CRC 結果と比較します。

•

FIFO からの冗長 CRC 情報の自動フラッシュ• 定義済みパターンによる自動初期化

プロトコルレベルの通信中に、DMA コントローラを使用して、データフロー
イベント、CRC 計算、および FIFO 閾値の更新を自動的に処理できます。
閾値制御の場合、フレーム数がパケットサイズと一致していない場合、最後の奇数データフレームはパックモードで正しく適用されます。
CRC が有効のときはトランスミッタとレシーバに別の CRC 計算機が使用されます。 CRC 計算結果は、DMA コントローラまたはソフトウェア制御
により、各転送の最後に自動的に追加されます。
CRC 多項式パターンと CRC フレーム長の両方がプログラム可能です。
多項式のサイズは、その最上位のゼロ以外のビットによって定義され、常にデータサイズよりも長くする必要があります。
CRC フレーム長は、データサイズと等しいか、データサイズの倍数である
必要があります。CRC パターントランザクションの間、CRC 計算は停止します。
トランスミッタの CRC 計算機レジスタからの結果はシフトレジスタに直接ロードされ、受信した CRC 値は FIFO に保存されレシーバの CRC 結果と比較されます。冗長 CRC 情報は FIFO から自動的に一掃されます。
CRC レジスタは自動的に初期化されるため、CRC は DMA サーキュラ
モードで使用できます。レシーバとトランスミッタの初期化パターンは、ゼロ
またはすべて 1 に設定できます。この柔軟性により、幅広いプロトコルが利用できます。

16

標準 SS モード

17

スレーブ選択信号（SS）の拡張管理• SS 入力• ハードウェアまたはソフトウェア管理• スレーブモード – 選択アクティブスレーブ• マスタモード – マスタ間の競合• SS 出力• マスタモード• アクティブスレーブを選択• 固有のモード

スレーブ選択信号は、通信用のスレーブノードを選択するため通常はマスタノードが使用します。
信号の実装は、マルチマスタおよびマルチスレーブトポロジでは必須です。一組のマスタ／スレーブペアでは必須ではありません
が、トポロジのケースを問わず、データフローの同期に役立ちます。
スレーブ選択信号は、SSIOP 制御ビットに応じて、入力または出力として動作します。
SS 入力は、マスタモードまたはスレーブモードの SSM およびSSI 制御ビットに応じて、ハードウェアまたはソフトウェアで管理できます。
スレーブ入力として、SS 入力は通信用のアクティブスレーブとしての自身の識別に使用されます。マスタ入力として、SS 入力はマルチマスタシステムにおけるマスタ間の潜在的な競合を示します。 SS はマスタモードでのみ出力として機能し、標準または特定の制御モードでハードウェアにより管理されます。追加のス
レーブ選択出力は、ソフトウェア制御により GPIO から取得できます。

17

固有の SS モード

18

ハードウェア制御によるスレーブ選択信号（SS）の拡張モード• SS パルスモード• 設定可能なデータ間インターリーブパルス（MIDI）• プログラム可能な開始トランザクション遅延（MSSI）• TI モード• マスタとスレーブのサポート• 固定された CPOL と CPHA 設定• HiZ スレーブの MISO 自動制御

スレーブ選択信号が特定のハードウェア制御下にある場合、いくつかの拡張モードがあります。 スレーブ選択信号は、マスタがデータフレーム間の信号にパルスを生成するパルスモードで動作できます。パルスの持続時間は、SPI クロック周期のステップ
でプログラムできます。このモードでは、クロックの位相と極性を設定できます。
別の拡張モードは TI モードです。このモードでは、データの最後のビットに付加された、マスタ供給の SS パルスによりデータフローが同期されます。クロックの極性と位相の設定は固定されており、バストラフィックが停止して特定の設定可能なタイムアウトが経過すると、スレーブデータ出力は自動的にハイインピーダン
スに切り替わります。

18

割込みと DMA
割込みイベント

フラグ

説明

19

ウェイク
アップ

Tx FIFO レディ

TXP*

送信すべき新しいデータパケットを受け入れる Tx FIFO の準備が整ったときにセットされます。

✓

Rx FIFO レディ

RXP*

Rx FIFO で完全なデータパケットが受信されたときにセットされます。

✓

Tx および Rx FIFODXPTXP と RXP イベントの両フラグの保留時にセットされます。

✓

転送充填済みTXTF

送信するすべてのデータが Tx FIFO に移動されます。

転送終了

EOT*

必要なすべてのデータが送信されます。

✓

Tx 完了

TXC

転送完了、バスはアイドルです。

マスタサスペンド

SUSP

マスタトランザクションがサスペンドされます。

Tx 拡張

TSERF

トランザクション拡張が受理されました。

データアンダーラン

UDR

マスタがトランザクションを開始、スレーブの Tx FIFO にはデータがありません。

✓

データオーバーラン

OVR

Rx FIFO がフルのため、レシーバが次のデータフローを受理できません。

✓

CRC エラー

CRCE

データフローの巡回冗長検査に失敗しました。

✓

TI フォーマットエラー

TIFRE

SS 信号が TI モードのデータフォーマットと異なります。

モードフォールト

MODF

マルチマスタバス設定でバスの競合が検出されました。

✓*）FIFO 閾値到達時、またはトランザクションの最後に DMA リクエストが生成されます。

これは SPI 割込みイベントの概要です。データフローを処理する
FIFO とエラー検出イベントが示されています。DMA リクエストは、
FIFO 閾値イベントによって内部的にトリガされます。
EOT イベントは、転送されたデータの総数がデータパケットサイ
ズと合わない場合、最後の不完全なパケットに対して自動制御を起動します。

19

低電力モード
MPU/MCU
ドメインの状態

20

ドメインに割り当てられたペリフェラルの説明

RUN

完全にアクティブ

SLEEP

マスタとスレーブの両方がアクティブ
カーネルとドメインバスクロックがペリフェラルに供給されます。ウェイクアップ機能があるペリ
フェラルイベントは、システムをウェイクアップできます。

Stop + LP Stop

マスタとスレーブの両方がアクティブです。
ドメインバスクロックが停止しています。ペリフェラルレジスタの内容は保持されます。ペリフェラ
ルは引き続き通信を処理できます。カーネルクロックは自律的に、ペリフェラルのリクエストに応じて内部から、またはスレーブケースの SCK ピンを経由して外部から供給されます。ウェイク
アップ機能があるペリフェラルイベントは、システムをウェイクアップできます。

LPLV Stop

何もしませんペリフェラルを無効化する必要があります。ペリフェラルレジスタの内容は保持されます。

STANDBY

パワーダウン状態
ペリフェラルはもはや有効化できません。STANDBY モードを終了した後、ペリフェラルを再初期化する必要があります。

ここでは、個々の低電力モードにおける SPI インスタンスステー
タスの概要を示します。このステータスは、MPU または MCU サ
ブシステムドメインの状態と、ペリフェラルインスタンスがどちらのドメインに割り当てられているかよって異なります。
すべてのインスタンスは、異なる 3 つのクロックドメインによって分けられ、処理が行われます。ペリフェラルバスインタフェースから SPI レジスタへのアクセスが必要な場合、PCLK クロックドメイ
ンにクロックを供給する必要があります。バスクロックが停止しても、ペリフェラルレジスタの内容は保持されます。周辺カーネルク
ロックが有効な場合、クロックジェネレータは SPI マスタの動作も制御します。それ以外の場合、ペリフェラルシリアルインタフェー
スは SCK ピンからの外部クロック信号によってのみクロックが供給されるため、ペリフェラルはスレーブモードでのみ動作できます。
ウェイクアップ機能付きのペリフェラルイベントは設定により、システムをウェイクアッできます。ドメインが低電力低電圧 STOP、
STANDBY、または SHUTDOWN モードの場合、SPI インスタン
スは動作できません。そのため、ペリフェラルドメインがこれらの低電力モードのいずれかに入る前に、確実にすべての SPI トラ
フィックを完全に終了させ、ペリフェラルを適切に無効化することが重要です。
20

パフォーマンス21• 実際の通信速度は次の条件によって異なります。
• SPI バスの容量負荷（接続されたデバイスの数、入力容量、ワイヤの長さ）• GPIO の内部ボンディングとそれらの設定、VDD レベル、および周囲温度• SPI クロック信号のデューティ比• データ用に提供されまたは必要とされるセットアップ時間とホールド時間• データフローを継続して制御するソフトウェアの能力と十分なパフォーマンス容量• 実際のパフォーマンス
• マスタモードでの最大速度は 100MHz です。
• スレーブモードでの最大速度は、レシーバで 100MHz、トランスミッタで 38MHz です。
• これらの最大速度は、すべての SPI インスタンスで得られるわけではありません。

SPI パフォーマンスは、主に適用されるクロックによって異なります。クロック周波数は、必要な通信周波数の少なくとも 2 倍にする必要があります。 実際の通信速度は、アプリケーションの要因によって低下する可能性があります。
ユーザは、ノード数、接続距離、入力容量、GPIO 設定などの
SPI バス負荷を考慮する必要があります。 データ信号とクロック信号には高速 GPIO モードを適用する必要があります。 電源
電圧が低く周囲温度が極端に高いと、エッジが遅くなります。 時には、ノード間でデータホールドおよびセットアップ時間を遅くすることが必要になる場合があります。 例外処理を数多く行うため、アプリケーションは高速データフローを常に確保できるとは限りません。

システムで使用される DMA チャネルの数、度重なる割込み
サービス、または割込み不可能な命令の実行と共に、DMA 容量も考慮する必要があります。

21

アプリケーションの例

22• ディスプレイ• スマートセンサ• メモリ• MMC/SD カード• IO エキスパンダ

SPI は、複雑な通信プロトコルを必要とせずシンプルにデータ転送ができる幅広いアプリケーションで使用できます。転送の安全性は、スマートカードで使用する場合にもサポートされます。

22

アプリケーションのヒント

23• 一般的なヒント：• SPI（またはそのカーネルクロック）を無効にする前に、TXC および FIFO の占有ステータスを確認します。周辺の電源ドメインが STANDBY モードまたは SHUTDOWN モードに入る前に、すべての SPI トラフィックを完了する必要があります。SPI がパワーダウンされるか無効になると、すべての FIFO コンテンツが失われます。
• アプリケーションは、SPI を低電力モードに切り替える前に、保留中のすべての割込みを確認応答します。
• プロトコルに特定の制御が必要な場合（CRC、SS）、TSIZE を使用します。
• データのパッキング、デュアルイベントの処理、DMA の使用により、システムが必要とする制御リクエストを減らすことができます。
• SS によるハードウェア管理には利点があります。
• SPI マスタが一時的に無効な場合、関連する GPIO でオルタネート機能モードをアクティブに保ちます。
• 設定ロックを使用して、適用した設定が予期せず変更されるのを防止します。

• 固有の側面：• FIFO 占有フラグの評価は動的で、バスフローに影響されます。
• アンダーランイベントの評価には複数の SCK 信号クロックが必要なため、SCK 信号のアクティビティに依存する遅延が発生します。

役立つヒントをいくつか紹介します。
ユーザは、DMA トランザクションが完了したり送信 FIFO が空になっても、バス上でト
ラフィックが継続している可能性があることに注意する必要があります。
そのため、ユーザはペリフェラルのステータスを注意深く確認し、SPI を無効にする前、または SPI を STANBY モードまたは SHUTDOWN モードに変更する前に推奨する
手順を順守する必要があります。ハードウェアによる CRC またはスレーブ選択信号処理などの特定の制御が必要な場合は、データサイズ制御を使用します。
DMA、データパッキング、または全二重モードでのデュアルイベント処理を使用すると、システム全体のパフォーマンスを向上させることができます。これらの機能は、特にデータフレームが短く、高速で継続的な通信の流れが必要な場合に役立ちます。
スレーブ選択信号のハードウェア管理は、シングルマスタ／シングルスレーブのペアではそれほど必要とされませんが、データフローの同期とマルチマスタシステムでの競合の防止に役立ちます。何らかの理由で SPI マスタを一時的に無効にする必要がある
場合、ユーザはオルタネート機能モードで動作する関連出力を制御下に置くことでグリッチを防止できます。そうすれば、GPIO は SPI のアイドル設定に対応する状態に保持されます。ユーザは偶発的な変更を防ぐために、すべての設定とセッティングをロッ
クしておく必要があります。
SPI ネットワークを設計する際に追加して考慮すべき側面がいくつかあります。
FIFO 占有フラグの評価は動的で、バスフローに影響されます。そのため、FIFO 閾値に対応する完全なデータパケットが終了したときに、イベントサービスを適用する必要があります。FIFO からの読出しまたは FIFO への書込みという完全なパケットサービ
スが終了すると、占有フラグを再度テストできます。
スレーブの内部ロジックは、外部 SCK ピンからクロックが供給されます。特定のフラグを評価するには数個の SCK 信号サイクルが必要で、SCK 信号がアイドル状態では評価できません。

23

実装済みのインスタンス機能
SPI の機能SPI2S1SPI2S2SPI2S3

SPI4

SPI5

SPI6

Rx および Tx の FIFO
サイズ [バイト]

16

16

16

8

8

8

最大データサイズ
[bit]

32

32

32

16

16

16

I2S と組み合わせ

可能

可能

可能

不可

不可

不可

利用可能な最大周波
数

不可

可能

可能

不可

不可

不可

オプションのランタイム
割当て

MPU/MCU

MPU/MCU

MPU/MCU

MPU/MCU

MPU/MCUMPU のみ24

STM32MP1 デバイスは 6 つの SPI インスタンスを内蔵し、それぞれがこれまでに紹介したすべての機能をサポートしています。
SPI2S1、SPI2S2、および SPI2S3 は I2S インタフェースと多重化することで、2 倍の拡張 FIFO とデータサイズレジスタが得られます。オプションのソースとその RCC が提供するカーネルク
ロックの最大周波数は、インスタンスごとに異なります。詳細については、製品リファレンスマニュアルおよび関連するデータシート
を参照してください。

24

SPI 関連のペリフェラル

25• これらの他のペリフェラルを参照してください：• RCC（SPI クロックの有効化、スリープ時のクロック制御、リセット）• 割込み（FIFO およびエラーイベント）• GPIO（速度制御、GPIO 設定）• DMA

SPI に直接リンクされているこれらの他のトレーニングを参照してください。 ユーザは、SPI の動作に影響を与えることがあるす
べてのペリフェラルをよく理解する必要があります。

25

参照

26

• 詳細については、次のリソースを参照してください。
• STM32MP1 リファレンスマニュアルとデータシート• AN4286 - SPI protocol used in the STM32 bootloader• AN3364 - Migration and compatibility guidelines for STM32 microcontroller applications• Web（wiki ページ、接続例、使用可能な監視ツール）

専用の SPI アプリケーションノートがいくつか掲載されています。
一般的な SPI 接続とインタフェースの問題の詳細については、
wiki ページなどの多くの Web ページや、SPI バス監視ツールを利用できます。 多くのデジタルオシロスコープは、SPI バス上のデータとクロック信号の直接読出しと分析をサポートしています。

26