このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

クラス SPI -- コントローラ駆動のシリアルプロトコル

SPI はコントローラにより駆動するシリアルプロトコルです。物理レベルでは3つのライン、SCK, MOSI, MISO があります。

I2C の利用モデルを参照してください。SPI も非常に似ています。主な違いは、SPI バスを初期化するためのパラメータです:

from pyb import SPI
spi = SPI(1, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)

必要なパラメータはモードのみで、SPI.CONTROLLER または SPI.PERIPHERAL を指定します。polarity は 0 または 1 で、アイドル状態のクロックラインのレベルを表します。phaseは 0 または 1 で、データを最初のクロックエッジまたは2つ目のクロックエッジでサンプリングするかを表します。crc に None を指定した場合は CRC を使わないこととなり、値を指定した場合は CRC の多項式指定になります。

SPIの追加のメソッド:

data = spi.send_recv(b'1234')        # send 4 bytes and receive 4 bytes
buf = bytearray(4)
spi.send_recv(b'1234', buf)          # send 4 bytes and receive 4 into buf
spi.send_recv(buf, buf)              # send/recv 4 bytes from/to buf

コンストラクタ

class pyb.SPI(bus, ...)

指定バスの SPI オブジェクトを作成します。bus は 1 または 2、または 'X' または 'Y' で指定できます。追加のパラメータがない場合、SPI オブジェクトは作成されますが、初期化は行われません(前回のバスの初期化設定があれば適用されます)。追加の引数が与えられた場合、バスが初期化されます。初期化のパラメータについては init を参照してください。

SPIバスの物理ピンは次のとおりです:

  • SPI(1) は X 位置となります: (NSS, SCK, MISO, MOSI) = (X5, X6, X7, X8) = (PA4, PA5, PA6, PA7)

  • SPI(2) は Y 位置となります: (NSS, SCK, MISO, MOSI) = (Y5, Y6, Y7, Y8) = (PB12, PB13, PB14, PB15)

現時点で、SPI ドライバーでは NSS ピンは使われておらず、他の目的で自由に使えます。

メソッド

SPI.deinit()

SPI バスをオフにします。

SPI.init(mode, baudrate=328125, *, prescaler=-1, polarity=1, phase=0, bits=8, firstbit=SPI.MSB, ti=False, crc=None)

与えたパラメータで SPI バスを初期化します。

  • modeSPI.CONTROLLER または SPI.PERIPHERAL のいずれかである必要があります。

  • baudrate は SCK クロックレートです(コントローラの場合のみ有効)。

  • prescaler は APB バス周波数から SCK を導出するために使用するプリスケーラです。 prescaler の指定は baudrate 指定をオーバーライドします。

  • polarity は 0 か 1 であり、アイドリング状態のときのクロックのレベルを指定します。

  • phase は 0 か 1 であり、それぞれ、1番目または2番目のクロックエッジでのデータ読取りを指定します。

  • bits は 8 または 16 で、各転送ワードのビット数を指定します。

  • firstbit は SPI.MSB か SPI.LSB です。

  • ti が Trueの場合、Texas Instruments の信号規約を示します。そうでない場合は、モトローラの信号規約を示します。

  • crc に None を指定した場合は CRC を使わないこととなり、値を指定した場合は CRC の多項式指定になります。

SPI クロック周波数は常に要求したボーレートになるとは限りません。ハードウェアは、APBバス周波数(pyb.freq() を参照)をプリスケーラで除算した値のボーレートのみをサポートします。プリスケーラは 2, 4, 8, 16, 32, 64, 128, 256 でなければなりません。SPI(1) は AHB2 にあり、SPI(2)は AHB1 にあります。SPI クロック周波数を正確に制御するには baudrate の代わりに prescaler を指定してください。

SPI オブジェクトをプリントすると、計算されたボーレートと選択したプリスケーラが表示されます。

SPI.recv(recv, *, timeout=5000)

バス上のデータを受信します:

  • recv には整数または可変バッファを指定します。整数の場合は受信するバイト数の指定になります。可変バッファの場合、そのバッファが受信したバイトで埋められます

  • timeout は受信を待機するタイムアウト時間をミリ秒単位で指定します。

戻り値: パラメータ recv が整数であれば、受信したバイト数を格納した新しいバッファを返します。さもなければ recv に渡したのと同じバッファを返します。

SPI.send(send, *, timeout=5000)

バスにデータを送信します:

  • send は送信するデータです(送信する整数か、バッファオブジェクト)。

  • timeout は送信を待機するタイムアウト時間をミリ秒単位で指定します。

Return value: None.

SPI.send_recv(send, recv=None, *, timeout=5000)

バス上で同時にデータを送受信します:

  • send は送信するデータです(送信する整数か、バッファオブジェクト)。

  • recv は受信したバイトで埋められる可変バッファです。recvsend と同じものを使えますし、省略することもできます。省略した場合、新しいバッファが作成されます。

  • timeout は受信を待機するタイムアウト時間をミリ秒単位で指定します。

戻り値: 受信したバイトで埋められたバッファ。

定数

SPI.CONTROLLER
SPI.PERIPHERAL

SPI バスをコントローラモードまたはペリフェラルモードに初期化するために使います

SPI.LSB
SPI.MSB

先頭ビットを最下位ビット(LSB)または最上位ビット(MSB)に設定します。