INA226 と arduino の I2C 信号をロジックアナライザで見てみました。
コードは前回と同じものです。1秒ごとに4つのデータをゲットしています。
トリガは、SDA にかけました。Hi から Low になって信号が行くようです。
まず、I2C アドレス0x40 のレジスタ 0x02 を投げて、値が帰ってくる流れが見えます。読み出しには、1.7ms ほどかかっていることがわかりました。ビットの信号は、4us 程度のようです。SDAでビットが立っているのを判別しているようです。
たとえば、最初は INA226_REG_BUSVOLTAGE (0x02) を読み出しているようで、値は16進数で 0x0E9E が帰ってきています。10進数では、3742 でこれに1.25 を掛けたものが mV になるので、4677.5 mV = 4.6775V ということですね。精度は、0.1mV ということです。
I2C のリアルタイムな生データを見るのは今回が初めてです。なかなか、IC同士で通話している感じがおもしろいですね。
1000分の1,2秒で、データを読み取っていて、0 と 1 の Hi と Low の信号のやり取りでそれをやっているというのが目で見えてわかりやすいです。ロジックアナライザって偉い存在ですね。
▼まとめ
・INA226 と arduino の I2C 信号を見てみた
・SDA の LOW にトリガーをかけて採取。
・スレーブアドレス+データ領域を指定すると、対応するスレーブから値が帰ってくる
・SCL にビットデータが流れ、SDA にデータ流れる感じ。両方ともHi になった部分が ビットが立つ感じ。
・ビット のHi になる時間は、4us ほど。
・1つのレジスタの読み出しには、1.7ms ほどかかる。
・呼び出しから応答までの間隔は、1ms ほど。0.7ms でデータをやり取りしている。合計で1.7ms
・安物のロジックアナライザでも十分現象を観察できた。