問題タブ [i2c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
2365 参照

c++ - errnos はどこで定義されていますか? i2c 用の Linux c/c++ プログラムの例

従来の linux c/c++ ソフトウェアで何か問題が発生した場合、魔法の変数 errno があり、何が問題なのかの手がかりが得られます。

しかし、これらのエラーはどこで定義されているのでしょうか?

例を見てみましょう (これは実際には Qt アプリの一部であるため、qDebug() です)。

次のステップは、その errno が何であったかを調べることです。これにより、終了するか、問題について何かを試みるかを決定できます。

したがって、この時点で if または switch を追加します。

私の質問は、「9」が表すエラーをどこで見つけるかです。私のコードでは、そのようなマジック ナンバーは好きではありません。

/ありがとう

0 投票する
1 に答える
1348 参照

sleep - Xmegaでのスリープ後にTWIトランザクションが失敗しました

Atmel Xmega256A3でスリープから復帰した後、TWI/I2Cでいくつかの問題が発生しました。TWI / I2Cの詳細を掘り下げる代わりに、AVR1308アプリケーションノートに添付されたAtmelから提供されたtwi_master_driverを使用することにしました。

問題は、スリープから復帰した直後に1つまたはいくつかのTWIトランザクションが失敗したことです。XMegaに接続されたI2Cバスには、いくつかのポテンショメータ、温度計、RTCがあります。XMegaはバス上の唯一のマスターとして機能します。

AVRLIBCにあるスリープ関数を使用します。

ピンを高く設定するRTCによってスリープから復帰したXMega。XMegaがスリープから復帰した後、ポテンショメータの1つに値を設定したいのですが、これは失敗します。何らかの理由で、TWIトランザクションの結果は、最初のトランザクションではTWIM_RESULT_OKではなくTWIM_RESULT_NACK_RECEIVEDになります。その後、すべてが再び機能するようです。

ここで何かを逃したことがありますか?XMega、スリープ、TWIに既知の問題はありますか?スリープから復帰した後、フラグをクリアするTWIをリセットする必要がありますか?

よろしくフレドリック

0 投票する
2 に答える
217 参照

android - Tegra ベースのロボティクス プラットフォーム

Android を実行する Tegra ベースのロボティクス プラットフォームを開発する可能性を検討しています。これを行うには、シリアル、I2C、および場合によっては PWM 通信を実行できる必要がありますが、Tegra プラットフォームではこれが許可されていますか? Android は、この種のハードウェア レベルの通信へのアクセスをサポートしていますか?

0 投票する
1 に答える
1120 参照

c - i2c バスを使用してドライバーにアクセスする際の不明なコア ダンプ

現在、Arm 9 組み込みアプリケーション用に 2 つのドライバーを開発しています。どちらも IO エクスパンダ pcf8575 を使用する i2c ドライバです。ドライバーを個別にテストしましたが、両方をカーネルにコンパイルしてメイン アプリケーションを実行すると、以下のコア ダンプが得られます。通常、最初のドライバ アクセス時には発生しません。ランダムに発生するようです。ドライバーが i2c ドライバーを呼び出して I2c バス (i2c_master_send(client, &buff[0], count) ) で送信すると、確実に発生します。2 つのドライバーのメイン ファイルを添付します。それらは似ており、どちらも非常に単純です。私はそれらを個別に多くのテストを行いました。2 つの非常に異なるハードウェアで同じ結果が得られたため、これをハードウェアの問題として除外しました。私は私だと思います カーネルページングリクエストがいつどこから見始めればよいのかさえわかりません。問題が i2c-core ドライバーにあるとは信じがたいですが、これはコードの中で問題が発生している部分です。

これはpcf8575 lcdドライバーファイルです(他のドライバーは、書き込みではなく読み取り用にセットアップされているため、これをほぼカットアンドペーストしたものです)

0 投票する
1 に答える
2419 参照

c - i2c デバイス用の Linux ドライバー -- 2 バイト読み取り

一般的なデバイスとは少し異なるように思われる I2C デバイス用の Linux ドライバーを作成しようとしています。具体的には、次のように、間にストップ ビットを送信せずに 2 バイトを連続して読み取る必要があります。

i2c_transfer()、i2c_master_send()、i2c_master_recv() など、これを行ういくつかの方法を見てきましたが、それらがこれらをサポートするかどうかはわかりません。これらの機能を直接使用して、それほど苦痛ではない方法はありますか? 私がこれまでに見つけた文書は、この問題について完全に明確ではありませんでした。

編集#1:読みやすくするために記号キーを追加します。http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/i2c/i2c-protocolへの礼儀

0 投票する
3 に答える
15881 参照

linux - i2c デバイスドライバーノードへのアクセス方法

状況 1:

Linux カーネルの一部として i2c チップ ドライバーがあります。i2c チップ ドライバーがカーネル ブート メッセージからカーネル内にあることを確認できます (私のチップ ドライバーは mma8450 です)。

dmesg:

このドライバーも表示されます(0x1cはチップのi2cアドレスです)

/dev インターフェイスにこのドライバー ノードが表示されません。私の質問は、ユーザー プログラムでこのデバイスにアクセスできるように、/dev にこのデバイスのノードを作成する方法です。

状況 2:

同じチップ ドライバのモジュールを作成し、カーネルの一部にはしません。insmod mma8450 を使用してこのモジュールをロードできます。メジャー/マイナー番号がないため、このデバイスのノードを作成するにはどうすればよいですか? (mma8450 のソース コードで、このドライバーに割り当てられたメジャー番号とマイナー番号を確認できません)

どんな助けでも大歓迎です

よろしく

0 投票する
1 に答える
494 参照

linux - Linux で i2c デバイスと通信できない

Linux で i2c デバイスと通信できません。デバイスは、通常 /dev/i2c-0 として起動する SMBus に接続されます。ドライバーの init 関数が呼び出され、ドライバーは i2c_add_driver を介して登録されますが、ドライバーはプローブされません。

ハードウェア ボードの初期化関数で、i2c_register_board_info(n, i2c_board_info, array_size) を呼び出しています。ここで、デバイスを SMBus に登録するには n を 0 にする必要がありますが、n を設定すると SMBus は代わりに /dev/i2c-(n + 1) として表示されます。

何か案は?

0 投票する
1 に答える
404 参照

c# - I2CDevice.CreateReadTransaction() と新しい I2CDevice.I2CReadTransaction() の違いは何ですか?

.NET MF I2C API を調べていますが、少し混乱しています。I2C トランザクションを作成する方法は複数あるようです。

I2CDevice.CreateReadTransactionメソッドを使用するか、単に新しいI2CDevice.I2CReadTransactionオブジェクトを作成することができます。何が違うのか不思議です。どちらも同じ数の引数を取ります。

0 投票する
2 に答える
922 参照

linux-kernel - Linuxカーネルにパッチを適用してジャイロスコープのサポートを追加する方法

組み込みLinux(ARMベースのLPC3141ボード、組み込みアーティスト)でInvensenseのMPU3000/3050を使用しようとしています。この面白いパッチをインターネットで見つけました

https://patchwork.kernel.org/patch/703991/

どうすればカーネルに実装できますか?

0 投票する
1 に答える
482 参照

linux-kernel - デバイス データ構造の追加と Linux ドライバーの登録

ジャイロ/アクセル ドライバー (Invensense MPU3050) をカーネル (LPC Linux) に追加ています。イメージと rootfs の構築には LTIB を使用します。

私はすべてのファイルを追加することを管理し、ドライバーは利用可能で、完全にコンパイルされます! 次に、「board-generic.c」ファイル ( README )の i2c_board_info_structure に mpu3050_platform_data 構造を追加し、同じ「board-generic.c」ファイルにいくつかの行を追加して登録する必要があります。

問題は、この/これらのファイルが見つからないことです。それらの名前は Linux ディストリビューションに依存していますか? 同じ情報がどこかに書かれていますか?