SPI osztály – Serial Peripheral Interface buszprotokoll (vezérlő oldal)¶
Az SPI egy szinkron soros protokoll, amelyet egy vezérlő hajt meg. Fizikai szinten a busz 3 vonalból áll: SCK, MOSI, MISO. Több eszköz is megoszthatja ugyanazt a buszt. Minden eszköznek külön, 4. jellel, a CS (Chip Select) jellel kell rendelkeznie, hogy kiválasszon egy adott eszközt a buszon, amellyel a kommunikáció zajlik. A CS jel kezelésének a felhasználói kódban kell megtörténnie (a machine.Pin osztályon keresztül).
Mind hardveres, mind szoftveres SPI megvalósítás létezik a SPI és a SoftSPI osztályokon keresztül. A hardveres SPI a rendszer mögöttes hardvertámogatását használja az olvasások/írások végrehajtásához, és általában hatékony és gyors, de korlátozhatja, hogy mely lábak használhatók. A szoftveres SPI bit-banging módszerrel valósul meg, és bármely lábon használható, de nem olyan hatékony. Ezek az osztályok ugyanazokat a metódusokat teszik elérhetővé, és elsősorban a létrehozásuk módjában különböznek.
Példa használat:
from machine import SPI, Pin
spi = SPI(0, baudrate=400000) # Create SPI peripheral 0 at frequency of 400kHz.
# Depending on the use case, extra parameters may be required
# to select the bus characteristics and/or pins to use.
cs = Pin(4, mode=Pin.OUT, value=1) # Create chip-select on pin 4.
try:
cs(0) # Select peripheral.
spi.write(b"12345678") # Write 8 bytes, and don't care about received data.
finally:
cs(1) # Deselect peripheral.
try:
cs(0) # Select peripheral.
rxdata = spi.read(8, 0x42) # Read 8 bytes while writing 0x42 for each byte.
finally:
cs(1) # Deselect peripheral.
rxdata = bytearray(8)
try:
cs(0) # Select peripheral.
spi.readinto(rxdata, 0x42) # Read 8 bytes inplace while writing 0x42 for each byte.
finally:
cs(1) # Deselect peripheral.
txdata = b"12345678"
rxdata = bytearray(len(txdata))
try:
cs(0) # Select peripheral.
spi.write_readinto(txdata, rxdata) # Simultaneously write and read bytes.
finally:
cs(1) # Deselect peripheral.
Konstruktorok¶
- class machine.SPI(id: int, baudrate: int = 1000000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None)¶
Létrehoz egy SPI objektumot a megadott id buszon. Az id értékei az adott porttól és annak hardverétől függenek. A 0, 1 stb. értékeket általában a #0, #1 stb. hardveres SPI blokk kiválasztására használják.
További paraméterek nélkül az SPI objektum létrejön, de nem inicializálódik (a busz legutóbbi inicializálásának beállításaival rendelkezik, ha volt ilyen). Ha további argumentumokat adsz meg, a busz inicializálódik. Az inicializálás paramétereihez lásd az
initmetódust.Metódusok¶
- init(baudrate: int = 1000000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = SPI.MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None) None¶
Inicializálja az SPI buszt a megadott paraméterekkel:
A
baudrateaz SCK órajel sebessége.A
polarity0 vagy 1 lehet, és az a szint, amelyen a tétlen órajel vonal nyugszik.A
phase0 vagy 1 lehet, az adatok rendre az első vagy a második órajelél során történő mintavételezéséhez.A
bitsaz egyes átvitelek szélessége bitekben. Csak a 8 bit támogatása garantált minden hardveren.A
firstbitSPI.MSBvagySPI.LSBlehet.Az
sck,mosi,misoa buszjelekhez használandó láb (machine.Pin) objektumok. A legtöbb hardveres SPI blokk esetén (amelyet a konstruktoridparamétere választ ki) a lábak rögzítettek és nem módosíthatók. Bizonyos esetekben a hardveres blokkok 2-3 alternatív lábkészletet engednek meg egy hardveres SPI blokkhoz. Tetszőleges lábkiosztás csak bitbanging SPI meghajtó esetén lehetséges (id= -1).
Hardveres SPI esetén a tényleges órajel-frekvencia alacsonyabb lehet a kért átviteli sebességnél. Ez a platform hardverétől függ. A tényleges sebesség az SPI objektum kinyomtatásával állapítható meg.
- read(nbytes: int, write: int = 0x00) bytes¶
Beolvas annyi bájtot, amennyit a
nbytesmegad, miközben folyamatosan kiírja awriteáltal megadott egyetlen bájtot. Visszaad egybytesobjektumot a beolvasott adatokkal.
Konstansok¶
SoftSPI osztály – szoftveresen emulált SPI busz¶
A SoftSPI osztály úgy valósítja meg az SPI-t, hogy tetszőleges GPIO lábakat vezérel bit-banging módszerrel. Ugyanazt a metóduskészletet teszi elérhetővé, mint a SPI, így a hardveres SPI-t célzó meglévő kód mindössze egy konstruktor-módosítással átállhat szoftveresre. Akkor használd, ha a szükséges lábak nincsenek hardveres SPI blokkhoz kötve, ha több buszra van szükséged, mint amennyi hardveres elérhető, vagy ha egy periféria olyan nem szabványos órajel-fázist igényel, amelyet a hardver nem tud előállítani.
Konstruktorok¶
- class machine.SoftSPI(baudrate: int = 500000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None)¶
Létrehoz egy szoftveres SPI objektumot. Az
sck,mosiésmisolábakat meg kell adni – nincs implicit lábkiválasztás. A többi paraméter jelentéséhez lásd aSPI.init()metódust. Az alapértelmezettbaudratealacsonyabb, mint a hardveresSPIesetén, mert a bit-bang ciklusnak nagyobb a többletterhelése.Metódusok¶
- init(baudrate: int = 500000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = SoftSPI.MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None) None¶
Újrainicializálja a szoftveres SPI buszt a megadott paraméterekkel. Csak a megadott argumentumok frissülnek; a többi megtartja korábbi értékét. Az egyes argumentumok jelentéséhez lásd a
SPI.init()metódust.
- deinit() None¶
Felszabadítja a bit-bang meghajtó által lefoglalt GPIO lábakat, és leállítja a busz vezérlését.
- read(nbytes: int, write: int = 0x00) bytes¶
Beolvas
nbytesbájtot, miközben folyamatosan kiírja awriteegyetlen bájtot. Visszaad egybytesobjektumot a fogadott adatokkal.
Konstansok¶