Rabbit Note

技術的な事柄をメモしていきます.

Raspberry Pi で I2C の Repeated Start Condition を有効化

Raspberry Pi で I2C の Repeated Start Condition を有効化する方法を紹介します.

はじめに

Raspberry Pi

Raspberry Pi の I2C ドライバ(i2c_bcm2708)はデフォルトでは Repeated Start Condition (以下,リスタート)に対応していません.

リスタートを行う場合,下図で赤線で示したように,ACK の後に STOP コンディションにせず,続けて START を発行します.

Repeated Start

デバイスによっては,レジスタの読み書きにリスタートを要求するものがあります.そういったデバイスを使う場合は,以下に記載する方法で I2C ドライバのリスタートを有効化する必要があります.

リスタートの有効化方法

「/etc/modprobe.d/i2c.conf」というファイルを作成し,下記の内容を書き込むだけです.

効果の確認

リスタートが必要な I2C デバイスで効果を確認してみます.

秋月電子で売られている I2C 温度計で使われている ADT7410 は,レジスタの読み出しの際,リスターを行う必要があります(下図).

ADT7410-register-read

そこで,このデバイスに対して,レジスタの読み書きを行ってみます.

設定前

アドレス 0x03 の Configuration Register に対して 0x80 を書き込んだのに,読み出すと何故か 0x09 という値が返ってきてしまいました.

設定後

書き込んだ 0x80 が正しく読み出せました.

ちなみに,上記のレジスタ書き込みは ADT7410 を 16bit 分解能で動かすための設定になります.巷ではデフォルトの 13bit のまま動かしてる人が多いですが,精度を上げたいかたは試してみてください.

参考文献

THE I2C-BUS SPECIFICATION[キャッシュ]
I2C プロトコルの仕様書です.I2C はシンプルなプロトコルなので,この文書読むだけで大体のことは理解できます.
Pocket

,

3 thoughts on “Raspberry Pi で I2C の Repeated Start Condition を有効化

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です