class SPI -- 序列周邊介面匯流排協定(控制器端)¶
SPI 是一種由控制器驅動的同步序列協定。在實體層面上,匯流排由 3 條線組成:SCK、MOSI、MISO。多個裝置可共用同一條匯流排。每個裝置應有獨立的第 4 條訊號線 CS(Chip Select,晶片選擇),用以選取匯流排上要進行通訊的特定裝置。CS 訊號的管理應在使用者程式碼中處理(透過 machine.Pin 類別)。
硬體與軟體 SPI 實作分別透過 SPI 與 SoftSPI 類別提供。硬體 SPI 利用系統底層的硬體支援來執行讀寫,通常高效快速,但對可使用的接腳可能有所限制。軟體 SPI 透過位元拍打(bit-banging)實作,可在任何接腳上使用,但效率較低。這兩個類別提供相同的可用方法,主要差異在於建構方式。
使用範例:
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.
建構子¶
- 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)¶
在指定的匯流排 id 上建構一個 SPI 物件。id 的值取決於特定移植版及其硬體。0、1 等值通常用於選取硬體 SPI 區塊 #0、#1 等。
若未提供額外參數,則會建立 SPI 物件但不進行初始化(它將沿用匯流排上次初始化的設定,若有的話)。若給定額外引數,則匯流排會被初始化。初始化參數請參閱
init。方法¶
- 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 匯流排:
baudrate是 SCK 時脈速率。polarity可為 0 或 1,表示閒置時脈線所停留的電位。phase可為 0 或 1,分別表示在第一個或第二個時脈邊緣上取樣資料。bits是每次傳輸的位元寬度。僅 8 保證為所有硬體所支援。firstbit可為SPI.MSB或SPI.LSB。sck、mosi、miso是用於匯流排訊號的接腳(machine.Pin)物件。對於大多數硬體 SPI 區塊(由傳給建構子的id參數所選取),接腳是固定的且無法變更。在某些情況下,硬體區塊允許硬體 SPI 區塊有 2-3 組替代的接腳組合。只有在位元拍打 SPI 驅動程式(id= -1)中才可任意指派接腳。
在硬體 SPI 的情況下,實際的時脈頻率可能低於所請求的 baudrate。這取決於平台硬體。實際速率可透過列印 SPI 物件來得知。
常數¶
class SoftSPI -- 軟體模擬的 SPI 匯流排¶
SoftSPI 類別透過位元拍打任意 GPIO 接腳來實作 SPI。它暴露與 SPI 相同的方法介面,因此針對硬體 SPI 撰寫的既有程式碼只需變更建構子即可切換為軟體實作。當你需要的接腳未連接到硬體 SPI 區塊、需要的匯流排數量超過可用硬體匯流排,或周邊裝置要求硬體無法產生的非標準時脈相位時,可使用它。
建構子¶
- 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)¶
建構一個軟體 SPI 物件。必須提供
sck、mosi和miso——沒有隱含的接腳選擇。其他參數的意義請參閱SPI.init()。預設的baudrate比硬體SPI低,因為位元拍打迴圈有較多的開銷。方法¶
常數¶