インテル® Agilex™ ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアル

ID 683567
日付 1/19/2023
Public
ドキュメント目次

20.5.1.4. バルク転送でのスレーブの転送動作

標準のI2Cプロトコルでは、トランザクションはすべてシングル・バイト・トランザクションであり、プログラマーは、スレーブのTX FIFOに1バイトを書き込むことでリモートマスターの読み出し要求に応答します。スレーブ (スレーブ送信機) に対してリモートマスター (マスター受信機) からの読み出し要求 (RD_REQ) が発行されると、少なくとも1つのエントリーがスレーブ送信機のTX FIFOに配置されます。I2Cコントローラーは、TX FIFOでより多くのデータを処理するように設計されているため、後続の読み出し要求では、割り込みを引き起こしてデータをさらに要求することなくそのデータを受信することができます。これにより最終的に、TX FIFOにエントリーを1つのみ配置するという制約がある場合において、データに対する割り込みを引き起こすたびに著しいレイテンシーが発生する可能性をなくします。†

このモードは、I2Cコントローラーがスレーブ送信機として機能している場合にのみ発生します。リモートマスターがスレーブ送信機によって送信されたデータに肯定応答しており、スレーブのTX FIFOにデータがない場合は、I2Cコントローラーは読み出し要求割り込み (RD_REQ) を引き起こし、TX FIFOにデータが書き込まれるまで待機後、リモートマスターにデータを送信します。†

IC_INTR_STATレジスターのビット5 (M_RD_REQ) が0に設定されていることによりRD_REQ割り込みがマスクされている場合は、CPUで定期的にIC_RAW_INTR_STATレジスターの読み出しを行うことが推奨されます。IC_RAW_INTR_STATの読み出しでビット5 (R_RD_REQ) が1に設定されて返された場合は、このセクションで説明されているRD_REQ割り込みと同等のものとして処理する必要があります。†

RD_REQ割り込みは、読み出し要求時に発生します。また、ほかの割り込みと同様に、割り込みサービス処理ルーチン (ISR) 終了時にクリアする必要があります。ISRでは、1バイトまたは1バイトを超えるバイトをTX FIFOに書き込むことができます。これらのバイトをマスターに送信している際に、最後のバイトにマスターが肯定応答した場合は、マスターがデータをさらに要求しているため、スレーブでRD_REQを再度引き起こす必要があります。†

リモートマスターがnバイトのパケットを要求していることをプログラマーが事前に認識している場合に、別のマスターがI2Cコントローラーをアドレス指定してデータを要求すると、TX FIFOにはnバイトが書き込まれ、リモートマスターはそれをデータの連続ストリームとして受信することができます。例えば、送信されるデータにリモートマスターが肯定応答しており、TX FIFOに利用可能なデータがある限り、I2Cコントローラー・スレーブはリモートマスターへのデータの送信を続けます。RD_REQを再度発行する必要はありません。†

リモートマスターでI2Cコントローラーからnバイトを受信する場合に、プログラマーがnより大きいバイト数の書き込みをTX FIFOに行った場合、スレーブは要求されたnバイトの送信を完了すると、TX FIFOをクリアして余分なバイトを無視します。†

この例の場合、I2Cコントローラーは送信アボート (TX_ABRT) イベントを生成し、TX FIFOのクリアを示します。ACKまたはNACKが想定されている際にNACKを受信した場合は、リモートマスターには必要なデータがすべて揃っています。この時点で、スレーブのステートマシン内でフラグが立てられ、TX FIFOの残りのデータがクリアされます。このフラグは、FIFOが存在するプロセッサーのバスのクロックドメインに転送され、TX FIFOの内容はその時点でクリアされます。†