問題タブ [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.
python - python smbus/i2c 周波数
少し長いケーブルを使用できるようにするために、i2c バスの周波数を変更したいと考えています。
私は python-smbus パッケージを使用しており、非常にうまく機能しますが、バス周波数を設定する方法が見つかりません。
私はドキュメントを調べましたが、バス パラメータの設定に関連するものさえも見つけることができませんでした。
それはpythonでできることですか、それとももっと低いレベルのものが必要ですか?
ARM アーキテクチャである Raspberry PI を使用しています。
pic - PIC16F88、portb.bit6、および I2C
PIC16F88 で奇妙な問題が発生しています。I2C を介して接続された EEPROM があり、portb.bit6 に書き込むまで問題なく動作します。その時点から、EEPROM からゴミが出始めます。オシレータ出力に portb.6 を使用する Timer 1 を明示的に無効にしようとしましたが、役に立ちませんでした。PIC ピン (ピン 12) からトレースを切り取って、物理的に何も接続されないようにしてみましたが、役に立ちませんでした。私の C コードは単純で、portb.6 = 0 または portb.6 = 1 です。いずれにせよ、I2C を介した EEPROM の読み取りは永遠に失敗します。生成された ASM コードは正常に見えます。この問題は、私が試したすべてのボードで発生するため、特定の PCB に限定されたものではありません。私は当惑しています。助言がありますか?
linux - OMAP 3 Linux I2C SMBUS SmartBattery (SBS) が検出されない
OMAP 3730 を使用した組み込み Linux プロジェクトに取り組んでいます。カーネルのバージョン 3.2.23 を使用しています。I2C は正常に動作し、バス #2 のボードからさまざまなセンサーを確認できます。I2C バス #3 にはスマート バッテリーのみが接続されており、電源コードを取り外すことができ、バッテリーはボードの動作を維持します。問題は、スマート バッテリーを検出またはスキャンできないことです。i2ctools でさまざまなプログラムを試してみましたが、うまくいきませんでした。ボードをスコープに接続すると、バス #3 のアクティビティを確認できます。また、[デバイス ドライバー] > [カーネルの I2C サポート] の下にあるすべての関連オプションを有効にしました。
i2c バスでスマートバッテリーを表示するにはどうすればよいですか? カーネルで何か他のものを有効にする必要がありますか?
debugging - PIC24HJ256GP610/610A の違いによる RTCC での I2C 読み取り/書き込みの問題?
PIC24HJ256GP610A の I2C モジュールに問題があります。私のコード (以下のスニペットを参照) は、PIC24HJ256GP610 [注: 610A ではありません] で完全に正常に動作します。DS1374 RTCC との通信に I2C バスを使用しています。しかし、610A では、I2C を使用して RTCC に値を書き込もうとして ACKSTAT ビットをポーリングするとスタックします。また、ほとんどの場合、I2C 経由で値を読み取るときに RTCC 値が増加しません (必要に応じて増加する場合もあります)。何か案は?I2C モジュールを扱う 610 と 610A の間でコンフィグ ビット/モード/設定の違いはありますか? RTCC チップを交換して、プロセッサを交換してみました。したがって、ここでの唯一の違いは、I2C 通信が 610 では機能し、610A では機能しないことです。
610 と 610A の違いは何ですか? 610 はもはや製造されていない旧式の部品ですか、それとも製造され続ける予定ですか?
実験、信号の調査、デバッガーのステップ実行中に気付いたことがいくつかあります。
1)。I2C クロックは、20 番目の送信ビットで無期限に高くなり、デバッガーを一時停止すると ACKSTAT ビットのポーリングで停止します。最初のビットがスタート ビットのように見え、次にさらに 9 ビット、別のスタート/ストップ ビット、さらに 9 ビットが続き、クロック ラインが High になります。
2)。クロック ラインがスタックし、ウォッチ ウィンドウを使用している場合、I2C1STATbits レジスタの値は 0x8008 であり、これはスレーブ デバイスから NACK を受信したこと、およびスタート (またはリピート スタート) ビットが最後に検出されたことを意味します。
3)。610 と 610A の両方で、常にスレーブ デバイス (RTCC) から読み取ることができます。ただし、610A では値が増加せず、整数値のままになることがあります。すべての電源を切り、すべてを再プログラムすると、RTCC の値が変わると思います。値を読み取るときに一定のままである場合もあれば、値を読み取るときに実際に変化するのは 25% 程度です。
4)。610A を使用して、I2C 経由で RTCC に何も書き込むことができません。プロセッサは ACKSTAT ビットのポーリングでスタックします (RTCC から NACK を受信したためだと思います)。610 は完璧に動作します。
ツール: MPLAB v8.86、C30 v3.31、ICD3
ありがとう、ブラッド
driver - PPC DTS に rtc ノードを追加するには?
私は PPC デバイス ドライバー開発の初心者で、最近 DTS で問題に遭遇しました。
私たちのチームは、PPC プラットフォームの新しい開発ボードに rtc チップ rtc-pcf8563 を追加します。ドライバーは利用可能で適切ですが、デバイスを DTS に rtc ノードとして追加する必要がありました。しかし、.dts リソースを変更する方法がわかりません。
これが .dts に関するコードです。@3200 は私が追加したものです。これが役立つかどうかはわかりません。
.dts を適切に変更する方法を知っている人はいますか?
c - PIC32MX の IC2 を介した EEPROM への書き込みの失敗
写真: PIC32MX564F128L
EEPROM: 24AA16
I2C経由で外部EEPROMを読み書きするために、CでPICのコードをいくつかまとめました。これらの方法を使用して 1 バイトを書き込み、検証のために再度読み取ると、機能します。書き込み場所を変更すると機能するため、アドレス指定が機能していると推測され、読み戻したバイトは書き込みと一致するため、それも機能しているように見えます。これまでのところすべて順調です!
次に、同じルーチンを 100 回使用するようにコードを拡張し、隣接する場所に異なるバイトを書き込みました。IE は、位置 x から x + 99 に 0 から 99 の値を書き込みます。次に、100 の位置を読み戻して書き込みを確認しましたが、ここで問題が発生しました。
さまざまなテストから、読み取りメソッドは最初の場所から最後の値 (99) を取得し、他の場所からは何も (0xFF) を取得しないため、書き込みメソッドはすべての書き込みを同じ場所で実行するように見えます!
スコープは、クロックが良好であること、および単一の書き込みが機能することを期待していたデータ ラインのトグルを示しています。
PIC のデバッグは、メソッドによって使用されているアドレスが連続していることを示しているため、すべての書き込みが同じ場所で実行されている理由について少し困惑しています! この場所は変更できますが、常にすべての値に最初のバイトが使用されます。
誰が何が間違っている可能性があるか知っていますか?
私のコードはここにあり、エントリ ポイントは testEeprom() です。
c++ - I2C用にUM232Hを構成する
I2C通信用にUM232Hモジュール(FTDI)を構成する際に問題が発生しました。彼らはFTDIのウェブサイトにいくつかの例を掲載しましたが、すべての例が私にはうまくいきません。何が悪いのかわかりません。UM232HをPCF8574Pと通信させたい。PCF8574Pのピンに、点滅したいLEDがあります。これが私が得たセットアップです。ftd2xx.hのヘッダーを使用していますが、それでも彼がftStatusコマンドなどを使用できないというエラーが発生しました。
これが私が描いた回路図です
verilog - Verilog:I2C読み取り操作
Verilogシミュレーションでは、Microchip社の64KI2CEEPROMと通信する必要があります。スレーブからACKを取得するたびに、特定のクロック期間、SDAを高インピーダンスに駆動しています。さて、スレーブからデータを取得するために、SDAについても同じことに従う必要がありますか?簡単に言うと、SDAポートを高インピーダンス状態に駆動する必要がありますか?
c++ - 特定のアドレス ブロックでの I²C EEPROM 読み取りエラー
Arduino のI²Cバスを Microchip PICDEM 2ボードの I²C バスに接続して、32K バイトの EEPROM をプログラムしています。以下のコードには読み取りの問題があります。具体的には、EEPROM 全体に 16 ビットのカウント パターンを書き込み、すべてのデータが正しいことを確認しました。
次のコードは、PC 上の Java プログラムによって駆動されます。16 バイトのページを読み書きしています。PC からのアドレスを監視しましたが、すべて正しいです。戻ってくるデータは、 のアドレスの 256 バイト ブロックを除いて、すべて正しいもの0x0AXX
です。読み取ったデータは の行のようになります0x9F0
。エラーが発生する理由を理解できませんでした。
PC が受信したデータは、次のブロックを除いてすべて正しいです。
このブロックの前後はすべて問題ありませんが、0x0A00 ~ 0x0AFF は 0x09F0 行からのデータを繰り返します。次のコードを使用して、すべてのカウント パターンを記述および検証しました。
私は何日もこれに苦労してきました。どんな洞察も大歓迎です。