Raspberry Pi 5 のSoftware-SPI libraryを作ってみた。

公開済みのRP1-GPIOライブラリを利用したソフトウェアSPIライブラリを作ってみた。

Raspberry Pi 5のRP1-Chipを使い倒す(GPIO)

【仕様】
・マスターモードのみ
・※最大通信速度はwrite()のみ5MHz、read()/transfer()は500KHz程度まで。
・データビット数は、1-32ビットに対応
・ビットオーダー対応
・チップセレクト対応(ポラリティ付き)
・ArduinoのSPI準拠クラス対応

※ソフトウェアのみでこれ以上の高速化は無理!。より高速な通信速度が必要ならRP1チップのSPI或いはPIOを使うしかない。

begin()にて、主要な動作を指定する。

void begin(MODE mode, long speed, int databit = 8, BITORDER bitorder = MSBFIRST, long cs_delay);

databit <= 8
write/read/writeAndRead/transferメソッドのbufには1バイト型配列アドレスを指定し、lenにその配列数を指定する。

databit <= 16
write/read/writeAndRead/transferメソッドのbufには2バイト型配列アドレスを指定し、lenにその配列数を指定する。

databit <= 32
write/read/writeAndRead/transferメソッドのbufには4バイト型配列アドレスを指定し、lenにその配列数を指定する。

【使い方のサンプル】

【修正】
2025-06-24
バグ修正とおまじない(HW誤動作防止)の追加。

2025-06-23
非セレクト時のエラー処理を追加したのとコンストラクタでチップセレクトピンの配列を指定できるようにしてみた。

SPI_GPIO SPI(GPIO, 11, 10, 9, { 8, 7 });

2025-06-21
slave()の追加とチップセレクト・ピンを直接指定できる可変長引数のコンストラクターを追加。

2025-06-05
制御タイミングの最適化。

2025-06-04
MODE1/2の制御タイミングを変更。

2025-05-13
ソースをより読みやすくしてみた。

2025-05-08
関数の追加とArduino準拠クラスの追加。
uint32_t transfer(uint32_t data)
class SPISettings
class SPIClass

2025-05-06
rp1-gpio.hのpinMode()修正にともなう初期化処理の変更。

【ライブラリ】