LoginSignup
2
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-03-07
動作環境
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で行う方法を紹介いただきました。

情報感謝です。

2
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4