AR# 63245

Zynq-7000 SoC、I2C のデザイン アドバイザリ - PS I2C スレーブ モニター モードで I2C バスがロックされる

説明

スレーブ モニター モードがアクティブになっている Zynq-7000 I2C マスターは、ACK が受信されない場合、ホスト ソフトウェアで非アクティブにすることはできません。

Control.SLVMON をクリアしてもスレーブ モニター モードは終了せず、Zynq-7000 I2C マスター デバイスがこのモードのままになります。

ソリューション

スレーブ モニター モードをイネーブルにするには、ホストで制御レジスタの SLVMON ビットをセットする必要があります。

スレーブ モニター モードでは、I2C インターフェイスがマスターとして設定されます。

スレーブがビジーである場合、ホスト ソフトウェアがスレーブ モニター モードを使用してスレーブが準備完了になるまで待機します。

これは、スレーブが ACK 応答を返すまで定期的にトランザクションを発行することにより行われます。スレーブ モニター モードでは、実際のデータ転送は実行されません。

ホストが I2C アドレス レジスタに書き込むたびに、マスターで特定のスレーブに転送を試みます。

スレーブがアドレスを受信したときに NACK を返した場合は、マスターはスレーブ モニター一時停止レジスタで設定された時間待機した後、スレーブに対してアドレスの送信をもう一度試みます。

マスターは、そのアドレスに対してスレーブが ACK で応答するまで、このサイクルを繰り返します。
 

制御レジスタの SLVMON ビットがクリアされると、マスターは引き続き転送を試みます。

ホスト ソフトウェアが SLVMON ビットをクリアしたら、このサイクルは停止するべきです。

ただし、SLVMON がクリアされたときにこのサイクルが停止しません。

ホストがどの I2C スレーブにも対応しない I2C アドレスを使用してスレーブ モニター モードを設定した場合、ACK は受信されることはなく、スレーブ モニター モードが解除されることはありません。

影響:

重要。

Zynq が唯一のマスターである場合、バス上のその他のスレーブと通信できません。

マスターが複数あるシステムでは、この問題によりバスがロックされ、ほかのマスターがバスを所有することができなくなります。
 
回避策:

  1. マスター デバイスが長時間 NACK を受信する場合、ホストで I2C バス上に存在し、ACK で応答するスレーブ デバイスのアドレスを I2C アドレス レジスタに書き込む必要があります。

    これにより、I2C マスターで次のトランザクションにこの新しいアドレスが使用されます。

    スレーブが ACK で応答していれば、スレーブ モニター モードが正しく終了します。

  2. コントローラーが長時間 NACK を受信する場合は、I2C コントローラーにソフト リセットを適用し、新しい転送を開始する前にコントローラーを再コンフィギュレーションします。

対象となる構成:
 
スレーブ モニター モードで動作し、バスが ACK で応答しない可能性のあるすべての Zynq-7000 PS I2C コントローラー
 
影響するデバイス リビジョン:
 
(Xilinx Answer 47916) -「Zynq-7000 AP SoC シリコン リビジョン間の相違点」を参照してください。

解決策:
これはサードパーティのエラッタです。修正の予定はありません。  

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
47916 Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点 N/A N/A
AR# 63245
日付 05/28/2018
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス