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ğin SPI2 için 2) ü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çin init() 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 olarak SPI(4) sunar:

Veri Yolu

NSS

SCK

MISO

MOSI

SPI(2) (tüm STM32 OpenMV Cam’ler)

P3

P2

P1

P0

SPI(4) (yalnızca OpenMV Cam N6)

P15

P16

P17

P18

NSS, her iki veri yolunda da SPI çevre birimi tarafından sürülmez; normal bir GPIO yonga seçimi olarak kullanılabilir.

Yöntemler

deinit() None

SPI veri yolunu kapatır.

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:

  • mode ya SPI.CONTROLLER ya da SPI.PERIPHERAL olmalı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; prescaler kullanımı baudrate değerini geçersiz kılar.

  • polarity 0 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.

  • bits 8 veya 16 olabilir ve aktarılan her sözcükteki bit sayısıdır.

  • firstbit SPI.MSB veya SPI.LSB olabilir.

  • ti True, 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ı baudrate ile 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, 128 veya 256) bölünmesiyle elde edilen saatleri destekler; sürücü, istenen baudrate değerini aşmayan en yüksek olanı seçer. SPI(2), APB1 üzerindedir. Saat üzerinde hassas denetim için baudrate yerine doğrudan prescaler ayarlayı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:

  • recv bir 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: recv bir tam sayıysa, alınan baytlardan oluşan yeni bir arabellek; aksi takdirde recv öğ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. send ile 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, SCK ve MOSI hatlarını sürer ve işlemden sorumludur.

PERIPHERAL: int

SPI veri yolunu slave (çevre birimi) olarak başlatır – OpenMV Cam, uzak bir denetleyici tarafından sürülen saat darbelerine yanıt verir.

MSB: int

En anlamlı biti önce iletmek/almak için firstbit öğesine iletin (en yaygın sıralama).

LSB: int

En az anlamlı biti önce iletmek/almak için firstbit öğesine iletin.