これらの関数は新しいプロジェクトでは利用されるべきではない。SPISettingsとSPI.beginTransaction()をSPIパラメータの設定に利用する。
Arduino DueのSAM3XはSPIの拡張機能を持っている。これらの拡張機能をAVRベースのボードでも利用することができる。
拡張APIは4番ピンと10番ピンと52番ピンをCSとして利用することができる。
利用
SPIデバイスのCSピンとして利用するためには、ピンを指定しなければならない。
Dueは、SPIバスを共有する複数のデバイス間でCSを自動で取り扱うことができる。それぞれのデバイスはスピードやデータモードなど異なる属性を持つことができる。
複数のデバイスを異なるCSピンで利用するには、これらのピンをsetup()で宣言しなければならない。以下の例では、SPI MISOとMOSI、SCKピンを共有する2つのデバイスを利用する。一つのデバイスのCSは4番ピンに接続されており、もう一方は10番ピンに接続されている。
|
|
一度ピンがCSピンであると宣言されると、デフォルトの動作も変更することができる。例えば、デバイスが異なるクロックスピードで動作する場合は、setup()は以下のようになる。
|
|
4番ピンに接続されたデバイスに1バイトのデータを転送する例を以下に示す。
|
|
上記の例では、4番ピンのSPIデバイスに"0xFF"が送信され、MISOから受信したデータが、変数responseに格納される。チップ選択はSPIコントローラによって自動的に取り扱われ、転送コマンドは以下のことを意味する。
- 4番ピンをLOWにすることでデバイスを選択する。
- SPIバスに0xFFを送信し、受信したデータを返す。
- 4番ピンをHIGHにすることでデバイスを開放する。
データ転送後にSPIデバイスを開放しないように転送命令に指示することで1回のトランザクションで1バイト以上のデータを転送することもできる。
|
|
SPI_CONTINUEというパラメータにより、複数の転送の間にチップ選択が継続することを保証する。最後の転送では、SPI_CONTINUEは指定しない。
拡張機能を利用するための正しい文法は、SPI.setClockDivider()、SPI.setDataMode()、SPI.transfer()、SPI.setBitOrder()のリファレンスを参照すること。
一度SPI.begin()が呼ばれると、宣言されたピンはGPIOとしては利用できなくなる。
参照
オリジナルのページ
https://www.arduino.cc/en/Reference/DueExtendedSPI
最終更新日
January 4, 2024