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

SPI は、コントローラによって駆動される同期シリアルプロトコルです。物理レベルでは、3 本の線(SCKMOSIMISO)に加えて、ペリフェラルごとのチップセレクト線を使用します。

使用方法は I2C と似ています。主な違いは、バスを初期化するときに渡されるパラメータです:

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

唯一の必須パラメータは modeSPI.CONTROLLER または SPI.PERIPHERAL)です。polaritySCK のアイドルレベル(0 または 1)です。phase は、データが最初(0)のクロックエッジでサンプリングされるか、2 番目(1)のクロックエッジでサンプリングされるかを選択します。crcNone(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)

P3

P2

P1

P0

SPI(4)(OpenMV Cam N6 のみ)

P15

P16

P17

P18

NSS はどちらのバスでも SPI ペリフェラルによって駆動されません。通常の GPIO チップセレクトとして自由に使用できます。

メソッド

deinit() None

SPI バスをオフにします。

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 バスを初期化します:

  • modeSPI.CONTROLLER または SPI.PERIPHERAL のいずれかでなければなりません。

  • baudrate は SCK クロックレートです(コントローラの場合にのみ意味があります)。

  • prescaler は、APB バス周波数から SCK を導出するために使用するプリスケーラです。prescaler を使用すると baudrate が上書きされます。

  • polarity は 0 または 1 で、アイドル時のクロック線が位置するレベルです。

  • phase は 0 または 1 で、それぞれ最初または 2 番目のクロックエッジでデータをサンプリングします。

  • bits は 8 または 16 で、転送される各ワードのビット数です。

  • firstbitSPI.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 に渡されたのと同じバッファです。

send(send: int | bytes | bytearray, *, timeout: int = 5000) None

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

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

  • timeout は、送信を待機するミリ秒単位のタイムアウトです。

send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes

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

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

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

  • timeout は、受信を待機するミリ秒単位のタイムアウトです。

戻り値: 受信したバイトを含むバッファです。

定数

CONTROLLER: int

SPI バスをマスター(コントローラ)として初期化します -- OpenMV Cam が SCKMOSI を駆動し、トランザクションを制御します。

PERIPHERAL: int

SPI バスをスレーブ(ペリフェラル)として初期化します -- OpenMV Cam は、リモートコントローラによって駆動されるクロックパルスに応答します。

MSB: int

firstbit に渡して、最上位ビットを最初に送受信します(最も一般的な順序)。

LSB: int

firstbit に渡して、最下位ビットを最初に送受信します。