class SPI – ett styrenhetsdrivet seriellt protokoll¶
SPI är ett synkront seriellt protokoll som drivs av en styrenhet. På den fysiska nivån använder det tre ledningar (SCK, MOSI, MISO) plus en chip-select-ledning per kringutrustning.
Användningen liknar I2C; den huvudsakliga skillnaden är de parametrar som skickas vid initiering av bussen:
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
Den enda obligatoriska parametern är mode (SPI.CONTROLLER eller SPI.PERIPHERAL). polarity är vilonivån för SCK (0 eller 1). phase väljer om data samplas på den första (0) eller andra (1) klockflanken. crc är antingen None (ingen CRC) eller ett CRC-polynom.
Överföra data:
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
Konstruktorer¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
Konstruera ett SPI-objekt på den angivna
bus(ett heltal för SPI-kringutrustningens index, t.ex.2förSPI2). Utan ytterligare parametrar skapas objektet men initieras inte (det behåller de tidigare bussinställningarna, om sådana finns); om extra argument anges initieras bussen med dem. Seinit()för de tillgängliga parametrarna.SPI(2)är kopplad till samma header-stift på varje STM32 OpenMV Cam; OpenMV Cam N6 exponerar dessutomSPI(4):Buss
NSS
SCK
MISO
MOSI
SPI(2)(alla STM32 OpenMV Cam)P3P2P1P0SPI(4)(endast OpenMV Cam N6)P15P16P17P18NSSdrivs inte av SPI-kringutrustningen på någon av bussarna; den är fri att använda som en vanlig GPIO chip-select.Metoder¶
- 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¶
Initiera SPI-bussen med de angivna parametrarna:
modemåste vara antingenSPI.CONTROLLERellerSPI.PERIPHERAL.baudrateär klockfrekvensen för SCK (endast meningsfullt för en styrenhet).prescalerär den prescaler som används för att härleda SCK från APB-bussfrekvensen; användning avprescaleråsidosätterbaudrate.polaritykan vara 0 eller 1, och är den nivå som den vilande klockledningen ligger på.phasekan vara 0 eller 1 för att sampla data på den första respektive andra klockflanken.bitskan vara 8 eller 16, och är antalet bitar i varje överfört ord.firstbitkan varaSPI.MSBellerSPI.LSB.tiTrue anger Texas Instruments-signalkonventioner, i motsats till Motorola.crckan vara None för ingen CRC, eller en polynomspecificerare.
SPI-klockfrekvensen kanske inte matchar
baudrateexakt. Hårdvaran stöder endast klockor som är den överordnade APB-bussfrekvensen dividerad med en prescaler som är en tvåpotens (2, 4, 8, 16, 32, 64, 128eller256); drivrutinen väljer den högsta som inte överskrider den begärdabaudrate.SPI(2)ligger på APB1. För exakt kontroll över klockan, ställ inprescalerdirekt i stället förbaudrate.Utskrift av SPI-objektet visar den beräknade baudhastigheten och den valda prescalern.
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
Ta emot data på bussen:
recvkan vara ett heltal, vilket är antalet byte att ta emot, eller en muterbar buffert som kommer att fyllas med mottagna byte.timeoutär timeouten i millisekunder att vänta på mottagningen.
Returvärde: om
recvär ett heltal returneras en ny buffert med de mottagna byten, annars samma buffert som skickades in tillrecv.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Skicka data på bussen:
sendär de data som ska skickas (ett heltal att skicka, eller ett buffertobjekt).timeoutär timeouten i millisekunder att vänta på sändningen.
- send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes¶
Skicka och ta emot data på bussen samtidigt:
sendär de data som ska skickas (ett heltal att skicka, eller ett buffertobjekt).recvär en muterbar buffert som kommer att fyllas med mottagna byte. Den kan vara densamma somsend, eller utelämnas. Om den utelämnas skapas en ny buffert.timeoutär timeouten i millisekunder att vänta på mottagningen.
Returvärde: bufferten med de mottagna byten.
Konstanter¶
- CONTROLLER: int¶
Initiera SPI-bussen som master (styrenhet) – OpenMV Cam driver
SCKochMOSIoch ansvarar för transaktionen.
- PERIPHERAL: int¶
Initiera SPI-bussen som slav (kringutrustning) – OpenMV Cam svarar på klockpulser som drivs av en fjärrstyrenhet.