(57)【要約】【課題】  コマンドの種類が多くなってもコード量又はハードウェア量の増加を抑えることができるホスト装置等を提供する。【解決手段】  ホスト装置５００は、記憶デバイスコントローラに対し、記憶デバイスをアクセスするためのコマンドの発行制御を行うコマンド発行制御部と、前記コマンドに対応した前記記憶デバイスからのレスポンスの受信検出を行うレスポンス検出部と、前記記憶デバイスのリードデータ又はライトデータが格納される前記記憶デバイスコントローラのバッファのリード制御又はライト制御を行うバッファデータ制御部とを含み、前記コマンド発行制御部が前記コマンドの発行制御を行った後に、前記バッファデータ制御部が、前記コマンドに対応して所定のデータサイズ単位で１又は複数回の前記リード制御又はライト制御を行う。【選択図】      図７
2008287600.tif 000002
【特許請求の範囲】
【請求項１】
記憶デバイスにアクセスする記憶デバイスコントローラを制御するためのホスト装置であって、
前記記憶デバイスコントローラに対し、前記記憶デバイスをアクセスするためのコマンドの発行制御を行うコマンド発行制御部と、
前記コマンドに対応した前記記憶デバイスからのレスポンスの受信検出を行うレスポンス検出部と、
前記記憶デバイスのリードデータ又はライトデータが格納される前記記憶デバイスコントローラのバッファのリード制御又はライト制御を行うバッファデータ制御部とを含み、
前記コマンド発行制御部が前記コマンドの発行制御を行った後に、前記バッファデータ制御部が、前記コマンドに対応して所定のデータサイズ単位で１又は複数回の前記リード制御又はライト制御を行うことを特徴とするホスト装置。
【請求項２】
請求項１において、
前記バッファデータ制御部が、
前記バッファから読み出したデータを所与のメモリに格納すると共に、前記コマンドを発行してから前記記憶デバイスコントローラに前記コマンドに対応した前記記憶デバイスからのレスポンスの受信が完了するまでの間において前記メモリに格納されるデータのサイズを事前リードサイズとして求め、
前記レスポンスの受信完了後に、前記事前リードサイズ分だけシフトさせた前記メモリの記憶領域から順に前記バッファから読み出したデータを格納する制御を行うことを特徴とするホスト装置。
【請求項３】
請求項２において、
前記記憶デバイスコントローラが、前記記憶デバイスに対して転送同期クロックとしての転送クロックを出力すると共に、前記バッファがフルのときに該転送クロックの出力を停止する場合に、
前記バッファデータ制御部が、
前記バッファがフルのときに前記バッファからデータを読み出し、該データのサイズを加算して前記事前リードサイズを更新することを特徴とするホスト装置。
【請求項４】
請求項３において、
前記バッファデータ制御部が、
前記バッファがフルであり、且つ前記コマンドにより指定される前記記憶デバイスから読む出すべきデータサイズが前記バッファに蓄積可能なデータサイズ以上であるとき、前記バッファからデータを読み出し、前記事前リードサイズを更新することを特徴とするホスト装置。
【請求項５】
請求項４において、
前記バッファデータ制御部が、
前記バッファに蓄積可能なデータサイズ単位で、該バッファからデータを読み出すことを特徴とするホスト装置。
【請求項６】
前記記憶デバイスからのデータがバッファリングされるバッファを有する前記記憶デバイスコントローラと、
前記記憶デバイスコントローラに対してコマンドの発行を制御する請求項１乃至５のいずれか記載の記憶デバイスコントローラとを含むことを特徴とする情報処理装置。
【請求項７】
前記記憶デバイスが挿抜される記憶デバイス装着部と、
請求項６記載の情報処理装置とを含むことを特徴とする電子機器。
【請求項８】
記憶デバイスにアクセスする記憶デバイスコントローラを制御するためのプログラムであって、
前記記憶デバイスコントローラに対し、前記記憶デバイスをアクセスするためのコマンドの発行制御を行うコマンド発行制御部と、
前記コマンドに対応した前記記憶デバイスからのレスポンスの受信検出を行うレスポンス検出部と、
前記記憶デバイスのリードデータ又はライトデータが格納される前記記憶デバイスコントローラのバッファのリード制御又はライト制御を行うバッファデータ制御部としてコンピュータを機能させ、
前記コマンド発行制御部が前記コマンドの発行制御を行った後に、前記バッファデータ制御部が、前記コマンドに対応して所定のデータサイズ単位で１又は複数回の前記リード制御又はライト制御を行うことを特徴とするプログラム。
【請求項９】
請求項８において、
前記バッファデータ制御部が、
前記バッファから読み出したデータを所与のメモリに格納すると共に、前記コマンドを発行してから前記記憶デバイスコントローラに前記コマンドに対応した前記記憶デバイスからのレスポンスの受信が完了するまでの間において前記メモリに格納されるデータのサイズを事前リードサイズとして求め、
前記レスポンスの受信完了後に、前記事前リードサイズ分だけシフトさせた前記メモリの記憶領域から順に前記バッファから読み出したデータを格納することを特徴とするプログラム。
【請求項１０】
請求項９において、
前記記憶デバイスコントローラが、前記記憶デバイスに対して転送同期クロックとしての転送クロックを出力すると共に、前記バッファがフルのときに該転送クロックの出力を停止する場合に、
前記バッファデータ制御部が、前記バッファがフルのときに前記バッファからデータを読み出し、該データのサイズを加算して前記事前リードサイズを更新することを特徴とするプログラム。
【請求項１１】
請求項１０において、
前記バッファデータ制御部が、
前記バッファがフルであり、且つ前記コマンドに指定される前記記憶デバイスから読む出すべきデータサイズが前記バッファに蓄積可能なデータサイズ以上であるとき、前記バッファからデータを読み出し、前記事前リードサイズを更新することを特徴とするプログラム。
【請求項１２】
請求項１１において、
前記バッファデータ制御部が、
前記バッファに蓄積可能なデータサイズ単位で、該バッファからデータを読み出すことを特徴とするプログラム。
【請求項１３】
記憶デバイスからのリードデータをバッファリングする記憶デバイスコントローラに対するリード制御方法であって、
前記記憶デバイスコントローラに対し、前記記憶デバイスをアクセスするためのコマンドの発行制御を行うコマンド発行制御ステップと、
前記コマンドに対応した前記記憶デバイスからのレスポンスの受信検出を行うレスポンス検出ステップと、
前記記憶デバイスのリードデータ又はライトデータが格納される前記記憶デバイスコントローラのバッファのリード制御又はライト制御を行うバッファデータ制御ステップとを含み、
前記バッファデータ制御ステップは、
前記コマンドの発行制御を行った後に、前記コマンドに対応して前記バッファデータ制御部が所定のデータサイズ単位で１又は複数回の前記リード制御又はライト制御を行うことを特徴とするリード制御方法。
【請求項１４】
請求項１３において、
前記バッファデータ制御ステップは、
前記バッファから読み出したデータを所与のメモリに格納すると共に、前記コマンドを発行してから前記記憶デバイスコントローラに前記コマンドに対応した前記記憶デバイスからのレスポンスの受信が完了するまでの間において前記メモリに格納されるデータのサイズを事前リードサイズとして求め、
前記レスポンスの受信完了後に、前記事前リードサイズ分だけ補正した前記メモリの記憶領域から順番に前記バッファから読み出したデータを格納することを特徴とするリード制御方法。
【請求項１５】
請求項１４において、
前記記憶デバイスコントローラが、前記記憶デバイスに対して転送同期クロックとしての転送クロックを出力すると共に、前記バッファがフルのときに該転送クロックの出力を停止する場合に、
前記バッファデータ制御ステップが、
前記バッファがフルのときに前記バッファからデータを読み出し、該データのサイズを加算して前記事前リードサイズを更新することを特徴とするリード制御方法。
【請求項１６】
請求項１５において、
前記バッファデータ制御ステップが、
前記バッファがフルであり、且つ前記コマンドに指定される前記記憶デバイスから読む出すべきデータサイズが前記バッファに蓄積可能なデータサイズ以上であるとき、前記バッファからデータを読み出し、前記事前リードサイズを更新することを特徴とするリード制御方法。
【請求項１７】
請求項１６において、
前記バッファデータ制御ステップが、
前記バッファに蓄積可能なデータサイズ単位で、該バッファからデータを読み出すことを特徴とするリード制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホスト装置、情報処理装置、電子機器、プログラム及びリード制御方法に関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータやその周辺機器（例えばプリンタ装置、スキャナ装置又は複合機）に限らず、携帯電話機、携帯情報端末（Personal Digital Assistant：ＰＤＡ）やオーディオプレーヤ等の携帯型の情報機器、ロボット装置、デジタルカメラ、ビデオカメラ、全地球測位システム（Global Positioning System：ＧＰＳ)装置、テレビ受信装置、プロジェクタ等の電子機器に、データストレージ用途にフラッシュメモリカードが使用される機会が多くなっている。
【０００３】
フラッシュメモリカードには、その用途に応じて、種々の規格、バージョンが規定されている。例えば動画データ、静止画データ又は音楽データを携帯するために可搬性に優れ、大容量のフラッシュメモリとして、ＭＭＣ（MultiMediaCard）規格、ＳＤ（Secure Digital）規格に準拠したフラッシュメモリカード、又はＳＤＩＯ（SD Input/Output）規格に準拠したＩ／Ｏデバイスがある。また、例えば携帯機器や家庭用電化製品の小型化により小型のコネクタ形状や高速なデータ転送が可能なＨＤＤ装置として、ＣＥ−ＡＴＡ（Consumer Electronics-AT Attachment）規格に準拠した記憶装置がある。
【０００４】
このように、携帯型のデータストレージ用途は今後もますます広がり、用途に応じた最適な規格が順次策定されていく傾向にある。
【０００５】
このようなフラッシュメモリカード等は、カードコントローラとの間で、その規格で定められた仕様のカードバスを介して接続され、カードコントローラが、カードバスを介してその規格で規定されたコマンド（制御コマンド）を発行することでアクセスされる。
【０００６】
フラッシュメモリカードにアクセスするためにコマンドを発行する技術については、例えば特許文献１に開示されている。特許文献１には、コマンドの使用の追加や変更に対して対処が容易なデータプロセッサが開示されている。
【０００７】
特許文献１に開示された技術では、データプロセッサのインタフェース動作において、インタフェース制御対象機器の動作を制御するための第１の制御情報と、該インタフェース制御対象の機器との間のインタフェース動作を制御するための第２の制御情報とを対応させて、それぞれ別個に定義するようにしている。そのため、特許文献１に開示された技術では、インタフェース制御対象機器にアクセスするためのコマンドや機能や動作に追加や変更があったときに第１又は第２の制御情報を修正できるようにしている。
【特許文献１】特開２００２−３４２２５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、ＭＭＣ規格やＳＤ規格等には、レスポンスの有無や、転送データの制御の有無、転送データを制御する場合には転送データの制御方向（書き込み、データの読み出し）等に応じてコマンドの種類が多い。そのため、一般的には、カードコントローラを制御するホスト装置では、ソフトウェア処理においてコマンドの種類毎にコマンドを発行する関数（ハードウェア処理においてはコマンドを発行する回路）を設ける必要があり、コマンドを発行する関数のコード量の削減が求められている。従って、コマンドの発行関数（発行回路）を汎用化して、コマンドの種類が多くなっても、コード量（ハードウェア量）の増加を抑えることが望ましい。
【０００９】
また、カードバスは、転送同期クロックとしての転送クロックが伝送されるクロックライン、コマンドやそのレスポンスが伝送されるコマンドライン、転送データが伝送されるデータラインを有する。種々の事情によりデータ転送を中断させる場合、転送クロックを停止させることで、コマンドやレスポンス、転送データの伝送が中断される。しかしながら、カードコントローラを制御するホスト装置における転送データの制御の方法によっては、転送データのあふれ等を防止するためにフラッシュメモリカード等との間のデータ転送を中断させる必要が生じる場合がある（特に、リード転送時）。このようデータ転送の中断は、フラッシュメモリカードのアクセス時間を長くしてしまうばかり、転送の中断によってレスポンスが返信されずに転送を完了させることできない事態に陥ることもある。また、このアクセス時間を短縮するためにカードコントローラやホスト装置でのバッファを大容量化する必要が生じる。
【００１０】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、コマンドの種類が多くなってもコード量又はハードウェア量の増加を抑えることができるホスト装置、情報処理装置、電子機器、プログラム及びリード制御方法を提供することにある。
【００１１】
また本発明の他の目的は、小容量のバッファでもデータ転送を中断させることなく記憶デバイスからのリード動作を実現できるホスト装置、情報処理装置、電子機器、プログラム及びリード制御方法を提供することにある。
【課題を解決するための手段】
【００１２】
上記課題を解決するために本発明は、
記憶デバイスにアクセスする記憶デバイスコントローラを制御するためのホスト装置であって、
前記記憶デバイスコントローラに対し、前記記憶デバイスをアクセスするためのコマンドの発行制御を行うコマンド発行制御部と、
前記コマンドに対応した前記記憶デバイスからのレスポンスの受信検出を行うレスポンス検出部と、
前記記憶デバイスのリードデータ又はライトデータが格納される前記記憶デバイスコントローラのバッファのリード制御又はライト制御を行うバッファデータ制御部とを含み、
前記コマンド発行制御部が前記コマンドの発行制御を行った後に、前記バッファデータ制御部が、前記コマンドに対応して所定のデータサイズ単位で１又は複数回の前記リード制御又はライト制御を行うホスト装置に関係する。
【００１３】
本発明においては、コマンド発行制御部により発行されるコマンドの種類に応じて、レスポンスの受信の有無、ライトデータの出力の有無、リードデータの入力の有無等の制御シーケンスが異なる場合であっても、コマンド発行制御、レスポンスの受信制御（受信検出）及びＦＩＦＯデータの入出力制御の各制御を分離させたので、該コマンドに応じて必要な制御のみを機能させれば済む。従って、本発明によれば、コマンド毎に、コマンド発行制御部、レスポンス検出部及びＦＩＦＯデータ制御部を共用化できることになる。
【００１４】
また本発明に係るホスト装置では、
前記バッファデータ制御部が、
前記バッファから読み出したデータを所与のメモリに格納すると共に、前記コマンドを発行してから前記記憶デバイスコントローラに前記コマンドに対応した前記記憶デバイスからのレスポンスの受信が完了するまでの間において前記メモリに格納されるデータのサイズを事前リードサイズとして求め、
前記レスポンスの受信完了後に、前記事前リードサイズ分だけシフトさせた前記メモリの記憶領域から順に前記バッファから読み出したデータを格納する制御を行うことができる。
【００１５】
本発明によれば、レスポンスの受信完了までバッファからデータを読み出すことができ、バッファがフルになる事態を回避できるようになる。そして、バッファがフルになることで転送クロックを停止させることなく、レスポンスの受信完了後は、継続してバッファからのデータの読み出しができ、このリード動作による転送時間を短縮できる。更に、バッファを小容量化できるため、記憶デバイスコントローラの低コスト化にも寄与できるようになる。
【００１６】
また本発明に係るホスト装置では、
前記記憶デバイスコントローラが、前記記憶デバイスに対して転送同期クロックとしての転送クロックを出力すると共に、前記バッファがフルのときに該転送クロックの出力を停止する場合に、
前記バッファデータ制御部が、
前記バッファがフルのときに前記バッファからデータを読み出し、該データのサイズを加算して前記事前リードサイズを更新することができる。
【００１７】
また本発明に係るホスト装置では、
前記バッファデータ制御部が、
前記バッファがフルであり、且つ前記コマンドにより指定される前記記憶デバイスから読む出すべきデータサイズが前記バッファに蓄積可能なデータサイズ以上であるとき、前記バッファからデータを読み出し、前記事前リードサイズを更新することができる。
【００１８】
また本発明に係るホスト装置では、
前記バッファデータ制御部が、
前記バッファに蓄積可能なデータサイズ単位で、該バッファからデータを読み出すことができる。
【００１９】
上記のいずれかの発明によれば、バッファの読み出し制御、例えば事前リードサイズの管理制御を簡素化できる上に、不要な読み出し制御を回避できるようになる。
【００２０】
また本発明は、
前記記憶デバイスからのデータがバッファリングされるバッファを有する前記記憶デバイスコントローラと、
前記記憶デバイスコントローラに対してコマンドの発行を制御する上記のいずれか記載の記憶デバイスコントローラとを含む情報処理装置に関係する。
【００２１】
本発明によれば、コマンドの種類が多くなってもコード量又はハードウェア量の増加を抑えることができるホスト装置が適用された情報処理装置を提供できる。或いは、本発明によれば、記憶デバイスコントローラのバッファが小容量であっても、データ転送を中断させることなく記憶デバイスからのリード動作を実現できるホスト装置が適用された情報処理装置を提供できる。
【００２２】
また本発明は、
前記記憶デバイスが挿抜される記憶デバイス装着部と、
上記記載の情報処理装置とを含む電子機器に関係する。
【００２３】
本発明によれば、コマンドの種類が多くなってもコード量又はハードウェア量の増加を抑えることができるホスト装置が適用された電子機器を提供できる。或いは、本発明によれば、記憶デバイスコントローラのバッファが小容量であっても、データ転送を中断させることなく記憶デバイスからのリード動作を実現できるホスト装置が適用された電子機器を提供できる。
【００２４】
また本発明は、
記憶デバイスにアクセスする記憶デバイスコントローラを制御するためのプログラムであって、
前記記憶デバイスコントローラに対し、前記記憶デバイスをアクセスするためのコマンドの発行制御を行うコマンド発行制御部と、
前記コマンドに対応した前記記憶デバイスからのレスポンスの受信検出を行うレスポンス検出部と、
前記記憶デバイスのリードデータ又はライトデータが格納される前記記憶デバイスコントローラのバッファのリード制御又はライト制御を行うバッファデータ制御部としてコンピュータを機能させ、
前記コマンド発行制御部が前記コマンドの発行制御を行った後に、前記バッファデータ制御部が、前記コマンドに対応して所定のデータサイズ単位で１又は複数回の前記リード制御又はライト制御を行うプログラムに関係する。
【００２５】
本発明によれば、コマンドの種類が多くなってもコード量又はハードウェア量の増加を抑えることができる、記憶デバイスにアクセスするための記憶デバイスコントローラを制御するプログラムを提供できる。
【００２６】
また本発明に係るプログラムでは、
前記バッファデータ制御部が、
前記バッファから読み出したデータを所与のメモリに格納すると共に、前記コマンドを発行してから前記記憶デバイスコントローラに前記コマンドに対応した前記記憶デバイスからのレスポンスの受信が完了するまでの間において前記メモリに格納されるデータのサイズを事前リードサイズとして求め、
前記レスポンスの受信完了後に、前記事前リードサイズ分だけシフトさせた前記メモリの記憶領域から順に前記バッファから読み出したデータを格納することができる。
【００２７】
また本発明に係るプログラムでは、
前記記憶デバイスコントローラが、前記記憶デバイスに対して転送同期クロックとしての転送クロックを出力すると共に、前記バッファがフルのときに該転送クロックの出力を停止する場合に、
前記バッファデータ制御部が、前記バッファがフルのときに前記バッファからデータを読み出し、該データのサイズを加算して前記事前リードサイズを更新することができる。
【００２８】
また本発明に係るプログラムでは、
前記バッファデータ制御部が、
前記バッファがフルであり、且つ前記コマンドに指定される前記記憶デバイスから読む出すべきデータサイズが前記バッファに蓄積可能なデータサイズ以上であるとき、前記バッファからデータを読み出し、前記事前リードサイズを更新することができる。
【００２９】
また本発明に係るプログラムでは、
前記バッファデータ制御部が、
前記バッファに蓄積可能なデータサイズ単位で、該バッファからデータを読み出すことができる。
【００３０】
上記のいずれかの発明によれば、記憶デバイスコントローラのバッファが小容量であっても、データ転送を中断させることなく記憶デバイスからのリード動作を実現できるプログラムを提供できる。
【００３１】
また本発明は、
記憶デバイスからのリードデータをバッファリングする記憶デバイスコントローラに対するリード制御方法であって、
前記記憶デバイスコントローラに対し、前記記憶デバイスをアクセスするためのコマンドの発行制御を行うコマンド発行制御ステップと、
前記コマンドに対応した前記記憶デバイスからのレスポンスの受信検出を行うレスポンス検出ステップと、
前記記憶デバイスのリードデータ又はライトデータが格納される前記記憶デバイスコントローラのバッファのリード制御又はライト制御を行うバッファデータ制御ステップとを含み、
前記バッファデータ制御ステップは、
前記コマンドの発行制御を行った後に、前記コマンドに対応して前記バッファデータ制御部が所定のデータサイズ単位で１又は複数回の前記リード制御又はライト制御を行うリード制御方法に関係する。
【００３２】
本発明によれば、コマンドの種類が多くなってもコード量又はハードウェア量の増加を抑えることができる、記憶デバイスにアクセスするためのリード制御方法を提供できる。
【００３３】
また本発明に係るリード制御方法では、
前記バッファデータ制御ステップは、
前記バッファから読み出したデータを所与のメモリに格納すると共に、前記コマンドを発行してから前記記憶デバイスコントローラに前記コマンドに対応した前記記憶デバイスからのレスポンスの受信が完了するまでの間において前記メモリに格納されるデータのサイズを事前リードサイズとして求め、
前記レスポンスの受信完了後に、前記事前リードサイズ分だけ補正した前記メモリの記憶領域から順番に前記バッファから読み出したデータを格納することができる。
【００３４】
また本発明に係るリード制御方法では、
前記記憶デバイスコントローラが、前記記憶デバイスに対して転送同期クロックとしての転送クロックを出力すると共に、前記バッファがフルのときに該転送クロックの出力を停止する場合に、
前記バッファデータ制御ステップが、
前記バッファがフルのときに前記バッファからデータを読み出し、該データのサイズを加算して前記事前リードサイズを更新することができる。
【００３５】
また本発明に係るリード制御方法では、
前記バッファデータ制御ステップが、
前記バッファがフルであり、且つ前記コマンドに指定される前記記憶デバイスから読む出すべきデータサイズが前記バッファに蓄積可能なデータサイズ以上であるとき、前記バッファからデータを読み出し、前記事前リードサイズを更新することができる。
【００３６】
また本発明に係るリード制御方法では、
前記バッファデータ制御ステップが、
前記バッファに蓄積可能なデータサイズ単位で、該バッファからデータを読み出すことができる。
【００３７】
上記のいずれかの発明によれば、記憶デバイスコントローラのバッファが小容量であっても、データ転送を中断させることなく記憶デバイスからのリード動作を実現できるリード制御方法を提供できる。
【発明を実施するための最良の形態】
【００３８】
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【００３９】
１．  情報処理装置
図１に、本実施形態におけるホスト装置が適用された電子機器の構成例のブロック図を示す。
【００４０】
図１の構成を有する電子機器としては、例えばパーソナルコンピュータ、その周辺機器（例えばプリンタ装置、スキャナ装置又は複合機）、携帯電話機、携帯情報端末、オーディオプレーヤ、ロボット装置、デジタルカメラ、ビデオカメラ、ＧＰＳ装置、テレビ受信装置、プロジェクタ等がある。
【００４１】
電子機器１０は、情報処理装置としてのホストシステム１００と、メモリカード（広義には記憶デバイス、記憶装置）２００とを含み、ホストシステム１００とメモリカード２００とがカードバス２０を介して接続されている。電子機器１０では、メモリカード２００に対する制御コマンドを発行することにより、メモリカード２００にデータを書き込んだり、メモリカード２００からデータを読み出したりすることができる。メモリカード２００は、例えばフラッシュメモリカード、Ｉ／ＯデバイスやＨＤＤ装置であってもよい。
【００４２】
ホストシステム１００は、ホスト装置１２６と、カードコントローラ（記憶デバイスコントローラ、メモリコントローラ）１３０とを含む。ホスト装置１２６は、中央演算処理装置（Central Processing Unit：ＣＰＵ）１１０と、メモリ１２０とを含む。ＣＰＵ１１０、メモリ１２０及びカードコントローラ１３０は、システムバス１２２を介して接続されている。従って、ＣＰＵ１１０は、システムバス１２２を介してメモリ１２０又はカードコントローラ１３０にアクセスできる。そして、ＣＰＵ１１０が、メモリ１２０に格納されたプログラムを読み込んで該プログラムに対応した処理を実行することにより、メモリカード２００に対して制御コマンドを発行する制御やメモリカード２００に書き込みや読み出しされるデータを制御するホスト装置としての機能を実現する。カードコントローラ１３０とメモリカード２００とは、カードバス２０を介して接続され、ＣＰＵ１１０が、カードコントローラ１３０からメモリカード２００に対して発行する制御コマンドを生成する制御を行う。メモリカード２００を「デバイス」と定義すると、カードコントローラ１３０はホスト側を制御する「ホストコントローラ」と定義することができる。
【００４３】
カードバス２０は、転送クロックＣＬＫが伝送されるクロックライン、制御コマンドＣＭＤ及びレスポンスが伝送されるコマンドライン、例えば４ビット（又は８ビット）の転送データＤＡＴ０−ＤＡＴ３が伝送されるデータラインを有する。本実施形態では、カードコントローラ１３０が、転送クロックＣＬＫに同期してコマンドＣＭＤを発行する。そして、転送クロックＣＬＫに同期して例えば４ビットの転送データＤＡＴ０−ＤＡＴ３が送受信される。また、コマンドＣＭＤの種類によっては、メモリカード２００が制御コマンドＣＭＤに対するレスポンスとして、例えばコマンドラインを用いてレスポンスを返すことができる。
【００４４】
以下では、メモリカード２００がＳＤ規格に準拠したフラッシュメモリカードであり、カードバス２０にはＳＤ規格に準拠したシーケンスで制御コマンドやレスポンス、転送データの送受信が行われるものとする。
【００４５】
図２（Ａ）に、本実施形態における制御コマンドの説明図を示す。
【００４６】
制御コマンドは、例えば４８ビット長のデータであり、スタートビットＳ（「０」）、カードコントローラ１３０によりセットされる転送ビット「１」に続き、４５ビットのコマンドデータ、エンドビットＥ「１」で構成されている。コマンドデータの末尾の７ビットは、ＣＲＣ（Cyclic Redundancy Check）データである。コマンドデータは、コマンド、アドレス情報やパラメータ情報を含むことができ、図２（Ａ）のような構造のデータがコマンドラインを伝送される。
【００４７】
図２（Ｂ）に、図２（Ａ）の制御コマンドに対応してメモリカード２００から送信されるレスポンスの説明図を示す。
【００４８】
レスポンスは、スタートビット「Ｓ」が「０」、エンドビット「Ｅ」が「１」で挟まれた所定ビットのレスポンスデータである。図２（Ｂ）に示すようなレスポンスが、コマンドラインを介して受信される。メモリカード２００は、例えば転送ビットに「０」を設定することで、上記のコマンドラインを介してレスポンスをカードコントローラ１３０に返信できる。
【００４９】
図３に、図１のカードコントローラ１３０の構成例のブロック図を示す。
【００５０】
カードコントローラ１３０は、制御インタフェース（InterFace：Ｉ／Ｆ）回路１３２、ＦＩＦＯ（First-In First-Out)Ｉ／Ｆ回路１３４、コントローラ制御レジスタ部１３６、クロック制御部１３８、制御ロジック部１４０、ＦＩＦＯ（ＦＩＦＯメモリ、バッファ）１４６、ドライバ部１４８を含む。制御ロジック部１４０は、コマンドシーケンサ１４２、データシーケンサ１４４を含む。
【００５１】
制御Ｉ／Ｆ回路１３２は、システムバス１２２を介してＣＰＵ１１０やメモリ１２０との間で送受信される制御信号や制御データのインタフェース処理を行う。ＣＰＵ１１０は、制御Ｉ／Ｆ回路１３２を介してコントローラ制御レジスタ部１３６の各制御レジスタに制御データを設定できる。
【００５２】
ＦＩＦＯＩ／Ｆ回路１３４は、システムバス１２２を介してＣＰＵ１１０やメモリ１２０との間で送受信される制御信号や制御データのインタフェース処理を行う。システムバス１２２を介してメモリ１２０から読み出されたデータは、ＦＩＦＯ１４６においてバッファリングされた後、制御ロジック部１４０に供給される。また、メモリカード２００から読み出されたデータは、ＦＩＦＯ１４６においてバッファリングされた後に、システムバス１２２を介してＣＰＵ１１０又はメモリ１２０に出力される。なお、ＦＩＦＯ１４６は、いわゆる先入れ先出し構造を有する必要はなく、ランダムアクセスが可能なメモリであってもよい。
【００５３】
コントローラ制御レジスタ部１３６は、１又は複数の制御レジスタを有し、各制御レジスタにはカードコントローラ１３０を制御するための制御データが設定される。コントローラ制御レジスタ部１３６の各制御レジスタに設定された制御データに対応した制御信号に基づいて、カードコントローラ１３０の各部が制御される。
【００５４】
クロック制御部１３８は、カードコントローラ１３０の各部にクロックを供給すると共に、カードバス２０を構成するクロックラインに転送クロックＣＬＫを出力する制御を行う。
【００５５】
コマンドシーケンサ１４２は、コントローラ制御レジスタ部１３６の制御レジスタの制御データに基づいて、カードバス２０を構成するコマンドラインを介してメモリカード２００に対してコマンドを発行する制御を行う。
【００５６】
データシーケンサ１４４は、コントローラ制御レジスタ部１３６の制御レジスタの制御データに基づいて、カードバス２０を構成するデータラインを介してメモリカード２００との間でデータを送受信する制御を行う。
【００５７】
ドライバ部１４８は、コマンドシーケンサ１４２の制御結果に基づいてコマンドラインの信号の入出力制御を行う。また、データシーケンサ１４４の制御結果に基づいてデータラインの信号の入出力制御を行う。
【００５８】
図４に、図３のコントローラ制御レジスタ部１３６の構成の概要を示す。
【００５９】
コントローラ制御レジスタ部１３６は、コマンド指定レジスタ１５０、引数設定レジスタ１５２、コマンドタイプ設定レジスタ１５４、レスポンス指定レジスタ１５６、転送タイプ設定レジスタ１５８、転送カウント数設定レジスタ１６０を含むことができる。コントローラ制御レジスタ部１３６のコマンド指定レジスタ１５０、引数設定レジスタ１５２、コマンドタイプ設定レジスタ１５４、レスポンス指定レジスタ１５６、転送タイプ設定レジスタ１５８及び転送カウント数設定レジスタ１６０の各制御レジスタにはアドレスが割り当てられており、例えば該アドレスをインクリメント（又は所定のアドレス値を加算）するだけ各制御レジスタに順番にアクセスできるようになっている。
【００６０】
ＣＰＵ１１０は、システムバス１２２を介して、メモリカード２００に対して発行するコマンドの種類を指定するコマンド指定情報と該コマンドのパラメータであるパラメータ情報とをコントローラ制御レジスタ部１３６に設定することができる。パラメータ情報は、引数情報、コマンドタイプ情報、レスポンス指定情報、転送タイプ情報、転送カウント数情報を含むことができる。
【００６１】
コマンド指定情報は、コマンド指定レジスタ１５０に設定される。コマンド指定レジスタ１５０に設定されたコマンド指定情報に基づいて、制御信号ｃｍｄ＿ｉｎｄｅｘが出力される。制御信号ｃｍｄ＿ｉｎｄｅｘにより指定されるコマンドインデックスが、ＳＤ規格におけるコマンド（例えばSD Specifications, Part 1, Physical Layer Specification Version 2.00, May 9, 2006, 4.7.4 Detailed Command Descriptionを参照）のインデックスとなる。例えば制御信号ｃｍｄ＿ｉｎｄｅｘにより指定されるコマンドインデックスが「０」を指定するとき、カードコントローラ１３０は、メモリカード２００に対して、アイドルステートに遷移させるコマンドＣＭＤ０を発行する制御を行う。
【００６２】
パラメータ情報のうち引数情報は、引数設定レジスタ１５２に設定される。引数設定レジスタ１５２に設定された引数情報に基づいて、制御信号ａｒｇが出力される。制御信号ａｒｇにより指定される引数情報が、ＳＤ規格におけるコマンドの引数となる。制御信号ａｒｇにより指定される引数を用いて、カードコントローラ１３０は、メモリカード２００に対して、上記の引数を有する例えばコマンドＣＭＤ２（コマンドインデックスが例えば「２」）を発行する制御を行う。
【００６３】
パラメータ情報のうちコマンドタイプ情報が、コマンドタイプ設定レジスタ１５４に設定される。コマンドタイプ設定レジスタ１５４に設定されたコマンドタイプ情報に基づいて、制御信号ｔｙｐｅが出力される。コマンドタイプ情報は、停止コマンドか否かを示す情報と、例えばＳＤ規格におけるＡＣＭＤか否か（ＣＭＤかＡＣＭＤか）を示す情報とを含む。
【００６４】
パラメータ情報のうちレスポンス指定情報が、レスポンス指定レジスタ１５６に設定される。レスポンス指定レジスタ１５６に設定されたレスポンス指定情報に基づいて、制御信号ｒｅｓｐが出力される。制御信号ｒｅｓｐにより指定されるレスポンス指定情報が、コマンドのレスポンスタイプとなる。レスポンスタイプは、レスポンスの有無だけでなく、レスポンスがある場合のレスポンスシーケンスの種類を特定する情報である。ここで、例えばＳＤ規格においてＲ１以外のレスポンスタイプが指定される場合であっても、シーケンスがＲ１と実質的に同じであるＲ６やＲ７のレスポンスタイプをＲ１として指定すればよい。例えば制御信号ｒｅｓｐにより指定されるレスポンス指定情報が「Ｒ１ｂ」を指定（コマンドインデックスが例えば「７」）するとき、カードコントローラ１３０は、メモリカード２００に対して、例えばメモリカード２００がビジー状態となるレスポンスを受け取る、例えばコマンドＣＭＤ７を発行する制御を行う。
【００６５】
パラメータ情報のうち転送タイプが、転送タイプ設定レジスタ１５８に設定される。転送タイプ設定レジスタ１５８に設定された転送タイプ情報に基づいて、制御信号ｔｒａｎ＿ｔｙｐｅが出力される。制御信号ｔｒａｎ＿ｔｙｐｅにより指定される転送タイプ情報が、ＳＤ規格におけるコマンドの転送タイプとなる。転送タイプ情報は、Ｓｉｎｇｌｅ転送、Ｍｕｌｉｐｌｅ転送、Ｓｔｒｅａｍ転送、Ｉｎｆｉｎｉｔｅ転送の他、転送方向や制御コマンドＣＭＤ１２を伴うか否かの情報を含む。
【００６６】
パラメータ情報のうち転送カウント数情報が、転送カウント数設定レジスタ１６０に設定される。転送カウント数設定レジスタ１６０に設定された転送カウント数に基づいて、制御信号ｃｎｔが出力される。制御信号ｃｎｔにより指定される転送カウント数に基づいて、カードコントローラ１３０は、メモリカード２００との間のデータ転送を繰り返す。
【００６７】
カードコントローラ１３０は、図４に示すようなコントローラ制御レジスタ部１３６の各制御レジスタの制御データを用いて、メモリカード２００に対して制御コマンドを発行することができる。
【００６８】
図５に、図３のドライバ部１４８の構成の概要を示す。
【００６９】
ドライバ部１４８は、クロックラインを駆動して転送クロックＳＤＣＬＫを出力するドライバと、コマンドラインに接続される第１の入出力ドライバと、データラインに接続される第２の入出力ドライバとを含む。
【００７０】
第１の入出力ドライバは、コマンドシーケンサ１４２によって制御されコマンドラインを駆動して制御コマンドを出力する出力ドライバと、コマンドラインを介して入力されるレスポンスを受信するための入力ドライバとを含む。コントローラ制御レジスタ部１３６の制御レジスタの内容に基づいてコマンドシーケンサ１４２によって生成された制御コマンドが、第１の入出力ドライバの出力ドライバによりコマンドラインに出力される。そして、該制御コマンドに対応してメモリカード２００から出力されたレスポンスが、第１の入出力ドライバの入力ドライバで受信される。
【００７１】
第２の入出力ドライバは、データシーケンサ１４４によって制御されデータラインを駆動して転送データを出力する出力ドライバと、データラインを介して入力される転送データを受信するための入力ドライバとを含む。コントローラ制御レジスタ部１３６の制御レジスタの内容に基づいて、ＦＩＦＯＩ／Ｆ回路１３４からのデータがデータシーケンサ１４４の制御により、転送データとして第２の入出力ドライバの出力ドライバを介してデータラインに出力される。そして、メモリカード２００から出力されたレスポンスが、第１の入出力ドライバの入力ドライバで受信される。
【００７２】
図６に、図１のメモリカード２００の構成例のブロック図を示す。
【００７３】
メモリカード２００は、カードＩ／Ｆ回路２１０、カードＩ／Ｆ制御回路２２０、カード制御レジスタ部２３０、メモリＩ／Ｆ回路２４０、メモリコア部２５０を含む。
【００７４】
カードＩ／Ｆ回路２１０は、カードバス２０を伝送される信号のインタフェース処理を行う。カードＩ／Ｆ制御回路２２０は、カードＩ／Ｆ回路２１０を制御してカードバス２０に信号を出力する制御を行ったり、カードバス２０からの信号を入力する制御を行ったりする。
【００７５】
カード制御レジスタ部２３０は、複数の制御レジスタを有する。例えば、カード制御レジスタ部２３０は、動作条件レジスタ（Operation Conditions Resister：ＯＣＲ）、カード識別レジスタ（Card IDentification register：ＣＩＤ）、カード特性データレジスタ（Card-Specific Data register：ＣＳＤ）、相対カードアドレスレジスタ（Relative Card Address register：ＲＣＡ）、ドライバステージレジスタ（Driver Stage Register:ＤＳＲ）、ＳＤコンフィギュレーションレジスタ（SD Configuration Register：ＳＣＲ）、ＳＤステータスレジスタ（SD Status Register：ＳＳＲ）、カードステータスレジスタ（Card Status Register：ＣＳＲ)等を含む。カードＩ／Ｆ制御回路２２０は、カード制御レジスタ部２３０の設定データに基づいてメモリカード２００の各部を制御すると共に、その制御結果をカード制御レジスタ部２３０に格納する制御を行う。
【００７６】
メモリＩ／Ｆ回路２４０は、カードＩ／Ｆ制御回路２２０の制御により、メモリコア部２５０のメモリ素子にデータを書き込んだり、メモリコア部２５０のメモリ素子からデータを読み出したりする制御を行う。
【００７７】
メモリコア部２５０は、複数のメモリ素子を有する。メモリＩ／Ｆ回路２４０は、予め割り当てられたアドレスに対応したメモリ素子からデータを読み出したり、該アドレスに対応したメモリ素子にデータを書き込んだりすることができる。
【００７８】
２．  ホスト装置
ここで、図１のホスト装置１２６に適用可能な本実施形態におけるホスト装置について説明する。
【００７９】
図７に、本実施形態におけるホスト装置の構成の概要を示す。
【００８０】
ホスト装置５００は、コマンド発行制御部５１０、レスポンス検出部５２０、ＦＩＦＯデータ制御部（広義にはバッファデータ制御部）５３０、メモリ５４０を含む。
【００８１】
コマンド発行制御部５１０、レスポンス検出部５２０及びＦＩＦＯデータ制御部５３０の機能は、図１のＣＰＵ１１０及びメモリ１２０により実現される。より具体的には、ＣＰＵ１１０が、メモリ１２０に格納されたプログラムを読み込み該プログラムに対応した処理を実行することで、コマンド発行制御部５１０、レスポンス検出部５２０及びＦＩＦＯデータ制御部５３０の機能を実現する。メモリ５４０の機能は、図１のメモリ１２０によって実現される。
【００８２】
コマンド発行制御部５１０は、カードコントローラ１３０に対し、メモリカード２００をアクセスするためのコマンドの発行制御を行う。より具体的には、上位アプリケーションプログラムのからの指示で、図４のカードコントローラ１３０のコントローラ制御レジスタ部１３６にコマンド指定情報及びパラメータ情報を設定し、メモリカード２００に対してコマンドを発行する制御を行う。
【００８３】
レスポンス検出部５２０は、コマンド発行制御部５１０により発行されたコマンドに対応したメモリカード２００からのレスポンスの受信検出を行う。より具体的には、コマンド発行制御部５１０により発行されたコマンドが、メモリカード２００からのレスポンスを受信すべきコマンドのとき、レスポンス検出部５２０は、カードコントローラ１３０により受信されたレスポンスの有無を検出する。カードコントローラ１３０はメモリカード２００からのレスポンスを受信すると、ホスト装置５００に対して割り込みを発生させたり、或いは図示しないステータスレジスタのフラグを設定したりすることで、ホスト装置５００に対してメモリカード２００からのレスポンスが受信されたことを通知できる。レスポンス検出部５２０は、このようなカードコントローラ１３０からの割り込み通知やステータスレジスタの内容をポーリングすることで、メモリカード２００がカードコントローラ１３０にレスポンスを出力したか否かを検出できる。
【００８４】
ＦＩＦＯデータ制御部５３０は、コマンド発行制御部５１０により発行されたコマンドがライトコマンドであるとき、メモリカード２００に対して出力すべきライトデータをカードコントローラ１３０のＦＩＦＯ１４６に書き込むライト制御を行う。より具体的には、ライトコマンドが発行されたとき、ＦＩＦＯデータ制御部５３０は、メモリ５４０に格納されたライトデータをＦＩＦＯ１４６に書き込む制御を行う。
【００８５】
また、ＦＩＦＯデータ制御部５３０は、コマンド発行制御部５１０により発行されたコマンドがリードコマンドであるとき、メモリカード２００から読み出すべきリードデータをカードコントローラ１３０のＦＩＦＯ１４６から読み出すリード制御を行う。より具体的には、リードコマンドが発行されたとき、ＦＩＦＯデータ制御部５３０は、ＦＩＦＯ１４６からのリードデータをメモリ５４０に書き込む制御を行う。
【００８６】
そして、コマンド発行制御部５１０がコマンドの発行制御を行った後に、ＦＩＦＯデータ制御部５３０が、コマンドに対応して所定のデータサイズ単位で１又は複数回のリード制御又はライト制御を行う。即ち、コマンド発行制御部５１０が所与のコマンドを発行する場合、該コマンドがレスポンスを受信すべきときにはコマンド発行制御後にレスポンス検出部５２０によりレスポンスの受信検出を行う。また、該コマンドがライトデータを出力すべきときにはコマンド発行制御後にＦＩＦＯデータ制御部５３０が１又は複数回ライトデータをＦＩＦＯ１４６に書き込む制御を行う。更に、該コマンドがリードデータを入力すべきときにはコマンド発行制御後にＦＩＦＯデータ制御部５３０が１又は複数回リードデータをＦＩＦＯ１４６から読み出す制御を行う。このように、コマンド発行制御部５１０により発行されるコマンドの種類に応じて、レスポンスの受信の有無、ライトデータの出力の有無、リードデータの入力の有無等の制御シーケンスが異なる場合であっても、コマンド発行制御、レスポンスの受信制御（受信検出）及びＦＩＦＯデータの入出力制御の各制御を分離させたので、該コマンドに応じて必要な制御のみを機能させれば済む。即ち、コマンド毎に、コマンド発行制御部５１０、レスポンス検出部５２０及びＦＩＦＯデータ制御部５３０を共用化できることになる。なお、コマンド発行制御部５１０がレスポンス検出部５２０を含んだり、ＦＩＦＯデータ制御部５３０がレスポンス検出部５２０を含んだりしてもよい。
【００８７】
ところで、カードコントローラ１３０のＦＩＦＯ１４６のデータの蓄積状態によって、データ転送効率の低下や、転送を完了できなくなる事態を招く場合がある。例えば、ライト動作においてカードコントローラ１３０のＦＩＦＯ１４６がフルになったときには、カードコントローラ１３０からメモリカード２００に対してデータを出力するため転送クロックＣＬＫを停止させる必要はない。これに対して、リード動作においてカードコントローラ１３０のＦＩＦＯ１４６がフルになったときには、カードコントローラ１３０側でメモリカード２００からの転送データを受信してしまうとデータの取りこぼしが発生するため、カードコントローラ１３０は転送クロックＣＬＫを停止させてメモリカード２００からのリードデータの送出を停止させる必要がある。このとき、レスポンスもまたカードコントローラ１３０側で受信できなくなる。このため、カードコントローラ１３０のＦＩＦＯ１４６のデータを読み出すホスト装置５００としては、できるだけＦＩＦＯ１４６がフルとならないようにリード制御を行うことが望ましい。
【００８８】
ところが、ＭＭＣ規格、ＳＤ規格、ＳＤＩＯ規格又はＣＥ−ＡＴＡ規格等では、次のようなカードバス仕様がある。
【００８９】
図８に、上述のＭＭＣ規格等のカードバス仕様の説明図を示す。
【００９０】
図８は、転送クロックＣＬＫが伝送されるクロックライン、コマンド及びレスポンスが伝送されるコマンドライン、転送データＤＡＴ０−３が伝送されるデータラインのタイミングの一例を示している。
【００９１】
カードコントローラ１３０がコマンドラインを介してコマンド（リードコマンド）を発行すると、上述のＭＭＣ規格等では、該コマンドのエンドビットを基準に転送クロックＣＬＫの最低２クロックの相当する期間Ｔｄａｔ後にメモリカード２００がデータを出力できる。その一方、上述のＭＭＣ規格等では、コマンドのエンドビットを基準に転送クロックＣＬＫの最大６４クロックに相当する期間Ｔｒｅｓ後まで、メモリカード２００はレスポンスを返す必要がない。従って、図８に示すとおり、データラインに転送データが読み出されてからレスポンスのスタートビットがカードコントローラ１３０側で検出されるまでの間、転送データはカードコントローラ１３０においてバッファリングされる。
【００９２】
カードコントローラ１３０にバッファリングされた転送データはホスト装置１２６が読み出さないと、カードコントローラ１３０のＦＩＦＯ１４６がフルになって、転送クロックＣＬＫの出力を停止させてしまう。この期間に、転送クロックの出力を停止させると、レスポンスのスタートビットまでも受信できなくなる可能性がある。
【００９３】
そこで、本実施形態では、図８のような場合でも転送クロックを停止させることなく、確実にレスポンスを受信できるように制御可能なホスト装置を提供する。そのため、発行したコマンドに対応するレスポンスが受信される前にデータの受信が開始されても、その後にデータ転送を継続できるように、レスポンスの受信前の受信データのサイズを事前リードサイズとして求める。即ち、ホスト装置５００は、レスポンスを受信するまでの間にＦＩＦＯ１４６にバッファリングされたデータを読み出しながら事前リードサイズを更新しておき、レスポンスの受信が完了すると該事前リードサイズを用いてＦＩＦＯ１４６からのデータの読み出しを継続させる。
【００９４】
より具体的には、ホスト装置５００のＦＩＦＯデータ制御部５３０は、ＦＩＦＯ１４６から読み出したデータをメモリ５４０に格納すると共に、コマンドを発行してからカードコントローラ１３０に該コマンドに対応したメモリカード２００からのレスポンスの受信が完了するまでの間においてメモリ５４０に格納されるデータのサイズを事前リードサイズとして求める。そして、レスポンスの受信完了後に、この事前リードサイズ分だけシフトさせたメモリ５４０の記憶領域から順に、ＦＩＦＯ１４６から読み出したデータを格納する制御を行う。こうすることで、レスポンスの受信完了までＦＩＦＯ１４６からデータを読み出すことができ、ＦＩＦＯ１４６がフル状態になる事態を回避できる。そして、レスポンスの受信完了後は、継続してＦＩＦＯ１４６からのデータの読み出しができ、このリード動作による転送時間を短縮できる。
【００９５】
２．１  コマンド発行制御部
図７のコマンド発行制御部５１０は、ＭＭＣ規格、ＳＤ規格、ＳＤＩＯ規格及びＣＥ−ＡＴＡ規格等の種々のコマンドに応じたパラメータ情報の設定を簡素化するために、コマンドテーブルを有し、該コマンドテーブルに登録されたコマンド設定情報をそのまま図４のコントローラ制御レジスタ部１３６に設定することで、複雑なコマンド発行制御の簡素化を図る。
【００９６】
図９に、本実施形態におけるコマンドテーブルの構成の概要を示す。
【００９７】
図９に示すように、コマンドテーブルは複数のブロックを有し、各ブロックにはテーブルインデックスが割り当てられている。そして、ブロック毎に、コマンドのコマンド設定情報が登録される。
【００９８】
図９では、例えばテーブルインデックス「０」に対応するブロックに、ＳＤ規格の制御コマンドＣＭＤ０を発行するためのコマンド設定情報が登録されている。同様に、例えばテーブルインデックス「１」に対応するブロックに、ＳＤ規格の制御コマンドＣＭＤ１を発行するためのコマンド設定情報が登録されている。また、同様に、例えばテーブルインデックス「３」に対応するブロックに、ＭＭＣ規格の制御コマンドＣＭＤ３を発行するためのコマンド設定情報が登録され、テーブルインデックス「４」に対応するブロックに、ＳＤ規格の制御コマンドＣＭＤ３を発行するためのコマンド設定情報が登録される。
【００９９】
そして、図９に示すように、テーブルインデックスとコマンドインデックスとが異なることが望ましい。即ち、テーブルインデックスの番号とコマンドインデックスの番号とを揃える必要がない。こうすることで、テーブルインデックスを把握しておけば、コマンド設定情報が登録されるブロックを新規に追加したり変更したりしても、制御コマンドの生成処理が複雑化することがなくなる。
【０１００】
更に、コマンドテーブルには、種々の規格の制御コマンドのコマンド設定情報が混在して各テーブルに登録されていてもよい。即ち、第１の規格で規定された制御コマンドに対応したコマンド設定情報と、第２の規格で規定された制御コマンドに対応したコマンド設定情報とを含むことが望ましい。図９に示すように例えばＳＤ規格の制御コマンド、ＳＤ規格と下位互換のＭＭＣ規格の制御コマンド等の他、更にＳＤＩＯ規格の制御コマンドやＣＥ−ＡＴＡ規格の制御コマンドが混在することが望ましい。こうすることで、複数の規格のうちいずれかの規格の制御コマンドを発行するために、テーブルインデックスを指定するだけでよいので、従来の制御コマンドの生成処理に比べて処理の簡素化やプログラムコード量の削減を図ることができる。
【０１０１】
図１０に、図９のコマンドテーブルの各ブロックに登録されるコマンド設定情報の一例を示す。
【０１０２】
各ブロックには、コマンド設定情報が登録される。そして、各コマンド設定情報は、コマンド指定情報としてのコマンドインデックスとパラメータ情報との組み合わせごとに設けられる。各ブロックには、コマンドインデックスの他に、コマンド引数情報、コマンドタイプ（コマンドタイプ情報）、レスポンスタイプ、レスポンスデータポインタ、転送タイプ情報、転送カウント数情報が登録される。レスポンスデータポインタは、メモリカード２００からのレスポンスのデータが格納されるメモリ５４０（メモリ１２０）の記憶領域を指定する情報である。レスポンスデータポインタを除く、コマンド指定情報及びパラメータ情報は、そのままコントローラ制御レジスタ部１３６の各制御レジスタに設定される。
【０１０３】
ここで、各コマンド設定情報のコマンド指定情報及びパラメータ情報が格納される順番が、当該コマンド指定情報及びパラメータ情報が設定されるカードコントローラ１３０のコントローラ制御レジスタ部１３６の制御レジスタを特定するアドレスの順番と同じであることが望ましい。また、各コマンド設定情報のコマンド指定情報及びパラメータ情報の各情報のビットの並びが、当該情報が設定されるカードコントローラ１３０のコントローラ制御レジスタ部１３６の制御レジスタのビットフィールドの並びと同じであることが望ましい。
【０１０４】
こうすることで、図１０の各情報は、レスポンスデータポインタを除き、加工処理やビット操作を行うことなく、図４のコントローラ制御レジスタ部１３６の各制御レジスタにそのまま設定できる。従って、制御コマンドの生成処理の簡素化を図ることができる。
【０１０５】
２．２  処理例
図１１に、図７のホスト装置５００の処理例のフロー図を示す。
【０１０６】
図７のホスト装置５００が図１のホスト装置１２６に適用される場合、図１に示すメモリ１２０に図１１の処理を実行するためのプログラムが格納されており、ＣＰＵ１１０がメモリ１２０からプログラムを読み出して該プログラムに対応した処理を実行することで、ＣＰＵ１１０がカードコントローラ１３０を制御して図１１の処理が行われるようになっている。
【０１０７】
まず、ホスト装置５００は、パラメータであるリトライ回数を初期化して、該リトライ回数を「０」に設定する（ステップＳ１０）。
【０１０８】
次に、ホスト装置５００は、コマンド発行制御部５１０において、コマンド（リードコマンド）の発行制御を行う（ステップＳ１１）。そして、ホスト装置５００は、パラメータである事前リードサイズを初期化して、該事前リードサイズを「０」に設定する（ステップＳ１２）。ホスト装置５００では、例えばＦＩＦＯデータ制御部５３０が事前リードサイズの管理を行う。
【０１０９】
次に、ホスト装置５００は、レスポンス検出部５２０において、ステップＳ１０において発行したコマンド（リードコマンド）に対応したメモリカード２００からのレスポンスの受信完了を待つ（ステップＳ１３）。レスポンスの受信完了は、レスポンスの正常なエンドビットの受信を検出することで認識できる。これにより、メモリカード２００は、カードコントローラ１３０に対し、転送クロックに同期させてリードデータの出力を開始する。カードコントローラ１３０では、ＦＩＦＯ１４６にリードデータのバッファリングが開始される。
【０１１０】
ステップＳ１３において、メモリカード２００からのレスポンスの受信完了が検出されないとき（ステップＳ１３：Ｎ）、ホスト装置５００は、例えばレスポンス検出部５２０において物理層エラーが発生したか否かを判別する（ステップＳ１４）。この物理層エラーとしては、レスポンス検出部５２０において検出可能なレスポンスのＣＲＣエラーがある。
【０１１１】
ステップＳ１４において、物理層エラーの発生が検出されないとき（ステップＳ１４：Ｎ）、ＦＩＦＯデータ制御部５３０は、カードコントローラ１３０のＦＩＦＯ１４６がフルであるか否かを判別する（ステップＳ１５）。
【０１１２】
ステップＳ１５において、ＦＩＦＯ１４６がフルではないと判別されたとき（ステップＳ１５：Ｎ）、ステップＳ１３に戻ってレスポンスの受信完了を検出する。ステップＳ１５において、ＦＩＦＯ１４６がフルであると判別されたとき（ステップＳ１５：Ｙ）、ステップＳ１１において発行したコマンドで処理すべきデータサイズのうち未処理データのサイズが、ＦＩＦＯ１４６のフルサイズ（ＦＩＦＯ１４６が蓄積可能なデータサイズ）以上であるか否かを判別する（ステップＳ１６）。
【０１１３】
ステップＳ１６において、未処理データのサイズがＦＩＦＯ１４６のフルサイズ以上ではないと判別されたとき（ステップＳ１６：Ｎ）、ステップＳ１３に戻ってレスポンスの受信完了を検出する。
【０１１４】
ステップＳ１６において、未処理データのサイズがＦＩＦＯ１４６のフルサイズ以上であると判別されたとき（ステップＳ１６：Ｙ）、ＦＩＦＯデータ制御部５３０は、ＦＩＦＯ１４６のフルサイズであるＦＩＦＯサイズ分だけＦＩＦＯ１４６からデータを読み出す制御を行い（ステップＳ１７）、ＦＩＦＯ１４６からのデータをメモリ５４０に格納する制御を行う。ＦＩＦＯ１４６からのデータがメモリ５４０に格納される記憶領域は、メモリ５４０のバッファポインタによって管理される。その後、ＦＩＦＯデータ制御部５３０は、このバッファポインタをＦＩＦＯ１４６の読み出し分だけシフトし（ステップＳ１８）、事前リードサイズに読み出したサイズ分だけ加算して更新し（ステップＳ１９）、ステップＳ１３に戻る。
【０１１５】
このように、ＦＩＦＯ１４６がフルになり、且つ未処理のデータサイズがＦＩＦＯのフルサイズ以上のときにのみＦＩＦＯ１４６のデータを読み出す制御を行うようにしたので、ＦＩＦＯ１４６の読み出し制御（事前リードサイズの管理制御）を簡素化できる上に、不要な読み出し制御を回避できるようになる。
【０１１６】
一方、ステップＳ１４において、物理層エラーの発生が検出されたとき（ステップＳ１４：Ｙ）、既に受信データを受信済みのとき（ステップＳ２０：Ｙ）、所与のエラー処理を行って（ステップＳ２１）、一連の処理を終了する（エンド）。ここで、エラー処理は、ホスト装置５００が、物理層エラーが発生した場合に処理すべき割り込みハンドラの処理を行う。ステップＳ２０において、既に受信データを受信済みではないとき（ステップＳ２０：Ｎ）、ホスト装置５００は、リトライ回数をインクリメントし（ステップＳ２１）、インクリメント後のリトライ回数が所与の閾値回数以下であるか否かを判別する（ステップＳ２３）。
【０１１７】
ステップＳ２３において、インクリメント後のリトライ回数が所与の閾値回数以下であると判別されたとき（ステップＳ２３：Ｙ）、ホスト装置５００は、ステップＳ１３に戻ってレスポンスの受信完了を検出する。
【０１１８】
ステップＳ２３において、インクリメント後のリトライ回数が所与の閾値回数より大きいと判別されたとき（ステップＳ２３：Ｎ）、ホスト装置５００は、エラー処理を行って（ステップＳ２４）、一連の処理を終了する（エンド）。ここで、エラー処理は、ホスト装置５００が、物理層エラーが発生した場合の無限ループを防止するための割り込みハンドラの処理を行う。
【０１１９】
また、ステップＳ１３において、メモリカード２００からのレスポンスの受信完了が検出されたとき（ステップＳ１３：Ｙ）、ホスト装置５００は、ＦＩＦＯデータ制御部５３０において、事前リードサイズ分だけシフトさせたバッファポインタ（アドレス）から順に、ＦＩＦＯ１４６から読み出したデータを格納する制御を行い（ステップＳ２５）、事前リードサイズをクリアして（ステップＳ２６）、一連の処理を終了する（エンド）。
【０１２０】
図１２に、図１１のステップＳ１１の処理例のフロー図を示す。
【０１２１】
図７のホスト装置５００が図１のホスト装置１２６に適用される場合、図１に示すメモリ１２０に図１２の処理を実行するためのプログラムが格納されており、ＣＰＵ１１０がメモリ１２０からプログラムを読み出して該プログラムに対応した処理を実行することで、ＣＰＵ１１０がカードコントローラ１３０を制御して図１２の処理が行われるようになっている。
【０１２２】
ホスト装置５００のコマンド発行制御部５１０は、上位アプリケーションからの指示で発行したい制御コマンドに対応したコマンドテーブルのテーブルインデックスを指定し（ステップＳ４０）、該テーブルインデックスにより特定されるブロックのコマンド設定情報の中からコマンドインデックスをコントローラ制御レジスタ部１３６のコマンド指定レジスタ１５０に設定する（ステップＳ４１）。
【０１２３】
次に、ＣＰＵ１１０は、該テーブルインデックスにより特定されるブロックのコマンド設定情報の中から引数情報をコントローラ制御レジスタ部１３６の引数設定レジスタ１５２に設定し、コマンドタイプをコントローラ制御レジスタ部１３６のコマンドタイプ設定レジスタ１５４に設定し、レスポンスタイプをコントローラ制御レジスタ部１３６のレスポンス指定レジスタ１５６に設定する（ステップＳ４２）。また、ＣＰＵ１１０は、転送タイプ情報を転送タイプ設定レジスタ１５８に設定すると共に、転送カウント数情報を転送カウント数設定レジスタ１６０に設定する。
【０１２４】
次に、ＣＰＵ１１０は、カードコントローラ１３０のコントローラ制御レジスタ部１３６の図示しない制御コマンド発行指示レジスタをアクセスして制御コマンドの発行指示を行い（ステップＳ４４）、一連の処理を終了する（エンド）。
【０１２５】
以上のように、ホスト装置５００は、カードコントローラ１３０のＦＩＦＯ１４６のリードデータの読み出し制御を行う。
【０１２６】
図１３に、本実施形態における効果の説明図を示す。
【０１２７】
図１３に示すように、本実施形態では、リードコマンドを発行後にレスポンスが返ってくる場合に、該レスポンスのエンドビットを受信するまでの期間Ｔ１では、事前リードサイズを更新しながらカードコントローラ１３０のＦＩＦＯ１４６から、メモリカード２００のリードデータを読み出す制御が行われる。期間Ｔ１で読み出されたリードデータは、メモリ５４０に格納される。
【０１２８】
そして、レスポンスのエンドビットを受信後の期間Ｔ２では、この事前リードサイズを用いてＦＩＦＯ１４６からメモリカード２００のリードデータを読み出す制御が継続して行われる。より具体的には、期間Ｔ２では、期間Ｔ１で求めた事前リードサイズをメモリ５４０のオフセットとして補正したアドレスを開始アドレスとして、順番に、ＦＩＦＯ１４６からのリードデータがメモリ５４０に継続して格納される。
【０１２９】
図１４に、メモリ５４０のアドレスの説明図を示す。
【０１３０】
図１４に示すように、メモリ５４０の記憶領域を指定するアドレスの昇順方向が矢印ＤＩＲの場合に、図１４の期間Ｔ１では、データの先頭位置を示す開始アドレスＡＤＳから順番にデータを格納する。このとき、データを格納する毎に、格納データサイズ分だけ事前リードサイズを増分して更新する。
【０１３１】
期間Ｔ２では、開始アドレスＡＤＳを基準に事前リードサイズ分だけオフセットを持たせたアドレスＡＤ１から順にデータの最終位置を示す終了アドレスＡＤＥまでのデータを、ＦＩＦＯ１４６からのリードデータとして読み出してメモリ５４０に格納していく。
【０１３２】
以上説明したように、本実施形態によれば、レスポンスの受信完了までＦＩＦＯ１４６からデータを読み出すことができ、ＦＩＦＯ１４６がフル状態になる事態を回避できる。そのため、ＦＩＦＯ１４６がフルになることで転送クロックを停止させることなく、レスポンスの受信完了後は、継続してＦＩＦＯ１４６からのデータの読み出しができ、このリード動作による転送時間を短縮できる。更に、ＦＩＦＯ１４６を小容量化できるため、カードコントローラ１３０の低コスト化にも寄与できるようになる。
【０１３３】
３．  電子機器
次に、本実施形態におけるホスト装置が適用される電子機器の構成例を示す。
【０１３４】
図１５に、本実施形態における電子機器としてのデジタルスチルカメラの構成例のブロック図を示す。
【０１３５】
図１５において、図１と同一部分には同一符号を付し、適宜説明を省略する。
【０１３６】
電子機器１０は、電荷結合素子（Charge Coupled Device：以下、ＣＣＤ）イメージセンサ８００、ＡＤ変換器、メモリ８２０、クロック生成回路８３０、ホストシステム１００、ソケット（スロット、メモリ装着部、カード装着部、メモリカード装着部、記憶デバイス装着部）８４０を含む。
【０１３７】
ＣＣＤイメージセンサ８００は、複数の受光素子を有し、各受光素子に光が入射することにより発生した電荷を読み出して、画像を電気信号に変換する。ＣＣＤイメージセンサ８００によって電気信号に変換された画像データは、ＡＤ変換器８１０によりデジタル信号に変換された後、メモリ８２０にバッファリングされる。
【０１３８】
クロック生成回路８３０は、電子機器１０の基本クロックやホストシステム１００の基本クロックを生成する。
【０１３９】
図１５のプログラムメモリ１２０は、図１のメモリ１２０として機能する。
【０１４０】
ソケット８４０には、メモリカード２００が挿抜される。メモリカード２００がソケット８４０に挿入された状態で、カードバス２０を介してカードコントローラ１３０とメモリカード２００との間でＳＤ規格に従ったアクセスが行われる。
【０１４１】
ホストシステム１００の制御により、メモリ８２０に蓄えられた画像データをメモリカード２００に書き込んだり、メモリカード２００から画像データを読み出してメモリ８２０に蓄積させたりできる。
【０１４２】
図１５のような電子機器１０によれば、メモリカード２００からのデータの読み出し時に転送クロックを停止させることなく、短時間でリードデータを取得できるようになる。
【０１４３】
なお、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。本実施形態におけるメモリカードは、フラッシュメモリカードに限定されるものではない。本実施形態におけるメモリカードに代えて、Ｉ／Ｏデバイス、ＨＤＤ装置、ＤＶＤ装置、又は光ディスク装置であってもよい。
【０１４４】
更に、コマンドは、上述の実施形態において説明したものに限定されるものではなく、例えばＳＤ規格と同様の思想に基づく規格やＳＤ規格を発展させた規格のライト動作、例えばＭＭＣ規格と同様の思想に基づく規格やＭＭＣ規格を発展させた規格のライト動作、例えばＳＤＩＯ規格と同様の思想に基づく規格やＳＤＩＯ規格を発展させた規格のライト動作、例えばＣＥ−ＡＴＡ規格と同様の思想に基づく規格やＣＥ−ＡＴＡ規格を発展させた規格のライト動作にも本発明は適用できる。
【０１４５】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【図面の簡単な説明】
【０１４６】
【図１】本実施形態におけるホスト装置が適用された電子機器の構成例のブロック図。
【図２】図２（Ａ）は制御コマンドの説明図。図２（Ｂ）はレスポンスの説明図。
【図３】図１のカードコントローラの構成例のブロック図。
【図４】図３のコントローラ制御レジスタ部の構成の概要を示す図。
【図５】図３のドライバ部の構成の概要を示す図。
【図６】図１のメモリカードの構成例のブロック図。
【図７】本実施形態におけるホスト装置の構成の概要を示す図。
【図８】ＭＭＣ規格等のカードバス仕様の説明図。
【図９】本実施形態におけるコマンドテーブルの構成の概要を示す図。
【図１０】図９のコマンドテーブルの各ブロックに登録されるコマンド設定情報の一例を示す図。
【図１１】図７のホスト装置の処理例のフロー図。
【図１２】図１１のステップＳ１１の処理例のフロー図。
【図１３】本実施形態における効果の説明図。
【図１４】メモリのアドレスの説明図。
【図１５】本実施形態における電子機器としてのデジタルスチルカメラの構成例のブロック図。
【符号の説明】
【０１４７】
１０  電子機器、  ２０  カードバス、  １００  ホストシステム、  １１０  ＣＰＵ、
１２０、５４０、８２０  メモリ、  １２２  システムバス、
１３０  カードコントローラ、  １３２  制御Ｉ／Ｆ回路、
１３４  ＦＩＦＯＩ／Ｆ回路、  １３６  コントローラ制御レジスタ部、
１３８  クロック制御部、  １４０  制御ロジック部、  １４２  コマンドシーケンサ、
１４４  データシーケンサ、  １４６  ＦＩＦＯ、  １４８  ドライバ部、
１５０  コマンド指定レジスタ、  １５２  引数設定レジスタ、
１５４  コマンドタイプ設定レジスタ、  １５６  レスポンス指定レジスタ、
１５８  転送タイプ設定レジスタ、  １６０  転送カウント数設定レジスタ、
２００  メモリカード、  ２１０  カードＩ／Ｆ回路、
２２０  カードＩ／Ｆ制御回路、  ２３０  カード制御レジスタ部、
２４０  メモリＩ／Ｆ回路、  ２５０  メモリコア部、  ５００  ホスト装置、
５１０  コマンド発行制御部、  ５２０  レスポンス検出部、
５３０  ＦＩＦＯデータ制御部、  ８００  ＣＣＤイメージセンサ、
８１０  ＡＤ変換器、  ８３０  クロック生成回路、  ８４０  ソケット
【図１】
2008287600.tif 000003
【図２】
2008287600.tif 000004
【図３】
2008287600.tif 000005
【図４】
2008287600.tif 000006
【図５】
2008287600.tif 000007
【図６】
2008287600.tif 000008
【図７】
2008287600.tif 000009
【図８】
2008287600.tif 000010
【図９】
2008287600.tif 000011
【図１０】
2008287600.tif 000012
【図１１】
2008287600.tif 000013
【図１２】
2008287600.tif 000014
【図１３】
2008287600.tif 000015
【図１４】
2008287600.tif 000016
【図１５】
2008287600.tif 000017