😺

Linux: I2CデバイスのレジスタのRead/Write

2023/10/27に公開

はじめに

Linuxで接続されているI2Cデバイスのレジスタをリードライトする時に利用するi2c-toolsについてまとめています。Linuxカーネル本家のツールということもあり?、ほとんど全てのプラットフォーム/SoCで使えると思います。

https://archive.kernel.org/oldwiki/i2c.wiki.kernel.org/index.php/I2C_Tools.html

インストール

sudo apt-get install i2c-tools

I2Cバスの一覧を表示

i2cdetectコマンドを利用して確認ができ、/dev/i2c*に存在するものが表示されます。

$ i2cdetect -l
i2c-3   i2c             1230000.i2c                             I2C adapter
i2c-1   i2c             4560000.i2c                             I2C adapter

特定のI2Cバスにぶら下がるデバイスのレジスタをダンプ

i2cdumpコマンドを使います。

使い方
i2cdump -y <対象のバスの番号, i2c-*の*の番号> 対象デバイスのスレーブアドレス(7bit)
$ i2cdump -y 2 0x8
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00    ..............?.
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00    ..............?.
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

特定のデバイスの特定のレジスタのリード/ライト

i2cget, i2csetコマンドを利用します。

リード

使い方
i2cget -y <対象のバスの番号, i2c-*の*の番号> スレーブアドレス(7bit) レジスタのアドレス
$ i2cget -y 3 0x10 0x07
0xca

ライト

使い方
i2cset -y <対象のバスの番号, i2c-*の*の番号> スレーブアドレス(7bit) レジスタのアドレス データ
$ i2cset -y 3 0x20 0x17

参考文献

https://wiki.st.com/stm32mpu/wiki/I2C_i2c-tools

https://moba1.hatenablog.com/entry/2019/10/09/114145

Discussion