血圧計の解析(6)

あらすじ

血圧計のi2cバスにM5StickCにつなごうとしたが、 M5StickCにつなぐと、通信が異常になるので、 Arduinoにつないで回避しようという事になった。

Arduinoでi2cスニッフィング

昨日試した、スニッフィング。 パケット先頭しか見えてなかったので、 もっと先まで見てみる。

Unoも2.5KBメモリがあるから、 バッファをもうちょい増やしてもいいかもしれない。

試したが、ビットが落ちてる所がある。 今度こそ、本当に、バックグラウンドプロセスはないはずなんだけど。

Arduinoでi2c通信

しかたないから、バックアッププランだ。

Arduinoがバスをのっとって、血圧計のフラッシュメモリを読む。

探したら、SoftWireというライブラリを発見した。

うっかり5Vの信号を送らないように改造しようとしたら、 都合がいい事に、このSoftWireライブラリは5Vを送らない設定ができて、 かつ、最初から有効になってた。

やったね。

前回のM5StickC用のコードをコピペして動かしてみたが、 データが読めなかった。

とりあえず、問題を切り分けるために、 オシロスコープで読んでみた。

Arduinoはデバイスを呼び出していて、デバイスは返事をしているのに、 そのACK返事を無視してリトライしているように見える。

更にprintfデバッグをした所、 デバイスのACKがこなくてデバイスが存在しないと思っているようだ。

wave

このデバイスからのACKビットが、デバイスは0のつもりだが、 Arduinoは1と判定している。 電圧的には1Vぐらい。

まとめ

デバイスのファンアウト?インピーダンスがわるいのか。 ここら辺はアナログ的な世界にも足を踏み込むので辛い。 ADCで読むとか、レベルコンバータを使ってみるとか。

どうしたものか。

そろそろあきらめて、血圧計を買うのがいい気がしてきた。