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

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

16.4.3.2.2. データの受信

データ受信のステートマシンでは、データの読み出しコマンドのエンドビットの2クロックサイクル後にデータを受信します。これは、コマンドパスで応答エラーまたは応答CRCエラーを検出している場合でも同じです。応答のタイムアウトが発生したことによりカードからの応答を受信していない場合、BIUはデータ転送完了の信号を受信しません。これは、コントローラーによって送信されたコマンドがカードに対する不正な操作であり、カードで読み出しデータ転送が開始されない場合に発生します。

データのタイムアウト前にデータが受信されない場合、データパスはBIUにデータのタイムアウトを通知し、データ転送の終了を通知します。cmdレジスターのtransfer_modeビットの値に応じて、データ受信のステートマシンでは、カードのデータバスからストリームまたはブロックでデータを取得します。

図 49. データ受信のステートマシン

ストリームデータ読み出し

cmdレジスターのtransfer_modeビットが1に設定されている場合は、ストリーム読み出しデータ転送が発生します。この場合、データパスはカードからデータを受信し、それをFIFOバッファーに書き込みます。カードクロックは、FIFOバッファーがフルになると停止し、FIFOバッファーがフルではなくなると再開します。

bytcntレジスターが0に設定されている場合は、オープンエンドのストリーム読み出しデータ転送が発生します。このタイプのデータ転送の場合、ホスト・ソフトウェアがSD/SDIO STOPコマンドを発行するまで、データパスではストリームでデータを継続して受信します。ストリームデータ転送は、STOPコマンドのエンドビットの2クロックサイクル後に終了します。

bytcntレジスターに0以外の値が含まれており、cmdレジスターのsend_auto_stopビットが1に設定されている場合、STOPコマンドは内部で生成されてコマンドパスにロードされます。STOPコマンドのエンドビットは、ストリームデータ転送の最後のバイトが受信された後に発生します。このデータ転送は、すべてのデータバイトをカードから受信する前にホストがSD/SDIO STOPコマンドまたはSTOP_TRANSMISSION (CMD12) コマンドを発行した場合も終了します。

単一ブロックのデータ読み出し

ctypeレジスターが1ビット、4ビット、または8ビットのデータ転送に設定されている場合、データはそれぞれ1、4、または8つのデータラインから受信します。また、CRC‑16は個別に生成され、1、4、または8つのデータラインに対してそれぞれチェックされます。CRC‑16の不一致がある場合、データパスはデータのCRCエラーをBIUに通知します。受信したエンドビットが1ではない場合、BIUはEnd-bit Error (EBE) を受信します。

複数ブロックのデータ読み出し

cmdレジスターのtransfer_modeビットがクリアされており、bytcntレジスターの値がblock_sizeレジスターの値と等しくない場合、転送は複数ブロックの読み出しデータ転送になります。データ受信のステートマシンは、データをブロックで受信します。ブロック内のバイト数は、内部で生成されるCRC‑16を含め、ブロックサイズと等しくなります。

ctypeレジスターが1ビット、4ビット、または8ビットのデータ転送に設定されている場合、データはそれぞれ1、4、または8つのデータラインで受信します。また、CRC‑16は個別に生成され、1、4、または8つのデータラインに対してそれぞれチェックされます。データブロックを受信後、残りのバイトカウントが0になると、データパスはBIUにデータ転送を通知します。

残りのデータバイトが0より大きい場合、データパスのステートマシンは別のデータブロックの受信を引き起こします。受信したデータブロックのCRC‑16が内部で生成されたCRC‑16と一致しない場合は、データのCRCエラーがBIUに送信され、すべてのバイトが送信されるまでデータの送信が続きます。さらに、受信したデータブロックの終わりが1ではない場合、データパスのデータでビット終了エラーをCIUに通知します。また、データ受信のステートマシンはデータの受信を終了し、データのタイムアウトを待機後、データの転送が完了したことをBIUに通知します。

cmdレジスターのsend_auto_stopビットが1に設定されている場合は、最後のデータブロックが転送される際にSD/SDIO STOPコマンドが内部で生成され、カードからそれ以上のバイトは転送されません。STOPコマンドのエンドビットは、最後のデータブロックのエンドビットと正確に一致しない場合があります。

データ転送に要求されているブロックサイズが、1ビット、4ビット、または8ビットのデータ転送モードに対してそれぞれ4バイト、16バイト、または32バイト未満の場合、すべてのデータが転送されると、データ送信のステートマシンはデータの転送を終了します。この時点で、内部生成されたSTOPコマンドがコマンドパスにロードされます。これ以降にカードから受信するデータはデータパスで無視されます。

bytcntレジスターが0の場合 (ブロックサイズは0より大きくなければなりません)、転送はオープンエンドのブロック転送になります。このタイプのデータ転送の場合、データ受信のステートマシンは、ホスト・ソフトウェアがSD/SDIO STOPコマンドまたはSTOP_TRANSMISSION (CMD12) コマンドを発行するまでブロック読み出しのデータ転送を続けます。