Linux での i2c デバッグ アーティファクト i2c-tools のインストールと使用

i2c ツールの紹介

組み込み Linux 開発では、i2c ハードウェアが正常に接続されているか、デバイスが正常に動作しているか、デバイスのアドレスは何かなどを確認する必要がある場合があります。ここでは、I2C バスをテストするツールを使用する必要があります。 i2c ツール。

i2c-tools は、i2c をデバッグするためのオープンソース ツールで、マウントされたデバイスとデバイス アドレスを取得したり、I2C デバイス レジスタの読み取りおよび書き込みを行うことができます。新しいデバイス ドライバーをデバッグする場合、レジスターを繰り返し変更して結果を確認することが避けられません。従来の方法は、ドライバー コードのレジスタ値を変更する -> コンパイル -> ダウンロード -> 実行 -> 結果を確認するというものです。このプロセスには時間がかかり、毎回変更する必要があるのは 1 ビットだけですが、この場合、i2c-tools は単なる魔法のツールです。

以下に、このツールのインストールと使用方法について簡単に紹介します。

i2c-tools の公式説明:

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

ツールのソース コードのダウンロード アドレス:

https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/

i2c-tools ツールには次のものが含まれます。

i2cdetect : i2c バス上のデバイスをスキャンし、アドレスを表示するために使用されます。
i2cset : i2c デバイスのレジスタの値を設定します。
i2cget : i2c デバイスのレジスタの値を読み取ります。
i2cdump : i2c デバイスのすべてのレジスタの値を読み取ります。
i2ctransfer : 複数バイトを一度に読み書きします。

工具命令介绍:
    i2cdetect:检测i2c芯片
    i2cdump:查看寄存器值
    i2cget:获取单个寄存器值(8位寄存器)
    i2cset:设置单个寄存器值(8位寄存器)
    i2ctransfer:一次传输多字节数据(16位寄存器)
参数介绍:
    -y:禁用交互模式。
    -f:强制访问设备。
    -r:写入后立即读回该值。

注: i2c-tools の原理は、/dev パス内の i2c-x デバイス ファイルを操作することによって完了します。そのため、カーネルは CONFIG_I2C_CHARDEV 構成を有効にする必要があります。有効にしないと、ノードが見つからないことが報告されます。  

デバイスでは、ターゲット ボードの端子から入力することもできます。i2c ls /sys/bus/i2c/devices查看i2c设备节点信息。看到的-0、i2c-1 は i2c バス ノードを指し、i2c スレーブ デバイスはすべてバス ノードの下にマウントされます。

ツールのコンパイル

ツールのソース コード。次のコマンドを使用してコンパイルします。

make CC=arm-linux-gnueabihf-gcc USE_STATIC_LIB=1

USE_STATIC_LIB は静的コンパイルを使用することを意味します。コンパイルが完了すると、5 つのプロダクト i2cdetect、i2cdump、i2cget、i2cset、および i2ctransfer が tools ディレクトリに生成されます。これらの実行可能ファイルをデバイスにコピーします。

USE_STATIC_LIB コンパイル オプションを指定しないと、動的リンクを使用してコンパイルされます。コンパイル後、i2c-tools-4.3/lib ディレクトリにある libi2c.so.0 ダイナミック ライブラリをデバイスの /usr/bin ディレクトリにコピーする必要があります。コンパイルにより、i2cdetect、i2cset、i2cget、i2cdump、i2ctransfer の 5 つのツールが生成され、開発ボードにコピーした後に使用できます。

i2c ツールの使用方法

i2cdetect: 開発ボードに含まれる i2c バスとペリフェラルをクエリします。次のコマンドを参照してください。

i2cdetect -l

開発ボードに含まれる i2c バスをプローブします。

i2cdetect -y -r 0

i2c-0 バスに実装されているペリフェラルを検出します。パラメータ -y は、対話モードをキャンセルしてコマンドを直接実行することを意味します。

i2cdetect -y -r 1

i2c-1 バスに取り付けられたペリフェラルを検出します。UU は、デバイスが Linux カーネル ドライバーによって占有されていることを示し、検出プログラムはデバイスをスキップします。次の図に示すように、スレーブ デバイスのアドレスはそれぞれ 0x0c と 0x1a です。UU は、デバイスアドレスのスレーブデバイスがドライバによって占有されていることを示し、該当するドライバをアンインストールすると、UU はデータになります。-- アドレスは検出されましたが、応答されなかったことを示します。

 i2cset: i2c デバイスの単一レジスタの値を設定します。いくつかのコマンドを参照してください。

i2cset -y -f 0 0x57 0x00 0x10
i2cset -y -f 0 0x57 0x01 0x11
i2cset -y -f 0 0x57 0x02 0x12
i2cset -y -f 0 0x57 0x03 0x13

以下は、分析の例として i2cset -y -f 0 0x57 0x00 0x10 を使用します。
パラメータの意味:
-y は対話モードをキャンセルし、コマンドを直接実行します
。 -f はデバイスへのアクセスを強制します。0
は i2c バス番号を示します
。0x57 は、 i2c デバイス アドレス。0x00 は
レジスタ アドレスを示します。i2cget: i2c デバイスの単一レジスタの値を表示し、いくつかのコマンドを確認します。

i2cget -y -f 0 0x57 0x00

分析の例として i2cget -y -f 0 0x57 0x00 を取り上げます。パラメータの意味は次のとおりです。
-y は対話モードをキャンセルし、コマンドを直接実行します。
-f デバイスへのアクセスを強制します
。 0 は i2c バス番号を示します。 0x57 は i2c デバイス アドレスを示します。 0x00 は
i2c デバイス アドレスを示します。
レジスタアドレス

 i2cdump: i2c デバイスのすべてのレジスタの値を表示します。次のコマンドを参照してください。

i2cdump -y -f 1 0x32

パラメータの意味:
-y は対話型プロセスをキャンセルし、コマンドを直接実行します。
-f デバイスへのアクセスを強制します
。 1 は i2c バス番号を示します。
0x32 は i2c デバイスのアドレスを示します。

その他のリソース

Linux カーネル i2c-tools コマンド

i2c-tools ツールのインストールと使用方法の簡単な紹介 - 電子ペーパー

https://www.cnblogs.com/ITY996/p/16894380.html

https://www.cnblogs.com/liuwanpeng/p/7346558.html

Linux_i2cdetect_Deep Sea Belt Carp での I2C ツール ツールの使用 - CSDN ブログ 

おすすめ

転載: blog.csdn.net/qq8864/article/details/131953108
おすすめ