AR# 61665

|

Zynq-7000 SoC、I2C - I2C マスターで完了割り込みが送信されない

説明

I2C コントローラーをマスター モードでコンフィギュレーションすると、マスター完了割り込みが送信されません。

ソリューション

 

説明:  

I2C コントローラーがマスターとして動作している場合、転送が完了したときに完了割り込みが送信されるはずです。 

転送がリピート スタート条件で開始された場合、この割り込みが転送後に送信されません。

実際のシーケンスは次のとおりです。

  1. マスターが読み出し転送を開始します。
    a.    この転送は、スタート条件またはリピート スタート条件で開始できます。
    b.  転送の最後に HOLD ビット (i2c.Control_reg0[HOLD]) がセットされる必要があります。
    c.    この転送が完了すると、COMP 割り込み (i2c.Interrupt_status_reg0[COMP]) が正しく送信されます

  2. マスターが 2 番目の読み出し転送を新しいアドレスで開始します。
    a.    手順 1 で HOLD ビットがセットされているので、コントローラーはこの転送をリピート スタート条件で開始します。
    b.    転送の最後に HOLD ビットをクリアする必要があります。これにより STOP 条件が発生します。
    c.    この転送の完了後、COMP 割り込みは送信されません。


影響

深刻な問題です。割り込みが発生するまで、ソフトウェアで転送を処理できません。

割り込みが発生することはないので、未処理の転送が正しく処理されない可能性があります。


回避策: 

読み出しの連続転送にリピート スタートを使用しないでください。 

別の方法として、ドライバーで i2c.Transfer_size_reg0 レジスタを 14B 未満になったときにポーリングし、転送の最後が把握されるようにします。

       

対象となるコンフィギュレーション : I2C をマスターとして使用するシステム

修正状況 : 修正の予定はありません。

 

AR# 61665
日付 06/13/2018
ステータス アクティブ
種類 デザイン アドバイザリ
People Also Viewed