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

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

16.4.3.2.3. 自動停止

cmdレジスターのsend_auto_stopビットが1に設定されている場合、コントローラーは内部でSD/SDIO STOPコマンドを生成し、コマンドパスにロードします。AUTO_STOPコマンドは、MMCにおけるストリーム読み出しまたは書き込み、およびSDカードにおけるSDメモリー転送の複数ブロック読み出しまたは書き込みを使用して、正確な数のデータバイトを送信する場合に役立ちます。ソフトウェアでは、以下の詳細に従いsend_auto_stopビットを設定する必要があります。

次のリストは、AUTO_STOPコマンドの条件を示しています。

  • バイトカウントが0より大きいMMCのストリーム読み出し - コントローラーは内部のSTOPコマンドを生成し、コマンドパスにロードします。それにより、データの最後のバイトがカードから読み出された際にSTOPコマンドのエンドビットが送信され、データバイトをそれ以上受信しないようにします。バイトカウントが6 (48ビット) 未満の場合は、STOPコマンドのエンドビットが送信される前に、いくつかの余分なデータバイトをカードから受信します。
  • バイトカウントが0より大きいMMCのストリーム書き込み - コントローラーは内部のSTOPコマンドを生成し、コマンドパスにロードします。それにより、データの最後のバイトがカードバスで送信された際にSTOPコマンドのエンドビットが送信され、データバイトがそれ以上送信されないようにします。バイトカウントが6 (48ビット) 未満の場合は、データパスはデータを最後に送信し、これらの条件を満たします。
  • バイトカウントが0より大きいSDカードの複数ブロック読み出しメモリー - ブロックサイズが4 (シングルビット・データ・バス)、16 (4ビット・データ・バス)、または32 (8ビット・データ・バス) 未満の場合、すべてのバイトが読み出された後に、AUTO_STOPコマンドがコマンドパスにロードされます。それ以外の場合はSTOPコマンドがコマンドパスにロードされるため、最後のデータブロックの受信後に、STOPコマンドのエンドビットが送信されます。
  • バイトカウントが0より大きいSDカードの複数ブロック書き込みメモリー - ブロックサイズが3 (シングルビット・データ・バス)、12 (4ビット・データ・バス)、または24 (8ビット・データ・バス) 未満の場合、すべてのデータブロックが送信された後に、AUTO_STOPコマンドがコマンドパスにロードされます。それ以外の場合はSTOPコマンドがコマンドパスにロードされるため、CRCステータスのエンドビットの受信後に、STOPコマンドのエンドビットが送信されます。
  • 自動停止時におけるホスト・ソフトウェアに向けた注意事項 - AUTO_STOPコマンドが発行されている場合、ホスト・ソフトウェアでは、AUTO_STOPコマンドがコントローラーによって送信されてデータ転送が完了するまで、コントローラーに新しいコマンドを発行してはなりません。AUTO_STOPコマンドを伴うデータ転送の進行中にホストが新しいコマンドを発行した場合、AUTO_STOPコマンドは、新しいコマンドが送信されてその応答を受信した後に送信されることがあります。これにより、STOPコマンドの送信が遅延し、余分なデータバイトが転送されることになります。ストリーム書き込みでは、余分なデータバイトは不正なデータであり、カードデータが破損する場合があります。データの転送が完了する前にホストによってデータ転送を終了させる場合は、SD/SDIO STOPコマンドまたはSTOP_TRANSMISSION (CMD12) コマンドを発行することができます。この場合、コントローラーはAUTO_STOPコマンドを生成しません。

MMCカードに対する自動停止の生成

表 136.  MMCカードに対する自動停止の生成
転送タイプ バイトカウント send_auto_stopビットが設定されている 備考
ストリーム読み出し 0 いいえ オープンエンドのストリーム
ストリーム読み出し >0 はい すべてのバイト転送後に自動停止
ストリーム書き込み 0 いいえ オープンエンドのストリーム
ストリーム書き込み >0 はい すべてのバイト転送後に自動停止
単一ブロック読み出し >0 いいえ バイトカウントが0の場合は不正
単一ブロック書き込み >0 いいえ バイトカウントが0の場合は不正
複数ブロック読み出し 0 いいえ オープンエンドの複数ブロック
複数ブロック読み出し >0 はい 37 事前に定義された複数ブロック
複数ブロック書き込み 0 いいえ オープンエンドの複数ブロック
複数ブロック書き込み >0 はい37 事前に定義された複数ブロック

SDカードに対する自動停止の生成

表 137.  SDカードに対する自動停止の生成
転送タイプ バイトカウント send_auto_stopビットが設定されている 備考
単一ブロック読み出し >0 いいえ バイトカウントが0の場合は不正
単一ブロック書き込み >0 いいえ バイトカウントが0の場合は不正
複数ブロック読み出し 0 いいえ オープンエンドの複数ブロック
複数ブロック読み出し >0 はい すべてのバイト転送後に自動停止
複数ブロック書き込み 0 いいえ オープンエンドの複数ブロック
複数ブロック書き込み >0 はい すべてのバイト転送後に自動停止

SDIOカードに対する自動停止の生成

表 138.  SDIOカードに対する自動停止の生成
転送タイプ バイトカウント send_auto_stopビットが設定されている 備考
単一ブロック読み出し >0 いいえ バイトカウントが0の場合は不正
単一ブロック書き込み >0 いいえ バイトカウントが0の場合は不正
複数ブロック読み出し 0 いいえ オープンエンドの複数ブロック
複数ブロック読み出し >0 いいえ 事前に定義された複数ブロック
複数ブロック書き込み 0 いいえ オープンエンドの複数ブロック
複数ブロック書き込み >0 いいえ 事前に定義された複数ブロック
37 転送モードがブロック転送に設定され、byte_countがブロックサイズに等しい場合は、MMCカードとSDカードの両方において、単一ブロックのデータ転送コマンドとして扱われます。byte_count = n*block_size (n = 2、3など) の場合は、事前定義された複数ブロックのデータ転送コマンドとして扱われます。MMCカードの場合、ホスト・ソフトウェアは、事前定義されたデータ転送を2つの方法で実行することができます。1つ目の方法では、CMD18またはCMD25コマンドをカードに発行する前に、CMD23コマンドを発行します。この場合、CMD18およびCMD25コマンドは、send_auto_stopビットを設定せずに発行します。2つ目の方法では、カードにCMD23コマンドを発行せずに、send_auto_stopビットを設定したCMD18またはCMD25コマンドを発行します。この場合、複数ブロックのデータ転送は、プログラムされているバイトカウント後に、内部で生成された自動停止コマンドによって終了します。