i2c-toolsの紹介組み込み開発では、ハードウェアが正しく接続されているかどうか、デバイスが正しく動作しているかどうか、デバイスのアドレスは何であるかなどを確認する必要がある場合があります。ここでは、I2C バスをテストするためのツール、i2c-tools を使用する必要があります。 i2c-toolsは、I2Cのデバッグ用に特別に設計されたオープンソースツールです。マウントされたデバイスとそのアドレスを取得できるほか、I2Cデバイスレジスタの読み書きも可能です。 新しいデバイスドライバーをデバッグする際には、レジスタを繰り返し変更し、その結果を観察することが避けられません。従来のアプローチでは、ドライバーコードのレジスタ値を変更→コンパイル→ダウンロード→実行→結果の観察という手順を踏んでいました。このプロセスは時間がかかり、1回あたり1ビットしか変更できない場合もあります。このような場合、i2c-toolsがまさに救世主です。 i2c-tools 公式ドキュメント: https://i2c.wiki.kernel.org/index.php/I2C_Toolsi2c-tools ダウンロード ウェブサイト: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ダウンロード後、Ubuntuでファイルを解凍してください。開発ボードで使用する場合は、ボードに対応するgccツールチェーンを使用してコンパイルしてください。Ubuntuで使用する場合は、Ubuntuのデフォルトのgccツールチェーンを使用してコンパイルしてください。 コンパイルにより、i2cdetect、i2cset、i2cget、i2cdump、i2ctransfer の5つのツールが生成されます。これらは開発ボードにコピーして使用できます。あるいは、i2c-tools ソースコードパッケージをご自身のソースコードに直接追加し、ファームウェアに直接コンパイルすることもできます。 i2cdetect: I2C バス上のデバイスをスキャンし、そのアドレスを表示するために使用されます。 このツールはもともと Linux で使用するために設計されましたが、Android システムのカーネルも Linux であるため、Android に簡単に移植できます。 Android-i2ctoolsをダウンロード: https://github.com/skyxiaoyan1/android-i2ctoolこれは、上級開発者がi2c-tools 4.1をベースに移植したものです。Androidでのコンパイルについては、以前Androidシステムのコンパイル手法について記事を書きました。一般的なプロセスは次のとおりです。 ソース コード パッケージは、/ external / i2c - tools / ... にあります。 使用例i2cdetect: I2C バス上のデバイスをスキャンするために使用されます。 使用法: i2cdetect [ - y ] [ - a ] [ - q |- r ] I2CBUS [名 姓] ./i2cdetect -r -y 0 を実行します。 -- はアドレスが検出されたがチップが応答しなかったことを示します。一方、UU はアドレスが現在のカーネル ドライバーによって使用されていることを示します。 上の図に示すように、I2C0 バスにはデバイス アドレスが 0x1b、0x40、0x41 の 3 つのデバイスがあります。 `./i2cdetect -F i2cbus` は i2cbus バスの機能を照会します。 ./i2cdetect -V ソフトウェアのバージョン番号を出力します。 コマンド `./i2cdetect -l` は、システム内で現在実行されている I2C バスの数を検出します。 i2cset: I2C デバイスのレジスタに値を書き込みます。 使用法: i2cset [ - f ] [ - y ] [ - m MASK ] [ - r ] [ - a ] I2CBUS CHIP - ADDRESS DATA - ADDRESS [ VALUE ] ... [ MODE ] i2cget: I2C デバイス上のレジスタの値を読み取ります。 使用法: i2cget [ - f ] [ - y ] [ - a ] I2CBUS チップ-アドレス[データ-アドレス[モード] ] i2cdump: 特定の I2C デバイスのすべてのレジスタの値を読み取ります。 使用法: i2cdump [ - f ] [ - y ] [ - r first - last ] [ - a ] I2CBUS ADDRESS [ MODE [ BANK [ BANKREG ] ] ] 一般的に、レジスタは8ビットのアドレスを持ちます。i2cdump、i2cget、i2csetも8ビットのアドレスを読み取るように設定されています。一度に8ビットを超えるアドレスが必要な場合は、i2ctransferが必要です。 i2ctransfer: 複数バイトの同時読み取りと書き込み 使用法: i2ctransfer [ - f ] [ - y ] [ - v ] [ - V ] [ - a ] I2CBUS DESC [ DATA ] [ DESC [ DATA ] ] ... システム上の I2C バスとそのデバイス アドレスを確認します。 ls / sys /バス/ i2c /デバイス/ ここで実際のデバイスを表示し、i2c-tools からスキャンしたデータと比較して一致するかどうかを確認できます。 述べる: i2c-tools は /dev パス内の i2c-× デバイス ファイルを操作することで動作します。そのため、カーネルで CONFIG_I2C_CHARDEV マクロが有効になっている必要があります。有効になっていない場合、ノードが見つからないことが報告されます。 |