2021年9月1日水曜日

i2c-toolsを使ってコンソールでI2C接続のスレーブデバイスを制御する

i2c-toolsを使ってコンソールでI2C接続のスレーブデバイスを制御する。
readやwrite、デバイスのチェックなどができる。

インストール

以下コマンドにてi2c-tools、I2C関連ライブラリをインストールする。
$ sudo apt-get install i2c-tools
$ sudo apt-get install libi2c-dev


I2Cバスやデバイスのアドレスを調べる

I2Cバスやデバイスのアドレスを調べるにはi2cdetectを使う
$ i2cdetect -l
-lオプションでI2Cバス(i2c-0とかi2c-1とか)の一覧を表示してくれる。

$ i2cdetect -y [I2Cバス番号]
-yオプションで指定したI2Cバス番号のバスに接続されたデバイスのアドレスを表示してくれる。(全アドレスにアクセスして反応のあったアドレスを表示してくれる)
アドレスの表になっており、16進数が書いてるものとUUとなっているアドレスのデバイスが存在することを示している。UUは何らかのアプリが使用中であることを示している。


I2Cデバイスのread

I2Cデバイスから値を読み出したい場合はi2cgetを使う。
cオプションの有無で挙動が微妙に異なる。

・オプションcあり

大抵のデバイスがマスターからのコマンドに対して応答を返すので、cオプション有りで制御することがほとんど。
$ sudo i2cget -y [I2Cバス番号] [デバイスアドレス] [書き込みデータ] c
指定したアドレスのI2Cデバイスに書き込みデータを書き込んでから、そのデバイスからの応答データを読み込む。
例: $ sudo i2cget -y 0 0x21 0x00 c
i2c-0のアドレスが0x21のデバイスに0x00を書き込んだ後、そのデバイスからデータを読み込む。
 

・オプションなし

ただ読み込むだけ。あまり使うことがない。
$ sudo i2cget -y  [I2Cバス番号] [デバイスアドレス]
指定したアドレスのI2Cデバイスからデータを読み込む。
例: $ sudo i2cget -y 1 0x20
i2c-1のアドレスが0x20のデバイスからデータを読み込む


I2Cデバイスのwrite

I2Cデバイスに値を書き込みたい場合はi2csetを使う。
$ sudo i2cset -y [I2Cバス番号] [デバイスアドレス] [書き込みデータ1] [書き込みデータ2] ・・・
特定のアドレスに指定したデータを1バイトずつ書き込む。書き込みデータは一度に複数指定できる。
例: $ sudo i2cset -y 0 0x20 0x01 0x03
i2c-0に接続された0x20というスレーブに0x01と書き込んだ後0x03を書き込む。

0 件のコメント:

コメントを投稿