Software
RaspberryPi
元に戻る

Shell Commands i2ctools 2024/11/01

本文目次

本文以外目次
1.i2c関係のコマンド
 (1)i2c-toolsのコマンド
 (2)i2cdetect
 (3)i2cdump
 (4)i2cget
 (5)i2cset
 (6)i2ctransfer
2.man ページ
 (1)i2c-tools
 (2)i2cdetect
 (3)i2cdump
 (4)i2cget
 (5)i2cset
 (6)i2ctransfer
 (7)eeprog
■RaspberryPi
 (1)RaspberryPi Hardware
 (2)RaspberryPi OS Install & I/Otest
 (3)RaspberryPi Programming
 (4)RaspberryPi Shell Commands sed
■Python (プログラム言語)
 (1)Python_Start
 (2)Python_Library
 (3)Python_Device Control
 (4)Python Module SMBus
 (5)PythonPackageInstaller pip
■その他
 (1)正規表現
 (2)ASCIIコード

本   文
1.i2c関係のコマンド
 (1)i2c-toolsのコマンド
  i2c-toolsのコマンドは下表のものがある。
i2cdetect I2Cに接続されている機器を検出しID番号を表示する。 i2cdetect
i2cdump I2Cに接続されているレジスタを調べます。 i2cdump
i2cget I2C/SMBus チップ レジスタから読み取ります。 i2cget
i2cset I2Cレジスタを設定します。 i2cset
i2ctransfer 1 回の転送でユーザー定義の I2C メッセージを送信します。 i2ctransfer
 [目次へ戻る]

 (2)i2cdetect
I2C チップを検出する

i2cdetect [ -y ] [ -a ] [ -q | -r ] i2cbus [最初 最後]
i2cdetect -F i2cbus
i2cdetect -V
i2c検出 -l
-y 対話モードを無効にする。デフォルトでは、i2cdetect は I2C バスを操作する前にユーザーからの確認を待つ。このフラグを使用すると、操作が直接実行する。これは主にスクリプトで使用するためのものです。注意して使用すること。
-a 通常以外のアドレスを強制的にスキャンする。推奨しない。
-q プローブには SMBus の「クイック書き込み」コマンドを使用する (デフォルトでは、各アドレスに対して最も安全であると考えられるコマンドが使用されます)。これは推奨しない。多くの IBM Thinkpad ラップトップに搭載されている Atmel AT24RF08 EEPROM が破損することが知られている。
-r プローブには SMBus の「バイト読み取り」コマンドを使用する (デフォルトでは、各アドレスに対して最も安全であると考えられるコマンドが使用されます)。これは推奨しない。これは、さまざまな書き込み専用チップ (特にアドレス 0x69 のクロック チップ) で SMBus をロックすることが知られている
-F アダプタによって実装された機能のリストを表示して終了する。
-V バージョンを表示する。
-I インストールされているバスのリストを出力する。
i2cdetect は、I2C バスをスキャンしてデバイスを探すユーザー空間プログラムです。指定されたバスで検出されたデバイスのリストを含むテーブルを出力する。i2cbusは、スキャンする I2C バスの番号または名前を示し、 i2cdetect -lでリストされたバスの 1 つに対応している必要がある。オプションのパラメータfirstとlast は、スキャン範囲を制限します (デフォルト: 0x03 から 0x77)。
i2cdetect は、I2C バスの機能を照会するためにも使用できる (オプション-Fを参照)。

マスタは書くアドレスに対してWrite要求を送出する。
スレーブデバイスはWrite要求に応答できる場合、 Write要求に対してSDAをLOWに固定(ACK)する。
マスタは書くアドレスLWrite要求送出後の SDAがHIGHの場合、NACK(=スレーブデバイスがいない)とし、 SDAがLLOWの場合、ACK(=スレーブデバイスがいる)とする。
そして、その結果を出力している。

tryday@tryday:~ $ sudo i2cdetect -y -r 1 0x40 0x52
この命令はWrite要求の代わりに、Read要求で同様の処理を行う。
ただし、Read要求では、スレーブはACKを返した(=SDAをLOWにひっぱる)後にデータを返す。

警告
このプログラムは I2C バスを混乱させ、データ損失やさらに悪い事態を引き起こす可能性があります。
  [i2cコマンドへ] [目次へ戻る]

 (3)i2cdump
I2Cレジスタを調べる

i2cdump [ -f ] [ -r 先頭-末尾] [ -y ] i2cbus アドレス[モード[バンク[バンクレジスタ]]]
i2cdump -V

-f デバイスがすでにビジー状態であっても、デバイスへのアクセスを強制します。デフォルトでは、i2cdump はカーネル ドライバーの制御下にあるデバイスへのアクセスを拒否する。このフラグの使用は危険で、問題のカーネル ドライバーを深刻に混乱させる可能性がある。また、i2cdump が無効な値を返す可能性もある。したがって、自分の責任で、自分が何をしているのかわかっている場合にのみ使用すること。
-r 名-姓
アクセスされるレジスタの範囲を制限します。このオプションは、モードb、w、c、およびWでのみ使用できる。モードWの場合、最初が偶数で最後が奇数である必要がある。
-y 対話モードを無効にする。デフォルトでは、i2cdump は I2C バスを操作する前にユーザーからの確認を待つ。このフラグを使用すると、操作が直接実行する。これは主にスクリプトで使用するためのものです。注意して使用すること。
-V バージョンを表示する。
i2cdump には少なくとも 2 つのオプションを指定する必要がある。i2cbusは、スキャンする I2C バスの番号または名前を示す。この番号は、i2cdetect -lによってリストされるバスの 1 つに対応している必要がある。addressは、そのバス上でスキャンするアドレスを示し、0x03 から 0x77 までの整数です。

modeパラメータが指定されている場合、それはb、w、s、またはiのいずれかの文字で、それぞれ 1 バイト、 16 ビット ワード、SMBus ブロック、I2C ブロックの読み取りサイズに対応する。cモードは少し異なり、すべてのバイトを連続して読み取る。これは、EEPROM などの増分機能を備えたチップに役立つ。Wモードも特殊で、読み取りコマンドが偶数レジスタ アドレスでのみ発行される点を除いてwに似ています。これも主に EEPROM に役立つ。

PEC を有効にするには、モードパラメータにpを追加することもできる( iとWを除く)。モードパラメータを省略すると、i2cdump はデフォルトで PEC なしのバイト アクセスになる。

bankおよびbankregパラメータは、W83781D および同様のチップ (執筆時点では、すべての Winbond および Asus チップ) で役立つ。bankは0 から 7 までの整数で、bankreg は0x00 から 0xFF までの整数です (デフォルト値: 0x4E)。W83781D のデータ シートには、バンク選択に関する詳細情報が記載されている。

tryday@tryday:~ $ sudo i2cdump -y 1 0x20
このコマンドは特定のスレーブアドレスに対して0x00から0xffまで、Read命令を連続的に送出する。
図のスレーブデバイスはread要求したアドレスをそのまま返すため、 同じデータを返している。

警告
i2cdump は、不適切に使用すると危険です。特に、cモードはチップへの 1 バイトの書き込みから始まる。ほとんどのチップでは、アドレス ポインタ レジスタに格納されますが、これは問題ない。ただし、レジスタが 1 つしかないチップや (目に見える) レジスタがまったくないチップでは、これが実際の書き込みとみなされる可能性が高く、誤動作や破損が発生する可能性がある。ランダム アドレスに i2cdump を使用しないこと。いずれにしても、使用しているチップに関する十分な知識と、探しているものについての考えがなければ、ほとんど役に立たない。
  [i2cコマンドへ] [目次へ戻る]

 (4)i2cget
 特定のi2cアドレスに指定したバイトを書込んでから、そのアドレスからデータを読み込む
 または特定のアドレスからデータを読み込む。
 i2cget [-f] [-y] i2cbus チップアドレス[データアドレス[モード]]
 i2cget -V
-f デバイスがすでにビジー状態であっても、デバイスへのアクセスを強制します。デフォルトでは、i2cget はカーネル ドライバーの制御下にあるデバイスへのアクセスを拒否する。このフラグの使用は危険で、問題のカーネル ドライバーを深刻に混乱させる可能性がある。また、i2cget が無効な値を返す可能性もある。したがって、自分の責任で、自分が何をしているのかわかっている場合にのみ使用すること。
-y 対話モードを無効にする。デフォルトでは、i2cget は I2C バスを操作する前にユーザーからの確認を待つ。このフラグを使用すると、操作が直接実行する。これは主にスクリプトで使用するためのものです。注意して使用すること。
-V バージョンを表示する。

i2cget には 2 つの必須オプションがある。i2cbusは、スキャンする I2C バスの番号または名前を示す。この番号は、i2cdetect -lによってリストされるバスの 1 つに対応している必要がある。
chip -address は、そのバス上のチップのアドレスを指定し、0x03 から 0x77 までの整数だ。

data-address は、そのチップ上の読み取りアドレスを指定する。これは 0x00 から 0xFF までの整数だ。省略すると、現在アクティブなレジスタが読み取られる (対象のチップでそれが意味をなす場合)。

modeパラメータが指定されている場合、文字b、w 、またはcのいずれかになる。それぞれ、読み取りバイトデータ、読み取りワード データ、または書き込みバイト/読み取りバイト トランザクションに対応する。modeパラメータにp を追加してPEC を有効にすることもできる。modeパラメータが省略されている場合、i2cget はデフォルトで読み取りバイト データ トランザクションになる。ただし、 data-addressも省略されている場合は、デフォルトの (そして唯一有効な) トランザクションは単一の読み取りバイトだ。

[MODE]
tryday@tryday:~ $ sudo i2cget -y 1 0x20 0x02 c
このオプションは特定のアドレスに指定したバイトを書き込んでから、そのアドレスからデータを読み込む。
例では、0x20というスレーブに0x02を書き込んだ後、0x20に対してRead要求を発行する。

まず、マスタ側から指定したデータのWriteが送られる。
スレーブはWriteの次のビットでSDAをLOWに固定し、A-ACK(Addressに対するACK)を返す。
次にアドレスへの書き込みデータが送信される。
スレーブはWriteの次のビットでSDAをLOWに固定し、D-ACK(DATAに対するACK)を返す。
マスタは以上でスレーブへの書き込みを行う。

次に、マスタ側から指定したデータのReadが送られる スレーブはReadの次のビットでSDAをLOWに固定し、A-ACK(Addressに対するACK)を返す。
次にスレーブはデータを帰す。
その後、マスターはNACKを返す。
マスタは以上でスレーブからの読み込みを行う。

tryday@tryday:~ $ sudo i2cget -y 1 0x20
マスタ側からRead要求がデバイスに対して発効される。
直後に(図ではReadの次の)スレーブからACKが返ってきて、 引き続き、スレーブはデータを返す。

警告
i2cget は、不適切に使用すると非常に危険だ。I2C と SMBus は、SMBus 読み取りトランザクションが特定のチップによって書き込みトランザクションとして認識されるように設計されている。これは、モードをcp (PEC によるバイト書き込み/バイト読み取り)に設定する場合に特に当てはまる。このプログラムを使用するときは、細心の注意を払う事。
  [i2cコマンドへ] [目次へ戻る]

 (5)i2cset
I2C レジスタを設定する

i2cset [ -f ] [ -y ] [ -m マスク] [ -r ] i2cbus チップアドレス データアドレス[値] ... [モード]
i2cset -V
-f デバイスがすでにビジー状態であっても、デバイスへのアクセスを強制します。デフォルトでは、i2cset はカーネル ドライバーの制御下にあるデバイスへのアクセスを拒否する。このフラグの使用は危険で、問題のカーネル ドライバーを深刻に混乱させる可能性がある。また、i2cset が無効な値を返す可能性もある。したがって、自分の責任で、自分が何をしているのかわかっている場合にのみ使用すること。
-y 対話モードを無効にする。デフォルトでは、i2cset は I2C バスを操作する前にユーザーからの確認を待つ。このフラグを使用すると、操作が直接実行する。これは主にスクリプトで使用するためのものです。注意して使用すること。
-m マスクパラメータが指定されている場合、値のどのビットが実際にデータアドレスに書き込まれるかを示す。マスクで 1 に設定されたビットは値から取得され、0 に設定されたビットはデータアドレスからこのパラメータは、指定されたモードの読み取り操作と書き込み操作が、アクセスしているデバイスに対して対称的であることを前提としていることに注意する。SMBusもこれを保証しないため、これが無い場合と当てはまらない場合がある。
-r これは以前は勝手に動作しました。オプション-mと同じ 制限が適用されます。
-V バージョンを表示する。
i2cset には 3 つの必須オプションがある。i2cbusは、スキャンする I2C バスの番号または名前を示す。この番号は、i2cdetect -lによってリストされるバスの 1 集中対応している必要がある。-address は、そのバス上のチップのアドレスを指定する。これは 0x03 から 0x77 までの整数です。data-address は、その上のチップ書き込み先のアドレスを指定する。これは 0x00 から 0xFF までの整数です。

値パラメータが指定されている場合は、チップ上のその場所に値を書き込む。このパラメータを省略すると、ショートライトが発行する。ほとんどのチップでは、内部ポインタを目標の場所に設定するだけで、実際にはその場所に書き込むことはない。ただし、いくつかのチップ、特にレジスタが 1 しかないシンプルなチップでは、この短いライトが実際の書き込みになる。モードパラメータが s または i の場合は、複数の値を指定できる。

modeパラメータが指定されている場合、それはb、w、s、またはiのいずれかの文字で、それぞれ 1 バイト、16 ビット ワード、SMBus ブロック書き込み、または I2C ブロック書き込みの書き込みサイズに対応する。SMBus および I2C ブロック書き込みの場合、書き込みサイズは値パラメータの数によって決まる。I2C ブロック書き込みを除き、modeパラメータにp を追加してPEC を有効にすることもできる。 modeパラメータを省略すると、 i2cset はデフォルトで PEC なしのバイト モードになります。指定する値は、指定されたデータ タイプの範囲内である必要がある (バイトおよびブロック書き込みの場合は 0x00-0xFF、ワードの場合は 0x0000-0xFFFF)。もう 1 つの可能なモードはcで、これは値を書き込まない (いわゆるショート書き込み)。通常は、値を指定しない場合のデフォルトであるため、PEC も有効にしない限り、このモードを指定する必要はない。

[MODE]
MODE 概  要
b バイトでの通常書込み
c 書込んでから読み出し  記載無しは 読み込みのみ
i 連続した書込み
e iとよく似ている?
r Readで試行
w

tryday@tryday:~ $ sudo i2cset -y 1 0x20 0xff 0x01 b
マスタ側からWrite要求がスレーブに対して発行される。
その直後、マスタ側からアドレスの指定が為され、 引き続き、アドレスへの書き込みデータが送信される。

tryday@tryday:~ $ sudo i2cset -y 1 0x20 0xff 0x01 0x02 i
マスタ側からWrite要求がスレーブに対して発行される。
その直後、マスタ側からアドレスの指定が為され、 引き続き、アドレスへの書き込みデータが「連続して」なされる。

tryday@tryday:~ $ sudo i2cset -y 1 0x20 0xff 0xff 0x88 e
以下iモードに
アドレス送出の後、0x02というバイト列が送出される。
実効的に0x02を送出したコマンドと同様になる。
tryday@tryday:~ $ sudo i2cset -y 1 0x20 0xff 0x02 0xff 0x88 i

警告
i2cset は、不適切に使用すると非常に危険です。I2C バスを混乱させたり、データ損失を引き起こしたり、さらに深刻な副作用を引き起こす可能性がある。メモリ DIMM (チップ アドレス 0x50 から 0x57 の間) 上のシリアル EEPROM に書き込むと、メモリが破壊され、システムが起動できなくなる可能性がある。このプログラムを使用するときは、細心の注意を払う事。
  [i2cコマンドへ] [目次へ戻る]

 (6)i2ctransfer
I2C メッセージを送信します

i2ctransfer [ -f ] [ -y ] [ -v ] [ -a ] i2cbus desc [データ] [ desc [データ]] ...
i2ctransfer -V
-f デバイスがすでにビジー状態であっても、デバイスへのアクセスを強制します。デフォルトでは、i2ctransfer はカーネル ドライバーの制御下にあるデバイスへのアクセスを拒否する。このフラグの使用は危険で、問題のカーネル ドライバーを深刻に混乱させる可能性がある。また、ii2ctransfer が無効な値を返す可能性もある。したがって、自分の責任で、自分が何をしているのかわかっている場合にのみ使用すること。
-y 対話モードを無効にする。デフォルトでは、i2ctransfer は I2C バスを操作する前にユーザーからの確認を待つ。このフラグを使用すると、操作が直接実行する。これは主にスクリプトで使用するためのものです。注意して使用すること。
-v 詳細出力を有効にする。送信されたすべてのメッセージに関する情報、つまり読み取りメッセージだけでなく書き込みメッセージに関する情報も出力する。
-a 0x00 - 0x07 と 0x78 - 0x7f の間のアドレスの使用を許可する。推奨しない。
-V バージョンを表示する。
i2ctransfer は、I2C メッセージを作成し、それらを 1 つの転送として結合して送信するプログラムです。読み取りメッセージの場合、受信バッファーの内容が 1 つの読み取りメッセージにつき 1 行ずつ標準出力に出力されます。 ここでは、転送とメッセージ
の違いに注意してください 。転送は複数のメッセージで構成され、I2C 仕様で説明されているように、START 条件で開始され、STOP 条件で終了します。転送内のメッセージは、REPEATED START 条件を使用して連結されます。この条件もそこに説明されています。1 つの転送に複数のメッセージを含めることには、いくつかの利点があります。まず、一部のデバイスは REPEATED START の内部状態を保持しますが、STOP 後にそれらをリセットします。次に、1 つの転送中に中断されることはありませんが、複数の転送の間には発生する可能性があります。中断は、バス上の別の I2C マスターによってハードウェア レベルで発生するか、または転送をスケジュールした別の I2C ユーザーによってソフトウェア レベルで発生する可能性があります。このプログラムは、ニーズに合った適切な転送を作成するのに役立ちます。

引数
最初のパラメータi2cbus は、使用する I2C バスの番号または名前を示す。この番号は、i2cdetect -l によってリストされるバスの 1 つに対応している必要がある。

次のパラメータは、1 つまたは複数のdescブロックです。ブロックの数は Linux カーネルによって制限され、I2C_RDWR_IOCTL_MAX_MSGS (v4.10 では 42) によって定義される。descブロックは次のように構成される。

{r|w} <メッセージの長さ> [@アドレス]

{r|w}
メッセージが読み取りか書き込みかを指定する
<メッセージの長さ>
このメッセージで読み取られるまたは書き込まれるバイト数を指定する。これは符号なし 16 ビット整数として解析されますが、Linux カーネルは追加の上限 (v4.10 では 8192) を適用することに注意すること。SMBus ブロック トランザクションをサポートするターゲットへの読み取りメッセージの場合、'?' にすることもできる。その場合、ターゲットが長さを決定する。
[@アドレス]
このメッセージでアクセスするチップの 7 ビット アドレスを指定する。これは整数です。省略した場合は、以前のアドレスを再利用します。通常、0x08-0x77 の範囲外のアドレスと、カーネル ドライバーが接続されているアドレスはブロックされる。これは、 -a (すべて) または-f (強制) で上書きできる。これらを使用するときは十分に注意すること。10 ビット アドレスは現在まったくサポートされていない。
I2C メッセージが書き込みの場合、書き込まれるデータを含むデータブロックが続く。これは、16 進数、8 進数などの通常のプレフィックスでマークできる<length_of_message> バイトで構成される。より大きなデータ ブロックを簡単に作成できるように、データ バイトにサフィックスを付けることができる。
= メッセージの最後まで値を一定に保つ (つまり、0 = は 0、0、0、... を意味する)
+ メッセージの最後まで値を 1 ずつ増やす (つまり、0+ は 0、1、2、... を意味する)
- メッセージの最後まで値を 1 ずつ減らす (つまり、0xff は 0xff、0xfe、0xfd などを意味する)
p 値を 8 ビットの疑似ランダム シーケンスのシードとして使用する (つまり、0p は 0x00、0x50、0xb0、... を意味する)

警告
i2ctransfer は、不適切に使用すると非常に危険だ。I2C バスを混乱させたり、データ損失を引き起こしたり、さらに深刻な副作用を引き起こす可能性がある。メモリ DIMM (チップ アドレス 0x50 から 0x57 の間) 上のシリアル EEPROM に書き込むと、メモリが破壊され、システムが起動できなくなる可能性がある。このプログラムを使用するときは、細心の注意を払う事。
  [i2cコマンドへ] [目次へ戻る]


2.man ページ

(1)i2c-tools
Package i2c-tools
A heterogeneous set of I2C tools for Linux

https://i2c.wiki.kernel.org/index.php/I2C_Tools

This package contains a heterogeneous set of I2C tools for Linux: a bus probing tool, a chip dumper, register-level access helpers, EEPROM decoding scripts, and more.

Version: 4.3
See also: i2c-tools-perl.

System Administration
eeprog reads and writes 24Cxx EEPROMs connected to I2C serial bus
i2cdetect detect I2C chips
i2cdump examine I2C registers
i2cget read from I2C/SMBus chip registers
i2cset set I2C registers
i2ctransfer send user-defined I2C messages in one transfer
パッケージ i2c-tools
Linux 用の異種 I2C ツール セット
https://i2c.wiki.kernel.org/index.php/I2C_Tools

 このパッケージには、Linux 用の異種 I2C ツール セット (バス プロービング ツール、チップ ダンパー、レジスタ レベル アクセス ヘルパー、EEPROM デコード スクリプトなど) が含まれています。

バージョン: 4.3
参照: i2c-tools-perl。

システム管理
eeprog は、I2C シリアル バスに接続された 24Cxx EEPROM の読み取りと書き込みを行います。
i2cdetect は、I2C チップを検出します。
i2cdump は、I2C レジスタを調べます。
i2cget は、I2C/SMBus チップ レジスタから読み取ります。 i2cset は、I2C レジスタを設定します。
i2ctransfer は、1 回の転送でユーザー定義の I2C メッセージを送信します。
 [目次へ戻る]

(2)i2cdetect
i2cdetect - Man Page
detect I2C chips

Synopsis
i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]
i2cdetect -F i2cbus
i2cdetect -V
i2cdetect -l

Description
i2cdetect is a userspace program to scan an I2C bus for devices. It outputs a table with the list of detected devices on the specified bus. i2cbus indicates the number or name of the I2C bus to be scanned, and should correspond to one of the busses listed by i2cdetect -l. The optional parameters first and last restrict the scanning range (default: from 0x08 to 0x77).

As there is no standard I2C detection command, i2cdetect uses arbitrary SMBus commands (namely SMBus quick write and SMBus receive byte) to probe for devices. By default, the command used is the one believed to be the safest for each address. See options -q and -r to change this behavior.

i2cdetect can also be used to query the functionalities of an I2C bus (see option -F.)

Warning
This program can confuse your I2C bus, cause data loss and worse!

Interpreting the Output
Each cell in the output table will contain one of the following symbols:

"--". The address was probed but no chip answered.
"UU". Probing was skipped, because this address is currently in use by a driver. This strongly suggests that there is a chip at this address.
An address number in hexadecimal, e.g. "2d" or "4e". A chip was found at this address.
Options
-y
Disable interactive mode. By default, i2cdetect will wait for a confirmation from the user before messing with the I2C bus. When this flag is used, it will perform the operation directly. This is mainly meant to be used in scripts.

-a
Force scanning of non-regular addresses. Not recommended.

-q
Use SMBus "quick write" command for probing. Not recommended. This is known to corrupt the Atmel AT24RF08 EEPROM found on many IBM Thinkpad laptops.

-r
Use SMBus "receive byte" command for probing. Not recommended. This is known to lock SMBus on various write-only chips (most notably clock chips at address 0x69).

-F
Display the list of functionalities implemented by the adapter and exit.

-V
Display the version and exit.

-l
Output a list of installed busses.

Examples
List all available I2C busses:

# i2cdetect -l
Immediately scan the standard addresses on I2C bus 9 (i2c-9), using the default method for each address (no user confirmation):

# i2cdetect -y 9
Query the functionalities of I2C bus 1 (i2c-1):

# i2cdetect -F 1
Scan addresses 0x10 to 0x17 on the I2C bus named "SMBus I801 adapter at efa0", using the "receive byte" method, after user confirmation:

# i2cdetect -r "SMBus I801 adapter at efa0" 0x10 0x17
Bugs
To report bugs or send fixes, please write to the Linux I2C mailing list <linux-i2c@vger.kernel.org> with Cc to the current maintainer: Jean Delvare <jdelvare@suse.de>.

See Also
i2cdump(8), i2cget(8), i2cset(8), i2ctransfer(8), sensors-detect(8)

Author
Frodo Looijaard, Mark D. Studebaker and Jean Delvare

This manual page was originally written by Aurelien Jarno <aurel32@debian.org>, for the Debian GNU/Linux system.

Referenced By
i2cdump(8), i2cget(8), i2cset(8), i2c-stub-from-dump(8), i2ctransfer(8).
October 2017
i2cdetect - マニュアル ページ
I2C チップの検出

概要
i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]
i2cdetect -F i2cbus
i2cdetect -V
i2cdetect -l

説明
i2cdetect は、I2C バスをスキャンしてデバイスを探すユーザー空間プログラムです。指定されたバスで検出されたデバイスのリストを含むテーブルを出力します。i2cbus は、スキャンする I2C バスの番号または名前を示し、i2cdetect -l でリストされたバスの 1 つに対応している必要があります。オプションのパラメータ first と last は、スキャン範囲を制限します (デフォルト: 0x08 から 0x77)。

標準の I2C 検出コマンドがないため、i2cdetect は任意の SMBus コマンド (つまり、SMBus クイック書き込みおよび SMBus 受信バイト) を使用してデバイスを探します。デフォルトでは、各アドレスに対して最も安全であると考えられるコマンドが使用されます。この動作を変更するには、オプション -q および -r を参照してください。

i2cdetect は、I2C バスの機能を照会するためにも使用できます (オプション -F を参照してください)。

警告
このプログラムは I2C バスを混乱させ、データ損失やさらに悪い結果を引き起こす可能性があります。

出力の解釈
出力テーブルの各セルには、次のいずれかのシンボルが含まれます。

--」。アドレスはプローブされましたが、チップは応答しませんでした。
UU」。このアドレスは現在ドライバーによって使用されているため、プローブはスキップされました。これは、このアドレスにチップがあることを強く示唆しています。
16 進数のアドレス番号 (例: 「2d」または「4e」)。このアドレスにチップが見つかりました。
オプション
-y
対話モードを無効にします。デフォルトでは、i2cdetect は I2C バスを操作する前にユーザーからの確認を待ちます。このフラグを使用すると、操作が直接実行されます。これは主にスクリプトで使用するためのものです。

-a
通常以外のアドレスのスキャンを強制します。推奨されません。

-q
プローブには SMBus の「クイック書き込み」コマンドを使用します。推奨されません。このコマンドは、多くの IBM Thinkpad ラップトップに搭載されている Atmel AT24RF08 EEPROM を破損させることがわかっています。

-r
プローブには SMBus の「バイト受信」コマンドを使用します。推奨されません。このコマンドは、さまざまな書き込み専用チップ (特にアドレス 0x69 のクロック チップ) で SMBus をロックすることがわかっています。

-F
アダプタによって実装されている機能のリストを表示して終了します。

-V
バージョンを表示して終了します。

-l
インストールされているバスのリストを出力します。


利用可能なすべての I2C バスを一覧表示します:

# i2cdetect -l
I2C バス 9 (i2c-9) の標準アドレスを、各アドレスのデフォルトの方法を使用してすぐにスキャンします (ユーザーの確認は不要です):

# i2cdetect -y 9
I2C バス 1 (i2c-1) の機能を照会します:

# i2cdetect -F 1
ユーザーの確認後、「受信バイト」方法を使用して、「SMBus I801 アダプタ at efa0」という名前の I2C バスのアドレス 0x10 から 0x17 をスキャンします:

# i2cdetect -r "SMBus I801 アダプタ at efa0" 0x10 0x17
バグ
バグを報告したり修正を送信したりするには、Linux I2C メーリング リスト <linux-i2c@vger.kernel.org> に、現在のメンテナー Jean Delvare を Cc として書き込んでください。 <jdelvare@suse.de>。

参照
i2cdump(8)、i2cget(8)、i2cset(8)、i2ctransfer(8)、sensors-detect(8)

著者
Frodo Looijaard、Mark D. Studebaker、Jean Delvare

このマニュアル ページは、もともと Aurelien Jarno <aurel32@debian.org> によって Debian GNU/Linux システム用に書かれました。

参照元
i2cdump(8)、i2cget(8)、i2cset(8)、i2c-stub-from-dump(8)、i2ctransfer(8)。
2017 年 10 月
 [目次へ戻る]

(3)i2cdump
i2cdump - Man Page
examine I2C registers

Synopsis
i2cdump [-f] [-r first-last] [-y] [-a] i2cbus address [mode [bank [bankreg]]]
i2cdump -V

Description
i2cdump is a small helper program to examine registers visible through the I2C bus.

Options
-V
Display the version and exit.

-f
Force access to the device even if it is already busy. By default, i2cdump will refuse to access a device which is already under the control of a kernel driver. Using this flag is dangerous, it can seriously confuse the kernel driver in question. It can also cause i2cdump to return invalid results. So use at your own risk and only if you know what you're doing.

-r first-last
Limit the range of registers being accessed. This option is not available with mode s. For mode W, first must be even and last must be odd.

-y
Disable interactive mode. By default, i2cdump will wait for a confirmation from the user before messing with the I2C bus. When this flag is used, it will perform the operation directly. This is mainly meant to be used in scripts.

-a
Allow using addresses between 0x00 - 0x07 and 0x78 - 0x7f. Not recommended.

At least two options must be provided to i2cdump. i2cbus indicates the number or name of the I2C bus to be scanned. This number should correspond to one of the busses listed by i2cdetect -l. address indicates the address to be scanned on that bus, and is an integer between 0x08 and 0x77.

The mode parameter, if specified, is one of the letters b, w, s, or i, corresponding to a read size of a single byte, a 16-bit word, an SMBus block, an I2C block, respectively. The c mode is a little different, it reads all bytes consecutively, and is useful for chips that have an address auto-increment feature, such as EEPROMs. The W mode is also special, it is similar to w except that a read command will only be issued on even register addresses; this is again mainly useful for EEPROMs.

A p can also be appended to the mode parameter (except for i and W) to enable PEC. If the mode parameter is omitted, i2cdump defaults to byte access without PEC.

The bank and bankreg parameters are useful on the W83781D and similar chips (at the time of writing, all Winbond and Asus chips). bank is an integer between 0 and 7, and bankreg is an integer between 0x00 and 0xFF (default value: 0x4E). The W83781D data sheet has more information on bank selection.

Warning
i2cdump can be dangerous if used improperly. Most notably, the c mode starts with WRITING a byte to the chip. On most chips it will be stored in the address pointer register, which is OK, but some chips with a single register or no (visible) register at all will most likely see this as a real WRITE, resulting in possible misbehavior or corruption. Do not use i2cdump on random addresses. Anyway, it is of little use unless you have good knowledge of the chip you're working with and an idea of what you are looking for.

Examples
Dump the whole contents of I2C device at 7-bit address 0x50 on bus 9 (i2c-9), using the default read method (byte mode), after user confirmation:

# i2cdump 9 0x50
Immediately dump the whole contents of I2C device at 7-bit address 0x50 on bus 9 (i2c-9), using I2C block read transactions (no user confirmation):

# i2cdump -y 9 0x50 i
If the device is an EEPROM, the output would typically be the same as output of the previous example.

Dump registers 0x00 to 0x3f of the I2C device at 7-bit address 0x2d on bus 1 (i2c-1), using the default read method (byte mode), after user confirmation:

# i2cdump -r 0x00-0x3f 1 0x2d
Bugs
To report bugs or send fixes, please write to the Linux I2C mailing list <linux-i2c@vger.kernel.org> with Cc to the current maintainer: Jean Delvare <jdelvare@suse.de>.

SMBus block mode is deprecated and will be removed in a future version of this tool. Please use i2cget instead.

See Also
i2cdetect(8), i2cget(8), i2cset(8), i2ctransfer(8), isadump(8)

Author
Frodo Looijaard, Mark D. Studebaker and Jean Delvare

This manual page was originally written by David Z Maze <dmaze@debian.org> for the Debian GNU/Linux system.

Referenced By
i2cdetect(8), i2cget(8), i2cset(8), i2c-stub-from-dump(8), i2ctransfer(8), isadump(8).
June 2021
i2cdump - マニュアル ページ
I2C レジスタを調べる

概要
i2cdump [-f] [-r first-last] [-y] [-a] i2cbus アドレス [モード [バンク [bankreg]]]
i2cdump -V

説明
i2cdump は、I2C バスを通じて表示されるレジスタを調べるための小さなヘルパー プログラムです。

オプション
-V
バージョンを表示して終了します。

-f
デバイスがすでにビジー状態であっても、デバイスへのアクセスを強制します。デフォルトでは、i2cdump は、すでにカーネル ドライバーの制御下にあるデバイスへのアクセスを拒否します。このフラグの使用は危険であり、問??題のカーネル ドライバーを深刻に混乱させる可能性があります。また、i2cdump が無効な結果を返す原因になることもあります。したがって、自分の責任で、何をしているのかわかっている場合にのみ使用してください。

-r first-last
アクセスするレジスタの範囲を制限します。このオプションは、モード s では使用できません。モード W の場合、first は偶数、last は奇数である必要があります。

-y
対話モードを無効にします。デフォルトでは、i2cdump は I2C バスを操作する前にユーザーからの確認を待ちます。このフラグを使用すると、操作が直接実行されます。これは主にスクリプトで使用するためのものです。

-a
0x00 - 0x07 と 0x78 - 0x7f の間のアドレスの使用を許可します。推奨されません。

i2cdump には少なくとも 2 つのオプションを指定する必要があります。i2cbus は、スキャンする I2C バスの番号または名前を示します。この番号は、i2cdetect -l によってリストされるバスの 1 つに対応している必要があります。address はそのバスでスキャンするアドレスを示し、0x08 から 0x77 の間の整数です。

mode パラメータが指定されている場合、文字 b、w、s、または i のいずれかで、それぞれ 1 バイト、16 ビット ワード、SMBus ブロック、I2C ブロックの読み取りサイズに対応します。 c モードは少し異なり、すべてのバイトを連続して読み取ります。これは、EEPROM などのアドレス自動増分機能を持つチップに役立ちます。W モードも特殊で、読み取りコマンドが偶数レジスタ アドレスでのみ発行される点を除いて w に似ています。これも主に EEPROM に役立ちます。

モード パラメータに p を追加して (i と W を除く) PEC を有効にすることもできます。モード パラメータを省略すると、i2cdump はデフォルトで PEC なしのバイト アクセスになります。

bank パラメータと bankreg パラメータは、W83781D および同様のチップ (執筆時点では、すべての Winbond および Asus チップ) で役立ちます。bank は 0 から 7 までの整数で、bankreg は 0x00 から 0xFF までの整数です (デフォルト値: 0x4E)。W83781D のデータ シートには、バンク選択に関する詳細情報が記載されています。

警告
i2cdump は、不適切に使用すると危険です。最も注目すべきは、c モードはチップへの 1 バイトの書き込みから始まることです。ほとんどのチップでは、アドレス ポインタ レジスタに格納されますが、これは問題ありません。ただし、レジスタが 1 つしかないチップや (目に見える) レジスタがまったくないチップでは、これが実際の書き込みとみなされる可能性が高く、誤動作や破損が発生する可能性があります。ランダム アドレスで i2cdump を使用しないでください。いずれにしても、作業しているチップに関する十分な知識と、探しているものについての考えがなければ、ほとんど役に立ちません。


ユーザーの確認後、デフォルトの読み取り方法 (バイト モード) を使用して、バス 9 (i2c-9) の 7 ビット アドレス 0x50 にある I2C デバイスの全内容をダンプします。

# i2cdump 9 0x50
I2C ブロック読み取りトランザクションを使用して (ユーザーの確認なし)、バス 9 (i2c-9) の 7 ビット アドレス 0x50 にある I2C デバイスの全内容を直ちにダンプします。

# i2cdump -y 9 0x50 i
デバイスが EEPROM の場合、出力は通常、前の例の出力と同じになります。

ユーザーの確認後、デフォルトの読み取り方法 (バイト モード) を使用して、バス 1 (i2c-1) の 7 ビット アドレス 0x2d にある I2C デバイスのレジスタ 0x00 から 0x3f をダンプします。

# i2cdump -r 0x00-0x3f 1 0x2d
バグ
バグを報告したり修正を送信したりするには、Linux I2C メーリング リスト <linux-i2c@vger.kernel.org> に書き込み、現在のメンテナーである Jean Delvare <jdelvare@suse.de> を Cc として送信してください。

SMBus ブロック モードは非推奨であり、このツールの将来のバージョンでは削除される予定です。代わりに i2cget を使用してください。

参照
i2cdetect(8)、i2cget(8)、i2cset(8)、i2ctransfer(8)、isadump(8)

著者
Frodo Looijaard、Mark D. Studebaker、Jean Delvare

このマニュアル ページは、もともと David Z Maze <dmaze@debian.org> によって Debian GNU/Linux システム用に作成されました。

参照元
i2cdetect(8)、i2cget(8)、i2cset(8)、i2c-stub-from-dump(8)、i2ctransfer(8)、isadump(8)。
2021年6月
 [目次へ戻る]

(4)i2cget
i2cget - Man Page
read from I2C/SMBus chip registers

Synopsis
i2cget [-f] [-y] [-a] i2cbus chip-address [data-address [mode [length]]]
i2cget -V

Description
i2cget is a small helper program to read registers visible through the I2C bus (or SMBus).

Options
-V
Display the version and exit.

-f
Force access to the device even if it is already busy. By default, i2cget will refuse to access a device which is already under the control of a kernel driver. Using this flag is dangerous, it can seriously confuse the kernel driver in question. It can also cause i2cget to return an invalid value. So use at your own risk and only if you know what you're doing.

-y
Disable interactive mode. By default, i2cget will wait for a confirmation from the user before messing with the I2C bus. When this flag is used, it will perform the operation directly. This is mainly meant to be used in scripts. Use with caution.

-a
Allow using addresses between 0x00 - 0x07 and 0x78 - 0x7f. Not recommended.

There are two required options to i2cget. i2cbus indicates the number or name of the I2C bus to be scanned. This number should correspond to one of the busses listed by i2cdetect -l. chip-address specifies the address of the chip on that bus, and is an integer between 0x08 and 0x77.

data-address specifies the address on that chip to read from, and is an integer between 0x00 and 0xFF. If omitted, the currently active register will be read (if that makes sense for the considered chip).

The mode parameter, if specified, is one of the letters b, w, c, or i, corresponding to a read byte data, a read word data, a write byte/read byte, an SMBus block read, or an I2C block read transaction, respectively. A p can also be appended to the mode parameter to enable PEC, except for I2C block transactions. If the mode parameter is omitted, i2cget defaults to a read byte data transaction, unless data-address is also omitted, in which case the default (and only valid) transaction is a single read byte.

The length parameter, if applicable and specified, sets the length of the block transaction. Valid values are between 1 and 32. Default value is 32.

Warning
i2cget can be extremely dangerous if used improperly. I2C and SMBus are designed in such a way that an SMBus read transaction can be seen as a write transaction by certain chips. This is particularly true if setting mode to cp (write byte/read byte with PEC). Be extremely careful using this program.

Examples
Get the value of 8-bit register 0x11 of the I2C device at 7-bit address 0x2d on bus 1 (i2c-1), after user confirmation:

# i2cget 1 0x2d 0x11
Get the value of 16-bit register 0x00 of the I2C device at 7-bit address 0x48 on bus 1 (i2c-1), after user confirmation:

# i2cget 1 0x48 0x00 w
Set the internal pointer register of a 24C02 EEPROM at 7-bit address 0x50 on bus 9 (i2c-9) to 0x00, then read the first 2 bytes from that EEPROM:

# i2cset -y 9 0x50 0x00 ; i2cget -y 9 0x50 ; i2cget -y 9 0x50
This assumes that the device automatically increments its internal pointer register on every read, and supports read byte transactions (read without specifying the register address, "Receive Byte" in SMBus terminology.) Most EEPROM devices behave that way. Note that this is only safe as long as nobody else is accessing the I2C device at the same time. A safer approach would be to use a "Read Word" SMBus transaction instead, or an I2C Block Read transaction to read more than 2 bytes.

Set the internal pointer register of a 24C32 EEPROM at 7-bit address 0x53 on bus 9 (i2c-9) to 0x0000, then read the first 2 bytes from that EEPROM:

# i2cset -y 9 0x53 0x00 0x00 ; i2cget -y 9 0x53 ; i2cget -y 9 0x53
This again assumes that the device automatically increments its internal pointer register on every read, and supports read byte transactions. While the previous example was for a small EEPROM using 8-bit internal addressing, this example is for a larger EEPROM using 16-bit internal addressing. Beware that running this command on a small EEPROM using 8-bit internal addressing would actually write 0x00 to the first byte of that EEPROM. The safety concerns raised above still stand, however in this case there is no SMBus equivalent, so this is the only way to read data from a large EEPROM if your master isn't fully I2C capable. With a fully I2C capable master, you would use i2ctransfer to achieve the same in a safe and faster way.

Read the first 8 bytes of an EEPROM device at 7-bit address 0x50 on bus 4 (i2c-4):

# i2cget -y 4 0x50 0x00 i 8
Bugs
To report bugs or send fixes, please write to the Linux I2C mailing list <linux-i2c@vger.kernel.org> with Cc to the current maintainer: Jean Delvare <jdelvare@suse.de>.

See Also
i2cdetect(8), i2cdump(8), i2cset(8), i2ctransfer(8)

Author
Jean Delvare

This manual page was strongly inspired from those written by David Z Maze for i2cset.

Referenced By
i2cdetect(8), i2cdump(8), i2cset(8), i2ctransfer(8).
July 2021
i2cget - マニュアル ページ
I2C/SMBus チップ レジスタから読み取り

概要
i2cget [-f] [-y] [-a] i2cbus チップ アドレス [データ アドレス [モード [長さ]]]
i2cget -V

説明
i2cget は、I2C バス (または SMBus) を介して表示されるレジスタを読み取るための小さなヘルパー プログラムです。

オプション
-V
バージョンを表示して終了します。

-f
デバイスがすでにビジー状態であっても、デバイスへのアクセスを強制します。デフォルトでは、i2cget はカーネル ドライバーの制御下にあるデバイスへのアクセスを拒否します。このフラグの使用は危険であり、問??題のカーネル ドライバーを深刻に混乱させる可能性があります。また、i2cget が無効な値を返す可能性もあります。したがって、自分の責任で、何をしているのかわかっている場合にのみ使用してください。

-y
対話モードを無効にします。デフォルトでは、i2cget は I2C バスを操作する前にユーザーからの確認を待ちます。このフラグを使用すると、操作が直接実行されます。これは主にスクリプトで使用するためのものです。注意して使用してください。

-a
0x00 - 0x07 と 0x78 - 0x7f の間のアドレスの使用を許可します。推奨されません。

i2cget には 2 つの必須オプションがあります。i2cbus は、スキャンする I2C バスの番号または名前を示します。この番号は、i2cdetect -l によってリストされるバスの 1 つに対応している必要があります。chip-address は、そのバス上のチップのアドレスを指定し、0x08 から 0x77 までの整数です。

data-address は、そのチップから読み取るアドレスを指定し、0x00 から 0xFF までの整数です。省略すると、現在アクティブなレジスタが読み取られます (対象のチップでそれが意味をなす場合)。

モード パラメータが指定されている場合は、それぞれ読み取りバイト データ、読み取りワード データ、書き込みバイト/読み取りバイト、SMBus ブロック読み取り、または I2C ブロック読み取りトランザクションに対応する文字 b、w、c、または i のいずれかです。モード パラメータに p を追加して、I2C ブロック トランザクション以外の PEC を有効にすることもできます。モード パラメータが省略されている場合、i2cget はデフォルトで読み取りバイト データ トランザクションになります。ただし、データ アドレスも省略されている場合は、デフォルト (および唯一の有効な) トランザクションは単一の読み取りバイトです。

長さパラメータが適用可能で指定されている場合は、ブロック トランザクションの長さを設定します。有効な値は 1 ~ 32 です。デフォルト値は 32 です。

警告
i2cget は、不適切に使用すると非常に危険です。I2C および SMBus は、SMBus 読み取りトランザクションが特定のチップによって書き込みトランザクションとして認識されるように設計されています。これは、モードを cp (PEC 付き書き込みバイト/読み取りバイト) に設定する場合に特に当てはまります。このプログラムの使用には細心の注意を払ってください。


ユーザーの確認後、バス 1 (i2c-1) の 7 ビット アドレス 0x2d にある I2C デバイスの 8 ビット レジスタ 0x11 の値を取得します:

# i2cget 1 0x2d 0x11
ユーザーの確認後、バス 1 (i2c-1) の 7 ビット アドレス 0x48 にある I2C デバイスの 16 ビット レジスタ 0x00 の値を取得します:

# i2cget 1 0x48 0x00 w
バス 9 (i2c-9) の 7 ビット アドレス 0x50 にある 24C02 EEPROM の内部ポインタ レジスタを 0x00 に設定し、その EEPROM から最初の 2 バイトを読み取ります:

# i2cset -y 9 0x50 0x00 ; i2cget -y 9 0x50 ; i2cget -y 9 0x50
これは、デバイスが読み取りごとに内部ポインタ レジスタを自動的に増分し、読み取りバイト トランザクション (レジスタ アドレスを指定せずに読み取り、SMBus 用語では「受信バイト」) をサポートしていることを前提としています。ほとんどの EEPROM デバイスはこのように動作します。ただし、これは、同時に他の誰も I2C デバイスにアクセスしていない場合にのみ安全です。より安全な方法は、代わりに「読み取りワード」SMBus トランザクションを使用するか、2 バイトを超える読み取りには I2C ブロック読み取りトランザクションを使用することです。

バス 9 (i2c-9) の 7 ビット アドレス 0x53 にある 24C32 EEPROM の内部ポインタ レジスタを 0x0000 に設定し、その EEPROM から最初の 2 バイトを読み取ります。

# i2cset -y 9 0x53 0x00 0x00 ; i2cget -y 9 0x53 ; i2cget -y 9 0x53
これも、デバイスが読み取りごとに内部ポインタ レジスタを自動的に増分し、読み取りバイト トランザクションをサポートしていることを前提としています。前の例は 8 ビットの内部アドレス指定を使用する小型 EEPROM 用でしたが、この例は 16 ビットの内部アドレス指定を使用する大型 EEPROM 用です。8 ビットの内部アドレス指定を使用する小型 EEPROM でこのコマンドを実行すると、実際にはその EEPROM の最初のバイトに 0x00 が書き込まれることに注意してください。上記の安全性に関する懸念は依然として残りますが、この場合、SMBus に相当するものはないため、マスターが完全な I2C 対応でない場合は、これが大型 EEPROM からデータを読み取る唯一の方法です。完全な I2C 対応マスターでは、i2ctransfer を使用して安全かつ高速に同じことを実現します。

バス 4 (i2c-4) の 7 ビット アドレス 0x50 にある EEPROM デバイスの最初の 8 バイトを読み取ります:

# i2cget -y 4 0x50 0x00 i 8
バグ
バグを報告したり修正を送信したりするには、Linux I2C メーリング リスト <linux-i2c@vger.kernel.org> に、現在のメンテナーである Jean Delvare <jdelvare@suse.de> を Cc にして書き込みます。

参照
i2cdetect(8)、i2cdump(8)、i2cset(8)、i2ctransfer(8)

作成者
Jean Delvare

このマニュアル ページは、David Z Maze が i2cset 用に作成したマニュアル ページから強く影響を受けています。

参照元
i2cdetect(8)、i2cdump(8)、i2cset(8)、i2ctransfer(8)。
2021 年 7 月
 [目次へ戻る]

(5)i2cset
i2cset - Man Page
set I2C registers

Synopsis
i2cset [-f] [-y] [-m mask] [-r] [-a] i2cbus chip-address data-address [value] ... [mode]
i2cset -V

Description
i2cset is a small helper program to set registers visible through the I2C bus.

Options
-V
Display the version and exit.

-f
Force access to the device even if it is already busy. By default, i2cset will refuse to access a device which is already under the control of a kernel driver. Using this flag is dangerous, it can seriously confuse the kernel driver in question. It can also cause i2cset to silently write to the wrong register. So use at your own risk and only if you know what you're doing.

-y
Disable interactive mode. By default, i2cset will wait for a confirmation from the user before messing with the I2C bus. When this flag is used, it will perform the operation directly. This is mainly meant to be used in scripts.

-m mask
The mask parameter, if specified, describes which bits of value will be actually written to data-address. Bits set to 1 in the mask are taken from value, while bits set to 0 will be read from data-address and thus preserved by the operation. Please note that this parameter assumes that the read and write operations for the specified mode are symmetrical for the device you are accessing. This may or may not be the case, as neither I2C nor SMBus guarantees this.

-r
Read back the value right after writing it, and compare the result with the value written. This used to be the default behavior. The same limitations apply as those of option -m.

-a
Allow using addresses between 0x00 - 0x07 and 0x78 - 0x7f. Not recommended.

There are three required options to i2cset. i2cbus indicates the number or name of the I2C bus to be scanned. This number should correspond to one of the busses listed by i2cdetect -l. chip-address specifies the address of the chip on that bus, and is an integer between 0x08 and 0x77. data-address specifies the address on that chip to write to, and is an integer between 0x00 and 0xFF.

The value parameter, if specified, is the value to write to that location on the chip. If this parameter is omitted, then a short write is issued. For most chips, it simply sets an internal pointer to the target location, but doesn't actually write to that location. For a few chips though, in particular simple ones with a single register, this short write is an actual write. If the mode parameter is s or i, multiple values can be specified.

The mode parameter, if specified, is one of the letters b, w, s, or i, corresponding to a write size of a single byte, a 16-bit word, a SMBus block write, or an I2C block write, respectively. For SMBus and I2C block writes, the write size is determined by the number of value parameters. Except for I2C block writes, a p can also be appended to the mode parameter to enable PEC. If the mode parameter is omitted, i2cset defaults to byte mode without PEC. The value provided must be within range for the specified data type (0x00-0xFF for byte and block writes, 0x0000-0xFFFF for words). Another possible mode is c, which doesn't write any value (so-called short write). You usually don't have to specify this mode, as it is the default when no value is provided, unless you also want to enable PEC.

Warning
i2cset can be extremely dangerous if used improperly. It can confuse your I2C bus, cause data loss, or have more serious side effects. Writing to a serial EEPROM on a memory DIMM (chip addresses between 0x50 and 0x57) may DESTROY your memory, leaving your system unbootable! Be extremely careful using this program.

Examples
Write value 0x42 to 8-bit register 0x11 of the I2C device at 7-bit address 0x2d on bus 1 (i2c-1), after user confirmation:

# i2cset 1 0x2d 0x11 0x42
Immediately clear the 3 least significant bits of 8-bit register 0x11 of the I2C device at 7-bit address 0x2d on bus 1 (i2c-1) (no user confirmation):

# i2cset -y -m 0x07 1 0x2d 0x11 0x00
Write value 0x5000 to 16-bit register 0x02 of the I2C device at 7-bit address 0x48 on bus 1 (i2c-1), after user confirmation:

# i2cset 1 0x48 0x02 0x5000 w
Also see i2cget(8) for examples of combined usage of i2cset and i2cget.

Bugs
To report bugs or send fixes, please write to the Linux I2C mailing list <linux-i2c@vger.kernel.org> with Cc to the current maintainer: Jean Delvare <jdelvare@suse.de>.

See Also
i2cdetect(8), i2cdump(8), i2cget(8), i2ctransfer(8), isaset(8)

Author
Frodo Looijaard, Mark D. Studebaker and Jean Delvare

This manual page was originally written by David Z Maze <dmaze@debian.org> for the Debian GNU/Linux system.

Referenced By
i2cdetect(8), i2cdump(8), i2cget(8), i2c-stub-from-dump(8), i2ctransfer(8), isaset(8).
October 2017
i2cset - マニュアル ページ
I2C レジスタの設定

概要
i2cset [-f] [-y] [-m マスク] [-r] [-a] i2cbus チップ アドレス データ アドレス [値] ... [モード]
i2cset -V

説明
i2cset は、I2C バスを介して表示されるレジスタを設定するための小さなヘルパー プログラムです。

オプション
-V
バージョンを表示して終了します。

-f
デバイスがすでにビジー状態であっても、デバイスへのアクセスを強制します。デフォルトでは、i2cset はカーネル ドライバーの制御下にあるデバイスへのアクセスを拒否します。
このフラグの使用は危険で、問題のカーネル ドライバーを深刻に混乱させる可能性があります。また、i2cset が間違ったレジスタに暗黙的に書き込む可能性もあります。したがって、自分の責任で、何をしているのかわかっている場合にのみ使用してください。

-y
対話モードを無効にします。デフォルトでは、i2cset は I2C バスを操作する前にユーザーからの確認を待ちます。このフラグを使用すると、操作が直接実行されます。これは主にスクリプトで使用するためのものです。

-m mask
マスク パラメータが指定されている場合、値のどのビットが実際にデータ アドレスに書き込まれるかを示します。マスクで 1 に設定されたビットは値から取得され、0 に設定されたビットはデータ アドレスから読み取られ、操作によって保持されます。このパラメータは、指定されたモードの読み取り操作と書き込み操作が、アクセスしているデバイスに対して対称的であると想定していることに注意してください。
I2C も SMBus もこれを保証していないため、そうでない場合もあります。

-r
値を書き込んだ直後に値を読み取り、書き込んだ値と結果を比較します。これは以前はデフォルトの動作でした。
オプション -m と同じ制限が適用されます。

-a
0x00 - 0x07 と 0x78 - 0x7f の間のアドレスの使用を許可します。推奨されません。

i2cset には 3 つの必須オプションがあります。 i2cbus は、スキャンする I2C バスの番号または名前を示します。この番号は、i2cdetect -l によってリストされるバスの 1 つに対応している必要があります。chip-address は、そのバス上のチップのアドレスを指定します。0x08 から 0x77 までの整数です。
data-address は、そのチップ上の書き込み先のアドレスを指定します。0x00 から 0xFF までの整数です。

value パラメータが指定されている場合は、チップ上のその場所に書き込む値です。このパラメータが省略されている場合は、ショート ライトが発行されます。ほとんどのチップでは、ターゲットの場所への内部ポインタを設定するだけで、実際にその場所に書き込むことはありません。ただし、いくつかのチップ、特にレジスタが 1 つしかない単純なチップでは、このショート ライトが実際の書き込みになります。mode パラメータが s または i の場合は、複数の値を指定できます。

モード パラメータが指定されている場合、その文字は b、w、s、または i のいずれかで、それぞれ 1 バイト、16 ビット ワード、SMBus ブロック書き込み、または I2C ブロック書き込みの書き込みサイズに対応します。SMBus および I2C ブロック書き込みの場合、書き込みサイズは値パラメータの数によって決まります。I2C ブロック書き込みを除き、モード パラメータに p を追加して PEC を有効にすることもできます。モード パラメータが省略されている場合、i2cset はデフォルトで PEC なしのバイト モードになります。指定する値は、指定されたデータ タイプの範囲内である必要があります (バイトおよびブロック書き込みの場合は 0x00-0xFF、ワードの場合は 0x0000-0xFFFF)。もう 1 つの可能なモードは c で、これは値を書き込みません (いわゆるショート書き込み)。通常、このモードを指定する必要はありません。値を指定しない場合はこれがデフォルトであるためです。ただし、PEC も有効にしたい場合を除く。

警告
i2cset は、不適切に使用すると非常に危険です。 I2C バスが混乱したり、データが失われたり、さらに深刻な副作用が生じる可能性があります。メモリ DIMM (チップ アドレスが 0x50 から 0x57 の間) のシリアル EEPROM に書き込むと、メモリが破壊され、システムが起動できなくなる可能性があります。このプログラムを使用するときは、細心の注意を払ってください。


ユーザーの確認後、バス 1 (i2c-1) の 7 ビット アドレス 0x2d にある I2C デバイスの 8 ビット レジスタ 0x11 に値 0x42 を書き込みます:
# i2cset 1 0x2d 0x11 0x42
バス 1 (i2c-1) の 7 ビット アドレス 0x2d にある I2C デバイスの 8 ビット レジスタ 0x11 の最下位 3 ビットを直ちにクリアします (ユーザーの確認なし):

# i2cset -y -m 0x07 1 0x2d 0x11 0x00
ユーザーの確認後、バス 1 (i2c-1) の 7 ビット アドレス 0x48 にある I2C デバイスの 16 ビット レジスタ 0x02 に値 0x5000 を書き込みます

# i2cset 1 0x48 0x02 0x5000 w
i2cset と i2cget を組み合わせた使用例については、i2cget(8) も参照してください。

バグ
バグを報告したり修正を送信したりするには、Linux I2C メーリング リスト <linux-i2c@vger.kernel.org> に、現在のメンテナーである Jean Delvare <jdelvare@suse.de> を Cc として送信してください。

関連項目
i2cdetect(8)、i2cdump(8)、i2cget(8)、i2ctransfer(8)、isaset(8)

作成者
Frodo Looijaard、Mark D. Studebaker、Jean Delvare

このマニュアル ページは、もともと David Z Maze <dmaze@debian.org> によって Debian GNU/Linux システム用に作成されました。

参照元
i2cdetect(8)、i2cdump(8)、i2cget(8)、i2c-stub-from-dump(8)、i2ctransfer(8)、isaset(8)。
2017年10月
 [目次へ戻る]


(6)i2ctransfer
i2ctransfer - Man Page
send user-defined I2C messages in one transfer

Synopsis
i2ctransfer [-f] [-y] [-v] [-a] i2cbus desc [data] [desc [data]] ...
i2ctransfer -V

Description
i2ctransfer is a program to create I2C messages and send them combined as one transfer. For read messages, the contents of the received buffers are printed to stdout, one line per read message.
Please note the difference between a transfer and a message here. A transfer may consist of multiple messages and is started with a START condition and ends with a STOP condition as described in the I2C specification. Messages within the transfer are concatenated using the REPEATED START condition which is described there as well. There are some advantages of having multiple messages in one transfer. First, some devices keep their internal states for REPEATED START but reset them after a STOP. Second, you cannot get interrupted during one transfer, but it might happen between multiple transfers. Interruption could happen on hardware level by another I2C master on the bus, or at software level by another I2C user who got its transfer scheduled between yours. This program helps you to create proper transfers for your needs.

Options
-f
Force access to the device even if it is already busy. By default, i2ctransfer will refuse to access a device which is already under the control of a kernel driver. Using this flag is dangerous, it can seriously confuse the kernel driver in question. It can also cause i2ctransfer to silently write to the wrong register. So use at your own risk and only if you know what you're doing.

-y
Disable interactive mode. By default, i2ctransfer will wait for a confirmation from the user before messing with the I2C bus. When this flag is used, it will perform the operation directly. This is mainly meant to be used in scripts.

-v
Enable verbose output. It will print infos about all messages sent, i.e. not only for read messages but also for write messages.

-V
Display the version and exit.

-a
Allow using addresses between 0x00 - 0x07 and 0x78 - 0x7f. Not recommended.

Arguments
The first parameter i2cbus indicates the number or name of the I2C bus to be used. This number should correspond to one of the busses listed by i2cdetect -l.

The next parameter is one or multiple desc blocks. The number of blocks is limited by the Linux Kernel and defined by I2C_RDWR_IOCTL_MAX_MSGS (42 as of v4.10). desc blocks are composed like this:

{r|w}<length_of_message>[@address]

{r|w}
specifies if the message is read or write

<length_of_message>
specifies the number of bytes read or written in this message. It is parsed as an unsigned 16 bit integer, but note that the Linux Kernel applies an additional upper limit (8192 as of v4.10). For read messages to targets which support SMBus Block transactions, it can also be '?', then the target will determine the length.

[@address]
specifies the 7-bit address of the chip to be accessed for this message, and is an integer. If omitted, reuse the previous address. Normally, addresses outside the range of 0x08-0x77 and addresses with a kernel driver attached to them will be blocked. This can be overridden with -a (all) or -f (force). Be very careful when using these! 10-bit addresses are currently not supported at all.

If the I2C message is a write, then a data block with the data to be written follows. It consists of <length_of_message> bytes which can be marked with the usual prefixes for hexadecimal, octal, etc. To make it easier to create larger data blocks easily, the data byte can have a suffix.

=
keep value constant until end of message (i.e. 0= means 0, 0, 0, ...)

+
increase value by 1 until end of message (i.e. 0+ means 0, 1, 2, ...)

-
decrease value by 1 until end of message (i.e. 0xff- means 0xff, 0xfe, 0xfd, ...)

p
use value as seed for an 8 bit pseudo random sequence (i.e. 0p means 0x00, 0x50, 0xb0, ...)

Examples
On bus 0, from an EEPROM at address 0x50, read 8 byte from offset 0x64 (first message writes one byte to set the memory pointer to 0x64, second message reads from the same chip):

# i2ctransfer 0 w1@0x50 0x64 r8
For the same EEPROM, at offset 0x42 write 0xff 0xfe ... 0xf0 (one write message; first byte sets the memory pointer to 0x42, 0xff is the first data byte, all following data bytes are decreased by one):

# i2ctransfer 0 w17@0x50 0x42 0xff-
Warning
i2ctransfer can be extremely dangerous if used improperly. It can confuse your I2C bus, cause data loss, or have more serious side effects. Writing to a serial EEPROM on a memory DIMM (chip addresses between 0x50 and 0x57) may DESTROY your memory, leaving your system unbootable! Be extremely careful using this program.

Bugs
To report bugs or send fixes, please write to the Linux I2C mailing list <linux-i2c@vger.kernel.org> with Cc to the current maintainer: Jean Delvare <jdelvare@suse.de>.

Authors
Wolfram Sang, based on i2cget by Jean Delvare

This manual page was originally written by Wolfram Sang based on the manual for i2cset by David Z Maze <dmaze@debian.org>.

See Also
i2cdetect(8),i2cdump(8),i2cget(8),i2cset(8)

Referenced By
i2cdetect(8), i2cdump(8), i2cget(8), i2cset(8).
February 2017
i2ctransfer - マニュアル ページ
ユーザー定義の I2C メッセージを 1 回の転送で送信

概要
i2ctransfer [-f] [-y] [-v] [-a] i2cbus desc [data] [desc [data]] ...
i2ctransfer -V

説明
i2ctransfer は、I2C メッセージを作成し、それらを 1 回の転送としてまとめて送信するプログラムです。読み取りメッセージの場合、受信したバッファの内容が 1 行の読み取りメッセージごとに stdout に出力されます。
ここでは、転送とメッセージの違いに注意してください。転送は複数のメッセージで構成され、I2C 仕様で説明されているように、START 条件で開始され、STOP 条件で終了します。転送内のメッセージは、REPEATED START 条件を使用して連結されます。この条件もそこに説明されています。1 回の転送で複数のメッセージを使用することには、いくつかの利点があります。まず、一部のデバイスは REPEATED START に対して内部状態を保持しますが、STOP 後にリセットします。 2 番目に、1 回の転送中に中断されることはありませんが、複数の転送の間に中断される可能性があります。バス上の別の I2C マスターによってハードウェア レベルで中断されるか、転送をスケジュールした別の I2C ユーザーによってソフトウェア レベルで中断される可能性があります。このプログラムは、ニーズに合った適切な転送を作成するのに役立ちます。

オプション
-f
デバイスがすでにビジー状態であっても、デバイスへのアクセスを強制します。デフォルトでは、i2ctransfer はカーネル ドライバーの制御下にあるデバイスへのアクセスを拒否します。このフラグの使用は危険であり、問??題のカーネル ドライバーを深刻に混乱させる可能性があります。また、i2ctransfer が間違ったレジスタにサイレントに書き込む可能性もあります。したがって、自分の責任で、何をしているのかわかっている場合にのみ使用してください。

-y
対話モードを無効にします。デフォルトでは、i2ctransfer は I2C バスを操作する前にユーザーからの確認を待ちます。このフラグを使用すると、操作が直接実行されます。これは主にスクリプトで使用するためのものです。

-v
詳細出力を有効にします。送信されたすべてのメッセージに関する情報を出力します。つまり、読み取りメッセージだけでなく、書き込みメッセージについても出力します。

-V
バージョンを表示して終了します。

-a
0x00 - 0x07 と 0x78 - 0x7f の間のアドレスの使用を許可します。推奨されません。

引数
最初のパラメータ i2cbus は、使用する I2C バスの番号または名前を示します。この番号は、i2cdetect -l によってリストされるバスの 1 つに対応している必要があります。

次のパラメータは、1 つまたは複数の desc ブロックです。ブロックの数は Linux カーネルによって制限され、I2C_RDWR_IOCTL_MAX_MSGS (v4.10 では 42) によって定義されます。desc ブロックは次のように構成されます:

{r|w} <length_of_message> [@address]

{r|w}
メッセージが読み取りか書き込みかを指定します

<length_of_message>
このメッセージで読み取られたバイト数または書き込まれたバイト数を指定します。これは符号なし 16 ビット整数として解析されますが、Linux カーネルは追加の上限 (v4.10 では 8192) を適用することに注意してください。SMBus ブロック トランザクションをサポートするターゲットへの読み取りメッセージの場合、'?' にすることもできます。その場合、ターゲットが長さを決定します。

[@address]
このメッセージでアクセスされるチップの 7 ビット アドレスを指定します。これは整数です。省略した場合は、前のアドレスを再利用します。通常、0x08-0x77 の範囲外のアドレスと、カーネル ドライバーが接続されているアドレスはブロックされます。これは -a (すべて) または -f (強制) で上書きできます。これらを使用するときは十分に注意してください。10 ビット アドレスは現在まったくサポートされていません。

I2C メッセージが書き込みの場合、書き込まれるデータを含むデータ ブロックが続きます。これは、16 進数、8 進数などの通常のプレフィックスでマークできる <length_of_message> バイトで構成されます。より大きなデータ ブロックを簡単に作成できるように、データ バイトにサフィックスを付けることができます。

=
メッセージの最後まで値を一定に保つ (つまり、0= は 0、0、0、... を意味します)

+
メッセージの最後まで値を 1 ずつ増やす (つまり、0+ は 0、1、2、... を意味します)

-
メッセージの最後まで値を 1 ずつ減らす (つまり、0xff- は 0xff、0xfe、0xfd、... を意味します)

p
値を 8 ビットの疑似ランダム シーケンスのシードとして使用します (つまり、0p は 0x00、0x50、0xb0、... を意味します)


バス 0 で、アドレス 0x50 の EEPROM から、オフセット 0x64 から 8 バイトを読み取ります (最初のメッセージは 1 バイトを書き込み、メモリ ポインタを 0x64 に設定し、2 番目のメッセージは同じチップから読み取ります):

# i2ctransfer 0 w1@0x50 0x64 r8
同じ EEPROM のオフセット 0x42 に 0xff 0xfe ... 0xf0 を書き込みます (書き込みメッセージは 1 つ、最初のバイトはメモリ ポインタを 0x42 に設定し、0xff は最初のデータ バイトで、後続のすべてのデータ バイトは 1 ずつ減ります):

# i2ctransfer 0 w17@0x50 0x42 0xff-
警告
i2ctransfer は、不適切に使用すると非常に危険です。I2C バスを混乱させたり、データ損失を引き起こしたり、より深刻な副作用を引き起こしたりする可能性があります。メモリ DIMM (チップ アドレスが 0x50 から 0x57 の間) 上のシリアル EEPROM に書き込むと、メモリが破壊され、システムが起動できなくなる可能性があります。このプログラムを使用するときは、細心の注意を払ってください。

バグ
バグを報告したり修正を送信したりするには、Linux I2C メーリング リスト <linux-i2c@vger.kernel.org> に、現在のメンテナー Jean Delvare <jdelvare@suse.de> を Cc として送信してください。

著者
Wolfram Sang、Jean Delvare の i2cget に基づく

このマニュアル ページは、もともと Wolfram Sang が David Z Maze <dmaze@debian.org> の i2cset のマニュアルに基づいて書いたものです。

参照
i2cdetect(8)、i2cdump(8)、i2cget(8)、i2cset(8)

参照元
i2cdetect(8)、i2cdump(8)、i2cget(8)、i2cset(8)。
2017 年 2 月
 [目次へ戻る]


(7)eeprog
eeprog - Man Page
reads and writes 24Cxx EEPROMs connected to I2C serial bus

Synopsis
eeprog [-fqxdh] [-16|-8] [-r addr[:count]|-w addr] <device> <i2c-addr>

Description
eeprog uses the SMBus protocol used by most of the recent chipsets.

Note
Don't forget to load your i2c chipset and the i2c-dev drivers.

The following environment variables could be set instead of the command line arguments:

EEPROG_DEV device
EEPROG_I2C_ADDR i2c-addr

Parameters
Address modes

-8
Use 8bit address mode for 24c0x...24C16 [default]

-16
Use 16bit address mode for 24c32...24C256

Actions-r addr[:count]
Read count (1 if omitted) bytes from addr and print them to the standard output

-w addr
Write input (stdin) at address addr of the EEPROM

-h
Print this help

Options-x
Set hex output mode

-d
Dummy mode, display what *would* have been done

-f
Disable warnings and don't ask confirmation

-q
Quiet mode

Busdevice
Device file representing the I2C bus (eg. /dev/i2c-0)

i2c-addr
I2C bus address of the EEPROM (eg. 0x3A)

Examples
Read 64 bytes from the EEPROM at address 0x54 on bus 0 starting at address 123 (decimal)

eeprog /dev/i2c-0 0x54 -r 123:64

Print the hex codes of the first 32 bytes read from bus 1 at address 0x22

eeprog /dev/i2c-1 0x51 -x -r 0x22:0x20

Write the current timestamp at address 0x200 of the EEPROM on bus 0 at address 0x33

date | eeprog /dev/i2c-0 0x33 -w 0x200

Author
Stefano Barbato

Info
Jul 2013 i2c-tools System Administration
eeprog - マニュアル ページ
I2C シリアル バスに接続された 24Cxx EEPROM の読み取りと書き込みを行います

概要
eeprog [-fqxdh] [-16|-8] [-r addr[:count]|-w addr] <device> <i2c-addr>

説明
eeprog は、最近のチップセットのほとんどで使用されている SMBus プロトコルを使用します。

注意
i2c チップセットと i2c-dev ドライバーをロードすることを忘れないでください。

コマンドライン引数の代わりに、次の環境変数を設定できます
EEPROG_DEV デバイス
EEPROG_I2C_ADDR i2c-addr
パラメータ
アドレス モード

-8
24c0x...24C16 に 8 ビット アドレス モードを使用します [デフォルト]

-16
24c32...24C256 に 16 ビット アドレス モードを使用します

アクション-r addr[:count]
addr から count (省略した場合は 1) バイトを読み取り、標準出力に出力します

-w addr
EEPROM のアドレス addr に入力 (stdin) を書き込みます

-h
このヘルプを出力します

オプション-x
16 進出力モードを設定します

-d
ダミー モード、*実行されるはずだった*内容を表示します

-f
警告を無効にし、確認を求めません

-q
Quiet モード

Busdevice
I2C バスを表すデバイス ファイル (例: /dev/i2c-0)

i2c-addr
EEPROM の I2C バス アドレス (例: 0x3A)


バス 0 のアドレス 0x54 にある EEPROM から、アドレス 123 (10 進数) から 64 バイトを読み取ります

eeprog /dev/i2c-0 0x54 -r 123:64
バス 1 のアドレス 0x22 から読み取った最初の 32 バイトの 16 進コードを出力します

eeprog /dev/i2c-1 0x51 -x -r 0x22:0x20

バス 0 のアドレス 0x33 にある EEPROM のアドレス 0x200 に現在のタイムスタンプを書き込みます

date | eeprog /dev/i2c-0 0x33 -w 0x200

著者
Stefano Barbato

情報
2013 年 7 月 i2c-tools システム管理