用途
SPI(Serial Peripheral Interface)通信を扱うためのライブラリ。
LCD、センサー、SDカードなど、多くの周辺機器との高速通信に利用。
主要なメソッド
spi_init(spi, baudrate)
SPI を初期化し、通信速度(ボーレート)を設定する
※接続してる機器が対応していない速度を設定すると通信に失敗するよ
spi_deinit(spi)
SPI を無効化
spi_set_format(spi, bits, cpol, cpha, order)
通信フォーマット(ビット数、クロック極性、クロック位相、ビット順)を設定
※周辺機器ごとに “モード” が決まっているため、ここを間違えると正しく通信できない
spi_write_blocking(spi, src, len)
データを送信(ブロッキング)
※指定したバイト数送信が終わるまで処理が止まる
spi_read_blocking(spi, tx_data, dst, len)
データを受信(ブロッキング)
※SPIは常に送受信同時のため、受信時にも送信用データ(tx_data)が必要
spi_write_read_blocking(spi, src, dst, len)
送信しながら受信する処理
※同時に見えるが実際は「送信→受信」をまとめて行うイメージ
spi_is_writable(spi)
送信可能かどうかを確認(FIFO に空きがあるか)
spi_is_readable(spi)
受信データが存在するかどうかを確認
spi_get_hw(spi)
SPI ハードウェア構造体を取得
※低レベルのレジスタに直接アクセスしたいときに使用
※引数のspiはspiのポート番号。ピン番号ではないよ。
補足
SPIモード(CPOL/CPHA)を間違えると何も動かない
SPI には 4つの通信モード(0〜3)がある。
周辺機器のデータシートに「SPI Mode 3」などと書いてあるため、
spi_set_format() で正しく設定する必要がある。
SPIは通信速度が速いが、遅すぎると表示や読み出しが間に合わないことがある
例:LCD で1フレーム転送するとき、低速なボーレートだと画面更新が遅れる。
逆に、周辺機器が対応していないほど高速にすると通信エラーになる。
受信だけしたいときでも送信用データが必要
SPIは「送信と受信を同時に行う」仕組みのため、
spi_read_blocking() でも tx_data(ダミーデータ)を送る必要がある。
CS(チップセレクト)は自分で管理
通信前に CS を 0(LOW)にして開始、通信後に 1(HIGH)に戻す。
これは SPI ライブラリが自動では行ってくれない。
SPIの基本的な使い方
こちらの記事でめっちゃ解説してるから読んでみてね

