I2C Toolsの簡単な使い方について
I2C Toolsには
- i2cget
- i2cset
- i2cdetect
- i2ctransfer
- i2cdump
というコマンドが同梱されているが、この内
- i2cget
- i2cset
- i2cdetect
についてコマンドの簡単な使い方を記しておく。
i2cdetect
i2cdetectの文法は次の通り:
i2cdetect -V i2cdetect -l i2cdetect -F i2cbus i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]
i2cdetect -V
はバージョン情報を表示して終了する。
i2cdetect -l
はI2Cのバスを列挙してくれる。
$ i2cdetect -l
i2c-1 i2c 21a4000.i2c I2C adapter
i2c-2 i2c 21a8000.i2c I2C adapter
i2c-0 i2c 21a0000.i2c I2C adapter
この表示されるi2c-1
やi2c-2
などのi2c-x
のx
の部分が接続されているI2Cバスの識別子となっている。
後のコマンドでi2cbus
で指定すべきものはこのI2Cバスの識別子となっている。
i2cdetect -F i2cbus
はi2cbus
に指定されたI2Cバスが行える機能についての情報を表示してくれる
$ i2cdetect -F 1 I2C yes SMBus Quick Command yes SMBus Send Byte yes SMBus Receive Byte yes SMBus Write Byte yes SMBus Read Byte yes SMBus Write Word yes SMBus Read Word yes SMBus Process Call yes SMBus Block Write yes SMBus Block Read yes SMBus Block Process Call no SMBus PEC yes I2C Block Write yes I2C Block Read yes
i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]
は指定したi2cbus
に対して(first
とlast
が0x18などの16進数アドレスで指定されていればfirst
からlast
まで)Write要求を発行して、反応があったスレーブアドレスを表示する。
-y
は対話形式にしないようにするためのオプションで、-a
は特別な理由がない限り使わないので無視してよい。
-q
はSMBusのQuick Command機能を利用してWriteするように試みているが、必要でなければ使わないほうがよい。
-r
はSMBusのRead Byte機能を利用してWrite要求ではなくRead要求でスキャンを試みるているが、Write onlyなデバイスに対してRead要求を行うとロックされて反応が返ってこなくなる可能性があるため、必要にならない限りは使わない方が良い。
したがって基本的な使い方は
$ i2cdetect -y 1
となる。これを実行すると次のような結果が返ってくる
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- UU -- UU -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- 4a -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
4bitを境として、一番左の列はアドレスの上位桁(0x18
なら0x10
)を表しており、一番上の行はアドレスの下位4桁(0xf8
なら0x0x8)
を表している。
表中に表示されている4a
は反応のあったアドレスを表しており、上位桁と下位桁を併せた表記がなされている。
逆に--
は反応がなかったことを表している。
また、UU
は反応があったが、ドライバなどによって使用されていることを表している。
i2cget
i2cgetの文法は次の通り:
i2cget -V i2cget [-f] [-y] i2cbus chip-address [data-address [mode]]
-V
はバージョン情報を表示して終了するだけなので、2つ目の文法についてここでは説明する。
i2cbus
は/sys/bus/i2c/devices
の下にあるi2c-x
(x
は数字)というディレクトリのx
部分か、i2cdetect -l
を実行して表示されるi2c-x
のx
を指定する。
たとえば、自分の環境であれば、
$ ls /sys/bus/i2c/devices
i2c-0 i2c-1 i2c-2 i2c-3 i2c-4 i2c-5 i2c-6
があったので、i2cbus
に1
から6
までを指定することができる。
-f
は強制的に実行する際に用いる。
例えばi2cdetect
でUU
と表示されたアドレスに対して強制的にそのアドレスにあるスレーブデバイスから強制的に値を読みたい場合などに利用される。
-y
はi2cdetect
と同じで対話モードを無視するためのオプションとなっている。
chip-address
にはi2cdetect
で調べたときに反応があったスレーブアドレスを指定する。
例えば
$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- UU -- UU -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- 4a -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
となっている場合には0x4a
を指定したりする。
data-address
は利用できるスレーブアドレス下にあるデバイスに対してRead/Writeを行いたいアドレスを指定する。たとえば、WHO_AM_Iレジスタ(0x0f
)を読みたい場合は次のようにする
$ i2cdetect -y 1 0x4a 0x0f
最後のmode
には
b
: 1バイト読み込むw
: 1ワード(16bit)読み込むc
: 1ワード書き込んで読み込む
を指定でき、それぞれにプリフィクスとしてp
をつけることができる(例: cp
)。
p
はPEC送信を有効にする場合につける。
i2cset
i2cset
の文法は次の通り:
i2cset -V i2cset [-f] [-y] [-m mask] [-r] i2cbus chip-address data-address [value] ... [mode]
i2cset -V
は他と同様バージョン情報を表示して終了し。-f
、-y
オプションはi2cget
の-f
、-y
と同じものとなっている。
また、i2cbus
やchip-address
、data-address
もi2cget
と意味は同じため割愛する。
i2cset
はレジスターに値をセットするために使用されるコマンドだが、使用する値はvalue
を指定することで実現する。
ただし、複数のバイトを指定したいときにはmode
にs
かi
を指定する必要がある。
-m mask
にはマスク値を指定することができる。
このオプションを指定すると、value
に指定されている値全てに指定したmask
値がマスクされるようになっている。
最後のmode
に
- b: 1バイト書き込む
- w: 1ワード(16bit)書き込む
- s: SMBusブロックモードによる書き込み
- i: I2Cブロックモードによる書き込み
を指定することができ、i
を除く3つにはp
をプリフィクスとして付けることができる(例: cp
)。
p
はPEC送信を有効にする際に利用する。