2016年11月5日土曜日

Nucleo F401RE(mbed)でMCP23S17を使う。 バッファリングしてみる。

使っているライブラリがTickerで一定間隔で状態を問い合わせる仕組みになっているので毎回MCP23S17にSPIで問い合わせると通信コストが高そうなので、バッファリングしてみることを考えてみた。

mbedのソースの中までは見ていないが、SPI通信中は値が取得できるまで待ち状態になってそうな気がする。必要な値を毎回MCP23S17にぶら下がっているデバイスに問い合わせているとその間他の処理ができなくなる可能性が高いと思う。

MCP23S17のGPIOを全部読み取りとして使えば定期的にSPI経由でポーリングして2Byte(MCP23S17はGPIOがPortAx8bit、PortBx8bit)を本体のNucleoにバッファリングしてやれば、SPI通信のコストは下げられそうだ。

4×4のキーパッドを使うとGPIOのうち4本は書き込みに使わないといけないので、バッファリングの仕組みが複雑になる。キーパッドはあきらめてタクトスイッチとロータリーエンコーダーだけにしてテストしてみた。


mbed repogitory:
https://developer.mbed.org/users/ryood/code/ExioBufferdController_Test/

SPI通信のようす


PortBにつなげているタクトスイッチx8を適当に押しながら測定


ch1:sck ch2:MISO

拡大