このライブラリを使用すると、ArduinoをマスターデバイスとしてSPIデバイスと通信できます。
このライブラリを使用するには#include <SPI.h>
シリアルペリフェラルインタフェース(SPI)の簡単な紹介
シリアルペリフェラルインタフェース(SPI)は、マイクロコントローラが短距離で一つ以上の周辺機器と迅速に通信するために使用する同期シリアルデータプロトコルである。 また、二つのマイクロコントローラ間の通信にも使用できます。,
SPI接続では、周辺機器を制御するマスタデバイス(通常はマイクロコントローラ)が常に一つあります。, MISO(Master In Slave Out)-マスターにデータを送信するためのスレーブライン、
およびすべてのデバイスに固有のラインがあります。
- SS(Slave Select)-マスターにデータを送信するためのスレーブライン、
- SS(Slave Select)-マスターにデータを送信するためのスレーブライン、
- SS(Slave Select)マスターが特定のデバイスを有効または無効にするために使用できる各デバイスのpin。,
- デバイスが使用できる最大SPI速度は何ですか? これは、SPISettingsの最初のパラメーターによって制御されます。 15MHzのチップを使用している場合は、15000000を使用してください。 Arduinoは、SPISettingsで使用する数と同じかそれ以下の最高速度を自動的に使用します。,li>
- データは最上位ビット(MSB)または最下位ビット(LSB)で最初にシフトされますか?
- データクロックはハイまたはローのときにアイドル状態ですか? てい試料の立ち上がりまたは立ち下がりエッジのクロックパルス? これらのモードは、SPISettingsの第三のパラメータによって制御されます。
- 気圧センサー:SPIプロトコルを使用してセンサーから空気圧と温度を読み取ります。,
- デジタル-ポット制御:SPIプロトコルを使用してAD5206デジタル-ポテンショメータを制御します。
デバイスのスレーブ選択ピンがロー-レベルの場合、マスターと通信します。 それが高いとき、それはマスターを無視します。 これにより、同じMISO、MOSI、およびCLKラインを共有する複数のSPIデバイスを持つことができます。
新しいSPIデバイスのコードを書くには、いくつかのことに注意する必要があります。
これは、MSBFIRSTまたはLSBFIRSTのいずれかの第二のSPISettingsパラメーターによって制御されます。 最SPIチップを使用MSB初のデータです。
SPI標準は緩く、各デバイスはそれを少し異なって実装します。 この特別の注意を払い、デバイスのデータシートがコードです。,
一般的に言えば、伝送の四つのモードがあります。 これらのモードは、データクロック信号の立ち上がりエッジまたは立ち下がりエッジでデータを出入りするかどうか(クロック位相と呼ばれる)、およびハイ,se according to this table:
Mode | Clock Polarity (CPOL) | Clock Phase (CPHA) | Output Edge | Data Capture |
SPI_MODE0 | 0 | 0 | Falling | Rising |
SPI_MODE1 | 0 | 1 | Rising | Falling |
SPI_MODE2 | 1 | 0 | Rising | Falling |
SPI_MODE3 | 1 | 1 | Falling | Rising |
Once you have your SPI parameters, use SPI.,BEGINTRANSACTION()SPIポートの使用を開始します。 SPIポートは、すべての設定で構成されます。 SPISettingsを使用する最も簡単で効率的な方法は、SPI内で直接使用することです。ここでは、次のように説明します。たとえば、
SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));
他のライブラリが割り込みからSPIを使用する場合、SPI.endTransaction()
を呼び出すまでSPIにアクセスできなくなります。 SPI設定はトランザクションの開始時に適用され、SPI.endTransaction()
はSPI設定を変更しません。, あなたまたはいくつかのライブラリがbeginTransactionをもう一度呼び出さない限り、設定は維持されます。 あなたのプログラムがSPIを使用する他のライブラリと一緒に使用されている場合、最高の互換性を得るために、SPI.endTransaction()
を呼び出すまでの間の時間を最小限に抑えるようにしてください。
ほとんどのSPIデバイスでは、SPI.beginTransaction()
の後に、スレーブselectピンをLOWに書き込み、SPI.transfer()
データを転送するために何度でも呼び出し、SSピンをHIGHに書き込み、最後にSPI.endTransaction()
を呼び出します。
SPIの詳細については、WIKIPEDIAのSPIに関するページを参照してください。,
接続
次の表に、さまざまなArduinoボードでSPIラインが分割されているピンが表示されます。
MISO、MOSI、およびSCKはICSPヘッダー上の一貫した物理的位置にあることに注意してください。
AVRベースのボードのSlave Select(SS)ピンについての注意
すべてのAVRベースのボードにはSSピンがあり、外部マスターによって制御されるスレーブとして, このライブラリはマスターモードのみをサポートしているため、このピンは常に出力として設定する必要があります。
ただし、デバイスのスレーブ選択(SS)として任意のピンを使用することは可能です。 たとえば、Arduino Ethernet shieldは、ピン4を使用してオンボードSDカードへのSPI接続を制御し、ピン10を使用してイーサネットコントローラへの接続を制御します。
例
最終リビジョン2019/12/24by SM