class SPI -- Serial Peripheral Interface バスプロトコル(コントローラ側)¶
SPI はコントローラによって駆動される同期式シリアルプロトコルです。物理レベルでは、バスは 3 本の信号線で構成されます: SCK、MOSI、MISO。複数のデバイスが同じバスを共有できます。各デバイスには、バス上の特定のデバイスを選択して通信するために、別途 4 本目の信号 CS(Chip Select)が必要です。CS 信号の管理はユーザーコード内(machine.Pin クラスを介して)で行う必要があります。
ハードウェア SPI とソフトウェア SPI の両方の実装が SPI クラスと SoftSPI クラスを介して存在します。ハードウェア SPI はシステムの基盤となるハードウェアサポートを利用して読み書きを実行し、通常は効率的で高速ですが、使用できるピンに制約がある場合があります。ソフトウェア SPI はビットバンギングによって実装され、任意のピンで使用できますが効率は劣ります。これらのクラスは利用可能なメソッドが同じで、主に構築方法が異なります。
使用例:
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 で、それぞれ最初または 2 番目のクロックエッジでデータをサンプリングします。bitsは各転送のビット幅です。すべてのハードウェアでサポートが保証されているのは 8 のみです。firstbitはSPI.MSBまたはSPI.LSBを指定できます。sck、mosi、misoはバス信号に使用するピン(machine.Pin)オブジェクトです。ほとんどのハードウェア SPI ブロック(コンストラクタのidパラメータで選択)では、ピンは固定されており変更できません。一部のケースでは、ハードウェアブロックがハードウェア SPI ブロックに対して 2〜3 通りの代替ピンセットを許可します。任意のピン割り当てが可能なのはビットバンギング SPI ドライバ(id= -1)のみです。
ハードウェア SPI の場合、実際のクロック周波数は要求した baudrate より低くなる可能性があります。これはプラットフォームのハードウェアに依存します。実際のレートは SPI オブジェクトを print することで確認できます。
- read(nbytes: int, write: int = 0x00) bytes¶
writeで指定された単一のバイトを連続的に書き込みながら、nbytesで指定された数のバイトを読み取ります。読み取ったデータを含むbytesオブジェクトを返します。
定数¶
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より低くなっています。ビットバンギングループにはより多くのオーバーヘッドがあるためです。メソッド¶
- 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¶
指定したパラメータでソフトウェア SPI バスを再初期化します。指定された引数のみが更新され、その他は以前の値を保持します。各引数の意味については
SPI.init()を参照してください。
定数¶