class SPI – vezérlő által meghajtott soros protokoll

Az SPI egy szinkron soros protokoll, amelyet egy vezérlő hajt meg. Fizikai szinten három vonalat (SCK, MOSI, MISO) használ, plusz egy perifériánkénti chip-select vonalat.

A használat hasonló az I2C osztályhoz; a fő különbség a busz inicializálásakor átadott paraméterekben van:

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

Az egyetlen kötelező paraméter a mode (SPI.CONTROLLER vagy SPI.PERIPHERAL). A polarity a SCK üresjárati szintje (0 vagy 1). A phase azt választja ki, hogy az adat az első (0) vagy a második (1) órajel-élnél kerül-e mintavételezésre. A crc vagy None (nincs CRC), vagy egy CRC-polinom.

Adatátvitel:

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

Konstruktorok

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

SPI objektum létrehozása az adott bus buszon (egy egész szám SPI periféria-index, pl. 2 a SPI2 esetén). További paraméterek nélkül az objektum létrejön, de nem inicializálódik (megtartja a busz korábbi beállításait, ha vannak ilyenek); ha extra argumentumokat ad meg, a busz azokkal inicializálódik. Az elérhető paramétereket lásd az init() metódusnál.

A SPI(2) minden STM32 OpenMV Cam esetén ugyanazokra a fejléc-lábakra van bekötve; az OpenMV Cam N6 emellett a SPI(4)-et is elérhetővé teszi:

Busz

NSS

SCK

MISO

MOSI

SPI(2) (minden STM32 OpenMV Cam)

P3

P2

P1

P0

SPI(4) (csak OpenMV Cam N6)

P15

P16

P17

P18

Az NSS-t egyik buszon sem hajtja meg az SPI periféria; szabadon használható normál GPIO chip-selectként.

Metódusok

deinit() None

Az SPI busz kikapcsolása.

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

Az SPI busz inicializálása a megadott paraméterekkel:

  • A mode vagy SPI.CONTROLLER vagy SPI.PERIPHERAL kell legyen.

  • A baudrate az SCK órajel sebessége (csak vezérlő esetén van értelme).

  • A prescaler az az előosztó, amellyel az SCK az APB busz frekvenciájából származtatható; a prescaler használata felülírja a baudrate értéket.

  • A polarity 0 vagy 1 lehet, és az a szint, amelyen az üresjárati órajelvonal nyugszik.

  • A phase 0 vagy 1 lehet, az adat az első, illetve a második órajel-élnél történő mintavételezéséhez.

  • A bits 8 vagy 16 lehet, és az egyes átvitt szavak bitjeinek száma.

  • A firstbit SPI.MSB vagy SPI.LSB lehet.

  • A ti True a Texas Instruments jelzéskonvencióit jelzi, a Motorola helyett.

  • A crc lehet None a CRC kikapcsolásához, vagy egy polinom-megadás.

Az SPI órajel-frekvenciája nem feltétlenül egyezik meg pontosan a baudrate értékkel. A hardver csak olyan órajeleket támogat, amelyek a szülő APB busz frekvenciájának kettő hatványú előosztóval (2, 4, 8, 16, 32, 64, 128 vagy 256) osztott értékei; az illesztőprogram a legmagasabbat választja, amely nem haladja meg a kért baudrate értéket. A SPI(2) az APB1-en van. Az órajel pontos szabályozásához állítsa be közvetlenül a prescaler értéket a baudrate helyett.

Az SPI objektum kiírása megjeleníti a számított átviteli sebességet (baud) és a kiválasztott előosztót.

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

Adatok fogadása a buszon:

  • A recv lehet egy egész szám, amely a fogadandó bájtok száma, vagy egy módosítható puffer, amely a fogadott bájtokkal töltődik fel.

  • A timeout az ezredmásodpercben megadott időkorlát a fogadásra való várakozáshoz.

Visszatérési érték: ha a recv egész szám, akkor egy új puffer a fogadott bájtokkal, egyébként ugyanaz a puffer, amelyet a recv-nek átadtak.

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

Adatok küldése a buszon:

  • A send a küldendő adat (egy küldendő egész szám, vagy egy pufferobjektum).

  • A timeout az ezredmásodpercben megadott időkorlát a küldésre való várakozáshoz.

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

Adatok küldése és fogadása a buszon egyidejűleg:

  • A send a küldendő adat (egy küldendő egész szám, vagy egy pufferobjektum).

  • A recv egy módosítható puffer, amely a fogadott bájtokkal töltődik fel. Lehet ugyanaz, mint a send, vagy elhagyható. Ha elhagyják, új puffer jön létre.

  • A timeout az ezredmásodpercben megadott időkorlát a fogadásra való várakozáshoz.

Visszatérési érték: a puffer a fogadott bájtokkal.

Konstansok

CONTROLLER: int

Az SPI busz inicializálása masterként (vezérlő) – az OpenMV Cam hajtja meg az SCK és MOSI vonalakat, és ő irányítja a tranzakciót.

PERIPHERAL: int

Az SPI busz inicializálása slave-ként (periféria) – az OpenMV Cam egy távoli vezérlő által meghajtott órajel-impulzusokra válaszol.

MSB: int

A firstbit paraméternek átadva először a legfontosabb bitet (most-significant) viszi át/fogadja (a leggyakoribb sorrend).

LSB: int

A firstbit paraméternek átadva először a legkevésbé fontos bitet (least-significant) viszi át/fogadja.