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

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

16.4.3.2.1. データの送信

データ送信のステートマシンでは、データ書き込みコマンドの応答を受信して2クロックサイクル後にデータの送信を開始します。これは、コマンドパスで応答エラーまたは応答CRCエラーを検出している場合でも発生します。 応答のタイムアウトによりカードからの応答を受信していない場合、データは送信されません。cmdレジスターのtransfer mode (transfer_mode) ビットの値に応じて、データ送信のステートマシンは、カードのデータバスにストリームまたはブロックでデータを入れます。
図 48. データ送信のステートマシン

ストリームデータ送信

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

bytcntレジスターが0にリセットされている場合、転送はオープンエンドのストリーム書き込みデータ転送です。このデータ転送時に、データパスは、ホスト・ソフトウェアがSD/SDIO STOPコマンドを発行するまでデータをストリームで継続的に送信します。ストリームデータ転送は、STOPコマンドのエンドビットとデータのエンドビットが2クロックサイクルにわたって一致すると終了します。

bytcntレジスターが0以外の値で書き込まれ、cmdレジスターのsend_auto_stopビットが1に設定されている場合は、STOPコマンドが内部で生成され、コマンドパスにロードされます。その際は、ストリーム書き込み転送の最後のバイトが一致すると、STOPコマンドのエンドビットが発生します。このデータ転送は、すべてのデータバイトがカードバスに転送される前にホストがSTOPコマンドを発行した場合も終了します。

単一ブロックのデータ

cmdレジスターのtransfer_modeビットが0に設定されており、bytcntレジスターの値がblock_sizeレジスターの値と等しい場合は、単一ブロックの書き込みデータ転送が発生します。データ送信のステートマシンは、単一のブロックでデータを送信します。バイト数は、内部生成される16項CRC (CRC‑16) を含めて、ブロックサイズと等しくなります。

ctypeレジスターが1ビット、4ビット、または8ビットのデータ転送に設定されている場合、データはそれぞれ1、4、または8つのデータラインで送信されます。また、CRC‑16は個別に生成され、それぞれ1、4、または8つのデータラインに送信されます。

単一のデータブロックが送信されると、データ送信のステートマシンは、カードからCRCステータスを受信し、データ転送をBIUに通知します。これは、rintstsレジスターのdtoビットが1に設定されると発生します。

カードから負のCRCステータスを受信した場合、データパスは、rintstsレジスターのdcrcビットを設定し、データのCRCエラーをBIUに通知します。

さらに、データブロックの終了後2クロックサイクルでCRCステータスのスタートビットを受信しない場合は、rintstsレジスターのsbeビットを設定し、CRCステータスのStart-bit Error (SBE) をBIUに通知します。

複数ブロックのデータ

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

ctypeレジスターが1ビット、4ビット、または8ビットのデータ転送に設定されている場合、データはそれぞれ1、4、または8つのデータラインで送信されます。また、CRC‑16は個別に生成され、1、4、または8つのデータラインでそれぞれ送信されます。

1つのデータブロックが送信されると、データ送信のステートマシンは、カードからCRCステータスを受信します。残りのバイトカウントが0になると、データパスはデータ転送が完了したことをBIUに通知します。これは、rintstsレジスターのdtoビットが1に設定されると発生します。

残りのデータバイトが0より大きい場合、データパスのステートマシンは別のデータブロックの送信を開始します。

カードから負のCRCステータスを受信した場合、データパスは、rintstsレジスターのdcrcビットを設定してデータのCRCエラーをBIUに通知し、すべてのバイトが送信されるまでデータの送信を続けます。

CRCステータスのスタートビットをデータブロックの終了後2クロックサイクルで受信しない場合は、rintstsレジスターのebeビットを設定することによってCRCステータスのSBEがBIUに通知され、それ以降のデータ転送は終了します。

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

1ビット、4ビット、または8ビットのカードデータ幅に対してブロックサイズがそれぞれ4、16、または32未満の場合、データ送信のステートマシンは、すべてのデータが転送されるとデータ転送を終了します。その際に、内部で生成されたSTOPコマンドがコマンドパスにロードされます。

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