(57)【特許請求の範囲】
【請求項１】
デバイスへ送信するコマンドがセットされるホストにおいて、
前記コマンドを前記デバイスに送信するコマンド発生部と、
前記デバイスからのレスポンスが規定時間内に認識できない場合、タイムアウトを検出する検出手段と、
を具備し、
前記コマンドの各々は、引数に再送フラグを有し、前記コマンドは第１コマンドと第２コマンドを含み、前記第２コマンドは再送フラグを除いて前記第１コマンドと同じ内容を持ち、
前記コマンド発生部は、再送フラグがリセットされた前記第１コマンドを前記デバイスに送信し、
前記検出手段が前記第１コマンドに対するタイムアウトを検出した場合、前記コマンド発生部は、再送フラグがセットされた前記第２コマンドを前記デバイスに送信し、
前記第１コマンドまたは前記第２コマンドの１つに対応する正常なレスポンスを受信した場合、前記ホストは、前記レスポンスに含まれるエラーステータス情報に基づいてエラーがあるかどうかを判別し、エラーがない場合、前記第１コマンドまたは前記第２コマンドによって命じた命令が正しく実行されたことを認識し、エラーがある場合、前記第１コマンドまたは前記第２コマンドの送信エラーであることを認識することを特徴とするホスト。
【請求項２】
前記ホストに接続されたシステムメモリと、
前記システムメモリに記憶されたコマンド情報を含むディスクリプタと、
前記システムメモリと前記デバイスに接続されたダイレクトメモリアクセス（ＤＭＡ）コントローラと、
をさらに備え、
前記ＤＭＡコントローラは、前記システムメモリから前記コマンド情報を読み出し、前記デバイスに転送されたコマンドを前記コマンド発生部にセットすることを特徴とする請求項１に記載のホスト。
【請求項３】
前記ＤＭＡコントローラは、
前記システムメモリに接続され、前記システムメモリからディスクリプタを取り出すシステムアドレスコントローラと、
前記システムアドレスコントローラに接続され、ＤＭＡ動作とコマンド発行を制御するコマンドコントローラと、
前記システムメモリと前記デバイスに接続されたデータバッファと、
を備えることを特徴とする請求項２に記載のホスト。
【請求項４】
コマンドをデバイスに送信するホストと、
前記ホストから前記コマンドを受け取るデバイスと、
を具備し、
前記コマンドが認識できない場合、前記デバイスはレスポンスを返信しないことによってコマンドが実行されていないことを示し、
前記コマンドが認識できた場合で前記コマンドが実行可能と判定した場合、前記デバイスは正常なレスポンスを返し、
前記コマンドが認識できた場合で前記コマンドが実行不可能と判定した場合、前記デバイスはエラーレスポンスを返信し、
前記コマンドの各々は、引数に再送フラグを有し、前記コマンドは第１コマンドと第２コマンドを含み、前記第２コマンドは前記再送フラグを除いて前記第１コマンドと同じ内容を持ち、
前記ホストは、前記デバイスからのレスポンスが規定時間内に認識できない場合にタイムアウトを検出する検出手段をさらに備え、
前記ホストは、前記第１コマンドの再送フラグをリセットして、前記第１コマンドを送信し、
前記検出手段が前記第１コマンドに対するタイムアウトを検出した場合、前記ホストは前記第２コマンドの再送フラグをセットし、前記第１コマンドとしての前記第２コマンドを前記デバイスに送信し、
正常なレスポンスを受け取ったとき、前記ホストは、前記レスポンスに含まれるエラーステータス情報に基づいてエラーがあるかどうかを判別し、エラーがない場合、前記第１コマンドまたは前記第２コマンドによって命じた命令が正しく実行されたことを認識し、エラーがある場合、前記第１コマンドまたは前記第２コマンドの送信エラーであることを認識し、
前記検出手段が前記第２コマンドに対するタイムアウトを検出した場合、前記ホストは割り込みを発生し、前記第１コマンド及び前記第２コマンドが共に実行できないことを示すことを特徴とするシステム。
【請求項５】
前記再送フラグは少なくとも１ビットあるいは複数ビットを含むことを特徴する請求項４に記載のシステム。
【請求項６】
前記ホストは、
前記ホストに接続されたシステムメモリと、
前記システムメモリに記憶されたコマンド情報を含むディスクリプタと、
前記システムメモリと前記デバイスに接続されたダイレクトメモリアクセス（ＤＭＡ）コントローラと、
を備え、
前記ＤＭＡコントローラは、前記システムメモリに記憶された前記ディスクリプタの記述に基づいてデータを転送することを特徴とする請求項４に記載のシステム。
【請求項７】
前記ＤＭＡコントローラは、
前記システムメモリに接続され、前記システムメモリから前記ディスクリプタを取り出すシステムアドレスコントローラと、
前記システムアドレスコントローラに接続され、ＤＭＡ動作とコマンド発行を制御するコマンドコントローラと、
前記システムメモリと前記デバイスに接続されたデータバッファと、
を備えることを特徴とする請求項６に記載のシステム。
【請求項８】
前記デバイスはメモリデバイスであることを特徴とする請求項４に記載のシステム。
【請求項９】
前記デバイスはＩ／Ｏデバイスであることを特徴とする請求項４に記載のシステム。
【請求項１０】
前記第１コマンド及び前記第２コマンドが認識できない場合、前記デバイスはレスポンスを返信しないことを特徴とする請求項１乃至３のいずれかに記載のホスト。
【請求項１１】
前記検出手段が前記第２コマンドに対するタイムアウトを検出した場合、前記ホストは割り込みを発生し、前記第１コマンド及び第２コマンドが共に実行できないことを示すことを特徴とする請求項１乃至３のいずれかに記載のホスト。
【請求項１２】
前記デバイスからエラーレスポンスを受け取った場合、前記ホストは割り込みを発生することを特徴とする請求項１乃至３のいずれかに記載のホスト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、例えばＳＤＴＭカードに適用され、ＡＤＭＡ（Advanced Direct Memory Access）を有するメモリシステムに関する。
【背景技術】
【０００２】
近時、ＳＤカード例えばＳＤメモリカードは、ホスト機器としての携帯電話器やデジタルカメラ等に広く使用されている。このＳＤメモリカードは、ホストコントローラを介してホスト機器に接続され、ホストコントローラにより、ホスト機器とＳＤメモリカードとの間のデータ伝送が制御されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１２２８９８号公報
【０００４】
【非特許文献１】SD Host Controller Simplified Specification Version 2.00. Section 1.13 Advanced DMA, http://www.sdcard.org/developers/tech/host_controller/
【発明の概要】
【発明が解決しようとする課題】
【０００５】
コマンド・レスポンス・シーケンスにエラーが発生した場合においても、データ転送の中断を防止して、データの転送効率を向上することが可能なメモリシステムを提供しようとするものである。
【課題を解決するための手段】
【０００６】
本実施形態は、デバイスへ送信するコマンドがセットされるホストにおいて、前記コマンドを前記デバイスに送信するコマンド発生部と、前記デバイスからのレスポンスが規定時間内に認識できない場合、タイムアウトを検出する検出手段とを備える。前記コマンドの各々は、引数に再送フラグを有し、前記コマンドは第１コマンドと第２コマンドを含み、前記第２コマンドは再送フラグを除いて前記第１コマンドと同じ内容を持つ。前記コマンド発生部は、再送フラグがリセットされた前記第１コマンドを前記デバイスに送信し、前記検出手段が前記第１コマンドに対するタイムアウトを検出した場合、前記コマンド発生部は、再送フラグがセットされた前記第２コマンドを前記デバイスに送信し、前記第１コマンドまたは前記第２コマンドの１つに対応する正常なレスポンスを受信した場合、前記ホストは、前記レスポンスに含まれるエラーステータス情報に基づいてエラーがあるかどうかを判別し、エラーがない場合、前記第１コマンドまたは前記第２コマンドによって命じた命令が正しく実行されたことを認識し、エラーがある場合、前記第１コマンドまたは前記第２コマンドの送信エラーであることを認識する。
【図面の簡単な説明】
【０００７】
【図１】実施形態に係るメモリシステムを概略的に示す構成図。
【図２】システムメモリとメモリカードのメモリマップを概略的に示す図。
【図３】実施形態に係るディスクリプタの構造を示す図。
【図４】図１に示すＡＤＭＡを概略的に示す構成図。
【図５】図５（ａ）は、コマンドパケットのフォーマットを概略的に示す図であり、図５（ｂ）は、レスポンスパケットのフォーマットを概略的に示す図である。
【図６】ホストコントローラの動作シーケンスを示すフローチャート。
【図７】デバイスの動作シーケンスを示すフローチャート。
【発明を実施するための形態】
【０００８】
バスインターフェースを用いたホストとデバイス間のコミュニケーション方法として、ホストがデバイスにコマンドを送信し、デバイスからのレスポンスを受信してコマンドがデバイスにより受け付けられたかを確認する方法が取られている。あるいは、特定のリード/ライトコマンドなどを用いてデータ転送が実施されたり、ノイズなどによる伝送中のエラーの検出のためＣＲＣ(Cyclic Redundancy Check)コードを用いたエラー検出が用いられたりしている。
【０００９】
ノイズの発生状況が同一の環境で、ノイズによるビットエラーの発生確率が同一である場合においても、バスの転送速度が高速化するに従って、ビットエラーが発生する時間間隔は短くなっていく。このため、例えば数秒から数分に１ビットの割合でビットエラーが発生することが予想される。したがって、高速バスにおいては、プロトコルの再送機能をサポートすることが重要となる。
【００１０】
従来のコマンドプロトコルでは、ビットエラーを含む何らかのエラーが発生した場合(これはＣＲＣコードなどでチェックされる)、ホストが一旦転送をアボートコマンドで停止させ、再度コマンドをリトライ実行する必要があった。このため、データ転送の中断が発生し、転送効率が低下するといい問題があった。特に、ハードウェアによるＤＭＡ（Direct Memory Access）転送を実施しているときに、この様なノイズによる中断が発生すると、ホストドライバによる処理が必要となり、ＤＭＡの効果が薄れてしまうという問題がある。
【００１１】
また、高速バスによるデータ伝送において、ノイズなどにより発生する転送エラーについても同様な問題があり、データ転送中にノイズによりビットエラーが発生すると(ＣＲＣコードなどでチェックされる)、データ転送をいったん中断して、データ転送のリトライ制御をホストが行う必要があり、高速バスにおいては、このオーバーヘッドが無視できなくなる。
【００１２】
以下、実施の形態について、図面を参照して説明する。
【００１３】
図１は、本実施形態に係るメモリシステムを概略的に示している。
【００１４】
本実施形態は、コマンドの引数に再送フラグを設け、最初のコマンドに対応してエラーが発生した場合、ホストコントローラが再送フラグをセットして、最初のコマンドと同一のコマンドを再送するシーケンスを設けている。これにより、データ転送中にノイズによるエラーが発生した場合においても、メモリカード１５やＳＤＩＯカード１６は、データ転送の中断を防止して、データの転送効率の低下を防止可能としている。
【００１５】
図１に示すシステムコントローラ１１は、例えば携帯電話機などのホスト機器に設けられ、ホスト機器のＣＰＵ１２、システムメモリ１３、及びＳＤホストコントローラ１４とのインターフェース制御を行う。
【００１６】
システムメモリ１３は、ホストドライバ２１、ディスクリプタテーブル２２、及びデータ２３を記憶する。これらホストドライバ２１、ディスクリプタテーブル２２、及びデータ２３を記憶するために必要な領域は、オペレーティングシステム（ＯＳ）によってシステムメモリ１３上に確保される。
【００１７】
ホストドライバ２１は、例えばＳＤホストコントローラ１４用のＯＳ固有のドライバであり、ＣＰＵ１２により実行される。ホストドライバ２１は、後述するＡＤＭＡを実行する前に、ディスクリプタテーブル２２を生成する。このディスクリプタテーブル２２は、システムメモリ１３とＳＤカードの間のデータ転送に必要な情報をリストにしたものである。ディスクリプタテーブル２２の構造については後述する。
【００１８】
ＳＤホストコントローラ１４は、ＳＤコマンドを用いて、システムメモリ１３とＳＤカード間のデータ転送を双方向で行う機能を有している。ＳＤホストコントローラ１４は、主としてシステムバスインターフェース（Ｉ／Ｆ）回路３１、メモリカードＩ／Ｆ回路３２、複数のレジスタを含むレジスタセット３３、ＡＤＭＡ３４、タイマ３５により構成されている。
【００１９】
システムバスＩ／Ｆ回路３１は、システムバスを介してシステムコントローラ１１に接続され、メモリカードＩ／Ｆ回路３２は、図示せぬＳＤバスインターフェースを介してＳＤカード、例えばＳＤメモリカード１５、ＳＤＩＯカード１６に接続可能とされている。ＳＤメモリカード１５やＳＤＩＯカード１６は、ＳＤホストコントローラ１４から供給されるコマンドにより制御され、受信したコマンドに対して、予め設定された規定時間内にレスポンスをＳＤホストコントローラ１４に返すように設定されている。ＳＤメモリカード１５は、例えばＣＰＵ１５ａ、ＲＡＭ１５ｂ、ＲＯＭ１５ｃ、バッファ（ＢＵＦ）１５ｄ、インターフェース（Ｉ／Ｆ）１５ｅ、ＮＡＮＤメモリのインターフェース（ＮＩ／Ｆ）１５ｆ、ＮＡＮＤメモリ（ＮＡＮＤ）１５ｇにより構成されている。ＣＰＵ１５は、引数に再送フラグを有するコマンドにより制御され、受信したコマンドに対して規定時間内にレスポンスを送信する。さらに、ＣＰＵ１５は、ビットエラーを検出する。
【００２０】
ＳＤホストコントローラ１４のレジスタセット３３は、例えば図示せぬＳＤコマンド発生部、レスポンス部、バッファデータポート部、ホストコントロール部、割り込みコントロール部、ＡＤＭＡ部など、複数の部分に分類されている。ＳＤコマンドの発行に必要な情報、例えばコマンド番号、コマンドモード、及びアーギュメントやデータ転送に必要な情報 ブロック長、ブロック数は、レジスタセット３３のＳＤコマンド発生部に設定される。ＳＤコマンド発生部は、これらの情報が設定されることにより、ＳＤカードに対してコマンドを発行する。このコマンドに応じてＳＤカードから供給されるレスポンスは、レジスタセット３３内のレスポンス部で受信される。
【００２１】
ＡＤＭＡ３４は、ＣＰＵ１２を介さずに、ＳＤカードとシステムメモリ１３間において、データを転送する回路である。このＡＤＭＡ３４は、システムメモリ１３上のディスクリプタテーブル２２に記載された内容に従ってデータ転送を実行する。
【００２２】
タイマ３５は、タイム・アウト・エラーを検出するものである。例えばコマンドが発行されてから予め設定された規定時間、又はクロック数以上経過した内にレスポンスを受信できない場合、タイマ３５がタイム・アウト・エラーを検出する。再送フラグが“０”に設定されたコマンドに対するレスポンスタイムアウトエラーを検出する場合、ホストＣＰＵ１２には通知されず、直接ＳＤホストコントローラ１４が再送フラグを“１”に設定した同じコマンドを発行する。また、再送フラグが“１”に設定されたコマンドに対するレスポンスタイムアウトエラーを検出する場合、ホストＣＰＵ１２に割り込みで通知され、ホストドライバによって処理される。
【００２３】
上記再送フラグが“０”に設定されたコマンドに対するレスポンスタイムアウトエラーの場合でも、ホストドライバでコマンドを再送することは可能であるが、性能は低下する。再送コマンドにおいて、再度レスポンスタイムアウトエラーを検出する場合、転送は中断されて、ホストドライバでエラー処理が行われる。
【００２４】
図２は、システムメモリ１３のページング管理とＳＤ物理アドレスの関係の例を示している。システムメモリ１３はページングにより、例えば４ｋＢｙｔｅ毎の小領域単位で管理される。ホストＣＰＵ１２が実行するアプリケーションからは、ホストＣＰＵ１２で管理されるページング機能によって、論理アドレスによりシステムメモリ１３がアクセスされる。このため、論理アドレスシステムメモリマップに示すように、データは連続したアドレス領域に配置されているように見える。しかし、システムメモリ１３に実際に記録されるデータの位置は、任意であり、物理アドレスシステムメモリマップに示すように断片的である。これらデータは、アドレスとデータ長（length）により管理されており、データ長は可変である。また、システムメモリ１３に記憶されたデータの物理アドレスと論理アドレスの関係は、図示せぬページテーブルで管理される。
【００２５】
一方、ＳＤメモリカード１３に記憶されるデータは、例えば５１２Ｂｙｔｅ〜数ＭＢｙｔｅのページ単位（ブロック単位）に管理されており、システムメモリ１３と完全に独立している。このため、システムメモリ１３上のデータをＳＤメモリカード１５に記憶させる場合、ＳＤ物理アドレスメモリマップに示すように、システムメモリ１３上のデータは、システムメモリ１３上とは異なるサイズにより記憶される。ＳＤメモリカード１５内のデータは、コマンド毎に指定される記憶領域に保持され、コマンドにより指定されたアドレスを有しており、データ長は可変である。
【００２６】
ＤＭＡ転送は、物理アドレスによって直接システムメモリ１３をアクセスする。このため、システムメモリ１３上に転送リストとしてのディスクリプタを作成することにより、ＤＭＡの実行が可能となる。
【００２７】
図３は、本実施形態に係るディスクリプタを示している。このディスクリプタは、システムメモリ１３のディスクリプタテーブル２２内に作成される。
【００２８】
本実施形態のディスクリプタは、従来のディスクリプタを拡張するものであり、階層構造により構成されている。本実施形態のディスクリプタを用いることにより、ＡＤＭＡによるシステムメモリ１３とＳＤメモリカード１５間のデータ転送を、完全にハードウェアにより実行可能としている。したがって、データ転送中にホストＣＰＵ１２に割り込みを行う必要がなくなる。メモリ書き込みエラーなどの処理要求は割り込みで通知されるが、発生確率が非常に小さいので問題はない。
【００２９】
図３に示すように、第１ディスクリプタ(Integrated Descriptor)は、複数の第２ディスクリプタ(Partial Descriptor)へのポインタの集まりによって構成されている。
【００３０】
各第２ディスクリプタ(Partial Descriptor)は、第３ディスクリプタ(SD Command Descriptor)と第４ディスクリプタ(System Memory Descriptor)のペアで構成される。
【００３１】
第３ディスクリプタの内容は、ＳＤコマンドを発行するための情報により構成されている。すなわち、第３ディスクリプタの内容は、例えばコマンド番号（Command Number）、コマンドモード（Command mode）、引数（Argument）、データ転送に必要な情報としてのブロック長（Block Length）、ブロック数（Block Count）により構成されている。コマンドモードは、例えばリード／ライトを示すものである。この第３ディスクリプタをＳＤホストコントローラ１４のレジスタセット３３のうち、ＳＤコマンド発生部に書き込むことにより、１つのＳＤコマンドが発行される。
【００３２】
第４ディスクリプタ(System Memory Descriptor)の内容は、システムメモリ１３上の各データの位置を示すアドレス（Address）と、データ長を示すレングス（length）とにより構成され、断片的に配置された複数のデータの集まりを示している。
【００３３】
第１乃至第４ディスクリプタは、それぞれ属性情報Ａｔｔを有している。各属性情報Ａｔｔは、例えばディクスリプタの種類を識別するための情報、及びディスクリプタの終了位置を示す終了ビットを含んでいる。
【００３４】
尚、第３ディスクリプタは、フォーマットが他のディスクリプタと相違するため、属性情報Ａｔｔは、少なくとも先頭のコマンド番号に対応して設けてもよい。
【００３５】
図４は、ＡＤＭＡ３４の概略構成を示している。ＡＤＭＡ３４は、システムアドレス制御部３４ａ、データバッファ３４ｂ、ＳＤコマンド制御部３４ｃ、及びバッファメモリ３４ｄを有している。
【００３６】
システムアドレス制御部３４ａは、システムメモリ１３のアドレスを管理する。具体的には、システムメモリ１３に記憶された第１乃至第４のディスクリプタの読み込みを管理する。すなわち、システムアドレス制御部３４ａは、先ず、システムメモリ１３から第１ディスクリプタ（Integrated descriptor）の先頭アドレスの内容、つまり、第２ディスクリプタのアドレスを読み込み、このアドレスに従って第２ディスクリプタを読み込む。次に、第２ディスクリプタを構成する第３ディスクリプタとしてのＳＤコマンドディスクリプタをＳＤコマンド制御部３４ｃに転送する。さらに、第２ディスクリプタを構成する第４ディスクリプタに記述されたデータのアドレス、及びデータ長を順次読み込み、このアドレス及びデータ長に従って、メモリライト時は、システムメモリ１３からデータを読み出し、データバッファ３４ｂに転送する。メモリリード時は、データバッファ３４ｂからシステムメモリ１３にデータを転送する。
【００３７】
これらの動作を実行するため、システムアドレス制御部３４ａは、第１ディスクリプタ（Integrated Descriptor）の先頭アドレス、第２ディスクリプタ（Partial Descriptor）のポインタ、データのアドレス及びデータ長を保持するため、複数のレジスタ３４ａ＿１〜３４ａ＿４、及びこれらレジスタの出力信号を選択するマルチプレクサ（ＭＰＸ）３４ａ＿５を有している。
【００３８】
ＳＤコマンド制御部３４ｃは、ＳＤコマンド発生部に値を設定するためのレジスタアドレスを順次発生するとともに、第３ディスクリプタとしてのSD Command Descriptorに含まれるレジスタ設定情報をホストコントローラ１４のレジスタセット３３のうちＳＤコマンド発生部に順次設定する。レジスタセット３３のＳＤコマンド発生部は、レジスタの設定が完了するとＳＤコマンドを発生する。
【００３９】
バッファメモリ３４ｂは、メモリライトの場合、システムアドレス制御部３４ａにより指定されたシステムメモリ１３上のデータを読み込み、供給されたデータを一時的に保持する。データバッファ３４ｂに保持されたデータは、発行されたＳＤコマンドに同期してＳＤメモリカード１５に転送される。
【００４０】
また、バッファメモリ３４ｄは、メモリリードの場合、発行されたＳＤコマンドに同期してメモリデバイスとしてのＳＤメモリカード１５から読み込んだデータを一時的に保持し、システムアドレス制御部３４ａにより指定されたシステムメモリ１３上の位置にデータを転送する。このようにバッファメモリ３４ｄは、異なる周波数で動作するシステムメモリ１３と、メモリカード１５、又はＳＤＩＯカード１６間のデータの受け渡しを行う働きをする。
【００４１】
図５は、ＳＤホストコントローラ１４から発行されるコマンドと、ＳＤメモリカード１５から出力されるレスポンスの一例を示すものであり、図５（ａ）はコマンドの例を示し、図５（ｂ）はレスポンスの例を示している。
【００４２】
図５（ａ）に示すコマンドパケットは、コマンド番号５１、引数５２、引数によって決まる付加情報５３、ＣＲＣなどのエラー検出情報５４を含んでいる。引数の一部として、例えば１ビットの再送フラグ５２ａが割り当てらいれている。再送フラグは、“０”の場合、最初に発生されたコマンドを示し、“１”の場合、再送コマンドであることを意味し、最初に発生したコマンドと同じコマンドであることを示している。
【００４３】
図５（ｂ）に示すレスポンスパケットは、エラーステータス情報５５、付加情報５６、ＣＲＣなどのエラー検出情報５７を含んでいる。エラーステータス情報５５は、レスポンスを受信した場合のエラー情報である。レスポンスを受信できなかった場合もエラーの一つであるが、これはＳＤホストコントローラ１４のタイマ３５によりタイム・アウト・エラーとして検出される。タイマは、特定の時間または特定のクロック数でタイムアウトの検出を制御する。
【００４４】
上記構成において、ＳＤホストコントローラ１４とＳＤメモリカード１５のコマンド及びレスポンスについて説明する。
【００４５】
図６は、ＳＤホストコントローラ１４のコマンド発行シーケンスを示している。
【００４６】
ＳＤホストコントローラ１４は、最初にコマンドを発行する場合、引数５２の再送フラグ５２ａをクリアした状態、すなわち“０”を設定した状態でコマンドを発生し、デバイスとしての例えばＳＤメモリカード１５に送信する（Ｓ１１）。
【００４７】
コマンドを発生した後、ＳＤメモリカード１５からのレスポンスを待つ（Ｓ１２）。すなわち、ＳＤホストコントローラ１４は、コマンド発生後、レスポンスを待ち、タイマ３５に予め設定された規定時間を経過した状態においてレスポンスを受信できない場合、ＳＤホストコントローラ１４は、タイムアウトかどうかを判別する（Ｓ１２）。
【００４８】
レスポンスのタイムアウトをデータのタイムアウトに比べて短い時間に設定することにより、レスポンスが受信できなかった場合のロスタイムを減らすことができる。
【００４９】
ＳＤホストコントローラ１４は、タイムアウト前にレスポンスを受信した場合（Ｓ１３）、レスポンスに含まれるエラーステータス情報５５に基づき、エラーが有るかどうかを判別する（Ｓ１４）。この結果、エラーが無い場合、正常動作と判断する。このため、例えばデータ転送コマンドの場合は、データ転送を開始できる。
【００５０】
また、ステップＳ１４において、レスポンスに含まれるエラーステータス情報５５がエラーを示す場合、ホストはコマンド送信エラーとして、コマンドの発行タイミングやコマンド引数が間違っていたと解釈する。これはノイズによるエラーではなく、ホストのプログラムの修正が必要となる。
【００５１】
一方、ステップＳ１２において、レスポンスのタイムアウトを検出した場合、ＳＤホストコントローラ１４は、コマンドの引数５２の再送フラグ５２ａを“１”に設定し、前回と同じコマンドを発行する（Ｓ１５）。
【００５２】
コマンドを再送した場合、再びＳＤメモリカード１５からのレスポンスを待つ（Ｓ１６）。この結果、タイマ３５に設定された規定時間内にレスポンスを受信できた場合（Ｓ１７）、ＳＤホストコントローラ１４は、エラーステータス情報５５に基づき、エラーが有るかどうかを判別する（Ｓ１８）。この結果、エラーが無い場合、正常動作と判断する。
【００５３】
ステップＳ１６において、レスポンスのタイムアウトを検出した場合、ＳＤホストコントローラ１４は、コマンド送信エラーとされる。
【００５４】
このように、最初のコマンド発行に対して、ノイズなどにより、ＳＤメモリカード１５などのデバイスがコマンドを認識できなかった場合や、ＳＤホストコントローラ１４がレスポンスを受信できなかった場合、再送フラグ５２ａをセットするとともに、前回のコマンドと同一の内容のコマンドを再発行することができる。このため、ノイズなどにより、ＳＤメモリカード１５などのデバイスがコマンドを認識できなかった場合や、ＳＤホストコントローラ１４がレスポンスを受信できなかった場合のエラーを救済することができる。
【００５５】
図７は、デバイスのコマンド処理シーケンスの一例を示している。
【００５６】
ＳＤメモリカード１５などのデバイスは、コマンドを受信した場合（Ｓ２１）、そのコマンドにＣＲＣエラーが発生しているかどうかを判別する（Ｓ２２）。この結果、ＣＲＣエラーが発生している場合、コマンド番号を特定できないため、認識不可能なコマンドとして無視し、デバイスはレスポンスを返さない。したがって、この場合、ＳＤホストコントローラ１４のタイマ３５は、規定時間経過後、タイム・アウト・エラーを出力する。
【００５７】
一方、判別の結果、ＣＲＣが正常である場合、コマンドの引数５２に含まれた再送フラグ５２ａの状態が確認される（Ｓ２３）。すなわち、再送フラグが“１”であるかどうかが判別される。ＳＤホストコントローラ１４から最初にコマンドが発行される場合、再送フラグは、リセットされ、“０”が設定されている。
【００５８】
再送フラグが“０”である場合、通常のコマンド処理シーケンスに移行され、受信したコマンドが実行可能であるかどうかが判別される（Ｓ２６）。すなわち、コマンドは、コマンド番号とデバイスの状態によって実行可能かどうかが決定される。この判別の結果、コマンドが実行可能ではない場合と判別された場合、デバイスは、ＳＤホストコントローラ１４にレスポンスを返さずに終了する。この場合、ＳＤホストコントローラ１４は、タイマ３５に予め設定された時間を経過してもデバイスからレスポンスを受けることが出来ないため、タイマ３５はタイム・アウト・エラーを出力する。
【００５９】
一方、ステップＳ２６において、コマンドが実行可能であると判別された場合、引数が正しいかどうか正当性が判別される（Ｓ２７）。この判別の結果、引数が正しい場合、デバイスは、ＳＤホストコントローラ１４に正常レスポンスを返し（Ｓ２８）、コマンドを実行する（Ｓ２９）。
【００６０】
また、ステップＳ２７において、引数が正しくない場合、デバイスは、ＳＤホストコントローラ１４にエラーレスポンスを返す（Ｓ３０）。
【００６１】
但し、引数が正しいかどうかの正当性検査に時間がかかる場合、検査結果を待たずに、正常レスポンスを返すことも可能である。間違った引数で正常レスポンスを返した場合、メモリアクセスエラーなどの別なエラー要因が発生することで引数の間違いを知らせることが可能である。引数の間違いは、本実施形態におけるコマンドの再送対象ではなく、ホストドライバが正しい引数を設定するように修正すべきものである。
【００６２】
さらに、前記ステップＳ２３において、再送フラグが“１”である場合、デバイスが最初の（直前の）コマンドを認識できなかったか、デバイスが最初のコマンドに対してレスポンスを返したが、ＳＤホストコントローラ１４がレスポンスを正しく受信できなかった場合である。再送フラグが“１”である場合、デバイスはコマンドを実行中かどうか確認する（Ｓ２４）。つまり、デバイスがステップＳ２８において、最初のコマンドに対してレスポンスを返したが、ホストコントローラ１４がレスポンスを正しく受信できなかった場合、最初のコマンドは正しく認識されているため、最初のコマンドが実行されている可能性がある。このため、デバイスは最初のコマンドが実行中かどうかを確認する。この結果、コマンドを実行中の場合、そのまま実行中の処理が継続され、デバイスからＳＤホストコントローラ１４に正常レスポンスが返される（Ｓ２５）。
【００６３】
また、ステップＳ２４において、デバイスがコマンドを実行中ではないと判別された場合、制御がステップＳ２６に移行され、前述した動作が行われる。
【００６４】
再送されたコマンドに対して、レスポンスエラー(引数が正当ではない場合）、又はレスポンスタイムアウトを検出した場合、ＳＤホストコントローラ１４は、例えばＣＰＵ１２に割り込みを発生させてエラーがあったことを伝える。
【００６５】
また、コマンドが実行不可能と判定された場合、エラーレスポンスを返して、コマンドが実行できなかったことを示してもよい。
【００６６】
上記実施形態によれば、コマンドの引数５２に再送フラグ５２ａを設け、最初のコマンドに対応して、デバイスにおいて、エラーが発生した場合、ＳＤホストコントローラ１４は再送フラグを“１”にセットして、最初のコマンドと同一のコマンドを再送する。また、デバイスは、再送フラグが“０”である場合や、再送フラグが“１”である場合で、最初のコマンドに対応する処理が実行中ではない場合、コマンド処理が実行可能であるかどうかを判別し、実行可能である場合、コマンド処理を実行している。このように、同一コマンドを２回発行可能とするシーケンスを用いることにより、ノイズなどにより、デバイスが最初のコマンドを認識できなかった場合や、ＳＤホストコントローラ１４がデバイスからのレスポンスを受信できなかった場合においても、コマンドを再送することによりエラーを救済することが可能である。したがって、ＣＰＵ１２の割り込みを回避し、データ転送を中断する必要がないため、データ転送効率を向上することができる。
【００６７】
しかも、デバイスは、再送フラグの内容を判別することにより、送られてきたコマンドが最初のコマンドであるか、再送コマンドであるかを判別することができる。さらに、再送コマンドである場合、最初のコマンドに応じて処理が実行中かどうかを判別し、実行中である場合は、その動作を継続させている。このため、データ転送の中断を防止して、データの転送効率の低下を防止することが可能であるとともに、コマンドの再実行を防止することができ、コマンド処理の高速化を図ることができる。したがって、ＡＤＭＡ３４の実行中において、ノイズによるビットエラーが発生した場合においても、ＡＤＭＡ３４の動作を中断することなく実行することが可能である。
【００６８】
ＡＤＭＡ３４が、例えば３Ｇｂｐｓ程度の高速なデータ転送を実行している場合、数秒に１ビットの割合でビットエラーが発生する可能性がある。しかし、本実施形態によれば、コマンドを再送することにより、データ転送を中断することなく、実行することが可能であり、データ転送の高速化を図ることが可能である。
【００６９】
また、本実施形態によるコマンド再送は、同一コマンドを再送すれば良いため、ハードウェア化が容易であり、ホストドライバを介さずにＡＤＭＡがコマンド再送を行うことが可能である。
【００７０】
尚、再送フラグは、１ビットにより構成されている場合について説明したが、これに限定されるものではない。例えば再送フラグを複数ビットにより構成したり、カウンタにより構成したりすることにより、複数回コマンドを再送することが可能となる。
【００７１】
また、上記実施形態は、ＡＤＭＡを用いてデータ転送を行う場合について説明した。しかし、これに限定されるものではなく、他の転送方法を用いることも可能である。この場合において、コマンドの送信時にエラーが発生した場合、上記のように、同一コマンドを再送し、データの再送は、周知の方法により実行すればよい。
【００７２】
その他、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【００７３】
１２…ＣＰＵ、１３…システムメモリ、１４…ＳＤホストコントローラ、１５…ＳＤメモリカード、２１…ホストドライバ、２２…ディスクリプタテーブル、３３…レジスタセット、３４…ＡＤＭＡ、３４ａ…システムアドレス制御部、３４ｂ…データバッファ、３４ｃ…ＳＤコマンド制御部、５２…引数、５２ａ…再送フラグ。
【図１】
0005932947.tif 000002
【図２】
0005932947.tif 000003
【図３】
0005932947.tif 000004
【図４】
0005932947.tif 000005
【図５】
0005932947.tif 000006
【図６】
0005932947.tif 000007
【図７】
0005932947.tif 000008