class SPI – bir Seri Çevresel Arayüz veri yolu protokolü (denetleyici tarafı)¶
SPI, bir denetleyici tarafından sürülen senkron bir seri protokoldür. Fiziksel düzeyde bir veri yolu 3 hattan oluşur: SCK, MOSI, MISO. Birden fazla aygıt aynı veri yolunu paylaşabilir. Her aygıtın, veri yolu üzerinde iletişim kurulacak belirli bir aygıtı seçmek için ayrı bir 4. sinyali, CS (Chip Select), olmalıdır. Bir CS sinyalinin yönetimi kullanıcı kodunda (machine.Pin sınıfı aracılığıyla) gerçekleşmelidir.
SPI ve SoftSPI sınıfları aracılığıyla hem donanım hem de yazılım SPI uygulamaları mevcuttur. Donanım SPI, okuma/yazma işlemlerini gerçekleştirmek için sistemin altta yatan donanım desteğini kullanır ve genellikle verimli ve hızlıdır ancak hangi pinlerin kullanılabileceği konusunda kısıtlamaları olabilir. Yazılım SPI bit-banging ile uygulanır ve herhangi bir pinde kullanılabilir ancak o kadar verimli değildir. Bu sınıfların kullanılabilir yöntemleri aynıdır ve esas olarak oluşturulma biçimleriyle farklılık gösterir.
Örnek kullanım:
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.
Yapıcılar¶
- 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)¶
Verilen veri yolu id üzerinde bir SPI nesnesi oluşturur. id değerleri belirli bir porta ve donanımına bağlıdır. 0, 1 vb. değerler yaygın olarak donanım SPI bloğu #0, #1 vb. seçmek için kullanılır.
Ek parametre verilmezse SPI nesnesi oluşturulur ancak başlatılmaz (varsa veri yolunun son başlatılmasındaki ayarlara sahiptir). Ek argümanlar verilirse veri yolu başlatılır. Başlatma parametreleri için
initbölümüne bakın.Yöntemler¶
- 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¶
SPI veri yolunu verilen parametrelerle başlatır:
baudrateSCK saat hızıdır.polarity0 veya 1 olabilir ve boştaki saat hattının bulunduğu seviyedir.phaseveriyi sırasıyla birinci veya ikinci saat kenarında örneklemek için 0 veya 1 olabilir.bitsher aktarımın bit cinsinden genişliğidir. Yalnızca 8’in tüm donanım tarafından desteklendiği garanti edilir.firstbitSPI.MSBveyaSPI.LSBolabilir.sck,mosi,misoveri yolu sinyalleri için kullanılacak pin (machine.Pin) nesneleridir. Çoğu donanım SPI bloğu için (yapıcıya verilenidparametresiyle seçilen) pinler sabittir ve değiştirilemez. Bazı durumlarda donanım blokları, bir donanım SPI bloğu için 2-3 alternatif pin kümesine izin verir. Keyfi pin atamaları yalnızca bir bitbanging SPI sürücüsü (id= -1) için mümkündür.
Donanım SPI durumunda gerçek saat frekansı istenen baud hızından düşük olabilir. Bu, platform donanımına bağlıdır. Gerçek hız, SPI nesnesi yazdırılarak belirlenebilir.
- read(nbytes: int, write: int = 0x00) bytes¶
writeile verilen tek baytı sürekli yazarkennbytesile belirtilen sayıda bayt okur. Okunan veriyi içeren birbytesnesnesi döndürür.
Sabitler¶
class SoftSPI – yazılımla taklit edilen SPI veri yolu¶
SoftSPI sınıfı, keyfi GPIO pinlerini bit-banging ile sürerek SPI’yı uygular. SPI ile aynı yöntem yüzeyini sunar, böylece donanım SPI’yı hedefleyen mevcut kod yalnızca bir yapıcı değişikliğiyle yazılıma geçebilir. İhtiyaç duyduğunuz pinler bir donanım SPI bloğuna kablolanmamışsa, mevcut donanım veri yollarından daha fazlasına ihtiyaç duyduğunuzda ya da bir çevre birimi donanımın üretemeyeceği standart olmayan bir saat fazlaması gerektirdiğinde kullanın.
Yapıcılar¶
- 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)¶
Bir yazılım SPI nesnesi oluşturur.
sck,mosivemisosağlanmalıdır – örtük pin seçimi yoktur. Diğer parametrelerin anlamı içinSPI.init()bölümüne bakın. Bit-bang döngüsünün daha fazla ek yükü olduğundan varsayılanbaudrate, donanımSPIiçin olandan daha düşüktür.Yöntemler¶
- 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¶
Yazılım SPI veri yolunu verilen parametrelerle yeniden başlatır. Yalnızca sağlanan argümanlar güncellenir; diğerleri önceki değerlerini korur. Her argümanın anlamı için
SPI.init()bölümüne bakın.
- deinit() None¶
Bit-bang sürücüsünün sahiplendiği GPIO pinlerini serbest bırakır ve veri yolunu sürmeyi durdurur.
- read(nbytes: int, write: int = 0x00) bytes¶
Tek bayt
writedeğerini sürekli yazarkennbytesbayt okur. Alınan veriyi içeren birbytesnesnesi döndürür.
Sabitler¶