I2Cスレーブアドレスが確認されない(時々)


11

I2Cを使用して、リモート接続されたFRAM(RamtronのFM24C04)と通信しようとしています。このメモリはボードに組み込まれており、システムにいつでもシステムから着脱できます(メモリを取り外す前に通信は適切に終了します)。

問題は次のとおりです。ちょうどFRAMが含まれているカードを挿入した後、時々、それはアドレスを認識しません。

信号測定

信号を測定して何が起こっているのかを確認しましたが、タイミングはどちらの場合も(正常に機能していても機能していなくても)良いようです。

正しいI2C通信(3バイトの読み取り): ここに画像の説明を入力してください

I2C FRAMアドレスが確認されていません(スレーブアドレスは正しく送信されています): ここに画像の説明を入力してください

この問題を解決するために既に行われたアクション(成功なし)

  • 電源シーケンスを確実に順守するために、FRAMが埋め込まれたカードが挿入された後に追加される遅延。
  • I2Cは、確認応答しないスレーブアドレスの検出後に生成を停止します

I2Cバス構成

  • 1つのマスター(STのSTM32F205マイクロコントローラー)
  • 3つのスレーブ(MicrochipのEEPROM 24AA1025、Maxim ICのRTC DS1339C、およびRamtronのリモートFRAM FM24C04
  • 1つのI2Cレベルシフター(マキシムICのMAX3373E)を使用して、マスターとFRAM間の通信が可能
  • バス周波数を100 kHzに設定

編集済み(2013-04-17)

まず、コメントありがとうございます。

たくさんの提案があるので、これが私が行った調査の説明です。

回路図

次の図は、I2Cバスの簡略図を示しています。

I2Cバス回路図

I2C_SDAおよびI2C_SCL信号はマイクロコントローラーに直接接続され、FRAM_SDAおよびFRAM_SCL信号はFRAMに接続されます。FRAMに接続されたSDAおよびSCL信号は、MurataのBLM18フェライトを使用してフィルタリングされることに注意してください。

FRAMは次のように接続されます。

  • NC(ピン1)->未接続
  • A1(ピン2)-> GND
  • A2(ピン3)-> GND
  • VSS(ピン4)-> GND
  • SDA(ピン5)-> FRAM_SDA
  • SCL(ピン6)-> FRAM_SCL
  • WP(ピン7)-> GND(書き込み保護なし)
  • VDD(ピン8)-> + 5V

FRAMカードの説明

このカードは、FRAMのみを組み込んだ「ISAのような」カードです。

調査

周波数を遅くする

SCL周波数を50kHzと10kHzに設定してテストを実行しました。SCL信号をオシロスコープで測定して、期待した周波数であることを確認しました。

これらの変更は問題を解決しませんでした。タイミングを確認したところ、FRAMデータシートの仕様の範囲内でした。

電源シーケンスの確保

@jippie。

  1. I2Cレベルシフターは、FRAMを組み込んだカードが挿入される前に、3ステートモードになります。FRAM_SDAおよびFRAM_SCL信号がLowにプルされます。
  2. 「FRAMカード」を挿入した後、電源が安定するように100msの遅延が追加されます(データシートによると、最初の開始条件の前に少なくとも11msが必要です)。
  3. I2Cレベルシフターがアクティブになります。
  4. I2Cレベルシフターがアクティブになり、ラインがプルアップされるようにするために、1msの遅延が追加されます(データシートでは約4usが必要です)。FRAM_SDAおよびFRAM_SCL信号はプルアップされています。
  5. FRAMがアクセスされます。

FRAM_SDAおよびFRAM_SCL信号は、各ステップの後に測定されています。

問題はまだ発生します。

繰り返し開始する代わりに停止/開始条件

@gbarry。

バイト転送中に繰り返しスタートする前にストップしようとした。オシロスコープでバイト転送を測定しました。STOP条件に続いてSTART条件で問題ありません。

残念ながら、このソリューションは問題を解決しません。

考え

この問題は、FRAMを組み込んだカードが接続された直後にのみ発生します。「FRAMカード」が挿入されて正しくアドレス指定された後、数千回の正常な読み取りアクセス(スレーブアドレス指定と読み取り)を実行しました。

ハードウェアの問題のように聞こえてきます。しかし、それがI2CレベルシフターまたはI2Cバス上の他のスレーブに関連している可能性があるかどうかはわかりません。

他にアイデアや提案はありますか?


編集済み(2013-04-18)

問題は解決したようです

FRAMモジュールコネクタを交換し、FRAMで直接測定する方法を見つけました。すべてがこの新しいコネクタでうまく機能しているようです。

問題が悪い接続に起因することを確認するために、さらにテストを行います。


回路図を投稿していただけますか?遅いバス周波数を試して、違いがあるかどうかを確認してください。
Suirnder 2013

問題は挿入直後にのみ発生し、それ以外の場合は発生していませんか?「直後」はいつですか?
Kaz 2013

他の実験に加えて、他のスレーブを削除してみて、それが動作に影響するかどうかを確認できます。
ベンガートナー

2つのアドレスピンは適切にLowにプルダウンされていますか、それともフローティングのままですか?
fm_andreas

@Suirnder回路図を回答に投稿しました。
johsey 2013

回答:


6

挿入または削除の前に通信が適切に終了していると言いますが、バス上のデバイスの1つだけをリセットした後でI2Cバスが問題を引き起こす可能性があるため、このソリューションを試す価値があるかもしれません。

マスターI2Cハードウェアを初期化する前に、SDAを入力として設定し、SDAがLowかどうかをテストします。

Lowの場合、SCLピンをHighに設定します。

次に、SDAがハイになるまでSCLピンをローとハイに切り替えます(つまり、ペリフェラルがまだ送信しようとしている可能性がある残りのビットをすべてクロックアウトします)。これには8クロックサイクル以上かかることはありません。かかる場合、他の問題があります。

これで問題が解決することは保証できませんが、私の問題は解決されました!。


マスターを初期化する前に、この「バス回復アルゴリズム」を追加することは悪い考えではありません。実装します。ありがとうございました。
johsey 2013

2

FRAMの場合:

  • 最初にGNDとVccを接続します。
  • 次に、A1、A2、およびWPのレベルが正しいことを確認してください。
  • 次に、データピンを接続します。

チップの電源を入れる前に電源以外のピンを接続すると、問題が発生する可能性があります。


2

プルアップでは10kは少し大きいようですが、リーディングエッジが遅く見えます。抵抗を約3kに減らし、それが役立つかどうかを確認します。

また、オフ電圧が時間とともにドリフトするのはなぜですか?


プルアップ抵抗を3.3kに減らしましたが、それは役に立ちません。私はこの漂流について何も知りません。
johsey 2013

画面上は小さく見えますが、約250mVだと思います。3.3V側で電源の問題が発生している可能性があります
Scott Seidman、2013

そうです、ドリフトはI2Cレベルシフターの両側で約300mVです。+ 3.3V電源は正常に動作しているようです(SCL信号にドリフトが発生している場合、出力にドリフトはありません)。I2Cレベルシフターと関係がありますか?
johsey 2013

まったくわからない。3.3Vはどこから来るのですか?スイッチングコンバータ?いずれにせよ、それは不審です。データシートごとに3.3Vを提供するデバイスが必要とする最小電流を引き出していますか?そうでない場合は、電源に抵抗を接続してください。1、2秒待ってから通信を開始するとどうなりますか?
スコットSeidman 2013

3.3VはSMPS(TIのLM3103MH)から供給されています。私は電源の専門家ではありませんが、私が理解しているように、このデバイスでは軽負荷で不連続導通モードで動作できるため、必要な最小電流はありません。通信を始める前に2秒待っても同じ問題が発生します。
johsey 2013

2

そのボードに話しかけようとしている何かがある可能性はありますか?私は一度そのような問題を抱えていました。60%の確率でackを取得できましたが、衝突を確認できたことを覚えていません。私が提供したi2cは、どういうわけか実際の内部バスから分離されていたのではないかと思います。私はそれを継続的に実行することができました、そしてそれはちょうどメッセージの30%を落とすでしょう。この問題は、「バックプレーン」を介さずにデバイス(電源)と直接話し始めた瞬間に消えました。

NAKエラーの後に停止シーケンスが表示されません。その時点でプログラムを停止するブレークポイントがあると思いますか?

最後に、自分がバスで1人だけだと思う​​場合は、繰り返されるスタートをストップ/スタートに置き換えることもできます。RSの処理方法がよくわからないデバイス(特にカスタムFPGA)を見てきました。

[コメントへの回答]:FRAMボードについて、メモリだけであるのか、サブシステム全体であるのかなど、あなたが言わなかったことはたくさんあります。しかし、問題を引き起こしているi2cデバイスのリード線に「スコープ」を配置しても問題が解決しない場合は、干渉を除外します。I2Cは非常に単純なので、入力に正しい信号が表示された場合、内部に問題がない限り、チップは正しく再生されるはずです。

特に、そのレベルシフターのFRAM側を取得する必要があります。信号の途切れは、通常は衝突と考えられるものよりも発生しやすいです。

NAKサイクルは、そこにないチップと区別がつかないことを指摘しておきます。EEPROMはビジーであることを示すためにこれを行います。私はFRAMの書き込み時間を調べましたが、それは単一のi2cデータビットよりも速いので問題ありません。


I2Cバスにはマスターが1つだけあり、FRAMを埋め込むボードはこのバスにのみ接続されています。したがって、何か他の人が話しかけようとしている可能性はないと思います。はい、停止シーケンスの前にブレークポイントを置きました。私はあなたが示唆するように、この繰り返されたスタートをストップ/スタートに置き換えようとします、そしてそれを再びテストします。データシートによると、FRAMは繰り返し起動をサポートする必要があります。FRAMを(たとえば、専用I2Cバス上で)分離すると、最終的にこの問題を解決できると思いますか?
johsey 2013

FRAMボードにはFRAMのみが埋め込まれています。それは「ISAのような」ボードです。このカードはプラスチック片に埋め込まれているため、FRAMピンで直接信号を測定することは困難です。とにかく、私はこれらの信号をFRAMにできるだけ近づけて測定する方法を見つけようと思います。
johsey 2013

U13のFRAM側に到達することは大きな一歩でしょう。
gbarry

2

問題が再現すると、デバイスを取り外して再度挿入することによってのみ解消される永続的な障害であるため、次の2つのうちの1つです。または接触不良です。

デバイスがパワーサイクルで回復する不良状態になった場合、MCUがデバイスの電源を切断できるようにする回路を追加できます。次に、ファームウェアは、デバイスからの確認が得られない場合、回復手順を実行して、しばらくの間チップの電源を落とし、再度電源を入れてから、再試行します。

接触不良の場合は、コネクタの信頼性を調べて、もっと良いものを見つける必要があるかもしれません。同じコネクタを使用してこれらのボードをさらに作成すると、フィールドで問題が発生する可能性があります。いずれにせよ、状況を処理するための人間の手順が存在する可能性があります。デバイスを操作するオペレーターは、カードの挿入に関する潜在的な問題を認識している必要があります。また、正しく動作させるには、カードを取り付け直す必要がある場合があります。

メインデバイスには、FRAMと通信できないことを示すアラームを発生させる方法があります。それは、パネル上の「トラブル」LEDやビープ音などです。またはその逆:点灯し、FRAMが受け入れられ、通信が確立されたことをユーザーにフィードバックするライト。FRAMがマスターデバイスから離れている場合、ライトはFRAMモジュール(LEDを駆動する別のI2Cチップ)に配置できます。


0

問題の散発的な性質は、それがタイミングの問題である可能性を示唆しています。

データシートリストタイミングの二組、「標準モード」用と「高速モード」のための1つ。あなたの測定から、あなたは「標準モード」タイミングの境界にいるようです。データシートをざっと見ているだけでは、チップがどちらのモードになったのか正確にはわかりません。

お使いのデバイスが高速モードであるとは思いません。タイミングを2〜4分の1に削減できますか。開始条件のホールドタイム、クロックの高周期、およびクロックの低周期が標準モードのタイミングであることを確認し、この問題が引き続き発生するかどうかを確認してください。


私のデバイスは「標準モード」(100kHzのSCL周波数)です。実際、この周波数はこのモードの境界にあります。2分の1にして、いくつかのテストを行います。
johsey 2013

0

あなたは24c04a、b、cのどれですか?そのc04aなら、それは堅牢なデザインでした。b部分は、電源ランプに敏感です。gndするためにpin8でどのようなデカップリングを行いますか 信号レベルについて何か言うつもりでしたが、レベルトランスレータを使用していることがわかりました。チップが余分なクロックとして解釈するSCLの不具合が発生しないことを確認する必要があるかもしれません。


3
たった9ボタンのインターフェースを持つ古い携帯電話でこれをタイプしましたか?
angelatlarge 2013

使用したFRAMはFM24C04Bです。このメモリの電力感度に関するこの情報はどこで入手しましたか?もっと多くのインプットを頂けますか?ピン8のデカップリングはありません。このモジュールの設計は数年前に行われており、製品全体を消費する必要があります。オシロスコープで行われた測定によると、FRAMモジュールが接続され、レベルシフターがアクティブになっているとき、SCLラインにグリッチはないようです。
johsey 2013

1
この反応は非常に遅いと思いますが、Vccの感度に関する私の情報は、何年も前にRamtronのアプリサポートであることに由来しています。正確な詳細は思い出せませんが、特定のランプレートと温度では、チップは本質的にロックし、「良い」ランプで電源を投入するまでI2C通信を許可しません。チップの近くにデカップリングキャップがないことは良くありません。0.1uFと10uFのデカップリングを使用すると、Vccランプが変更され、一方が機能し、もう一方が機能しない場合があります。@angelatlarge、申し訳ありませんが、電話からの最初の応答を入力しました。
gman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.