klasa SPI – serijski protokol kojim upravlja kontroler

SPI je sinkroni serijski protokol kojim upravlja kontroler. Na fizičkoj razini koristi tri linije (SCK, MOSI, MISO) plus liniju za odabir čipa po periferiji.

Korištenje je slično I2C; glavna razlika su parametri koji se prosljeđuju pri inicijalizaciji sabirnice:

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

Jedini obavezni parametar je mode (SPI.CONTROLLER ili SPI.PERIPHERAL). polarity je razina mirovanja SCK (0 ili 1). phase bira hoće li se podaci uzorkovati na prvom (0) ili drugom (1) bridu takta. crc je ili None (bez CRC-a) ili CRC polinom.

Prijenos podataka:

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

Konstruktori

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

Konstruira SPI objekt na danoj bus (cijeli broj indeksa SPI periferije, npr. 2 za SPI2). Bez dodatnih parametara objekt se stvara, ali se ne inicijalizira (zadržava prethodne postavke sabirnice, ako ih ima); ako su zadani dodatni argumenti, sabirnica se inicijalizira njima. Za dostupne parametre pogledajte init().

SPI(2) je spojen na iste pinove zaglavlja na svakoj STM32 OpenMV Cam kameri; OpenMV Cam N6 dodatno izlaže SPI(4):

Sabirnica

NSS

SCK

MISO

MOSI

SPI(2) (sve STM32 OpenMV Cam kamere)

P3

P2

P1

P0

SPI(4) (samo OpenMV Cam N6)

P15

P16

P17

P18

NSS ne pokreće SPI periferija ni na jednoj sabirnici; slobodno se može koristiti kao običan GPIO za odabir čipa.

Metode

deinit() None

Isključuje SPI sabirnicu.

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

Inicijalizira SPI sabirnicu sa zadanim parametrima:

  • mode mora biti ili SPI.CONTROLLER ili SPI.PERIPHERAL.

  • baudrate je brzina takta SCK-a (smisleno samo za kontroler).

  • prescaler je predskalator koji se koristi za izvođenje SCK-a iz frekvencije APB sabirnice; korištenje prescaler poništava baudrate.

  • polarity može biti 0 ili 1 i razina je na kojoj se nalazi linija takta u mirovanju.

  • phase može biti 0 ili 1 za uzorkovanje podataka na prvom odnosno drugom bridu takta.

  • bits može biti 8 ili 16 i broj je bitova u svakoj prenesenoj riječi.

  • firstbit može biti SPI.MSB ili SPI.LSB.

  • ti True označava konvencije signala Texas Instrumentsa, za razliku od Motorole.

  • crc može biti None za nepostojanje CRC-a ili specifikator polinoma.

Frekvencija SPI takta možda neće točno odgovarati baudrate. Hardver podržava samo taktove koji su frekvencija nadređene APB sabirnice podijeljena predskalatorom koji je potencija broja dva (2, 4, 8, 16, 32, 64, 128 ili 256); upravljački program bira najveći koji ne premašuje traženi baudrate. SPI(2) je na APB1. Za preciznu kontrolu takta postavite prescaler izravno umjesto baudrate.

Ispis SPI objekta prikazuje izračunatu brzinu prijenosa (baud) i odabrani predskalator.

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

Prima podatke na sabirnici:

  • recv može biti cijeli broj, koji je broj bajtova koje treba primiti, ili promjenjivi međuspremnik koji će se ispuniti primljenim bajtovima.

  • timeout je vrijeme čekanja u milisekundama za prijem.

Povratna vrijednost: ako je recv cijeli broj tada novi međuspremnik s primljenim bajtovima, inače isti međuspremnik koji je proslijeđen u recv.

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

Šalje podatke na sabirnicu:

  • send su podaci koje treba poslati (cijeli broj koji treba poslati ili objekt međuspremnika).

  • timeout je vrijeme čekanja u milisekundama za slanje.

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

Istovremeno šalje i prima podatke na sabirnici:

  • send su podaci koje treba poslati (cijeli broj koji treba poslati ili objekt međuspremnika).

  • recv je promjenjivi međuspremnik koji će se ispuniti primljenim bajtovima. Može biti isti kao send ili izostavljen. Ako je izostavljen, stvorit će se novi međuspremnik.

  • timeout je vrijeme čekanja u milisekundama za prijem.

Povratna vrijednost: međuspremnik s primljenim bajtovima.

Konstante

CONTROLLER: int

Inicijalizira SPI sabirnicu kao master (kontroler) – OpenMV Cam pokreće SCK i MOSI i upravlja transakcijom.

PERIPHERAL: int

Inicijalizira SPI sabirnicu kao slave (periferiju) – OpenMV Cam odgovara na impulse takta koje pokreće udaljeni kontroler.

MSB: int

Proslijedite u firstbit za odašiljanje/primanje najznačajnijeg bita prvog (najčešći redoslijed).

LSB: int

Proslijedite u firstbit za odašiljanje/primanje najmanje značajnog bita prvog.