třída SPI – sériový protokol řízený řadičem

SPI je synchronní sériový protokol řízený řadičem. Na fyzické úrovni používá tři linky (SCK, MOSI, MISO) plus linku chip-select pro každou periferii.

Použití je podobné jako u I2C; hlavní rozdíl jsou parametry předávané při inicializaci sběrnice:

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

Jediný povinný parametr je mode (SPI.CONTROLLER nebo SPI.PERIPHERAL). polarity je klidová úroveň SCK (0 nebo 1). phase vybírá, zda se data vzorkují na první (0) nebo druhé (1) hraně hodin. crc je buď None (žádné CRC) nebo CRC polynom.

Přenos dat:

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

Konstruktory

class pyb.SPI(bus: int | str, *args, **kwargs)

Sestaví objekt SPI na dané bus (celočíselný index SPI periferie, např. 2 pro SPI2). Bez dalších parametrů je objekt vytvořen, ale není inicializován (zachovává předchozí nastavení sběrnice, pokud existuje); pokud jsou zadány další argumenty, sběrnice se s nimi inicializuje. Dostupné parametry viz init().

SPI(2) je zapojen na stejné piny konektoru na každé STM32 OpenMV Cam; OpenMV Cam N6 navíc zpřístupňuje SPI(4):

Sběrnice

NSS

SCK

MISO

MOSI

SPI(2) (všechny STM32 OpenMV Cam)

P3

P2

P1

P0

SPI(4) (pouze OpenMV Cam N6)

P15

P16

P17

P18

NSS není řízen SPI periferií na žádné ze sběrnic; lze jej volně použít jako běžný GPIO chip-select.

Metody

deinit() None

Vypne sběrnici 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

Inicializuje sběrnici SPI s danými parametry:

  • mode musí být buď SPI.CONTROLLER nebo SPI.PERIPHERAL.

  • baudrate je frekvence hodin SCK (smysluplné pouze pro řadič).

  • prescaler je dělič použitý pro odvození SCK z frekvence sběrnice APB; použití prescaler přepíše baudrate.

  • polarity může být 0 nebo 1 a je úrovní, na které spočívá klidová hodinová linka.

  • phase může být 0 nebo 1 pro vzorkování dat na první respektive druhé hraně hodin.

  • bits může být 8 nebo 16 a je počtem bitů v každém přenášeném slově.

  • firstbit může být SPI.MSB nebo SPI.LSB.

  • ti True označuje signálové konvence Texas Instruments, na rozdíl od Motorola.

  • crc může být None pro žádné CRC, nebo specifikátor polynomu.

Frekvence hodin SPI nemusí přesně odpovídat baudrate. Hardware podporuje pouze hodiny, které jsou frekvencí nadřazené sběrnice APB dělenou děličem o mocnině dvou (2, 4, 8, 16, 32, 64, 128 nebo 256); ovladač vybere nejvyšší, který nepřekročí požadovaný baudrate. SPI(2) je na APB1. Pro přesné řízení hodin nastavte přímo prescaler místo baudrate.

Výpis objektu SPI zobrazuje vypočítanou přenosovou rychlost a zvolený dělič.

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

Přijme data na sběrnici:

  • recv může být celé číslo, což je počet bajtů k přijetí, nebo měnitelný buffer, který bude naplněn přijatými bajty.

  • timeout je časový limit v milisekundách pro čekání na příjem.

Návratová hodnota: pokud je recv celé číslo, pak nový buffer přijatých bajtů, jinak stejný buffer, který byl předán do recv.

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

Odešle data na sběrnici:

  • send jsou data k odeslání (celé číslo k odeslání, nebo objekt buffer).

  • timeout je časový limit v milisekundách pro čekání na odeslání.

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

Současně odešle a přijme data na sběrnici:

  • send jsou data k odeslání (celé číslo k odeslání, nebo objekt buffer).

  • recv je měnitelný buffer, který bude naplněn přijatými bajty. Může být stejný jako send, nebo vynechán. Pokud je vynechán, vytvoří se nový buffer.

  • timeout je časový limit v milisekundách pro čekání na příjem.

Návratová hodnota: buffer s přijatými bajty.

Konstanty

CONTROLLER: int

Inicializuje sběrnici SPI jako master (řadič) – OpenMV Cam řídí SCK a MOSI a má na starosti transakci.

PERIPHERAL: int

Inicializuje sběrnici SPI jako slave (periferie) – OpenMV Cam reaguje na hodinové impulzy řízené vzdáleným řadičem.

MSB: int

Předejte do firstbit pro vysílání/příjem nejvýznamnějšího bitu jako prvního (nejběžnější pořadí).

LSB: int

Předejte do firstbit pro vysílání/příjem nejméně významného bitu jako prvního.