třída SPI – sériový protokol řízený řadičem¶
SPI je synchronní sériový protokol řízený řadičem. Na fyzické úrovni používá tři linky (SCK, MOSI, MISO) plus linku chip-select pro každou periferii.
Použití je podobné jako u I2C; hlavní rozdíl jsou parametry předávané při inicializaci sběrnice:
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
Jediný povinný parametr je mode (SPI.CONTROLLER nebo SPI.PERIPHERAL). polarity je klidová úroveň SCK (0 nebo 1). phase vybírá, zda se data vzorkují na první (0) nebo druhé (1) hraně hodin. crc je buď None (žádné CRC) nebo CRC polynom.
Přenos dat:
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
Konstruktory¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
Sestaví objekt SPI na dané
bus(celočíselný index SPI periferie, např.2proSPI2). Bez dalších parametrů je objekt vytvořen, ale není inicializován (zachovává předchozí nastavení sběrnice, pokud existuje); pokud jsou zadány další argumenty, sběrnice se s nimi inicializuje. Dostupné parametry vizinit().SPI(2)je zapojen na stejné piny konektoru na každé STM32 OpenMV Cam; OpenMV Cam N6 navíc zpřístupňujeSPI(4):Sběrnice
NSS
SCK
MISO
MOSI
SPI(2)(všechny STM32 OpenMV Cam)P3P2P1P0SPI(4)(pouze OpenMV Cam N6)P15P16P17P18NSSnení řízen SPI periferií na žádné ze sběrnic; lze jej volně použít jako běžný GPIO chip-select.Metody¶
- 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¶
Inicializuje sběrnici SPI s danými parametry:
modemusí být buďSPI.CONTROLLERneboSPI.PERIPHERAL.baudrateje frekvence hodin SCK (smysluplné pouze pro řadič).prescalerje dělič použitý pro odvození SCK z frekvence sběrnice APB; použitíprescalerpřepíšebaudrate.polaritymůže být 0 nebo 1 a je úrovní, na které spočívá klidová hodinová linka.phasemůže být 0 nebo 1 pro vzorkování dat na první respektive druhé hraně hodin.bitsmůže být 8 nebo 16 a je počtem bitů v každém přenášeném slově.firstbitmůže býtSPI.MSBneboSPI.LSB.tiTrue označuje signálové konvence Texas Instruments, na rozdíl od Motorola.crcmůže být None pro žádné CRC, nebo specifikátor polynomu.
Frekvence hodin SPI nemusí přesně odpovídat
baudrate. Hardware podporuje pouze hodiny, které jsou frekvencí nadřazené sběrnice APB dělenou děličem o mocnině dvou (2, 4, 8, 16, 32, 64, 128nebo256); ovladač vybere nejvyšší, který nepřekročí požadovanýbaudrate.SPI(2)je na APB1. Pro přesné řízení hodin nastavte přímoprescalermístobaudrate.Výpis objektu SPI zobrazuje vypočítanou přenosovou rychlost a zvolený dělič.
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
Přijme data na sběrnici:
recvmůže být celé číslo, což je počet bajtů k přijetí, nebo měnitelný buffer, který bude naplněn přijatými bajty.timeoutje časový limit v milisekundách pro čekání na příjem.
Návratová hodnota: pokud je
recvcelé číslo, pak nový buffer přijatých bajtů, jinak stejný buffer, který byl předán dorecv.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Odešle data na sběrnici:
sendjsou data k odeslání (celé číslo k odeslání, nebo objekt buffer).timeoutje časový limit v milisekundách pro čekání na odeslání.
- send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes¶
Současně odešle a přijme data na sběrnici:
sendjsou data k odeslání (celé číslo k odeslání, nebo objekt buffer).recvje měnitelný buffer, který bude naplněn přijatými bajty. Může být stejný jakosend, nebo vynechán. Pokud je vynechán, vytvoří se nový buffer.timeoutje časový limit v milisekundách pro čekání na příjem.
Návratová hodnota: buffer s přijatými bajty.
Konstanty¶
- CONTROLLER: int¶
Inicializuje sběrnici SPI jako master (řadič) – OpenMV Cam řídí
SCKaMOSIa má na starosti transakci.
- PERIPHERAL: int¶
Inicializuje sběrnici SPI jako slave (periferie) – OpenMV Cam reaguje na hodinové impulzy řízené vzdáleným řadičem.