class SPI -- protokol bus Serial Peripheral Interface (sisi kontroler)¶
SPI adalah protokol serial sinkron yang dikendalikan oleh sebuah kontroler. Pada tingkat fisik, sebuah bus terdiri dari 3 jalur: SCK, MOSI, MISO. Beberapa perangkat dapat berbagi bus yang sama. Setiap perangkat harus memiliki sinyal keempat yang terpisah, CS (Chip Select), untuk memilih perangkat tertentu pada bus tempat komunikasi berlangsung. Pengelolaan sinyal CS harus dilakukan dalam kode pengguna (melalui kelas machine.Pin).
Implementasi SPI perangkat keras dan perangkat lunak tersedia melalui kelas SPI dan SoftSPI. SPI perangkat keras menggunakan dukungan perangkat keras yang mendasari sistem untuk melakukan baca/tulis dan biasanya efisien dan cepat, tetapi mungkin memiliki batasan pada pin mana yang dapat digunakan. SPI perangkat lunak diimplementasikan dengan bit-banging dan dapat digunakan pada pin mana pun tetapi tidak seefisien. Kedua kelas ini memiliki metode yang sama dan berbeda terutama dalam cara membuatnya.
Contoh penggunaan:
from machine import SPI, Pin
spi = SPI(0, baudrate=400000) # Create SPI peripheral 0 at frequency of 400kHz.
# Depending on the use case, extra parameters may be required
# to select the bus characteristics and/or pins to use.
cs = Pin(4, mode=Pin.OUT, value=1) # Create chip-select on pin 4.
try:
cs(0) # Select peripheral.
spi.write(b"12345678") # Write 8 bytes, and don't care about received data.
finally:
cs(1) # Deselect peripheral.
try:
cs(0) # Select peripheral.
rxdata = spi.read(8, 0x42) # Read 8 bytes while writing 0x42 for each byte.
finally:
cs(1) # Deselect peripheral.
rxdata = bytearray(8)
try:
cs(0) # Select peripheral.
spi.readinto(rxdata, 0x42) # Read 8 bytes inplace while writing 0x42 for each byte.
finally:
cs(1) # Deselect peripheral.
txdata = b"12345678"
rxdata = bytearray(len(txdata))
try:
cs(0) # Select peripheral.
spi.write_readinto(txdata, rxdata) # Simultaneously write and read bytes.
finally:
cs(1) # Deselect peripheral.
Konstruktor¶
- class machine.SPI(id: int, baudrate: int = 1000000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None)¶
Membuat objek SPI pada bus yang diberikan, id. Nilai id bergantung pada port tertentu dan perangkat kerasnya. Nilai 0, 1, dst. umumnya digunakan untuk memilih blok SPI perangkat keras #0, #1, dst.
Tanpa parameter tambahan, objek SPI dibuat tetapi tidak diinisialisasi (memiliki pengaturan dari inisialisasi terakhir bus, jika ada). Jika argumen tambahan diberikan, bus diinisialisasi. Lihat
inituntuk parameter inisialisasi.Metode¶
- init(baudrate: int = 1000000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = SPI.MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None) None¶
Menginisialisasi bus SPI dengan parameter yang diberikan:
baudrateadalah laju clock SCK.polaritydapat berupa 0 atau 1, dan merupakan level tempat jalur clock idle berada.phasedapat berupa 0 atau 1 untuk mengambil sampel data pada tepi clock pertama atau kedua.bitsadalah lebar dalam bit setiap transfer. Hanya 8 yang dijamin didukung oleh semua perangkat keras.firstbitdapat berupaSPI.MSBatauSPI.LSB.sck,mosi,misoadalah objek pin (machine.Pin) yang digunakan untuk sinyal bus. Untuk sebagian besar blok SPI perangkat keras (yang dipilih oleh parameteridpada konstruktor), pin bersifat tetap dan tidak dapat diubah. Dalam beberapa kasus, blok perangkat keras memungkinkan 2-3 set pin alternatif untuk blok SPI perangkat keras. Penugasan pin sembarang hanya dimungkinkan untuk driver SPI bitbanging (id= -1).
Dalam kasus SPI perangkat keras, frekuensi clock aktual mungkin lebih rendah dari laju baud yang diminta. Hal ini bergantung pada perangkat keras platform. Laju aktual dapat ditentukan dengan mencetak objek SPI.
- read(nbytes: int, write: int = 0x00) bytes¶
Membaca sejumlah byte yang ditentukan oleh
nbytessambil terus-menerus menulis satu byte yang diberikan olehwrite. Mengembalikan objekbytesdengan data yang dibaca.
Konstanta¶
class SoftSPI -- bus SPI yang diemulasi oleh perangkat lunak¶
Kelas SoftSPI mengimplementasikan SPI dengan bit-banging pin GPIO sembarang. Kelas ini mengekspos permukaan metode yang sama dengan SPI sehingga kode yang menargetkan SPI perangkat keras dapat beralih ke perangkat lunak hanya dengan mengubah konstruktor. Gunakan ketika pin yang Anda butuhkan tidak terhubung ke blok SPI perangkat keras, ketika Anda memerlukan lebih banyak dari bus perangkat keras yang tersedia, atau ketika sebuah periferal memerlukan phasing clock non-standar yang tidak dapat dihasilkan oleh perangkat keras.
Konstruktor¶
- class machine.SoftSPI(baudrate: int = 500000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None)¶
Membuat objek SPI perangkat lunak.
sck,mosidanmisoharus disediakan -- tidak ada pemilihan pin implisit. LihatSPI.init()untuk arti parameter lainnya.baudratedefault lebih rendah dari padaSPIperangkat keras karena loop bit-bang memiliki overhead lebih banyak.Metode¶
- init(baudrate: int = 500000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = SoftSPI.MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None) None¶
Menginisialisasi ulang bus SPI perangkat lunak dengan parameter yang diberikan. Hanya argumen yang disediakan yang diperbarui; yang lain mempertahankan nilai sebelumnya. Lihat
SPI.init()untuk arti setiap argumen.
- deinit() None¶
Melepaskan pin GPIO yang diklaim oleh driver bit-bang dan berhenti mengendalikan bus.
- read(nbytes: int, write: int = 0x00) bytes¶
Membaca
nbytesbyte sambil terus-menerus menulis satu bytewrite. Mengembalikan objekbytesyang berisi data yang diterima.
Konstanta¶