class SPI -- コントローラ駆動のシリアルプロトコル¶
SPI は、コントローラによって駆動される同期シリアルプロトコルです。物理レベルでは、3 本の線(SCK、MOSI、MISO)に加えて、ペリフェラルごとのチップセレクト線を使用します。
使用方法は I2C と似ています。主な違いは、バスを初期化するときに渡されるパラメータです:
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
唯一の必須パラメータは mode(SPI.CONTROLLER または SPI.PERIPHERAL)です。polarity は SCK のアイドルレベル(0 または 1)です。phase は、データが最初(0)のクロックエッジでサンプリングされるか、2 番目(1)のクロックエッジでサンプリングされるかを選択します。crc は None(CRC なし)または CRC 多項式のいずれかです。
データの転送:
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/receive 4 bytes through buf
コンストラクタ¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
指定された
bus(整数の SPI ペリフェラルインデックス、例:SPI2の場合は2)に SPI オブジェクトを構築します。追加のパラメータがない場合、オブジェクトは作成されますが初期化されません(以前のバス設定があればそれを保持します)。追加の引数が指定された場合、バスはそれらで初期化されます。利用可能なパラメータについてはinit()を参照してください。SPI(2)は、すべての STM32 OpenMV Cam で同じヘッダーピンに配線されています。OpenMV Cam N6 はさらにSPI(4)を公開しています:バス
NSS
SCK
MISO
MOSI
SPI(2)(すべての STM32 OpenMV Cam)P3P2P1P0SPI(4)(OpenMV Cam N6 のみ)P15P16P17P18NSSはどちらのバスでも SPI ペリフェラルによって駆動されません。通常の GPIO チップセレクトとして自由に使用できます。メソッド¶
- init(mode: int, baudrate: int = 328125, *, prescaler: int = -1, polarity: int = 1, phase: int = 0, bits: int = 8, firstbit: int = SPI.MSB, ti: bool = False, crc: int | None = None) None¶
指定されたパラメータで SPI バスを初期化します:
modeはSPI.CONTROLLERまたはSPI.PERIPHERALのいずれかでなければなりません。baudrateは SCK クロックレートです(コントローラの場合にのみ意味があります)。prescalerは、APB バス周波数から SCK を導出するために使用するプリスケーラです。prescalerを使用するとbaudrateが上書きされます。polarityは 0 または 1 で、アイドル時のクロック線が位置するレベルです。phaseは 0 または 1 で、それぞれ最初または 2 番目のクロックエッジでデータをサンプリングします。bitsは 8 または 16 で、転送される各ワードのビット数です。firstbitはSPI.MSBまたはSPI.LSBのいずれかです。tiを True にすると、Motorola ではなく Texas Instruments の信号規約を示します。crcは CRC なしの場合は None、または多項式指定子です。
SPI クロック周波数は
baudrateと正確に一致しない場合があります。ハードウェアは、親 APB バス周波数を 2 のべき乗のプリスケーラ(2, 4, 8, 16, 32, 64, 128または256)で割ったクロックのみをサポートします。ドライバは、要求されたbaudrateを超えない最大のものを選択します。SPI(2)は APB1 上にあります。クロックを正確に制御するには、baudrateの代わりにprescalerを直接設定してください。SPI オブジェクトを表示すると、計算されたボーレートと選択されたプリスケーラが表示されます。
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
バスでデータを受信します:
recvには、受信するバイト数である整数、または受信したバイトで埋められる可変バッファを指定できます。timeoutは、受信を待機するミリ秒単位のタイムアウトです。
戻り値:
recvが整数の場合は受信したバイトの新しいバッファ、それ以外の場合はrecvに渡されたのと同じバッファです。
定数¶