Raspberry Pi / I2C > I2Cセンサからデータを読み取る (成功編) / link: Raspberry Pi で I2C の Repeated Start Condition を有効化

More than 1 year has passed since last update.


動作環境

Raspberry Pi 2 Model B (以下RPi)

Raspbian Jessie
Tektronix TDS 2024C (200 MHz, 2GS/s)
とあるI2Cセンサ

I2Cセンサの読取りを「手軽に」行おうとRaspberry Piを使い始めた。

その結果


  • i2cdumpでSCL, SDAの波形を確認


    • アドレス範囲が広い場合: OK

    • アドレス範囲が狭い場合: NG



  • i2cgetでSCL, SDAの波形を確認


    • NG



  • RPi.GPIOにてpythonでコーディング


    • ACKの段階で応答がおかしい

    • RPiを使う意味があまりない (MSP430などのマイコンで良い)

    • RTOSがからんで、波形のタイミングも変わる



考えを変更した結果、以下ではうまく動いた。

https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=33334

のby edo1 » Fri Oct 30, 2015 4:49 pm

にあるコードを参考にしたら動いた。

あとは、この成功した状態でオシロにて波形を確認して、それと同等の波形を生成するコードをMSP430で実装するだけ。

問題はSDAのIN/OUTを切り替えるタイミングはオシロの波形からは分からない点。

なお、PythonでRPi.GPIOを使った後は、以下のコマンドを実行しないと最後のCコードは正常動作しなかった。

$ sudo modprobe -r i2c-bcm2708

$ sudo modprobe i2c-bcm2708

以下が実際に読み取った波形 (オレンジがSCL, 水色がSDA)。

F0002TEK.png


  • 左カーソルの左側がstart condition。

  • その後にslave address 0x28を送信 (7bit)。

  • readビットである1を送信 (1bit)。

  • 右カーソルからデータ読取 (1バイト目)。


    • 先頭2つはステータスビット(0x00なら正常)。



以下は1バイト目と2バイト目の波形。

F0003TEK.png

SCLは100kHz。

圧力の単位換算

http://calc-site.com/units/pressure


教えていただいた事項

@fujiwarasoftservice さんのコメントにてRepeated Start ConditionをRaspberry Piで行う方法を紹介いただきました。

情報感謝です。