Arduino用のSPI/TWI共通インターフェース・クラスを作ってみた。

ArduinoのSPIやTWI(Wire)って、基本的にはデータの書き込みと読み込みするだけなのに全く仕様が違うのですぐ使い方を忘れてしまう。

そろそろボケ始めてるだけのことかもしれないが(笑)、とにかく毎回使い方を調べたりするのが面倒臭いのでSPI/TWIを共通仕様で使えるようなシンプルなインターフェース・クラスを考えてみた。

基本仕様はシンプルに初期化と終了及び書き込みと読み込みのみ。その他のインターフェース特有のパラメタ等は実装先クラスで対応する。

void begin(void)
void end(void)
void write(const uint8_t *buf, uint8_t len)
uint8_t read(uint8_t *buf, uint8_t len)
uint8_t writeAndRead(const uint8_t *wbuf, uint8_t wlen, uint8_t *rbuf, uint8_t rlen)

これくらいなら覚えておけるだろう。たぶん。(笑)

【基本インターフェース・クラス(PBUSIF)】

初期化を行う。

終了処理を行う。

データを書き込む。

データを読み込む。戻り値は読み込んだバイト数。

データ(wbuf, wlen)を書き込み後にデータ(rbuf, rlen)を読み込む。戻り値は読み込んだバイト数。

【SPI実装クラス(SPIBUS)】

uint8_t CS … チップセレクト・ピン番号
uint32_t CLOCK … SPIバスクロック(省略値は4MHz)
uint8_t MODE … SPIモード(省略値はSPI_MODE3)
uint8_t BITORDER … ビット・オーダー(省略値はMSBFIRST)

【TWI実装クラス(TWIBUS)】

uint8_t SLAVE … スレーブ・アドレス
uint32_t CLOCK … TWIバス・クロック (省略値は100KHz)

【使い方の例】

【ライブラリ】