class SPI – Serial Peripheral Interface -väyläprotokolla (ohjainpuoli)¶
SPI on synkroninen sarjaprotokolla, jota ohjain ajaa. Fyysisellä tasolla väylä koostuu kolmesta linjasta: SCK, MOSI, MISO. Useat laitteet voivat jakaa saman väylän. Jokaisella laitteella tulisi olla erillinen, neljäs signaali, CS (Chip Select), joka valitsee tietyn laitteen väylältä, jonka kanssa kommunikoidaan. CS-signaalin hallinnan tulisi tapahtua käyttäjän koodissa (machine.Pin-luokan kautta).
Sekä laitteisto- että ohjelmistopohjaisia SPI-toteutuksia on olemassa SPI - ja SoftSPI -luokkien kautta. Laitteisto-SPI käyttää järjestelmän taustalla olevaa laitteistotukea luku- ja kirjoitusoperaatioiden suorittamiseen ja on yleensä tehokas ja nopea, mutta voi rajoittaa, mitä nastoja voidaan käyttää. Ohjelmisto-SPI toteutetaan bit-banging-menetelmällä, ja sitä voidaan käyttää millä tahansa nastalla, mutta se ei ole yhtä tehokas. Näillä luokilla on samat metodit käytettävissä, ja ne eroavat toisistaan pääasiassa rakentamistavan osalta.
Esimerkkikäyttö:
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.
Rakentajat¶
- 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)¶
Rakentaa SPI-olion annetulle väylälle, id. id-arvot riippuvat tietystä portista ja sen laitteistosta. Arvoja 0, 1 jne. käytetään yleisesti valitsemaan laitteisto-SPI-lohko #0, #1 jne.
Ilman lisäparametreja SPI-olio luodaan, mutta sitä ei alusteta (sillä on asetukset väylän viimeisimmästä alustuksesta, jos sellaista on). Jos annetaan lisäargumentteja, väylä alustetaan. Katso
initalustuksen parametreja varten.Metodit¶
- 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¶
Alustaa SPI-väylän annetuilla parametreilla:
baudrateon SCK-kellotaajuus.polarityvoi olla 0 tai 1, ja se on taso, jolla joutilas kellolinja pysyy.phasevoi olla 0 tai 1, jolloin data näytteistetään ensimmäisellä tai toisella kelloreunalla.bitson kunkin siirron leveys bitteinä. Vain arvon 8 taataan olevan kaiken laitteiston tukema.firstbitvoi ollaSPI.MSBtaiSPI.LSB.sck,mosi,misoovat nasta-olioita (machine.Pin), joita käytetään väyläsignaaleille. Useimmissa laitteisto-SPI-lohkoissa (jotka valitaan rakentajanid-parametrilla) nastat ovat kiinteät eikä niitä voi muuttaa. Joissakin tapauksissa laitteistolohkot sallivat 2-3 vaihtoehtoista nastajoukkoa laitteisto-SPI-lohkolle. Mielivaltaiset nastamääritykset ovat mahdollisia vain bitbanging-SPI-ajurille (id= -1).
Laitteisto-SPI:n tapauksessa todellinen kellotaajuus voi olla pyydettyä siirtonopeutta alhaisempi. Tämä riippuu alustan laitteistosta. Todellinen nopeus voidaan selvittää tulostamalla SPI-olio.
- read(nbytes: int, write: int = 0x00) bytes¶
Lukee
nbytes-arvon määräämän määrän tavuja kirjoittaen samalla jatkuvasti yhtä tavua, joka annetaan parametrillawrite. Palauttaabytes-olion luetulla datalla.
Vakiot¶
class SoftSPI – ohjelmistolla emuloitu SPI-väylä¶
SoftSPI -luokka toteuttaa SPI:n bit-banging-menetelmällä mielivaltaisilla GPIO-nastoilla. Se tarjoaa saman metodipinnan kuin SPI, joten laitteisto-SPI:tä käyttävä olemassa oleva koodi voi vaihtaa ohjelmistoon pelkällä rakentajan muutoksella. Käytä sitä, kun tarvitsemiasi nastoja ei ole johdotettu laitteisto-SPI-lohkoon, kun tarvitset useampia kuin käytettävissä olevia laitteistoväyliä, tai kun oheislaite vaatii epästandardin kellovaiheistuksen, jota laitteisto ei pysty tuottamaan.
Rakentajat¶
- 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)¶
Rakentaa ohjelmisto-SPI-olion.
sck,mosijamisoon annettava – implisiittistä nastan valintaa ei ole. KatsoSPI.init()muiden parametrien merkityksen osalta. Oletusbaudrateon alhaisempi kuin laitteisto-SPI:llä, koska bit-bang-silmukassa on enemmän yleisrasitusta.Metodit¶
- 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¶
Alustaa ohjelmisto-SPI-väylän uudelleen annetuilla parametreilla. Vain annetut argumentit päivitetään; muut säilyttävät aiemmat arvonsa. Katso
SPI.init()kunkin argumentin merkityksen osalta.
- read(nbytes: int, write: int = 0x00) bytes¶
Lukee
nbytestavua kirjoittaen samalla jatkuvasti yhtä tavuawrite. Palauttaabytes-olion, joka sisältää vastaanotetun datan.
Vakiot¶