class SPI – protokol sabirnice Serial Peripheral Interface (strana kontrolera)¶
SPI je sinkroni serijski protokol kojim upravlja kontroler. Na fizičkoj razini sabirnica se sastoji od 3 linije: SCK, MOSI, MISO. Više uređaja može dijeliti istu sabirnicu. Svaki uređaj treba imati zaseban, 4. signal, CS (Chip Select), za odabir određenog uređaja na sabirnici s kojim se odvija komunikacija. Upravljanje CS signalom treba se odvijati u korisničkom kodu (putem klase machine.Pin).
Postoje i hardverska i softverska implementacija SPI-ja putem klasa SPI i SoftSPI. Hardverski SPI koristi temeljnu hardversku podršku sustava za izvođenje čitanja/pisanja i obično je učinkovit i brz, ali može imati ograničenja na to koji se pinovi mogu koristiti. Softverski SPI implementiran je bit-banging tehnikom i može se koristiti na bilo kojem pinu, ali nije toliko učinkovit. Ove klase imaju iste dostupne metode i razlikuju se prvenstveno u načinu na koji se konstruiraju.
Primjer upotrebe:
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.
Konstruktori¶
- 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)¶
Konstruira SPI objekt na zadanoj sabirnici, id. Vrijednosti id-a ovise o određenom portu i njegovom hardveru. Vrijednosti 0, 1 itd. obično se koriste za odabir hardverskog SPI bloka #0, #1 itd.
Bez dodatnih parametara, SPI objekt se stvara, ali ne inicijalizira (ima postavke od posljednje inicijalizacije sabirnice, ako ih je bilo). Ako su navedeni dodatni argumenti, sabirnica se inicijalizira. Pogledajte
initza parametre inicijalizacije.Metode¶
- 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¶
Inicijalizira SPI sabirnicu sa zadanim parametrima:
baudrateje brzina takta SCK-a.polaritymože biti 0 ili 1 i predstavlja razinu na kojoj se nalazi taktna linija u mirovanju.phasemože biti 0 ili 1 za uzorkovanje podataka na prvom odnosno drugom bridu takta.bitsje širina svakog prijenosa u bitovima. Samo je 8 zajamčeno podržano na svom hardveru.firstbitmože bitiSPI.MSBiliSPI.LSB.sck,mosi,misosu pin objekti (machine.Pin) koji se koriste za signale sabirnice. Za većinu hardverskih SPI blokova (koje odabire parametaridkonstruktora) pinovi su fiksni i ne mogu se mijenjati. U nekim slučajevima hardverski blokovi dopuštaju 2-3 alternativna skupa pinova za hardverski SPI blok. Proizvoljna dodjela pinova moguća je samo za bitbanging SPI upravljački program (id= -1).
U slučaju hardverskog SPI-ja stvarna frekvencija takta može biti niža od zatražene brzine baud. To ovisi o hardveru platforme. Stvarna brzina može se utvrditi ispisom SPI objekta.
- read(nbytes: int, write: int = 0x00) bytes¶
Čita broj bajtova zadan s
nbytesuz neprekidno pisanje jednog bajta zadanog swrite. Vraća objektbytess pročitanim podacima.
Konstante¶
class SoftSPI – softverski emulirana SPI sabirnica¶
Klasa SoftSPI implementira SPI bit-banging tehnikom na proizvoljnim GPIO pinovima. Izlaže isti skup metoda kao SPI pa postojeći kod koji cilja hardverski SPI može prijeći na softverski samo promjenom konstruktora. Koristite ju kada pinovi koji su vam potrebni nisu ožičeni na hardverski SPI blok, kada vam treba više od dostupnih hardverskih sabirnica ili kada periferija zahtijeva nestandardno faziranje takta koje hardver ne može proizvesti.
Konstruktori¶
- 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)¶
Konstruira softverski SPI objekt.
sck,mosiimisomoraju biti navedeni – ne postoji implicitni odabir pinova. PogledajteSPI.init()za značenje ostalih parametara. Zadanibaudrateniži je nego za hardverskiSPIjer bit-bang petlja ima više dodatnog troška.Metode¶
- 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¶
Ponovno inicijalizira softversku SPI sabirnicu sa zadanim parametrima. Ažuriraju se samo navedeni argumenti; ostali zadržavaju svoje prethodne vrijednosti. Pogledajte
SPI.init()za značenje svakog argumenta.
- deinit() None¶
Otpušta GPIO pinove koje je zauzeo bit-bang upravljački program i prestaje upravljati sabirnicom.
- read(nbytes: int, write: int = 0x00) bytes¶
Čita
nbytesbajtova uz neprekidno pisanje jednog bajtawrite. Vraća objektbyteskoji sadrži primljene podatke.
Konstante¶