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

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

16.5.11. 割り込みとエラーの処理

このセクションでは、割り込みを使用してエラーを処理する方法について説明します。電源投入時またはリセット時に割り込みは無効になり (ctrlレジスターのint_enableビットが0に設定される)、割り込みはすべてマスクされます (intmaskレジスターのデフォルトは0)。コントローラーのエラー処理には、次のタイプのエラーが含まれます。
  • 応答およびデータのタイムアウト・エラー - 応答のタイムアウトの場合、ホスト・ソフトウェアはコマンドを再試行することができます。データのタイムアウトの場合、コントローラーはデータのスタートビットをカードから受信していないため、ソフトウェアでデータ転送全体を再試行する、もしくは指定されたブロック以降を再試行することが可能です。tcbcntの内容を読み出すことにより、ソフトウェアはコピー (読み出し) を行う残りのバイト数を特定することができます。
  • 応答エラー - 応答の受信中にエラーを受信すると1に設定されます。受信した応答が無効な場合、ソフトウェアはコマンドを再試行することができます。
  • データエラー - データの受信エラーが発生すると1に設定されます。データの受信エラーには、次のものが含まれます。
    • データのCRC
    • スタートビットが見つからない
    • エンドビットが見つからない

    これらのエラーは、いずれのブロックでも発生する可能性があります。エラーを受信すると、ソフトウェアではSD/SDIO STOPまたはSEND_IF_CONDコマンドを発行し、データ全体またはデータの一部に対してコマンドを再試行することができます。

  • ハードウェア・ロック・エラー - ソフトウェアによって発行されたコマンドをコントローラーがロードできない場合に1に設定されます。ソフトウェアがcmdレジスターのstart_cmdビットを1に設定すると、コントローラーはコマンドのロードを試みます。コマンドバッファーにすでにコマンドが含まれている場合にこのエラーは発生します。新しいコマンドは破棄されるため、ソフトウェアではコマンドを再ロードする必要があります。
  • FIFOバッファーのアンダーラン/オーバーラン・エラー - FIFOバッファーがフルの状態でソフトウェアがFIFOバッファーにデータの書き込みを試みると、オーバーラン・エラーが設定されます。逆に、FIFOバッファーが空の状態でソフトウェアがFIFOバッファーからデータの読み出しを試みると、アンダーラン・エラーが設定されます。FIFOバッファーに対してデータの読み出しまたは書き込みを行う前に、ソフトウェアでstatusレジスターのFIFO buffer empty (fifo_empty) ビットまたはFIFO buffer full (fifo_full) ビットを読み取る必要があります。
  • ホストのタイムアウトによるデータのスタベーション - この状態は、コントローラーに対して十分な速さでソフトウェアがFIFOバッファーにサービスを提供していない場合に発生します。この状態において、読み出し転送が進行中の場合は、ソフトウェアでFIFOバッファーからデータを読み出し、データをさらに受信するためのスペースを作成する必要があります。送信動作が進行中の場合は、ソフトウェアでデータを書き込みFIFOバッファーを満たすことで、コントローラーがカードにデータを書き込むことができるようにする必要があります。
  • CE‑ATAエラー
  • コマンドでのCRCエラー - コマンドでCRCエラーが検出された場合、CE‑ATAカードデバイスは応答を送信しないため、コントローラーからの応答タイムアウトが想定されます。ATA層には、MMCトランスポート層のエラーが発生したことが通知されます。
  • 書き込み動作 - カードデバイスがMMCトランスポート層のエラーを認識すると、未処理のATAコマンドは終了します。ATAステータスレジスターでERRビットが設定され、適切なエラーコードがATAカードデバイスのErrorレジスター (Error) に送信されます。

    CE‑ATAカードのデバイス割り込みビット (ATAコントロール・レジスターのnIENビット) が0に設定されている場合、CCSがホストに送信されます。

    デバイスの割り込みビットが1に設定されている際に、ホスト・コントローラーが進行中の転送を中断しない場合、カードデバイスはデータのユニットカウント全体を完了します。

    注: 複数ブロックのデータ転送中にカードデバイスから負のCRCステータスを受信すると、データパスでは、rintstsレジスターのdcrcビットを1に設定することにより、データのCRCエラーをBIUに通知します。その後、バイトがすべて送信されるまでデータの送信は継続します。
  • 読み出し動作 - MMCトランスポート層のエラーがホスト・コントローラーによって検出された場合、ホストはエラーステータスでATAコマンドを完了します。ホスト・コントローラーは、CCSDコマンドを発行し、その後STOP_TRANSMISSION (CMD12) コマンドを発行して読み出し転送を中断することができます。また、ホストは、データ転送を中断することなくデータのユニット・カウント・バイト全体を転送することも可能です。