STM32H7 - SPI
シリアル・ペリフェラル・インタフェース
1.0版

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

1

概要

2

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

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

スレーブ

スレーブ

デバイス1

デバイス2

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

内蔵のシリアル・ペリフェラル・インタフェース（SPI）は、シンプルな通信インタフェースを提供して、マイクロコントローラと外部デバイスの通信を可能にします。このインタフェースは詳細な設定が可能であり、多くの標準プロトコルをサポートします。
アプリケーションは、数本のピンしか必要としない、コンポーネントへのシンプルな直接接続を利用できます。SPIは詳細な設定が可能なため、多くのデバイスを既存のプロジェクトに容易に対応させることができます。

2

主な機能

3

• 動作モード• マスタまたはスレーブ（マルチマスタ＆マルチスレーブ・サポート）• 全二重、シンプレックス、または半二重• モトローラおよびTI標準をサポート• 最大133/150MHzの動作（マスタ/スレーブ受信モード時）• デュアルクロック・ドメイン（IPカーネルがPCLKに依存しない、低消費電力モード動作）• インタフェースに必要な配線は2本（最小）（スレーブ選択管理オプション）• 設定可能なデータおよびクロックフォーマット、調整可能なタイミングおよび設定保護• プロトコルレベルで追加のサポート（TxおよびRx FIFO、DMA、CRC）• FIFOおよびデータのサイズは、製品およびインスタンスによって異なる• 幅広いイベントフラグと割込み機能

STM32 SPIは、さまさまな動作モードを備えており、このプレゼンテーション内で詳しく説明します。通信速度は内部バス周波数の半分を超えることはできず、単方向でクロック信号によって同期されるシリアルデータフローを提供するには、少なくとも二線が必要です。オプションのハードウェアスレーブ選択制御信号を追加できます。また、データサイズや送信シフトの順番を設定できるほか、クロック信号の極性や位相、スレーブセレクト信号の極性やタイミングの調整も可能です。重要なコンフィギュレーションや設定は、ロック機能によって保護することができます。
プロトコルレベルでは、オプションで自動巡回冗長検査（CRC）を計算する特定のデータバッファを使用したり、DMAコントローラを介して転送することができます。割り込み要求を発生させることができるSPIイベントは多岐にわたっています。

3ブロック図4

SPI2S
spi_wkup
spi_itIRQインタフェース

spi_tx_dma
spi_rx_dma

DMAインタフェース

SS
ロジック

spi_pclk
クロック・ドメイン

SPI2S_RXDR

HRTIM_PCLKSPI2S_I2SCFGR

spi_clk

SPI2S_CR1
SPI_CR2
SPI_CFG[2:1]

spi_ker_clk

クロック
コントローラUDR
コントローラSYnc

TX シフトレジスタ

RXシフト
レジスタ

RxFIFOSPI2S_UDRDR
HRTIM_KER_CKSYnc

SPI2S_TXDR

SS

SYnc

SPI2S_IERSPI2S_SRSPI2S_IFCR

TxFIFO

32ビット APBバス

COMコントローラ

SPI2S_CRCPOLYSPI2S_TXCRCSPI2S_RXCRC

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

MOSI

MISO

SCK
クロック
spi_ker_ck
ジェネレータclockdomain

この簡易SPIブロック図は、ペリフェラルの基本的な制御メカニズ
ムと機能を示しています。分離されたクロックドメインは、異なる色の領域で強調しています。各ドメイン間の相互接続信号はすべて同期しています。PCLKクロックドメインは、ペリフェラルバスインタフェースを介してSPIレジスタへのアクセスが必要な場合にクロックを供給する必要があります。SPIマスタは、スレーブ用のクロック信号を出力する必要があるため、少なくともアクティブなカーネルクロックが必要です。SPIスレーブは、シリアルインタ
フェースドメインがSCKピンを介して外部から完全にクロックされるため、内部クロック信号なしでデータを転送することができます。
すべてのデータは、それぞれのインタフェースを介して受信バッファと送信バッファを通過します。これらの機能は、ペリフェラルの構成に応じて有効または無効にすることができます。SPI周辺機器には、4つのI/O信号があります。必要に応じて、ペリフェラ
ルがディセーブルになっていても、関連するI/O信号の制御を維持して、予期せぬグリッチを防ぐことができます。

4SPIノードの相互接続

5

さまざまなマスタ・スレーブ相互接続をサポート• マスタは常にクロックを供給し、すべてのトラフィックを制御（通信のスレーブを選択）

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

MISO

MOSI

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

SCK• データは両方向で並行して送受信可能• 全二重モード（双方向）では、マスタとスレーブの両方が同時にデータを送受信

クロック･ジェネレータ

マスタ

SS

スレーブ

SPIマスタは、常にバスのトラフィックを制御し、SCKラインを通じて専用スレーブにクロック信号を供給します。マスタはオプションのスレーブ選択またはSS信号を通じて、通信先のスレーブを選択できます。専用のシフトレジスタに格納されたデータは、MOSI（Master Output, Slave Input）およびMISO（Master Input, SlaveOutput）データラインを通じてマスタとスレーブ間で同期して送受信できます。全二重モードでは、両方のデータラインが使用され、同期データは両方向に流れます。

5

SPIノードの相互接続

6

さまざまなマスタ・スレーブ相互接続をサポート• シンプレックスモード（単方向）では、1つのノードがトランスミッタのとき、もう1つはレシーバとして動作

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

MISO

MOSI

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

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

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

最大16ビットのTxシ
フトレジスタSCKMOSI

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

SCK

クロック･ジェネレータ

マスタMISO

クロック･ジェネレータ
SS

スレーブ

マスタ

SS

スレーブ

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

6

SPIノードの相互接続

7

さまざまなマスタ・スレーブ相互接続をサポート• 半二重モード（準双方向）では、マスタとスレーブの両方がデータの送信と受信を同時に交互に実行。ノードは単一のコモンデータラインを共有

MISO

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

R

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

MOSI

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

SCK
クロックジェネレータ

マスタSS

スレーブ

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

7

SPIノードの相互接続

8

マルチスレーブ・ネット・トポロジのサポート• マルチスレーブ：スター・トポロジ

最大16ビットのRxシ
フトレジスタ• マスタはデータの書込み／読取り時に1つのスレーブノードを選択

最大16ビットのTxシ
フトレジスタ• 個別のスレーブ選択信号（GPIOピンでシミュレート）が必要

MISO

MISO

MOSI

MOSI

SCK

SCK

GPIO

SS

スレーブMISO

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

MOSI

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

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

• スレーブノードは異なるクロックおよびデータフォーマットを持つことが可能

GPIO

GPIO

SCK

マスタ

SS

スレーブ

次のスレーブへ

SPIネットワークが複数のスレーブを含むときには、一般にスター・トポロジが使用されます。マスタは一度に1つのスレーブと通信します。共通のMISOピンを通じてマスタにデータを送り返せるスレーブは1つのみだからです。このトポロジでは、マスタから各スレーブノードに個別のスレーブ選択信号が与えられなければならず、それによってマスタは通信先のスレーブを選択できます。複数のスレーブノードが共通の設定を持っていない場合でも、個別のスレーブ選択信号により、SPIデータおよびクロックフォーマットはスレーブごとに適応できます。

8

SPIノードの相互接続

9

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

MOSI

MISO

• データはすべてのノードを循環

SCK• すべてのノードが共通のデータおよびクロックフォーマットをサポートしなければならない

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

マスタ

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

SS

スレーブ

MOSI

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

MOSI

MISO

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

SCK

SCK

SS

SSMISO

スレーブ

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

9

SPIノードの相互接続

10マルチマスタ・トポロジのサポート• マルチマスタ：マスタ機能を持つ
2つのノード• ノードはデフォルトではスレーブモード• ノードは自身をアクティブマスタに切り替えて、バスの制御を取り、通信セッションを開始

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

MOSI

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

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

SCK
クロック･ジェネレータ

• スレーブ選択用のピンは、潜在的なバス競合を検出するための入力として使用• マスタノードはスレーブモードに戻って、通信セッションを終了

MISO

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

マスタ

クロック･ジェネレータGPIOSSSSGPIO

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

10

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

11

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

• データフレームのサイズ• 4～最大16ビット• ビットのシフトオーダ• MSBまたはLSBファースト• クロック設定（モード0～3）• アイドル時にローまたはハイ極性• 奇数または偶数エッジでサンプリング• SS極性制御、MOSIx MISO
スワッピング

データフォーマットの設定にはいくつかのパラメータを使用します。
ユーザはデータフレームのサイズとシフトレジスタの送信順を定義できます。クロックは、モトローラSPI仕様で定義された4つの基本構成の1つに設定できます。2つのビットの組み合わせによって、クロック信号の極性と位相を制御します。位相制御ビットがクリアされると、データビットは奇数クロックエッジでサンプリングされ、偶数クロックエッジで次のビットからデータラインへのシフトが同期されます。これは、位相制御ビットがセットされたときと反対です。クロック極性ビットは、クロック信号のアイドル状態を定義し、いずれのクロックエッジがデータのサンプリングまたはシフトに使用されるかを決めます。
スレーブセレクト信号は両極性で使用でき、MOSI信号とMISO信号の機能を入れ替えることができます。

11

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

12

マスタが提供する信号の任意調整機能• プログラム可能な最小インタリーブ遅延(最大15のSPIクロック期間)• データフレーム間(MIDI-SSインタリーブ（オプション）付き)• SSスタートから最初のデータ・トランザクションまでの間(MSSI)

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

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

13

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

すべてのSPIデータトランザクションは、バイト単位で構成された内蔵FIFOを通過します。
SPI書き込みデータレジスタへの書き込みアクセスは、送信キューの最後に送信FIFOに書き込まれたデータを格納します。SPIリードデータレジスタへの読み出しアクセスは、受信FIFOに格納されている、まだ読み出されていない最も古い値を返します。
通信速度が速く、データフレームが短すぎる場合、特にクロック信号が連続し、全二重モードが使用されている場合には、正しいデータフローを確保するのは難しい作業になります。スレーブノードは、データのオーバーランやアンダーランを防ぐために、マスタから提供されたすべてのトランザクションのタイミングに正しく従わなければならないた
め、より重要です。ユーザーは、データレジスタへのアクセスを最小限に抑えることで、データをより広いパケットに整理し、複数のデータのリード/ライトイベントを処理することができます。このサービスは、FIFOのスレッショルド・イベントによるパケットレディ動作の信号に基づいています。FIFOのしきい値が適切に設定されていれば、最小のFIFO占有イベントで複数のデータパケットサービスを実行することができます。また、共通のデュアルイベントに基づいて、リードイベントとライトイベントを同時に処理することも可能です。これらの機能により、サービスの数を効率的に減らし、データフローを処理する際のマイクロコントローラの負荷を最小限に抑えることができます。この機能は、マイクロコントローラーがスリープ状態のときにデータを送信するような低消費電力モードでは特に有効です。また、DMAを追加で適用すると、ランモード時のシステム全体の負荷を大幅に軽減することができます。
図に示すように、FIFOの容量とSPIインスタンスの最大構成データサイズに応じて、FIFOに関連付けられた専用データレジスタへの32ビットまたは16ビットの1回のアクセスで、4つの短いデータフレームの書き込みと読み出しができる原理を示しています。

13

RxとTxFIFO

14

しきい値とデータ･アクセスのバランス• 送信用と受信用の2つの独立したFIFO• 8/16/32ビットによるデータのリード/ライト･アクセス• 柔軟なしきい値設定(最大16データフレーム、FIFOの半分まで)• FIFO占有フラグ(RXP,TXP,DXP)
FIFO
能力
[バイト]

4-8ビット

9-16ビット

17-24ビット

25-32ビット8

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

データサイズ[ビット]=>パケットサイズ[データ]/FIFO能力[パケット]

SPIペリフェラルは、データフローを処理するために2つのFIFOを備えています。
FIFOの容量や最大データフレームサイズは、製品やペリフェラルのインスタンスによって異なります。FIFOの占有イベントの頻度は、データをパケットにまとめるFIFOのしきい値の設定によって異なります。1つのパケットには最大16個のデータフレームを含めることができますが、そのサイズはFIFOサイズの半分を超えることはできません。この表は、FIFOの空き容量に収まるデータとパケットサイズの組み合わせを示しています。送信FIFOに1つのパケットを格納するスペースができ、新しい完全なデータパケットを格納できるようになると、または、受信FIFOに1つの完全なデータパケットを読み込めるようになると、対応するTXPまたはRXPの占有フラグが設定されます。その後、ユーザーは1つのパケットサイズに対応するデータレジスタの適切な書込みまたは読出しサービスを行うことができます。また、デュアルオキュパン
シー（占有）DXPフラグが設定されている場合は、送受信される両方のパケットを共通の処理手順で処理することができます。占有フラグは、バストラフィックと現在のFIFOの内容に関連して動的に評価されるため、関連するパケットサービスが完全に終了した後にのみチェックする必要があります。
14

データ転送制御

15

オプションの高度なデータフロー制御• トランザクション･セッション･サイズの制御• データ数（TSIZE）の調整が可能、オンザフライでの拡張も可能（TSER）• 転送の終わり(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コントローラが自動的に処理• データの正確な数

MOSI

データ 1

データ 2

...

CRC[1..n]CRCNXT=1• CRCフレームアップエンド• スレーブセレクト･コントロール

データ n

MISO

データ’ 1

データ’ 2...

データ’ nCRC’[1..n]• データパケットの自動アライメント
SCK• 柔軟なCRC制御• 受信および送信フロー用の個別のCRC計算機

SS• プログラマブルCRC多項式(5-17/33ビット>データサイズ)• プログラマブルCRCフレーム長(データサイズの乗算)• CRCパターンは、CRC計算が停止されている間、各トランザクションの終了時に送信される•送信機は、送信されたデータから計算されたCRC結果を送信•

受信側は受信したCRC値と受信データから計算された内部CRC結果を比較•

FIFOsからの冗長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はマスターモードでのみ出力として機能し、標準または特定の制御モードでハードウェアによって管理されます。追加のスレーブ選択出力は、ソフトウェア制御下のGPOによって提供されます。

17

特定のSSモード

18

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

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

18

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

フラグ

説明

19

ウェイクアップ

送信FIFOレディ

TXP*

TxFIFOが送信する新しいデータパケットを受け入れる準備ができたときに設定

はい受信FIFOレディ

RXP*

RxFIFOで完全なデータパケットを受信したときに設定

はい送信&受信FIFODXP

TXPとRXPの両方のイベントが保留されている場合に設定

はい

送信完了

TXTF

送信されるすべてのデータがTxFIFOに移動

送信の終了

EOT*

必要なデータをすべて送信

送信コンプリート

TXC

送信完了し、バスはアイドル状態

マスタサスペンド

SUSP

マスタ･トランザクションの停止

送信エクステンション

TSERF

トランザクションの延長が受理

データアンダーラン

UDR

スレーブのTxFIFOにデータがない状態でマスタがトランザクションを開始

はいデータオーバーランOVR

RxFIFOが満杯のため、レシーバーは次のデータフローを受け入れられない

はい

CRCエラー

CRCE

データフローの巡回冗長検査の失敗

はいTIフォーマットエラー

TIFRE

SS信号がTIモードのデータ形式に対応していない

モードフォルト

MODF

マルチマスタのバス構成でバスコンフリクトが検出

はいはい• DMAリクエストは、FIFO閾値に達したとき、間接モードで生成可能

ここでは、SPIの割込みイベントの概要を説明します。データフ
ローを処理するために、FIFOイベントとエラー検出イベントがあります。
DMAリクエストは、FIFOのしきい値イベントによって内部的にトリガされます。
EOTイベントは、送信されたデータの全体数がデータパケットのサイズと一致していない場合に、最後の不完全なパケットの自動制御を発生させます。

19

低電力モード
ドメインモード

20

説明

DRUN

完全にアクティブ

DSTOP +
ペリフェラルクロックが有効

マスタとスレーブの両方がアクティブ
ドメインバス･マトリックス･クロックはストールされるが、ペリフェラル･レジスタの内容は保持ペリフェラル･イベントでシステムをウェイクアップすることが可能

DSTOP +
ペリフェラルクロックがディセーブル

スレーブのみアクティブ
ドメインバスマトリックスクロックは停止するが、ペリフェラルレジスタの内容は保持ペリフェラル・クロック・ジェネレーターは、SCKピンで提供される外部クロック信号によって供給される
ペリフェラル･イベントは、システムをウェイクアップさせることが可能

DSTANDBY もしくはSHUTDOWN

パワーダウン
ペリフェラルはもはや起動しておらず、どのようなイベントでもシステムを起動することはできない
ドメイン・スタンバイ・モードを終了するか、電源を入れた後、ペリフェラルを再初期化する必要がある

ここでは、特定の低消費電力モードにおけるSPIの状態の概要を説明します。関連するシステムのパワードメインは、ペリフェラルのインスタンスによって異なります。すべてのインスタンスは、3つの独立したクロックドメインによって分割され、処理されます。ペリ
フェラルバスインタフェースを介してSPIレジスタへのアクセスが必要な場合は、PCLKクロックドメインを選択する必要があります。
バスマトリクスクロックが停止している場合、ペリフェラルレジスタの内容は保持されます。ペリフェラルカーネルクロックが有効な場合、クロックジェネレータはSPIマスタ動作も制御できますが、そうでない場合はペリフェラルシリアルインタフェースがSCKピン経由の外部クロック信号のみ供給されるため、ペリフェラルはスレーブモードでのみ動作します。ペリフェラルのイベントは、システムをウェイクアップするように設定することができます。デバイスは、そのドメインがSTANDBYモードまたはSHUTDOWNモードにあるときは動作できません。そのため、ペリフェラルドメインがSTANDBYモードまたはSHUTDOWNモードに入る前に、すべてのSPIトラフィックが完了していることが重要です。アプリケーション
は、SPIを低電力モードに切り替える前に、保留中のすべての割り込みを確認します。
20

パフォーマンス21• 実際の通信速度は以下の通り• SPIバスの容量性負荷（接続されているデバイスの数、入力静電容量、ワイヤの長さ）• GPIO内部ボンディング、それらの構成、VDDレベル、および周囲温度• SPIクロック信号デューティ比• 提供されるセットアップおよびホールド時間／データに必要な時間• 提供されるセットアップおよびホールド時間／データに必要な時間• 実際のパフォーマンス
• マスタモードでの最大速度は133MHz• スレーブモードの最大速度は、受信の場合は150MHz、送信では31MHz• これらの最大値は、すべてのSPIインスタンスで達成できるものではない

SPIの性能は、主に適用されるクロックに依存します。最低でも、クロック周波数は必要な通信周波数の2倍である必要があります。
実際の通信速度は、アプリケーションの要因によって低下する可能性があります。
ノード数、接続距離、入力容量などのSPIバスの負荷と、GPIOの設定を考慮する必要があります。データおよびクロック信号には高速GPIOモードを適用する必要があります。低い電源電圧や極端な周囲温度ではエッジが遅くなります。ノード間では、より遅いデータホールドまたはセットアップ時間の要件を尊重しなければならない場合があります。アプリケーションでは、例外処理が頻繁に発生するため、高速データフローを管理できない場合があります。
DMA容量だけでなく、システムで使用されるDMAチャンネルの数、頻繁な割り込みサービスや割り込み不可能な命令の実行なども考慮しなければなりません。

21アプリケーション例

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

SPIは、複雑な通信プロトコルを必要としない単純なデータ転送が必要な幅広いアプリケーションで使用できます。スマートカードに使用する場合など、セキュアな転送をサポートします。

22• 一般的なヒント：

アプリケーションのヒントとコツ

23• SPI（またはそのカーネルクロック）を無効にする前に、TXCとFIFOの占有状態を確認してください。
すべてのSPIトラフィックは、ペリフェラルパワードメインがスタンバイモードまたはシャットダウンモードに入る前に完了する必要があります。SPIがパワーダウンまたはディセーブルされると、FIFOの内容はすべて失われます。
• アプリケーションは、保留中のすべての割り込みを確認してから、SPIを低電力モードに切り替えます。
• プロトコルの特定の制御が必要な場合（CRC、SS）にはTSIZEを使用してください。データパック、デュアルイベントの処理、またはDMAの使用は、システムに必要な制御要求を減少させることができます。SSをハードウェアで管理すると効果的です。SPIマスターが一時的に無効になっても、関連するGPIOで代替機能モードを有効にしておく必要があります。コンフィギュレーション・ロックを使用することで、適用された設定の予期せぬ変更を防ぎます。
• 具体的な局面:• FIFO占有フラグの評価は、バスフローに依存して動的に行われます。
• アンダーランイベントの評価には、SCK信号のクロック数が必要なため、SCK信号のアクティビティに依存した遅延があります。

役に立つヒントを次に示します。
DMAトランザクションが完了した場合や送信FIFOが空になった場合でも、バス上のトラフィックは継続している可能性があることに注意してください。
そのため、ユーザーは、SPIを無効にするか、STANDBYモードまたはSHUTDOWNモードにする前に、ペリフェラルの状態を注意深くチェックし、推奨される手順に従う必要があります。CRCやスレーブ選択信号処理などの特定の制御が必要な場合は、データサイズコントロールを使用します。
DMA、データパッキング、または全二重モードでのデュアルイベントの処理を使用すると、システム全体のパフォーマンスが向上します。これらの機能は、データフレームが短く、高速で継続的な通信フローが必要な場合に特に役立ちます。
スレーブ選択信号のハードウェア管理は、シングルマスタ/シングルスレーブペアでは必要ありませんが、マルチマスタシステムでデータフローを同期し、競合を防ぐのに役立ちます。何らかの理由でSPIマスタを一時的に無効にする必要がある場合、ユーザは、関連付けられた出力の不具合が強制的に制御されるようにすることで、代替機能モードで動作することを防ぐことができます。その後、GPOはSPIアイドル構成に対応する状態に維持されます。ユーザは、誤って変更を行わないように、すべての構成と設定をロックしたままにする必要があります。
SPIネットワークを設計する際には、次の点を考慮する必要があります。
FIFO占有フラグの評価は動的であり、バスフローに依存します。FIFOしきい値に対応する完全なデータパケットが完了したときに、イベントサービスを適用する必要があります。FIFOから読み取るか、FIFOで書き込むかのいずれか、完全なパケットサービスが完了したら、占有フラグを再度テストできます。
スレーブ内部ロジックは、外部SCKピンからクロック供給されます。特定のフラグは、評価されるSCK信号の循環のいくつかの期間を必要とし、SCK信号がアイドル状態にある限り評価できません。
23

STM32H7インスタンス機能
SPI機能

SPI2S1SPI2S2SPI2S3

SPI4

SPI5

SPI6

RxとTxFIFOサイズ[バイト]161616888

最大データサイズ[ビット]

3232321616

16

I2Sと組合せ

はいはいはい

いいえ

いいえ

いいえ

達成可能な最大周波数

はいはいはい

いいえ

いいえ

いいえ

24

STM32H7には6つのSPIインスタンスがあり、各々はこれまで紹介したすべての機能をサポートしています。SPI2S1、SPI2S2、SPI2S3はI2Sインタフェースで多重化され、2倍の拡張されたUFOとデータ・サイズ・レジスタを備えています。

24

SPI関連ペリフェラル

25• その他、以下のペリフェラルを参照ください：• リセットおよびクロック制御（SPIクロックイネーブル、SLEEPモードでのクロック制御、リセット）• 割込み（FIFOおよびエラーイベント）• 汎用入出力（速度制御、GPIO設定）• DMASPIに直接リンクされている、これらのトレーニングを参照ください。
ユーザは、SPIの動作に影響する可能性のあるすべてのペリフェラルに習熟してください。

25

参照

26

• 詳細については、以下のリソースを参照ください• STM32H7 reference manual and datasheet• AN4286 - SPI protocol used in the STM32 bootloader• AN3364 - Migration and compatibility guidelines for STM32 microcontroller applications• Web（接続例、使用可能なモニタリング･ツール）

専用のSPIアプリケーションノードがいくつかあります。一般的な
SPI接続とインタフェース問題の詳細については、多くのWebページがあり、使用可能なSPIバスモニタリングツールもあります。多くのデジタルオシロスコープは、SPIバスでのデータの直接読取りと分析およびクロック信号をサポートしています。

26