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

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

16.5.5.5. 単一ブロックまたは複数ブロックの書き込み

次の手順は、単一ブロックまたは複数ブロックの書き込みを行うものです。
  1. データサイズをバイト単位でbytcntレジスターに書き込みます。複数ブロックの書き込みの場合は、bytcntをブロックサイズの倍数にする必要があります。
  2. ブロックサイズをバイト単位でblksizレジスターに書き込みます。コントローラーは、それぞれがblksizのサイズのブロックでデータを送信します。
  3. データを書き込む必要があるデータアドレスでcmdargレジスターを書き込みます。
  4. FIFOバッファーにデータを書き込みます。最高のパフォーマンスを実現するには、ホスト・ソフトウェアはFIFOバッファーがフルになるまで継続してデータを書き込む必要があります。
  5. 単一ブロックおよび複数ブロックの書き込みに向けたcmdレジスターの設定に記載されているパラメーターでcmdレジスターを書き込みます。SDカードおよびMMCカードの場合、単一ブロックの書き込みにはSD/SDIO WRITE_BLOCK (CMD24) コマンドを使用し、複数ブロックの書き込みにはWRITE_MULTIPLE_BLOCK (CMD25) コマンドを使用します。SDIOカードの場合は、IO_RW_EXTENDEDコマンドを単一ブロック転送および複数ブロック転送の両方に使用します。

    cmdレジスターに書き込みを行うと、他のコマンドが処理中ではない場合に、コントローラーはコマンドの実行を開始します。コマンドがバスに送信されると、Command Done割り込みが生成されます。

  6. ソフトウェアでは、データエラーの割り込み、すなわち、rintstsレジスターのdcrcbds、およびebeビットを確認する必要があります。必要に応じて、ソフトウェアでSD/SDIO STOPコマンドを送信し、データ転送を早期に終了させることができます。
  7. ソフトウェアでは、rintstsレジスターのホストのタイムアウト条件を確認する必要があります。
    • 送信FIFOバッファーデータ要求
    • ホストによるデータのスタベーション - ホストがデータを提供できる速度よりも早い速度でコントローラーがカードへのデータ書き込みを行っています。

    どちらの場合も、ソフトウェアでFIFOバッファーにデータを書き込む必要があります。

    転送には、オープンエンドと固定長の2つのタイプがあります。

    • オープンエンド転送 - オープンエンドのブロック転送の場合、バイトカウントは0です。データ転送の最後に、ソフトウェアはSTOP_TRANSMISSIONコマンド (CMD12) を送信する必要があります。
    • 固定長の転送 - バイトカウントは0以外です。バイト数は、bytcntレジスターにすでに書き込まれています。cmdレジスターのsend_auto_stopビットを1に設定している場合、コントローラーはSTOPコマンドを発行します。指定されているバイト数の転送が完了すると、コントローラーはSTOPコマンドを送信します。AUTO_STOPコマンドの完了は、Auto Command Done割り込みによって反映されます。AUTO_STOPコマンドに対する応答は、resp1レジスターに書き込まれます。ソフトウェアでcmdレジスターのsend_auto_stopビットを1に設定していない場合は、オープンエンドの場合と同様に、ソフトウェアでSTOPコマンドを発行する必要があります。

rintstsレジスターのdtoビットが設定されると、データコマンドは完了します。