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 に渡して、最下位ビットを最初に送受信します。