問題タブ [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.
c - ファイル記述子を使用して書き込みをフラッシュするにはどうすればよいですか?
この open() と fopen() の誤解は、ARM 上の Linux 2.6.14 カーネルのバグのある I2C ドライバーに起因することが判明しました。動作中のビット バッシュ ドライバーをバックポートすることで、ここで対処しようとしていた問題の根本原因が解決されました。
Linux (I2C) のシリアル デバイス ドライバーの問題を解決しようとしています。デバイスの書き込みと読み取りの間に時間指定された OS 一時停止 (スリープ) を追加することで、動作が (はるかに) 良くなったようです。
余談: I2C の性質は、マスターによって読み書きされる各バイトが、ワイヤーの反対側 (スレーブ) のデバイスによって認識されることです。バスの仕組みに納得がいかない。とにかく...
(固定期間の一時停止を使用するのではなく) 確実に書き込みをフラッシュするか、書き込み/読み取りトランザクションがマルチスレッドに適した方法で 完了したことを何らかの形でテストしたいと思います。
使用に関する問題fflush(fd);
は、「fd」がストリームポインター(ファイル記述子ではない)である必要があることです。
私の問題はioctl()
、ストリーム ポインターを使用しない を使用する必要があることです。すなわち
提案?
sunspot - SunSPOT で TTL、SPI、または I2C を推奨しますか
次のプロトコル TTL、SPI、または I2C をサポートする外部コンポーネント (Skyetek M1 Mini または M1 RFID スキャナー) とのインターフェイスを試み始めています。これらのルートのうち、どのルートをお勧めするかを考えています。その場で実行されているアプリは、多くの処理時間 (継続的に実行されるジェスチャ マッチング アルゴリズム) を必要とし、かなりのリソースを消費します。
トピックに関するリンクまたはソースは大歓迎です。
私が見つけた役立つリンク:
TTL:
ご協力いただきありがとうございます。
編集:
それが私が接続しようとしているデバイスに役立つ場合は、Skyetek M1およびM1 miniです。プラットフォーム/CPU は Sun SunSPOTです。
c - LinuxでのI2Cの使用による読み取り/書き込み
FM24CL64-GTR FRAM
アドレスのI2Cバスを介して接続されているチップに読み取り/書き込みしようとしています0b 1010 011
。
3バイト(データアドレス2バイト、+データ1バイト)を書き込もうとすると、カーネルメッセージ([12406.360000] i2c-adapter i2c-0: sendbytes: NAK bailout.
)が返され、書き込みは!=3を返します。以下のコードを参照してください。
ただし、2バイトを書き込んでから別のバイトを書き込むと、カーネルエラーは発生しませんが、FRAMから読み取ろうとすると、常に0が返されます。FRAMから読み取るコードは次のとおりです。
どの関数もエラー値を返しません、そして私もそれを試しました:
これも成功しますが、常に0を返します。これはハードウェアの問題を示していますか、それとも何か間違ったことをしていますか?
Linux上のI2Cを介したFM24CL64-GTR用のFRAMドライバーはありますか?APIはどうなりますか?どんなリンクも役に立ちます。
linux - i2c デバイス用の新しい Linux ドライバーを作成するにはどうすればよいですか?
いくつかの i2c 制御機能を備えた USB デバイスがあり、それらのビットを操作するためのユーザー空間 API を追加したいと考えています。デバイスの既存のドライバーに i2c サポートを追加するにはどうすればよいですか?
c - I2C ISR と割り込み
プラットフォーム - ARM9
I2C 経由で ARM9 に接続されたサードパーティ デバイスがあります。私の問題は、I2C の読み取り/書き込みがねじれていることです。IRQ ラインがアサートされているように見えますが、読み取るデータがある場合はアサート解除されません。サードパーティ デバイスがアドレス パケットに対して NACK を返すため、読み取りは失敗します。したがって、後続の書き込みはすべて失敗します。
割り込み処理が正常かどうか疑問に思っています。IRQ を処理する ISR では、割り込みを無効にし、割り込みハンドラーの登録を解除してから、I2C バスから読み取るようにタスクに通知します。最後に、割り込みを再度有効にします。
タスクが上記の信号を処理するときに、I2C バスからデータを読み取ろうとしましたが、失敗しました。最後に、読み取りを試みた後は常に ISR を再登録します。読み取り信号の処理中に発生する割り込みの無効化/有効化はありません。
私の質問は、I2C バスの読み取り/書き込み時に割り込みを無効にする必要がありますか?
選択したプログラミング言語は、独自の RTOS を使用した c です。
embedded - データに対する PIC I2C スレーブ ACK
PIC16F88X の I2C プロトコルを調べています。私がやりたいことは、I2C で受信したデータに応じて、I2C スレーブを ACK または NACK にできるようにすることです。
PIC は、回線上で送信された I2C アドレスに対して ACK または NACK を返すことができますが、私が読んだものからは、後続の受信バイトに対して常に ACK を返します。あれは正しいですか?
次の通信では:
レジスタ値の値に応じて、スレーブが Ack または Nack できるようにしたいと考えてい_
ます。スレーブがレジスタの値を理解していない場合、応答しない_
でください。
誰かがこれが不可能であることを確認するか、それを行う方法を教えてください。
avr - AVR Studioでファイルを開く方法は?
I2C 経由で test[] を送信することにより、2 つの ATMEGA88 (マスターとスレーブ) が正しく動作しています。
作業環境: C を使用する AVR Studio。
必要なのは、マスターが mydoc.txt などの指定されたファイルをスレーブに送信できるようにすることです。
UI を構築するために別のアプリケーションを使用する必要がありますか? 別の IDE を接続して動作させるにはどうすればよいですか? どんなプロ?それともサンプルコード?
ありがとう!
linux - Linux カーネルでの I2C 書き込み確認ポーリング
ここでの精彩を欠いた反応は、私にこれを不思議に思いました。
私は、次のようなデバイス(Analog Devices 525x)を抱えています (データ シート、16 ページから):
内部 [EEPROM] 書き込みサイクル中に I2C インターフェイスを無効にします。
「今からソファから降りるので、シートのクッションを裂いてしまったので、しばらく使用しないでください」のように、それは公平に思えません。正直なところ、なぜそれが私の問題なのですか?
とにかく、データシートは、応答ポーリングが答えであることを示唆しています-Linuxカーネルに入ります... Linux GPIOビットバッシュI2Cドライバーはこれを行うためのメカニズムを提供しますか? 基本的に、書き込みビットをセットしてアドレスを送信し、ACK が表示されるまで送信し続けます。
バックポートされたGPIOビットバッシングドライバーを備えたARMで2.6.14を使用しています(2.6.19からだと思います)。
c - 2 バイトを指すポインターの作成
私はおそらく呼吸以外はまったくの初心者なので、明確でない場合は申し訳ありませんが、次のようになります。
I2Cバスを介して回路にバイトを書き込むCの関数があり、ヘッダーファイルでは次のようになります。
- hJida: ボード ハンドル。
- dwType: I2C バスのゼロベースの番号。
- bAddr: I2C バス上のデバイスのアドレス。バスに書き込まれる 8 ビット全体。
- pBytes: バイトを含む場所へのポインター。
- dwLen: 書き込むバイト数。
アドレス 0x98 の回路に 1 バイトだけ書き込みたい場合は、次のようにします。
これは機能しているように見えますが、0x10FF などの 2 バイトを書き込みたい場合は機能しません。では、1 バイトではなく 2 バイトを指すポインターを作成するにはどうすればよいでしょうか。
ありがとう
communication - 割り込み通信について
私たちはシンプルなアーキテクチャを持っています:
- メインチップ (arm9 ベース)
- PICコントローラー
PIC は、割り込みベースの I2C 通信プロトコルを介して ARM と通信し、データを転送します。割り込み内で、I2C 層 (バス) からデータを読み取るタスクに信号を送ります。
データが限られている場合、通常、データを読み取って上位層に送信するのにそれほど問題はありません。このデータが非常に大きい場合、割り込みは長時間拘束されます。
最初の質問は次のとおりです。
私は正しいですか?
私が正しい場合、どうすれば同じことを避けることができますか? ...または、別の解決策はありますか?