MCP23S17 セットアップ
SPIインタフェースで16ビットパラレルインタフェースに接続できるMCP23S17は安価で便利なデバイスであるが、その分制御が複雑でややわかりにくい。
そこで使う上で勘所となることを記録しておくことにした。
1.パワーオンリセット
MCP23S17には電源投入時にリセットがかかる機能があるが、あまり使えない。
通常コントローラのSPIがその後初期化されるので各信号線が変化することがある。この変化をMCP23S17が受け取るのでその次のSPIからのパケットを正しく受け取れない。
回避策は、MCP23S17のリセット信号をコントローラに接続し、コントローラのSPIの初期化後にリセットをかけ直すことで回避できる。
2.リセット
データシートによるとリセット信号はレベルで動作しているように見えるが、
立ち下がりと立ち上がりの両エッジが必要なようだ(詳細は検証していない)。
1の回避策を採用する場合は、ハイレベルにしてある(リセット解除)状態からローレベルにしてハイレベルに戻す操作を要する。
3.データ転送
3.1 デバイスの設定
16ビットのパケットを送る。
3.2 読み出し、書き込み
バイトモードとワードモードがあるが、コマンドが16ビットなのとデバイスのポートが16ビットなので私はワードモードを好んでいる。
ワードモードの場合、読み出しも書き込みもパケットは32ビット(2ワード)である。1ワード目がコマンドで、2ワード目がデータで読み出しの場合は適当な値を1ワード送信するとMISOに読み出しデータが乗ってくる。