クロックストレッチ機能が無効になっている場合のPSoC 4 EZI2Cクロックストレッチ - KBA228299 - Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by NoTa_4591161 Version: **
Translation - English: PSoC 4 EZI2C Clock Stretching when Clock Stretching Feature Is Disabled - KBA228299
コンポーネントウィンドウでクロックストレッチ機能が無効になっている場合でも、EZI2Cコンポーネントはクロックストレッチを実行します。PSoCスレーブデバイスがバス上で有効な開始条件を検出するたびに、割り込みが生成されます。Tx FIFOの内容を更新するスレーブISRを実行する必要があります。つまり、古いコンテンツが削除され、新しいコンテンツがスレーブバッファからTx FIFOにコピーされます。スレーブがデータの最初のバイトをTx FIFOに配置する前でも、マスターがTx FIFOを読み取ろうとすると、スレーブはデータが利用可能になるまでクロックをストレッチしようとします。
開始条件が検出されてからEZI2C ISRがサービスされるまでの最大遅延は、最大割り込みレイテンシと呼ばれます。クロックストレッチ機能を無効にすると、割り込みレイテンシのタイミング制約が高くなります。
EZI2Cコンポーネントの新しいバージョンには最適化された割り込みハンドラーがあり、マスターがTx FIFOからデータを読み取ろうとする前にTx FIFOの最初のバイトをロードできます。デザインの割り込みレイテンシがコンポーネントデータシートで定義されている最大割り込みレイテンシよりも大きい場合、クロックストレッチングなどの誤ったスレーブパフォーマンスが見つかることがあります。これは、マスターにとってクロックストレッチが受け入れられない場合に問題になります。
ほとんどの設計では、マスター読み取り操作は、マスター書き込み操作が繰り返し開始条件を呼び出した直後に実行されます。つまり、書き込み操作後の停止条件の代わりに、マスターが再起動条件を発行して、読み取り操作を開始します。そのような場合でも、最大割り込みレイテンシ時間は減少します。最大割り込みレイテンシの詳細については、EZI2Cコンポーネントデータシートを参照してください。
この問題を理解するには、次の例を検討してください。
EZI2Cコンポーネントは、PSoC 4000デバイスを使用してクロックストレッチを無効にして400 kHzで動作するように設定されています。CPUクロックは12 MHzです。タイマーは、図1および図2に示すように、問題のシミュレーションに使用されるEZI2Cコンポーネントの優先度よりも高い優先度で1 msごとに割り込みを生成するために使用されます。
図1. トップデザイン
図2. タイマーの割り込み優先順位がEZI2Cよりも高く設定されている
図3から、コンポーネントコンフィグレーションウィンドウでEZI2Cクロックストレッチオプションが無効になっている場合でも、EZI2Cスレーブがクロックをストレッチしようとしていることがわかります。
図3. EZI2Cスレーブによるクロックストレッチ
これを防ぐ方法はいくつかあります。
1. 割り込みレイテンシを最小限にできるように、可能な限り最高のクロック速度を使用してください。
2. EZI2C割り込みが(スレーブの最大レイテンシを超える可能性がある)高優先度の割り込みによって優先されないように、EZI2C ISRを最高の優先度(設計での必要に応じて)に設定します。
PSoC 4の割り込みの詳細については、AN90799 PSoC 4割り込みを参照してください。
3. コンパイラーの最適化オプションを使用して、EZ I2Cスレーブ割り込みサービスルーチンで実行する命令の数を減らします。
4. デザインの各クリティカルセクションの期間を計算し、EZ I2C最大割り込みレイテンシと比較して、デザインが最大割り込みレイテンシ基準を満たしていることを確認します。
5. EZI2Cバッファを更新するには、クリティカルセクション(割り込みを無効にする)を使用します。
クリティカルセクションの詳細については、PSoC 4システムリファレンスガイドを参照してください。
参考文献:NXP I2C仕様