class SPI – ohjaimen ohjaama sarjaprotokolla

SPI on synkroninen sarjaprotokolla, jota ohjain ohjaa. Fyysisellä tasolla se käyttää kolmea linjaa (SCK, MOSI, MISO) sekä oheislaitekohtaista lohonvalintalinjaa.

Käyttö on samanlaista kuin I2C:llä; pääero on väylää alustettaessa välitettävissä parametreissa:

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

Ainoa pakollinen parametri on mode (SPI.CONTROLLER tai SPI.PERIPHERAL). polarity on SCK:n lepotaso (0 tai 1). phase valitsee, otetaanko data näytteeksi ensimmäisellä (0) vai toisella (1) kellon reunalla. crc on joko None (ei CRC:tä) tai CRC-polynomi.

Datan siirto:

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

Konstruktorit

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

Muodosta SPI-objekti annetulle väylälle bus (kokonaislukumuotoinen SPI-oheislaiteindeksi, esim. 2 väylälle SPI2). Ilman lisäparametreja objekti luodaan mutta sitä ei alusteta (se säilyttää mahdolliset aiemmat väyläasetukset); jos lisäargumentteja annetaan, väylä alustetaan niillä. Katso käytettävissä olevat parametrit metodista init().

SPI(2) on kytketty samoihin liitinnastoihin jokaisessa STM32-pohjaisessa OpenMV Cam -kamerassa; OpenMV Cam N6 tarjoaa lisäksi väylän SPI(4):

Väylä

NSS

SCK

MISO

MOSI

SPI(2) (kaikki STM32 OpenMV Cam -kamerat)

P3

P2

P1

P0

SPI(4) (vain OpenMV Cam N6)

P15

P16

P17

P18

SPI-oheislaite ei ohjaa NSS-linjaa kummallakaan väylällä; sitä voi vapaasti käyttää tavallisena GPIO-lohonvalintana.

Metodit

deinit() None

Sammuta SPI-väylä.

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

Alusta SPI-väylä annetuilla parametreilla:

  • mode on oltava joko SPI.CONTROLLER tai SPI.PERIPHERAL.

  • baudrate on SCK-kellotaajuus (järkevä vain ohjaimelle).

  • prescaler on esijakaja, jolla SCK johdetaan APB-väylän taajuudesta; prescaler-arvon käyttö ohittaa baudrate-arvon.

  • polarity voi olla 0 tai 1, ja se on taso, jolla lepotilan kellolinja pysyy.

  • phase voi olla 0 tai 1 ottaakseen datan näytteeksi vastaavasti ensimmäisellä tai toisella kellon reunalla.

  • bits voi olla 8 tai 16, ja se on bittien määrä kussakin siirretyssä sanassa.

  • firstbit voi olla SPI.MSB tai SPI.LSB.

  • ti True ilmaisee Texas Instruments -signaalikäytäntöjä, vastakohtana Motorola-käytännöille.

  • crc voi olla None ilman CRC:tä, tai polynomimäärittely.

SPI-kellotaajuus ei välttämättä vastaa täsmälleen baudrate-arvoa. Laitteisto tukee vain kellotaajuuksia, jotka ovat APB-pääväylän taajuus jaettuna kahden potenssina olevalla esijakajalla (2, 4, 8, 16, 32, 64, 128 tai 256); ajuri valitsee suurimman, joka ei ylitä pyydettyä baudrate-arvoa. SPI(2) on APB1:llä. Kellon tarkkaa hallintaa varten aseta prescaler suoraan baudrate-arvon sijaan.

SPI-objektin tulostus näyttää lasketun siirtonopeuden ja valitun esijakajan.

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

Vastaanota dataa väylältä:

  • recv voi olla kokonaisluku, joka on vastaanotettavien tavujen määrä, tai muokattava puskuri, joka täytetään vastaanotetuilla tavuilla.

  • timeout on millisekunteina ilmoitettu aikakatkaisu, jonka vastaanottoa odotetaan.

Paluuarvo: jos recv on kokonaisluku, palautetaan uusi puskuri vastaanotetuista tavuista, muutoin sama puskuri, joka välitettiin recv-argumenttiin.

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

Lähetä dataa väylälle:

  • send on lähetettävä data (lähetettävä kokonaisluku tai puskuriobjekti).

  • timeout on millisekunteina ilmoitettu aikakatkaisu, jonka lähetystä odotetaan.

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

Lähetä ja vastaanota dataa väylällä samanaikaisesti:

  • send on lähetettävä data (lähetettävä kokonaisluku tai puskuriobjekti).

  • recv on muokattava puskuri, joka täytetään vastaanotetuilla tavuilla. Se voi olla sama kuin send, tai se voidaan jättää pois. Jos se jätetään pois, luodaan uusi puskuri.

  • timeout on millisekunteina ilmoitettu aikakatkaisu, jonka vastaanottoa odotetaan.

Paluuarvo: puskuri vastaanotetuilla tavuilla.

Vakiot

CONTROLLER: int

Alusta SPI-väylä isäntänä (ohjaimena) – OpenMV Cam ohjaa SCK- ja MOSI-linjoja ja vastaa transaktiosta.

PERIPHERAL: int

Alusta SPI-väylä orjana (oheislaitteena) – OpenMV Cam vastaa etäohjaimen ohjaamiin kellopulsseihin.

MSB: int

Välitä firstbit-argumenttiin lähettääksesi/vastaanottaaksesi merkitsevimmän bitin ensin (yleisin järjestys).

LSB: int

Välitä firstbit-argumenttiin lähettääksesi/vastaanottaaksesi vähiten merkitsevän bitin ensin.