SPIバス解析

SPI (Serial Peripheral Interface) は、モトローラ社が導入した同期シリアル インターフェイス技術であり、シリアル周辺機器インターフェイスを介して、外部デバイスと全二重同期シリアル通信を実行できます。その機能は 51 シリアル インターフェイスと同様です。モード 0 、MISO、MOSI、SCK、CSの4つのピンがあります。

基本的な考え方

標準の SPI バス インターフェイスは 4 本の通信線を持ち、1 つのバス上に複数の SPI スレーブ デバイス (1 つのマスタと複数のスレーブ) も搭載される全二重同期通信バスです。

MISO (マスター入力スレーブ出力) : マスターデバイスはスレーブデバイスの出力を入力し、マスターデバイスはスレーブデバイスからデータを読み取り、一部のデバイスは SDI (シリアルデータ入力を意味します) と呼ばれます; MOSI (マスター出力スレーブ入力
) :マスターデバイス 出力 スレーブデバイス入力、マスターデバイスはスレーブデバイスにデータを送信、別名はSDO、シリアルデータ出力を意味します; SCK
(シリアルクロック) : マスターデバイスかスレーブデバイスかに関係なく、すべてのIICと同じですデータ送信はこのライン上のクロックと同期しているため、SPI と IIC は両方とも同期シリアル インターフェイスです。SS
(スレーブ選択) : IIC はアドレス指定を通じてバス上の指定されたデバイスを見つけることができ、SPI は SS ラインを使用してデバイスを有効にします操作する必要があるデバイスが多数ある場合は、複数の IO ポートやデータ セレクター、デコーダーなどを使用することも可能です。一部のデバイスは CS とも呼ばれます。

SPIインターフェースをサポートするデバイスには、EEPROM、FLASH、RTC、ADコンバータなどが含まれます。現在、多くのデバイスが SPI の亜種となっており、3 線式 SPI (MISO、MOSI 多重化) は半二重同期シリアル通信です。

ハードウェア配線時に、すべての SPI デバイスの SCK、MOSI、および MISO が相互に接続され、ホストは複数の SS 制御線を引き出し、それぞれが各スレーブの SS ピンに接続されます。ピン構成に関しては、出力ピンはプッシュプル出力として構成されている場合、入力ピンはフローティングまたはプルアップ入力として構成されています。配線方法は下図を参照してください。
ここに画像の説明を挿入

SPIバス通信ルール

SPIデータ転送

データ送信中、マスターデバイスとスレーブデバイスのデータシフトレジスタは同時に動作します。ホスト シフト レジスタの最上位ビットはスレーブ シフト レジスタの最下位ビットに送信され、スレーブ シフト レジスタの最上位ビットもホスト シフト レジスタの最下位ビットに送信され、8 回のデータ送信後、スレーブ シフト レジスタはバイト マスタのシフトレジスタにデータが送られ、マスタの1バイトのデータがスレーブのシフトレジスタにも送られ、双方のデータが同時に交換されます。したがって、SPI トランシーバーは同期的に実行され、IIC トランシーバーは非同期的に実行されます。
SPI の送受信は同期ですが、ホストのみが送受信を行う必要がある場合はどうなるでしょうか?
マスターが受信のみを必要とする場合は、スレーブが読み取る必要のないデータをマスターのシフト レジスタ (通常は 0X00 または 0XFF) に置き、マスターが送信のみを必要とする場合は、データをスレーブによってシフトされたものは読み取れません。
ここに画像の説明を挿入
上の図に示すように、マスターとスレーブはデータを交換したいと考えています。1 クロック サイクルで、クロックの最初のエッジが発生すると、マスターとスレーブの両方が最上位ビットのデータをデータ ライン (MOSI、MISO) に送信します。 ) 、上図に対応して、マスターは MOSI に 1 を置き、スレーブは MISO に 0 を置きます。クロックの 2 番目のエッジが発生すると、マスターとスレーブはデータ ライン上のデータをシフトの最下位ビットまで読み取ります。登録。1ビットの送信が完了すると、マスターのシフトレジスタの内容は0101010、スレーブのシフトレジスタのデータは10101011になります。これを8回繰り返すと1バイトの送信が完了します。
SPIの伝送方式は、簡単に言うとデータが上位から順に送られ、1クロックサイクルのうち、最初のクロックエッジで信号線にデータを出力し、2番目のクロックエッジでデータをサンプリングして信号線に送信します。シフトレジスタの最下位ビット。

スタートビットとストップビット

開始条件:SSがハイレベルからローレベルに切り替わる
終了条件:SSがローレベルからハイレベルに切り替わる
ここに画像の説明を挿入
図のように左側がスタート信号、右側がストップ信号です。
IIC とは異なり、SPI はスレーブ デバイスを選択します。つまり、データ出力が開始されます。SPI のチップ選択ラインは SS です。SS は Low レベルでアクティブです。つまり、Low の場合、マスターがデバイスを選択することを意味します。ハイの場合、スレーブは選択されません。

クロック信号の位相と極性

ハードウェア SPI インターフェイスの場合、ホスト側で関連するレジスタを設定する必要があります。重要なビットは 2 つあり、コンフィグレーションが異なると通信モードも異なります。
CPOL (クロック極性): クロック極性選択ビット (クロックはハイまたはローレベルでアイドル状態)。
CPOL=0 は、アイドル時にクロックが Low (SCK=0) であることを意味し、アクティブ状態がクロック High (SCK=1) であることを意味します CPOL=1、つまりアイドル時にクロックが High (SCK=0) であることを意味し
ます=1、アクティブ状態はクロック Low レベル (SCK=0)

CPHA(Clock Phase): クロック位相選択ビット (データは最初または 2 番目のエッジでサンプリング (読み取り) されます)。
CPHA=0、データ サンプリングが最初のエッジ (奇数エッジ) で行われ、データ送信が 2 番目のエッジ (偶数エッジ
) で行われることを意味します。 CPHA=1、データ サンプリングが 2 番目のエッジ (偶数エッジ) で行われ、データ送信が 2 番目のエッジ (偶数エッジ) で行われることを意味します。最初のエッジ エッジ (奇数エッジ)

異なるスレーブ デバイスは工場出荷時に特定のモードに設定されている場合がありますが、これは変更できません。両方が同じモードで動作する必要があるため、マスター デバイスは SPI モードを設定し、CPOL および CPHA を通じてマスター デバイスを制御する必要があります。通信モード。

モード0 (CPOL=0、CPHA=0)

CPOL=0: アイドル状態では、SCK はローレベルです。
CPHA=0: SCK の最初のエッジがデータをシフトインし、2 番目のエッジがデータをシフトアウトします。
このモードでは、奇数番目のエッジがサンプリングされ、偶数番目のエッジがサンプリングされます。 -番号のエッジが出力されます
ここに画像の説明を挿入
上図に示すように、モード 0 のタイミング図です。このモードではクロック信号の最初のエッジがサンプリングされるため、送信するデータは SS 立ち下がりエッジ (スタート信号) の直後にデータ ライン (MOSI、MISO) に出力される必要があります。スレーブは信号をサンプリングし、2 番目のクロック エッジ (偶数エッジ) に達すると 2 番目のデータをデータ ラインに出力し続け、このプロセスを繰り返すことで 1 バイトまたは複数バイトの送信を実現します。
図からわかるように、SS の立ち下がりエッジの後、MISO と MOSI はすぐに変化し、テーブル名にはデータラインにデータが出力されています。SCK が立ち上がると、マスターとスレーブはデータをサンプリングします。このとき、信号はデータライン上のデータは安定した状態を維持する必要があり、この方法によってのみデータの有効性が保証されます。次のエッジが発生すると、新しいデータがデータ ラインに出力され続けます。

モード 1 (CPOL=0、CPHA=1)

CPOL=0: アイドル状態では、SCK はローレベルです。CPHA 2 番目のエッジでデータがシフトインされます
=1: SCK の最初のエッジでデータがシフトアウトされ、

ここに画像の説明を挿入

モード 2 (CPOL=1、CPHA=0)

CPOL=1: アイドル状態では、SCK はハイレベルです
CPHA=0: SCK の最初のエッジがデータをシフトインし、2 番目のエッジがデータをシフトアウトします
このモードでは、奇数番号のエッジがサンプリングされ、偶数番号のエッジがサンプリングされますこの
ここに画像の説明を挿入
モードはモード 0 と似ていますが、アイドル時に SCK のレベルが高く、このモードはモード 0 の SCK を反転することで得られ、出力とサンプリング原理は同じです。モード0の。

モード 3 (CPOL=1、CPHA=1)

CPOL=1: アイドル状態では、SCK はハイレベルです。
CPHA=1: SCK の最初のエッジはデータをシフトアウトし、2 番目のエッジはデータ
をシフトインします。
ここに画像の説明を挿入

データビットの有効性

データはクロック ラインの立ち上がりエッジまたは立ち下がりエッジで収集されます。データ ライン (MISO、MOSI) 信号は収集中に安定した状態を維持する必要があり、それ以外の時間には変化する可能性があります。

STM32のSPI

STM32 はハードウェア SPI トランシーバ回路を統合しており、クロック生成、データ トランシーバなどの機能をハードウェアで自動的に実行することができ、CPU の負担を軽減します。
ここに画像の説明を挿入
上の図は STM32 の SPI 構造ブロック図で、1 つはデータの送受信、2 つはクロック出力、3 つ目は制御部分の 3 つの部分に分けることができます。
データの送受信はブロック図の左上部分で、ポートはMISOとMOSIで、図のデータ矢印の方向からMISOデータがシフトインされると、これは先ほどの SPI と同じで、上位が先になるのはその逆で、STM32 の SPI が上位 1 位と下位 1 位をサポートしていることがわかります。上位から先にしたい場合は、LSBFIRST 制御ビットで対応する操作を実行する必要があります。MOSI と MISO の間にはマスター/スレーブ モードの選択に使用されるクロスオーバー ラインがあり、STM32 がマスターの場合は MISO と MOSI を交換する必要はありませんが、STM32 がスレーブの場合はこれらを交換する必要があります2つのデータライン。

ハードウェアSPI転送データ

次の図は、STM32 ハードウェア SPI の不連続伝送の伝送を示しています。不連続伝送は、伝送速度が高くない場所で使用されます。ほとんどのシナリオでは、不連続伝送で十分であるため、この記事では不連続伝送のみを紹介します。
ここに画像の説明を挿入
上図では、SPI はモード 3 に設定されており、データ送信は下位優先です (上位優先の原理は同じです)。SCK の最初のエッジである TXE 立ち下がりエッジの前に
、スタート信号が送信されるとき (SS 立ち下がりエッジは図には示されていません)、送信バッファは空ではなく、送信バッファにデータが書き込まれていることを示します。立ち下がりエッジの後、送信バッファの内容は 0XF1 になり、送信バッファのデータはデータ シフト レジスタに送信されます。 SCK の最初のエッジ、データ1を出力し、データ送信を開始します。TXE=1 送信データ バッファは空です。この時点では送信データ バッファは空ですが、新しいデータが入力されていない場合は、現在のデータ バイトが送信されるのを待ってから新しいデータを配置します。図より、データ 1 の b7 ビット送信が完了した後、次の SCK エッジより前に TXE の立ち下がりエッジが発生すると、最初のデータを送信するタイミングが繰り返されることがわかります。

ここに画像の説明を挿入

要約する

SPIバスはSCK、MISO、MOSI、SSの4本で構成され、全二重同期通信バスです。マスターとスレーブの両方にシリアル シフト レジスタがあり、マスターは自身のシリアル シフト レジスタを介してバイトを書き込み、転送を開始します。極性と位相に応じて 4 つの動作モードがあり、データ送信中、データ ラインは極性と位相の設定に従ってクロック ライン SCL の異なるエッジでデータを出力またはサンプリングします。

おすすめ

転載: blog.csdn.net/Tao_9/article/details/131022553