kelas SPI -- protokol serial yang digerakkan oleh controller¶
SPI adalah protokol serial sinkron yang digerakkan oleh controller. Pada level fisik, protokol ini menggunakan tiga jalur (SCK, MOSI, MISO) ditambah jalur chip-select per periferal.
Penggunaan mirip dengan I2C; perbedaan utama adalah parameter yang diteruskan saat menginisialisasi bus:
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
Satu-satunya parameter yang diperlukan adalah mode (SPI.CONTROLLER atau SPI.PERIPHERAL). polarity adalah level idle dari SCK (0 atau 1). phase memilih apakah data disampling pada tepi clock pertama (0) atau kedua (1). crc adalah None (tanpa CRC) atau polinomial CRC.
Mentransfer 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
Konstruktor¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
Membuat objek SPI pada
busyang diberikan (indeks periferal SPI integer, misalnya2untukSPI2). Tanpa parameter tambahan, objek dibuat tetapi tidak diinisialisasi (mempertahankan pengaturan bus sebelumnya, jika ada); jika argumen tambahan diberikan, bus diinisialisasi dengan argumen tersebut. Lihatinit()untuk parameter yang tersedia.SPI(2)terhubung ke pin header yang sama pada setiap STM32 OpenMV Cam; OpenMV Cam N6 juga mengeksposSPI(4):Bus
NSS
SCK
MISO
MOSI
SPI(2)(semua STM32 OpenMV Cam)P3P2P1P0SPI(4)(hanya OpenMV Cam N6)P15P16P17P18NSStidak digerakkan oleh periferal SPI pada salah satu bus; bebas digunakan sebagai chip-select GPIO biasa.Metode¶
- 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¶
Menginisialisasi bus SPI dengan parameter yang diberikan:
modeharus berupaSPI.CONTROLLERatauSPI.PERIPHERAL.baudrateadalah laju clock SCK (hanya masuk akal untuk controller).prescaleradalah pembagi frekuensi yang digunakan untuk menurunkan SCK dari frekuensi bus APB; penggunaanprescalermenggantikanbaudrate.polaritydapat berupa 0 atau 1, dan merupakan level di mana jalur clock idle berada.phasedapat berupa 0 atau 1 untuk mengambil sampel data pada tepi clock pertama atau kedua.bitsdapat berupa 8 atau 16, dan merupakan jumlah bit dalam setiap kata yang ditransfer.firstbitdapat berupaSPI.MSBatauSPI.LSB.tiTrue menunjukkan Texas Instruments, sebagai lawan dari Motorola, konvensi sinyal.crcdapat berupa None untuk tidak ada CRC, atau penentu polinomial.
Frekuensi clock SPI mungkin tidak persis sama dengan
baudrate. Hardware hanya mendukung clock yang merupakan frekuensi bus APB induk dibagi dengan pembagi berpangkat dua (2, 4, 8, 16, 32, 64, 128atau256); driver memilih yang tertinggi yang tidak melebihibaudrateyang diminta.SPI(2)berada di APB1. Untuk kontrol presisi atas clock, aturprescalersecara langsung alih-alihbaudrate.Mencetak objek SPI menampilkan laju baud yang dihitung dan pembagi frekuensi yang dipilih.
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
Menerima data pada bus:
recvdapat berupa integer, yang merupakan jumlah byte yang akan diterima, atau buffer yang dapat diubah, yang akan diisi dengan byte yang diterima.timeoutadalah batas waktu dalam milidetik untuk menunggu penerimaan.
Nilai kembalian: jika
recvadalah integer maka buffer baru dari byte yang diterima, jika tidak, buffer yang sama yang diteruskan kerecv.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Mengirim data pada bus:
sendadalah data yang akan dikirim (integer untuk dikirim, atau objek buffer).timeoutadalah batas waktu dalam milidetik untuk menunggu pengiriman.
- send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes¶
Mengirim dan menerima data pada bus secara bersamaan:
sendadalah data yang akan dikirim (integer untuk dikirim, atau objek buffer).recvadalah buffer yang dapat diubah yang akan diisi dengan byte yang diterima. Ini bisa sama dengansend, atau dihilangkan. Jika dihilangkan, buffer baru akan dibuat.timeoutadalah batas waktu dalam milidetik untuk menunggu penerimaan.
Nilai kembalian: buffer dengan byte yang diterima.
Konstanta¶
- CONTROLLER: int¶
Menginisialisasi bus SPI sebagai master (controller) -- OpenMV Cam menggerakkan
SCKdanMOSIdan bertanggung jawab atas transaksi.
- PERIPHERAL: int¶
Menginisialisasi bus SPI sebagai slave (peripheral) -- OpenMV Cam merespons pulsa clock yang digerakkan oleh controller jarak jauh.