STM32G0 - SPI
シリアル・ペリフェラル・インタフェース
レビジョン 1.0

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

1

STM32F0と同じ

2• STM32G0マイクロコントローラはSTM32F07x、STM32F09x、およびSTM32F04xの各マイクロコントローラと同じSPI機能を共有している• ただし、一部の軽微な修正も実装されている

STM32F0 マイクロコントローラ向けに開発された SPI ドライ
バは、STM32G0 マイクロコントローラでもシームレスに動作します。

2

概要

3

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

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

スレーブ

スレーブ

デバイス 1

デバイス 2

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

内蔵シリアル・ペリフェラル・インタフェース（SPI）は、マイクロコントローラが外部デバイスと通信できるようにする、シンプルな通信インタフェースを提供します。このインタフェースは高度な設定が可能であり、多くの標準プロトコルをサポートします。
アプリケーションにとって、必要なピン数が少ない簡単な方法で直接コンポーネントに接続できるという利点があります。高度に設定可能な SPI の機能を備えているので、既存のプロジェクトで簡単に多くのデバイスに対応できます。

3

主な機能

4

• 動作モード• マスタまたはスレーブ（マルチマスタ／マルチスレーブをサポート）• 全二重、単方向、または半二重• モトローラとTIの規格をサポート• 最大fPCLK/2で動作• 二線（以上の）インタフェース（スレーブ選択管理オプション）• データ･フォーマットとクロック･フォーマットを設定可能• プロトコル･レベルで追加のサポート（Tx FIFOとRx FIFO、DMA、CRC）• 割込み機能を備えた幅広いイベント･フラグ

STM32 のSPI には、このプレゼンテーションで詳しく説明する
様々な動作モードがあります。
通信速度は、内部バス周波数の半分を超えることはできません。単方向でクロック信号により同期されるシリアルデータフローを提供するために、少なくとも二線が必要です。 オプションでハードウェアスレーブ選択制御信号を追加できます。
データサイズと送信シフトオーダー、さらにクロック信号の極性と位相、スレーブ選択信号の極性とタイミング調整を設定可能です。
プロトコルレベルでは、ユーザは、自動巡回冗長検査（CRC）計算オプション付きの固有のデータバッファを使用でき、DMAコントローラ経由で転送します。 割込み要求を生成できる幅広い SPI イベントが用意されています。

4ブロック図5

APB アドレスおよびデータバス

SPI_DR 読出し
RxFIFO
4x8 ビット

MOSI
CRC
コントローラシフトレジスタ
シフトレジスタMISO
TxFIFO
4x8 ビット

SPI_DR 書込み

ボーレート・ジェネレータ

SCK

2-256
マスタ：閉
スレーブ：開NSS（スレーブ選択）

0

SPI_CR1[SSI]

PCLK

通信
コントローラ

IRQ
RxDMA
TxDMA
PCLK

ソフトウェアまたはハードウェアによるスレーブ選択マネージャ

1

SPI_CR1[SSM]

単純化した SPI ブロック図で、その基本的な動作と機能を示します。SPI ペリフェラルには、4 つの I/O 信号が関連付けられています。 すべてのデータは、固有のインタフェースを経由して受信バッファと送信バッファを通過します。
データは、DMA 機能付きの 2 つの 32 ビット内蔵 Rx FIFO/Tx
FIFO に一時的に格納されます。
NSS の管理は、ハードウェアまたはソフトウェアによりマスタとスレーブの両方で行われるので、マスタ／スレーブ動作を動的に変更できます。
SPI コントローラは、通信の信頼性を向上するために、ハードウェアで巡回冗長検査（CRC）機能をサポートしています。送信モードで CRC 値を最後の数バイトとして送信でき、最後に受信した数バイトを自動的に CRC エラーチェックすることができます。

5

SPIノードの相互接続

6

さまざまなマスタ-スレーブ相互接続をサポート• マスタは常にクロックを供給し、すべてのトラフィックを制御する（通信するスレーブを選択）。
• データは両方向で並行してやり取りできる最大 16 ビットのRx シフトレジスタ
最大 16 ビットのTx シフトレジスタ
クロック・ジェネレータ

マスタMISO

MOSI

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

SCKSS

スレーブ• 全二重モード（双方向）では、マスタとスレーブの両方が同時にデータを送受信する

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

6

SPIノードの相互接続

7

さまざまなマスタ-スレーブ相互接続をサポート• 単方向モードでは一方のノードがトランスミッタ、もう一方のノードがレシーバになる
最大 16 ビットのRx シフトレジスタ
最大 16 ビットのTx シフトレジスタ
クロック・ジェネレータ

マスタ

MISO

MOSI

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

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

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

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

SCKSS

クロック・ジェネレータ

スレーブ

マスタ

MISO

MOSI

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

SCKSS

スレーブ

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

7

SPIノードの相互接続

8

さまざまなマスタ-スレーブ相互接続をサポート• 半二重モード（準双方向）では、マスタとスレーブの両方が同期を取ってデータの送信と受信を交互に行う。
• 両ノードは1つの共通データラインを共有する。
MISO

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

マスタ

MOSI

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

スレーブ

半二重モードは、データ交換用に 1 つのラインを共有し、データは一度に一方向にのみ流すことにより、前述の 2 つのモードを統合しています。このモードでは、マスタの MOSI ピンとスレーブの MISO ピンが交差接続されます。マスタとスレーブは、共通のデータラインを使用する際、同期を取ってトランスミッタの役割とレシーバの役割を交代する必要があります。一般的に、MISO ピンと MOSI ピンの間の半二重データラインに直列抵抗を追加して、発生する可能性がある一時的な短絡接続を防止します。なぜなら、通常はマスタノードとスレーブノードは同期されていないからです。

8

SPIノードの相互接続

9

マルチスレーブ・ネット・トポロジのサポート• マルチスレーブ：スター・トポロジ• マスタはデータを書き込む／読み出す際にスレーブノードを1つ選択する

最大 16 ビットのRx シフトレジスタ
最大 16 ビットのTx シフトレジスタ
クロック・ジェネレータ• 個別のスレーブ選択信号（GPIO ピンで制御）が必要

GPIO

MISO

MISO

MOSI

MOSI

SCK

SCK

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

SS

スレーブ AMISO

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

MOSI

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

GPIO• 複数のスレーブ･ノードは異なるクロック･フォーマットとデータ･フォーマットを使用できる

GPIO

SCK

マスタ

SS

スレーブ B

次のスレーブへ

SPI ネットワークに複数のスレーブが存在する場合、スター・トポロジがよく使用されます。マスタは一度に 1 つのスレーブ（スレーブ選択入力によって選択される）と通信します。このトポロ
ジでは、マスタから各スレーブノードに個別のスレーブ選択信号を供給する必要があります。これにより、マスタは専用GPIO ピンを使用して通信するスレーブを選択できます。複数のスレーブノードの設定が異なる場合、個別のスレーブ選択信号を使用しているので、SPI のデータフォーマットとクロックフォーマットをスレーブごとに適応させることができます。

9SPIノードの相互接続

10

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

MISO
SCK• データはすべてのノードを循環する• すべてのノードが共通のデータ･フォーマッ
トとクロック･フォーマットをサポートする必
要がある

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

SS

スレーブ A

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

MISO

MOSI

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

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

MOSI

MISO

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

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

SCKマスタSS

SS

スレーブ B

もう 1 つのマルチスレーブ設定は、サーキュラ・トポロジです。
このトポロジでは、1 つの閉じたシリアルチェーンですべてのノードの入力と出力が相互接続されます。通信は同時に発生するので、すべてのノードで 1 つの共通のスレーブ選択信号が使用されます。すべてのノードが同じデータフォーマットとクロックフォーマットの設定を使用する必要があります。スレーブ
SPI ノードがマイクロコントローラによって提供される場合、内部の送信シフトレジスタと受信シフトレジスタは通常は物理的に分離されるので、それらの間で転送されるデータはソフトウェアによって循環モードで処理する必要があります。その間、マスタノードは、データとデータの間にこれらの内部転送を補う十分な時間を確保する必要があります。

10

SPIノードの相互接続

11

マルチマスタ・トポロジのサポート• マルチマスタ：2つのノードがマスタ機能を持つ• ノードはデフォルトではスレーブ･モードである• ノードはそれ自体をアクティブ・マスタに切り替えてバスの制御を獲得し、通信セッションを開始する• スレーブ選択用のピンは、潜在的なバス競合を検出するための入力として使用される

MISO

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

MOSI

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

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

SCK

クロック・ジェネレータ

マスタ

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

クロック・ジェネレータGPIOSSSSGPIOマスタ• マスタ･ノードはスレーブ･モードに戻って通信セッションを終了する

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

11

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

12

完全にプログラム可能な柔軟なフォーマット
CPHA=0• データフレームのサイズ• 4～16ビット

CPOL=0SCK• ビットのシフト･オーダー• MSBファーストまたはLSBファースト• クロック設定（モード0～3）• アイドル時にローまたはハイの極性

CPHA=1

CPOL=0SCK
CPOL=1

CPOL=1

MOSI

MOSI

MISO

MISO

NSS

NSS• 奇数エッジまたは偶数エッジによるサンプリング

データフォーマットは、さまざまなパラメータを使用してセットアップします。ユーザはデータフレームのサイズとシフトレジスタの送信順を定義できます。クロックは、モトローラ SPI 仕様で定義されている 4 つの基本設定の 1 つに設定できます。2 つのビットの組み合わせによって、クロック信号の極性と位相を制御します。 位相制御ビットがクリアされると、データビットは奇数クロックエッジでサンプリングされ、偶数クロックエッジで次のビットからデータラインへのシフトが同期されます。 位相制
御ビットがセットされている場合はこの逆になります。 クロック
極性ビットは、クロック信号のアイドル状態およびどちらのクロックエッジをデータのサンプリングまたはシフトに使用するかを定義します。

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

13

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

TxE イベントでのデータ･レジスタへの16 ビット書込みアクセス：

16 ビット閾値に基づく RxNE イベントでのデータ･レジスタからの 16ビット読出しアクセス：

通信速度が高速でデータフレームが短すぎる場合、特にクロック信号が連続的になり全二重モードが使用される場合は、正しいデータフローであることの確認が困難であることがあります。
スレーブノードは、マスタによって提供されるすべてのトランザクションのタイミングに適切に対応してデータオーバーラン／アンダーラン条件を防止する必要があるという、より重要な役割を担っています。データフレームサイズが 1 バイトに収まる場合、パッキングモードを使用できます。
その場合、FIFO レジスタへの 1 回のアクセスで複数のデータパターンを書込み／読出しできます。FIFO 閾値イベントの適切な設定と組み合わせることで、対応する必要があるイベントの数が減り、データフロー制御を向上できます。 さらに DMAを使用すると、システムにかかる全体的負荷が大幅に軽減されます。スライドの図は、専用の FIFO レジスタへの 1 回の16 ビットアクセスで 2 つの短い 8 ビットデータフレームを書込み／読出しできる方法の原理を示しています。この読出し／書込みデータアクセスは、1 つのイベントが発生するだけで実行されます。
13

32ビットのRx FIFOとTx FIFO

14

閾値とデータ･アクセスの間のバランス
Rx&Tx FIFO 占有• 送信用と受信用の2つの個別の32ビットFIFO

16ビット

8ビット

16ビット

8ビット

• 8ビット／16ビットの読出し／書込
みアクセスとFIFOの閾値と占有
フラグ• 8ビット･アクセスではTx FIFOとRx FIFOの機能が異なる
FIFOアクセス

FIFO閾値

最大3x 8ビット（TxFIFOの場合）、4x 8ビット（RxFIFOの場合）

SPI ペリフェラルは、データフローを処理する 2 つの 32 ビット
FIFO を備えています。 FIFO には、8 ビットまたは 16 ビットのどちらかのデータアクセス命令を使用してアクセスできます。受信時に FIFO から生成されるイベントは、閾値設定に応じて変化します。スライドの表に、設定に応じたイベントフラグの動作の変化の概要を示します。データの整合性が失われないように、FIFO アクセスと閾値設定のバランスを維持することが重要です。送信時の FIFO 占有率は、データアクセスに応じて変化します。
システムは送信 FIFO への次のアクセスを決して予測できないので、FIFO の後半部分に書き込むために 8 ビット書込みアクセスが適用された場合、FIFO 機能はフルに使用されません。
この場合、Tx FIFO はフルに占有されていませんが、結果として TxE フラグはクリアされます。図の星印を確認してください。

14

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

15

DMAとCRCの管理を強化• DMAコントローラによる自動処理の対象 MOSI

データ 1

データ 2

...

データ' 1

データ' 2...

• データ・トランザクション・イベントの正確な数• トランザクションの終了を処理する方法• CRC 制御• FIFO 閾値制御• 柔軟なCRC制御

データ n

CRC[1..n]CRCNXT=1
MISO

データ' n

CRC'[1..n]SCKSS• 受信フローと送信フローで個別の計算器を使用• トランザクションの終了時にCRCパターンを送信：• トランスミッタはCRC結果をデータ･シフト･レジスタに直接ロード• レシーバはCRCをRx FIFOに格納し、その値を内部計算値と比較• プログラム可能なCRC多項式（奇数値のみ）とCRC長（8ビットまたは16ビットのCRCフレーム）

プロトコルレベルの通信中、DMA コントローラを使用して自動的にデータフローイベント、CRC 計算、および FIFO 閾値の更新を処理できます。閾値制御の場合、フレーム数がパケットサイズと揃っていないとき、最後の奇数データフレームはパックされたモードで正しく適用されます。
CRC が有効な場合、トランスミッタとレシーバには個別のCRC 計算器を使用します。 CRC 計算結果は、DMA コント
ローラによって、またはソフトウェア制御によって、転送のたびにその最後に自動的に付加されます。
トランスミッタの CRC 計算器レジスタの結果はシフトレジスタに直接ロードされ、受信された CRC 値は FIFO に格納され、レシーバの CRC 結果と比較されます。計算に使用される
CRC 多項式はプログラム可能であり、CRC パターンの長さは8 ビットまたは 16 ビットのどちらかのフレームに設定できます。

15

標準NSSモード

16

スレーブ選択信号（NSS）の管理を強化• NSS入力• ハードウェアまたはソフトウェアにより管理• スレーブ･モード：アクティブ・スレーブを選択• マスタ･モード：マスタ間の競合• NSS出力• マスタモード

SSM ビット

スレーブ

マスタ

非アクティブ
競合

SSI ビットアクティブ

NSS 入力NSS 外部出力制御

SSOE ビット

NSS 出力マスタ･モードおよび HW 管理のみ

• アクティブ・スレーブを選択• 特定のモード

一般的に、マスタノードが通信するスレーブノードを選択する場
合にスレーブ選択信号を使用します。
マルチマスタ・トポロジとマルチスレーブ・トポロジでは、この信号の実装は必須です。シングルマスタ-スレーブペアでは必須
ではありませんが、トポロジに関係なく、データフローの同期に役立つ可能性があります。
スレーブ選択信号は、入力または出力として動作できます。
NSS 入力は、SSM 制御ビットと SSI 制御ビットに応じて、ハードウェアまたはソフトウェアにより管理できます。
スレーブ入力としては、それ自体を通信のアクティブ・スレーブとして特定するために使用されます。マスタ入力としては、マルチマスタ・システムでマスタ間の競合の可能性を通知します。
NSS は、マスタモードでは出力としてのみ機能し、標準または特定の制御モードでハードウェアにより管理されます。ソフト
ウェア制御下で GPIO を使用して追加のスレーブ選択出力を提供できます。

16

特定のNSSモード

17

スレーブ選択信号（NSS）をハードウェアで制御する拡張モード
マスタ連続転送• NSSパルスモード

サンプリング サンプリング サンプリング

サンプリング サンプリング サンプリング

4 ～ 16 ビット

4 ～ 16 ビット

NSS
出力• マスタのサポートのみ

SCK
出力• モトローラ･モード（CPHA 0のみ）

MOSI
出力
MISO
入力

• TIモード• マスタとスレーブのサポート• 固定されたCPOLとCPHAの設定• HiZスレーブのMISO自動制御

スレーブ選択信号が特定のハードウェア制御下にある場合、いくつかの拡張モードがあります。
スレーブ選択信号はパルスモードで動作できます。このモードでは、マスタはデータフレーム間の信号でパルスを生成します。
• データ・トランザクションが連続する場合、データフレーム間で 1SCK 周期の間、NSS はハイになります。
• クロックの極性と位相は固定され、CPOL 設定は無視されます。
CPHA はクリアされた状態を維持する必要があります。
もう 1 つの拡張モードは TI モードです。このモードでは、マスタがデータの最後のビットで供給する SS パルスにより、データフローが同期されます。
• クロックの極性と位相の設定は固定されます。スレーブデータ出力は、バストラフィックの停止時および特定の設定可能なタイムアウトの発生時に、自動的にハイインピーダンスに切り替えられます。
• TI モードで CRC を適用する場合、CPOL=0 CPHA=1 の設定を維持する必要があります。
NSS パルスモードでは CRC を適用できません。
17

割込みとDMA
割込みイベントフラグ

18

説明

送信 FIFOレディ

TXE

TxFIFOが新しいデータを受け入れる準備ができたときにセットされる

受信 FIFOレディ

RXNE

RxFIFOでデータを受信するとセットされる

マスタモード・フォールト

MODE

マルチマスタ･バス設定でバス競合が検出されたときにセットされる

データ･オーバーラン・エラー

OVR

RxFIFOがフルなので、レシーバが次のデータ･フローを受け入れることができない

TIフレーム･フォーマット・
エラー

FRE

NSS信号がデータフォーマットに対応していない

CRCプロトコル・エラー

CRCERR

転送中に内容の破壊が生じた場合、データとCRCの転送の最後にCRCERRフラグがセットされる• DMAアクセスは、TXE FIFOイベントとRXNE FIFOイベントに基づいて内部的にリクエストされる• DMAは、自動的にCRCとデータ閾値の制御を処理する

スライドの表に、SPI 割込みイベントの概要を示します。データフローを処理するための FIFO イベントとエラー検出イベントがあります。DMA リクエストは、FIFO 閾値イベントにより内部的にトリガされます。

18低消費電力モードモード

19

説明RUN

アクティブ

SLEEP

アクティブ。ペリフェラル割込みによって、デバイスはSLEEPモードを終了する。

低消費電力RUN

アクティブ

低消費電力SLEEP

アクティブ。ペリフェラル割込みによって、デバイスは低消費電力SLEEPモードを終了する。

STOP 0停止。ペリフェラルレジスタの内容は保持される。

STOP 1停止。ペリフェラルレジスタの内容は保持される。

STANDBY

パワーダウン。ペリフェラルは、STANDBYモードを終了した後に再初期化する必要がある。

SHUTDOWN

パワーダウン。ペリフェラルは、STANDBYモードを終了した後に再初期化する必要がある。

スライドの表に、特定の低消費電力モードでの SPI の状態を示します。デバイスは、STOP、STANDBY、またはSHUTDOWN モードでは通信を実行できません。ペリフェラルが STOP モードまたはパワーダウンモードに移行する前にすべての SPI トラフィックが確実に完了していることが重要です。

19

性能20

• 理論的な通信速度限界はPCLK/2• 実際の通信速度は以下に依存：• SPIバスの容量負荷（接続されているデバイスの数、入力容量、配線の長さ）• GPIO内部ボンディング、それらの設定、VDDレベル、および周辺温度• SPIクロック信号のデューティ比• データに提供される／必要なセットアップ時間とホールド時間• 連続フローを制御するソフトウェア機能• 実際の性能• マスタモードでの最大速度：32MHz• スレーブモードでの最大速度：32MHzSPI の性能は、適用されるクロックに主に依存します。クロック周波数は、必要な通信周波数の少なくとも 2 倍である必要があります。 実際の通信速度は、アプリケーション要因によって低下する可能性があります。
ユーザは、ノード数、接続距離、入力容量などの SPI バスの負荷や GPIO 設定を考慮する必要があります。 高速 GPIO
モードを、データ信号とクロック信号に適用する必要があります。
電源電圧が低く、極端な周辺温度の場合、エッジが遅くなります。 場合によっては、比較的遅いデータホールド時間またはデータセットアップ時間の要件をノード間で守る必要があります。
頻繁な例外処理のために、アプリケーションが常に高速データフローを管理できるわけではありません。
DMA 容量に加えて、システムで使用する DMA チャネル数、頻繁な割込み処理、または割込み不可命令の実行も考慮する必要があります。

20

アプリケーション例

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

SPI は、複雑な通信プロトコルを必要としない、単純なデータ転送が必要な幅広いアプリケーションで使用できます。

21

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

22• 一般的なヒント：• SPI （またはそのクロック）を無効にする前に、BSYおよびFIFO 有ステータスをチェックする• 特定の制御（CRC、RxFIFO閾値、Rx Onlyモードの終了）が必要な場合は DMAを使用する• データが1バイトに収まる場合はパックモードを使用する• NSSのハードウェア管理には利点がある• 特定の側面について：

CRCNXT=1
RXONLY=0
FRXTH=1

CPHA=0

ダミー／奇数／CRC フレーム

制御ウィンドウ• CRC情報は受信FIFOにロードされるので、ユーザが一掃する必要がある• マスタ･モードとスレーブ･モードでは、連続データ・トランザクション中のBSY動作は異なる• 送信動作中は受信フラグとオーバーラン･フラグはセットされる（これらは無視する必要がある）• CRC適用時のDMAのヒント• 全二重モードでのDMAトランザクションのデータサイズ：• 送信時 = 送信データ数（CRC長は含まない）• 受信時 = 受信データ数 + CRC長（Rx Onlyモード時 = 受信データ数）

一般的なヒント：
ユーザは、DMA トランザクションが完了した場合または送信 FIFO が空になった場合でも、バス上のトラフィックは進行中である可能性があることを認識する必要があります。
ユーザが、SPI を無効にする前または SPI を STOP モードに移行する前に、慎重にペリフェラルのステータスを確認し、提案されている手順に従う必要があるのは、これが理由です。
CRC 処理が必要な固有の検証を行う場合、または受信 FIFO 閾値を検証する場合（パケットモードでデータ数の整合がとれていない場合）、または受信専用モードで正確な量のデータを受信する場合、DMA を使用します。これらの種類の検証は、フレームトランザクション中の特定のタイムウィンドウ内で排他的に適用する必要があります。これにより、後続のトランザクションがすべて適切に処理されます。
DMA とデータパッキングは、システム全体の性能を高めることができます。これらの機能は、データフレームが短く、高速の連続通信フローが必要な場合に役立つ可能性があります。
NSS のハードウェア管理は、単一マスタ／単一スレーブの組み合わせでは特に必要ありませんが、マルチマスタ・システムではデータフローの同期および競合の防止に役立つ可能性があります。
•
SPI ネットワークの設計時は、さらにいくつかの特定の側面を考慮する必要があります。
•
レシーバは常に CRC 情報を受信 FIFO にロードします。ユーザは、バッファでこのことを考慮して一掃する必要があります。
•ビジーフラグは、データ処理には使用せず、進行中のトラフィックを確認するために使用する必要があります。マスタの連続データ・トランザクション中は、データフレーム間で BSY ビットはセットされたままになります。スレーブモードでは、通信が連続的かどうかに関係なく、BSY ビットは常にデータフレーム間で少なくとも 1 SPI クロックサイクルだけローになります。
•
ノードがデータのみを送信する場合、受信フローはアクティブなままです。この場合、ユーザは、すべての受信イベントと関連するオーバーランイベントを無視する必要があります。
•CRC を含む場合に DMA コントローラで処理されるデータサイズは、モードによって異なります。
CRC を使用する場合、全二重モードと受信専用モードでは、送信時と受信時で異なるデータサイズを設定する必要があります。

22

SPI関連ペリフェラル

23• 次のペリフェラルを参照：• RCC （SPIクロックイネーブル、SLEEPモードでのクロック制御、リセット）• 割込み（FIFOイベントとエラーイベント）• GPIO （速度制御、GPIO設定）• DMASPI に直接関連するこれらのトレーニングを参照してください。
ユーザは、SPI の動作に影響を及ぼす可能性があるすべてのペリフェラルについて理解を深める必要があります。

23

STM32G0インスタンス機能
SPI の機能

SPI1

SPI2

ハードウェアCRC計算

可能

可能

Rx & Tx FIFO

可能

可能

NSSパルスモード

可能

可能

TIモード

可能

可能

24

STM32G0 マイクロコントローラには 2 つの SPI インスタンスがあり、それぞれがこのプレゼンテーションで説明されているすべての機能をサポートします。

24

参照

25

• 詳細については、次のリソースを参照：• AN4286 - SPI protocol used in the STM32 bootloader• AN3364 - Migration and compatibility guidelines for STM32 microcontroller applications• Web （接続例、使用可能な監視ツール）

専用の SPI に関するアプリケーションノードがいくつか公開されています。一般的な SPI 接続およびインタフェースの問題については、多くの Web ページで取り上げられ、さまざまな SPIバス監視ツールも公開されています。 多くのデジタルオシロス
コープは、SPI バス上のデータ信号とクロック信号の直接読出しと分析をサポートしています。

25