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
busbuszon (egy egész szám SPI periféria-index, pl.2aSPI2eseté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 azinit()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 aSPI(4)-et is elérhetővé teszi:Busz
NSS
SCK
MISO
MOSI
SPI(2)(minden STM32 OpenMV Cam)P3P2P1P0SPI(4)(csak OpenMV Cam N6)P15P16P17P18Az
NSS-t egyik buszon sem hajtja meg az SPI periféria; szabadon használható normál GPIO chip-selectként.Metódusok¶
- 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
modevagySPI.CONTROLLERvagySPI.PERIPHERALkell legyen.A
baudrateaz SCK órajel sebessége (csak vezérlő esetén van értelme).A
prescaleraz az előosztó, amellyel az SCK az APB busz frekvenciájából származtatható; aprescalerhasználata felülírja abaudrateértéket.A
polarity0 vagy 1 lehet, és az a szint, amelyen az üresjárati órajelvonal nyugszik.A
phase0 vagy 1 lehet, az adat az első, illetve a második órajel-élnél történő mintavételezéséhez.A
bits8 vagy 16 lehet, és az egyes átvitt szavak bitjeinek száma.A
firstbitSPI.MSBvagySPI.LSBlehet.A
tiTrue a Texas Instruments jelzéskonvencióit jelzi, a Motorola helyett.A
crclehet 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, 128vagy256) osztott értékei; az illesztőprogram a legmagasabbat választja, amely nem haladja meg a kértbaudrateértéket. ASPI(2)az APB1-en van. Az órajel pontos szabályozásához állítsa be közvetlenül aprescalerértéket abaudratehelyett.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
recvlehet 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
timeoutaz ezredmásodpercben megadott időkorlát a fogadásra való várakozáshoz.
Visszatérési érték: ha a
recvegész szám, akkor egy új puffer a fogadott bájtokkal, egyébként ugyanaz a puffer, amelyet arecv-nek átadtak.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Adatok küldése a buszon:
A
senda küldendő adat (egy küldendő egész szám, vagy egy pufferobjektum).A
timeoutaz 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
senda küldendő adat (egy küldendő egész szám, vagy egy pufferobjektum).A
recvegy módosítható puffer, amely a fogadott bájtokkal töltődik fel. Lehet ugyanaz, mint asend, vagy elhagyható. Ha elhagyják, új puffer jön létre.A
timeoutaz 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ésMOSIvonalakat, é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.