class SPI – denetleyici tarafından sürülen seri protokol¶
SPI, bir denetleyici tarafından sürülen senkron bir seri protokoldür. Fiziksel seviyede, çevre birimi başına bir yonga seçim hattına ek olarak üç hat (SCK, MOSI, MISO) kullanır.
Kullanım I2C ile benzerdir; temel fark, veri yolu başlatılırken iletilen parametrelerdir:
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
Gerekli olan tek parametre mode (SPI.CONTROLLER veya SPI.PERIPHERAL) parametresidir. polarity, SCK hattının boştaki seviyesidir (0 veya 1). phase, verinin ilk (0) ya da ikinci (1) saat kenarında örneklenip örneklenmeyeceğini seçer. crc ya None (CRC yok) ya da bir CRC polinomudur.
Veri aktarma:
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
Yapıcılar¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
Verilen
bus(bir tam sayı SPI çevre birimi dizini, örneğinSPI2için2) üzerinde bir SPI nesnesi oluşturur. Ek parametre verilmezse nesne oluşturulur ancak başlatılmaz (varsa önceki veri yolu ayarlarını korur); ek argümanlar verilirse veri yolu bunlarla başlatılır. Kullanılabilir parametreler içininit()bölümüne bakın.SPI(2), her STM32 OpenMV Cam’de aynı başlık pinlerine bağlıdır; OpenMV Cam N6 ek olarakSPI(4)sunar:Veri Yolu
NSS
SCK
MISO
MOSI
SPI(2)(tüm STM32 OpenMV Cam’ler)P3P2P1P0SPI(4)(yalnızca OpenMV Cam N6)P15P16P17P18NSS, her iki veri yolunda da SPI çevre birimi tarafından sürülmez; normal bir GPIO yonga seçimi olarak kullanılabilir.Yöntemler¶
- 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¶
SPI veri yolunu verilen parametrelerle başlatır:
modeyaSPI.CONTROLLERya daSPI.PERIPHERALolmalıdır.baudrate, SCK saat hızıdır (yalnızca bir denetleyici için anlamlıdır).prescaler, SCK’yı APB veri yolu frekansından türetmek için kullanılacak ön bölücüdür;prescalerkullanımıbaudratedeğerini geçersiz kılar.polarity0 veya 1 olabilir ve boştaki saat hattının bulunduğu seviyedir.phase, veriyi sırasıyla ilk veya ikinci saat kenarında örneklemek için 0 ya da 1 olabilir.bits8 veya 16 olabilir ve aktarılan her sözcükteki bit sayısıdır.firstbitSPI.MSBveyaSPI.LSBolabilir.tiTrue, Motorola’nın aksine Texas Instruments sinyal kurallarını gösterir.crc, CRC olmaması için None ya da bir polinom belirteci olabilir.
SPI saat frekansı
baudrateile tam olarak eşleşmeyebilir. Donanım yalnızca, üst APB veri yolu frekansının ikinin kuvveti bir ön bölücüye (2, 4, 8, 16, 32, 64, 128veya256) bölünmesiyle elde edilen saatleri destekler; sürücü, istenenbaudratedeğerini aşmayan en yüksek olanı seçer.SPI(2), APB1 üzerindedir. Saat üzerinde hassas denetim içinbaudrateyerine doğrudanprescalerayarlayın.SPI nesnesinin yazdırılması, hesaplanan baud hızını ve seçilen ön bölücüyü gösterir.
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
Veri yolunda veri alır:
recvbir tam sayı olabilir; bu, alınacak bayt sayısıdır ya da alınan baytlarla doldurulacak değişebilir bir arabellektir.timeout, alma işlemini beklemek için milisaniye cinsinden zaman aşımıdır.
Dönüş değeri:
recvbir tam sayıysa, alınan baytlardan oluşan yeni bir arabellek; aksi takdirderecvöğesine iletilen aynı arabellek.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Veri yolunda veri gönderir:
send, gönderilecek veridir (gönderilecek bir tam sayı ya da bir arabellek nesnesi).timeout, gönderme işlemini beklemek için milisaniye cinsinden zaman aşımıdır.
- send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes¶
Veri yolunda aynı anda veri gönderip alır:
send, gönderilecek veridir (gönderilecek bir tam sayı ya da bir arabellek nesnesi).recv, alınan baytlarla doldurulacak değişebilir bir arabellektir.sendile aynı olabilir ya da atlanabilir. Atlanırsa yeni bir arabellek oluşturulur.timeout, alma işlemini beklemek için milisaniye cinsinden zaman aşımıdır.
Dönüş değeri: alınan baytları içeren arabellek.
Sabitler¶
- CONTROLLER: int¶
SPI veri yolunu master (denetleyici) olarak başlatır – OpenMV Cam,
SCKveMOSIhatlarını sürer ve işlemden sorumludur.