- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
件名: 問合(CY9BF218TPMC-GK7CGE1)
内容: 従来から本IC(元富士通製)を使用していますが、後継機種の評価において
ノイズを想定し、ハード的に、I2Cの信号(SCLまたはSDA)を一瞬SWでGNDとショートすると、
正常に通信リトライしないことが判明しました。
I2Cの信号が一瞬異常になった場合(ノイズを想定)に、通信リトライできない原因として、何が考えられますか。
また、対処方法を教えてください。
詳細は添付ファイルをご確認ください。
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
今回の両事象(SCLをGNDにショート、SDAをGNDにショート)と下記レジスタ値になっているという事なので、マイコンはMasterとして送受信終了(Stop condition)を待っている状態に陥っていると考えます。
IBCR.MMS=1、IBCR.ACT=0 --> The master mode operation is waited.
IBSR.BB=1 --> The bus is in transmission and reception state.
これはスイッチでGNDにショートさせているため、どのSlaveもStop Conditionを発行していないからです。
また、IBCR.BER=0 --> No errorの為、バスの異常も検知できておりません。(バスとしては正常状態)
よって、今回の事象が発生した際、対応策はWDTでTime outを設定し、Time out時にI2Cをリスタートすることが考えられます。
以上です。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ファイルが添付されていないようです。
再度添付して頂けないでしょうか?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
今回の両事象(SCLをGNDにショート、SDAをGNDにショート)と下記レジスタ値になっているという事なので、マイコンはMasterとして送受信終了(Stop condition)を待っている状態に陥っていると考えます。
IBCR.MMS=1、IBCR.ACT=0 --> The master mode operation is waited.
IBSR.BB=1 --> The bus is in transmission and reception state.
これはスイッチでGNDにショートさせているため、どのSlaveもStop Conditionを発行していないからです。
また、IBCR.BER=0 --> No errorの為、バスの異常も検知できておりません。(バスとしては正常状態)
よって、今回の事象が発生した際、対応策はWDTでTime outを設定し、Time out時にI2Cをリスタートすることが考えられます。
以上です。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ご回答いただいた内容について、
「対応策はWDTでTime outを設定し、Time out時にI2Cをリスタートする」とありますが、リスタートとは、具体的に、どのレジスタを再セットしたらいいのか知りたいです。
恐れ入りますが、ご教授お願いします
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
I2Cのリスタートについては、I2CDisable/Enable (ISMK:EN=0)になるかと考えますが、
32-Bit Microcontroller FM3 Peripheral Manual Communication Macro Part (Doc. No. 002-04843 Rev. *C)
https://www.cypress.com/file/510031/download
のCHAPTER 1-5: I2C Interface (I2C Communications Control Interface)を確認の上、必要に応じて初期化してください。
以上です。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
確認致しました。
ISMK:ENレジスタだけを0→1にしても、完全復活しません。
■SCLをショートさせた場合
ENレジスタだけを0→1にして、通信を再開させても、通信異常になります。
再度、ENレジスタだけを0→1にして、通信を再開させると、通信できました。
■SDAをショートさせた場合
ENレジスタだけを0→1にして、通信を再開させても、通信異常になります。
再度、ENレジスタだけを0→1にして、通信を再開させても、通信異常になります。
但し、全てのレジスタを設定し直すと、通信再開し、完全復活します。
ENレジスタ以外に、どのレジスタが効いているのか分かりましたら、
ご教授お願いします。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
SDAをショートさせた場合ですが、どのレジスタ訊いているか判断できません。
今回SDAがショートしてしまった場合にはI2Cを初期化する事を推奨します。