(57)【要約】【課題】処理速度の向上等が可能なホストコントローラを提供する。【解決手段】ＳＤＭＭＣホストコントローラ１０は、第１のコマンド及び第１のコマンドに続いて発行されるべき第２のコマンドをカードＣ２に発行する旨の指示をメインＣＰＵ２から受けた場合に、第１のコマンドをカードＣ２に発行し、その後、第１のコマンドに対するレスポンスをカードＣ２から受けたときに、メインＣＰＵ２からの指示を待つことなく、第２のコマンドをカードＣ２に発行する。【選択図】図２
2008276441.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置とカードとの間の媒介を行うホストコントローラであって、
前記情報処理装置からの指示を受け取る第１の手段と、
前記情報処理装置からの指示に基づいて、前記カードにコマンドを発行し、前記カードから応答を受け取る第２の手段と、
前記第１の手段と前記第２の手段との間で受け渡しされる信号及び／又はデータに操作を施す第３の手段と、
を含み、
所定の第１のコマンド及び前記第１のコマンドに続いて発行されるべき第２のコマンドを前記カードに発行する旨の指示を前記情報処理装置から受けた場合に、前記第１のコマンドを前記カードに発行し、その後、前記第１のコマンドに対する応答を前記カードから受けたときに、前記情報処理装置からの指示を待つことなく、前記第２のコマンドを前記カードに発行すること
を特徴とするホストコントローラ。
【請求項２】
請求項１において、
前記第１のコマンドを前記カードに発行し、その後、前記第１のコマンドに対する応答においてエラーを検出した場合に、前記情報処理装置からの指示を待つことなく、前記第２のコマンドの前記カードへの発行を行わないことを特徴とするホストコントローラ。
【請求項３】
請求項１又は２において、
前記第３の手段が、
前記第１の手段が前記第１のコマンドを前記カードに発行する旨及び前記第２のコマンドを前記カードに発行する旨の指示を前記情報処理装置から受けた場合に、前記第１の手段と前記第２の手段との間で受け渡しされる信号及び／又はデータに操作を施すことにより、前記第１のコマンドの前記カードへの発行を前記第２の手段に行わせ、その後、前記第２の手段が前記第１のコマンドに対する応答を前記カードから受けたときに、前記情報処理装置からの指示を待つことなく、前記第２のコマンドの前記カードへの発行を前記第２の手段に行わせることを特徴とするホストコントローラ。
【請求項４】
請求項３において、
前記第３の手段が、
前記第１の手段が前記第１及び第２のコマンド以外のコマンドを前記カードに発行する旨の指示を前記情報処理装置から受けた場合に、前記第１の手段から出力される信号及び／又はデータをそのまま前記第２の手段に出力し、前記第２の手段から出力される信号及び／又はデータをそのまま前記第１の手段に出力することを特徴とするホストコントローラ。
【請求項５】
請求項３又は４において、
前記第３の手段が、
前記第１の手段と前記第２の手段との間にアドインされていることを特徴とするホストコントローラ。
【請求項６】
請求項１〜５のいずれか１項に記載のホストコントローラを具備する半導体集積回路。
【請求項７】
情報処理装置とカードとの間の媒介を行うホスト制御方法であって、
所定の第１のコマンドを前記カードに発行する旨及び前記第１のコマンドに続いて発行されるべき第２のコマンドを前記カードに発行する旨の指示を前記情報処理装置から受けた場合に、前記第１のコマンドを前記カードに発行し、その後、前記第１のコマンドに対する応答を前記カードから受けたときに、前記情報処理装置からの指示を待つことなく、前記第２のコマンドを前記カードに発行することを特徴とするホスト制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置とカードとの間の媒介を行うホストコントローラ、そのようなホストコントローラを具備する半導体集積回路、及び、ホスト制御方法に関する。
【背景技術】
【０００２】
パーソナルコンピュータや多機能端末機などの外部記憶メディアの１つとして、ＳＤＡ（SD card Association）が標準化したＳＤ（Secure Digital）カード（登録商標）が広く知られており、デジタルビデオカメラの静止画像記録、携帯電話のデータ記録、携帯音楽プレーヤの音楽記録などに用いられている。
【０００３】
ＳＤカード（登録商標）規格においては、アプリケーション特有コマンド（Applicaion-Specific Commands、以下「ＡＣＭＤ」という。）が規定されている。そして、このようなコマンド「ＡＣＭＤ」は、コマンド「ＣＭＤ５５」に引き続いて発行されることとして規定されている。
【０００４】
なお、関連する技術として、下記の特許文献１には、複数の種類のカードを装着可能なカードスロットを備えた電子機器において、コマンド「ＣＭＤ５５」を利用してカードの種類を判定する技術が開示されている。
【特許文献１】特開２００３−２８１４７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記のようなコマンド「ＣＭＤ５５」及びそれに引き続くコマンド「ＡＣＭＤ」の発行時におけるＣＰＵの負荷低減等が求められている。
【０００６】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、第１のコマンド及びそれに引き続いて発行されるべき第２のコマンドの発行時における処理速度を向上させること等が可能なホストコントローラ、そのようなホストコントローラを具備する半導体集積回路、及び、ホスト制御方法を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本発明は、情報処理装置からの指示を受け取る第１の手段と、情報処理装置からの指示に基づいて、カードにコマンドを発行し、カードから応答を受け取る第２の手段と、第１の手段と第２の手段との間で受け渡しされる信号及び／又はデータに操作を施す第３の手段と、を含み、所定の第１のコマンド及び第１のコマンドに続いて発行されるべき第２のコマンドをカードに発行する旨の指示を情報処理装置から受けた場合に、第１のコマンドをカードに発行し、その後、第１のコマンドに対する応答をカードから受けたときに、情報処理装置からの指示を待つことなく、第２のコマンドをカードに発行することを特徴とするホストコントローラに関係する。
【０００８】
本発明によれば、第１のコマンドに対する応答をカードから受けたときに、情報処理装置からの指示を待つことなく、第２のコマンドをカードに発行することができるようになる。これにより、第１のコマンドの完了から第２のコマンドの発行までの時間を短くし、ひいては、第１のコマンドの発行から第２のコマンドの完了までの時間を短くすることができ、処理速度を向上させることができる。また、情報処理装置の処理負荷を非常に小さくすることができ、情報処理装置が他プログラムを実行可能な時間を長くすることができるようになる。
【０００９】
また本発明に係るホストコントローラでは、第１のコマンドをカードに発行し、その後、第１のコマンドに対する応答においてエラーを検出した場合に、情報処理装置からの指示を待つことなく、第２のコマンドのカードへの発行を行わないようにしても良い。
【００１０】
本発明によれば、第１のコマンドをカードに発行し、その後、第１のコマンドに対する応答においてエラーを検出した場合に、情報処理装置からの指示を待つことなく、第２のコマンドのカードへの発行を行わないようにしたので、情報処理装置の処理負荷を更に低減することができる。
【００１１】
また本発明に係るホストコントローラでは、第３の手段が、第１の手段が第１のコマンドをカードに発行する旨及び第２のコマンドをカードに発行する旨の指示を情報処理装置から受けた場合に、第１の手段と第２の手段との間で受け渡しされる信号及び／又はデータに操作を施すことにより、第１のコマンドのカードへの発行を第２の手段に行わせ、その後、第２の手段が第１のコマンドに対する応答をカードから受けたときに、情報処理装置からの指示を待つことなく、第２のコマンドのカードへの発行を第２の手段に行わせるようにしても良い。
【００１２】
本発明によれば、簡素な構成で、処理速度の向上や情報処理装置の負荷軽減を実現できるようになる。
【００１３】
また本発明に係るホストコントローラでは、第３の手段が、第１の手段が第１及び第２のコマンド以外のコマンドをカードに発行する旨の指示を情報処理装置から受けた場合に、第１の手段から出力される信号及び／又はデータをそのまま第２の手段に出力し、第２の手段から出力される信号及び／又はデータをそのまま第１の手段に出力することとしてもよい。
【００１４】
本発明によれば、第１及び第２のコマンド以外のコマンドをカードに発行する場合には、第１の手段と第２の手段との間で受け渡しされる信号及び／又はデータに何らの操作も施さないので、デバッグが容易となる。
【００１５】
また本発明に係るホストコントローラでは、第３の手段が、第１の手段と第２の手段との間にアドインされていることとしてもよい。
【００１６】
本発明によれば、回路設計やデバッグが更に容易となる。
【００１７】
また本発明は、本発明に係るホストコントローラを具備する半導体集積回路に関係する。
【００１８】
また本発明は、情報処理装置とカードとの間の媒介を行うホスト制御方法であって、所定の第１のコマンドをカードに発行する旨及び第１のコマンドに続いて発行されるべき第２のコマンドをカードに発行する旨の指示を情報処理装置から受けた場合に、第１のコマンドをカードに発行し、その後、第１のコマンドに対する応答をカードから受けたときに、情報処理装置からの指示を待つことなく、第２のコマンドをカードに発行することを特徴とするホスト制御方法に関係する。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【００２０】
図１は、本発明の一実施形態に係るホストコントローラを用いた電子機器の内部構成例を示すブロック図である。
【００２１】
図１に示すように、この電子機器１は、各種コマンドの発行指示やデータの転送指示やプログラムの実行を行うメインＣＰＵ２と、プログラムやデータを記憶するＲＯＭ３と、データを記憶するＲＡＭ４と、各種カードを挿入可能なカードスロット６と、メインＣＰＵ２からの指示に応じてカードスロット６に装着されたカードへのコマンド発行やデータ転送等を行うカードコントローラ５とを具備する。メインＣＰＵ２、ＲＯＭ３、ＲＡＭ４、及び、カードコントローラ５は、バスＢ１によって接続されている。
【００２２】
ＲＯＭ３は、例えば、リアルタイムＯＳ（オペレーティングシステム）プログラムや、各種のアプリケーションプログラムや、カードコントローラ５を操作するためのドライバプログラム等を記憶しており、メインＣＰＵ２は、これらのプログラムを適宜実行する。
ＲＡＭ４は、メインＣＰＵ２がワークエリアとして使用する作業領域や、カードスロット６に挿入されたカードとの間のデータのＤＭＡ転送のために用いられるＤＭＡ転送領域等を有する。
【００２３】
カードスロット６は、形状が近いＭＭＣ（MultiMedia Card）（登録商標）Ｃ１、ＳＤカード（登録商標）Ｃ２、ＳＤＩＯカード（商標）Ｃ３、ＣＥ−ＡＴＡカード（商標）Ｃ４を装着可能である。なお、本願においては、これらのカードを総称する場合に、ＳＤＭＭＣカードと言う。
【００２４】
カードコントローラ５は、メインＣＰＵ２からの指示に応じて、メインＣＰＵ２とカードスロット６に挿入されたカードとの間の媒介を行う。カードコントローラ５とカードスロット６との間は、ＣＬＫ線（クロック供給用信号線）、ＣＭＤ線（コマンド用信号線）、及び、ＤＡＴ線（データ用信号線）によって接続されている。
【００２５】
ＣＬＫ線は、カードコントローラ５からカードＣ１〜Ｃ４へクロック信号を送信するための信号線である。カードコントローラ５からカードＣ１〜Ｃ４へのコマンドの転送、及びカードコントローラ５とカードＣ１〜Ｃ４との間のデータ転送等は、このクロック信号に同期して実行される。
【００２６】
ＣＭＤ線は、カードコントローラ５からカードＣ１〜Ｃ４へのコマンドの転送、及びカードＣ１〜Ｃ４からカードコントローラ５へのレスポンスの転送に使用される１ビット幅の信号線である。
ＤＡＴ線は、カードコントローラ５とカードＣ１〜Ｃ４のＤＡＴ端子との間のデータ転送に使用される双方向信号線である。なお、カードのＤＡＴ端子の数（ビット幅）は、ＳＤカード（登録商標）の場合、１又は４個であり、ＭＭＣ（登録商標）の場合、１、４、又は、８個である。
【００２７】
なお、電子機器１が、入力装置、表示装置（ＬＣＤ、有機ＥＬディスプレイ等）、有線又は無線通信回路等を更に具備していても良い。
【００２８】
図２は、カードコントローラ５の内部構成を示すブロック図である。図２に示すように、カードコントローラ５は、本発明の一実施形態としてのＳＤＭＭＣホストコントローラ（広義には、ホストコントローラ）１０と、ＳＤＭＭＣホストコントローラ１０とメインＣＰＵ２（図１参照）との間の信号の送受信を行うＣＰＵインタフェース１１と、ＳＤＭＭＣホストコントローラ１０とＲＡＭ４（図１参照）との間の信号の送受信を行うＤＭＡインタフェース１２と、ＳＤＭＭＣホストコントローラ１０とカードスロット６（図１参照）に装着されたカードとの間の信号の送受信を行うカードインタフェース１３とを具備する。
【００２９】
ＳＤＭＭＣホストコントローラ１０は、クロック出力部２１と、レジスタ制御部（広義には、第１の手段）２２と、ＳＤＭＭＣ制御部（広義には、第２の手段）２３と、ＤＭＡ制御部２４と、コマンド自動実行制御部（広義には、第３の手段）２５とを含んでいる。なお、ＳＤＭＭＣホストコントローラ１０をチップ上に集積して、半導体集積回路としても良い。
【００３０】
クロック出力部２１は、クロック信号ＳＤＣＬＫをカードインタフェース１３を介してカードスロット６に装着されたカードに供給する。カードに供給するクロック信号ＳＤＣＬＫは、例えば、発振回路によって発生され或いは外部から供給されるシステムクロック信号をそのまま或いは分周して得ることができる。なお、クロック出力部２１のクロック信号ＳＤＣＬＫのカードへの出力の供給開始及び供給停止を、メインＣＰＵ２やＳＤＭＭＣ制御部２３等から制御可能としても良い。
【００３１】
レジスタ制御部２２は、メインＣＰＵ２から書き込み及び／又は読み出し可能な複数のレジスタを有しており、これらのレジスタの制御を行う。メインＣＰＵ２は、これらのレジスタにＣＰＵインタフェース１１を介して情報を書き込むことにより、カードへのコマンド発行をＳＤＭＭＣコントローラ１０に行わせることができる。また、メインＣＰＵ２は、これらのレジスタからＣＰＵインタフェース１１を介して情報を読み出すことにより、発行したコマンドに対するカードからのレスポンスを取得することができる。なお、レジスタ制御部２２内のレジスタは、ＳＤＭＭＣホストコントローラ１０内の他の回路ブロックから書き込み及び／又は読み出し可能としても良い。
【００３２】
図３は、レジスタ制御部２２内のレジスタマップの一例を示す図である。図３に示す複数のレジスタの内のレジスタ２２ａ〜２２ｋは、メインＣＰＵ２によって書き込まれ、ＳＤＭＭＣホストコントローラ１０内の回路によって読み出されるレジスタであり、レジスタ２２ｌ〜２２ｏは、ＳＤＭＭＣホストコントローラ１０内の回路によって書き込まれ、メインＣＰＵ２によって読み出されるレジスタである。
【００３３】
レジスタ２２ａは、発行するコマンドのインデックスを書き込むためのレジスタであり、レジスタ２２ｂは、発行するコマンドのアーギュメントを書き込むためのレジスタである。
【００３４】
レジスタ２２ｃは、発行するコマンドのタイプ（Ｎｏｒｍａｌ、Ｓｕｓｐｅｎｄ、Ｒｅｓｕｍｅ、Ａｂｏｒｔ等）を書き込むためのレジスタであり、レジスタ２２ｄは、発行するコマンドに対するレスポンスのタイプ（レスポンス無し、１３６ビットレスポンス、４８ビットレスポンス、ＲｅｓｐＢｕｓｙ等）を書き込むためのレジスタである。
【００３５】
レジスタ２２ｅ〜２２ｈは、発行するコマンドがデータ転送を伴うコマンドである場合に用いられるレジスタである。レジスタ２２ｅは、データ転送タイプ（Ｓｉｎｇｌｅ、Ｉｎｆｉｎｉｔｅ、Ｍｕｌｔｉｐｌｅ、Ｓｔｒｅａｍ等）を書き込むためのレジスタであり、レジスタ２２ｆは、データ転送のためにＤＡＴ線を使用することを表すフラグ（以下、「ＤＡＴ線使用フラグ」という）を書き込むためのレジスタであり、レジスタ２２ｇは、転送ブロックサイズを書き込むためのレジスタであり、レジスタ２２ｈは、転送ブロック数を書き込むためのレジスタである。
【００３６】
レジスタ２２ｉは、レスポンスのエラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等）チェックを行うか否かを指定するデータを書き込むためのレジスタである。
【００３７】
レジスタ２２ｊは、ＳＤカード（登録商標）の規格書（SD Specifications Part1 Physical Layer Specification Version 2.00）において規定されているコマンド「ＣＭＤ５５」（広義には、第１のコマンド）とコマンド「ＣＭＤ５５」に続いて発行されるべきコマンド「ＡＣＭＤ」（広義には、第２のコマンド）を連続して自動実行させることを指示するためのフラグ（以下、「ＣＭＤ５５自動実行フラグ」という）を書き込むためのレジスタであり、レジスタ２２ｋは、コマンド「ＣＭＤ５５」のアーギュメントを書き込むためのレジスタである。
【００３８】
メインＣＰＵ２は、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行させる場合には、レジスタ２２ｊにＣＭＤ５５自動実行フラグをセットし、レジスタ２２ｋにコマンド「ＣＭＤ５５」のアーギュメントを書き込むとともに、コマンド「ＡＣＭＤ」のインデックス、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、転送ブロックサイズ、転送ブロック数等をレジスタ２２ａ〜２２ｈに書き込む。
【００３９】
レジスタ２２ｌは、コマンドが完了したことを表すフラグ（以下、「コマンド完了フラグ」という）を書き込むためのレジスタである。なお、ＣＭＤ５５自動実行フラグをセットしてコマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行させた場合には、後で説明するように、コマンド完了フラグは、コマンド「ＣＭＤ５５」の完了時にはセットされず、コマンド「ＡＣＭＤ」の完了時にセットされる。
【００４０】
レジスタ２２ｍは、レスポンスのアーギュメントを書き込むためのレジスタである。なお、レスポンスのアーギュメント長はコマンドによって異なっている。例えば、レスポンスが４８ビット長の場合、レスポンスのアーギュメント長は３２ビットであり、レスポンスが１３６ビット長の場合、レスポンスのアーギュメント長は１２０ビットである。また、ＣＭＤ５５自動実行フラグをセットしてコマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行させた場合には、コマンド「ＣＭＤ５５」に対するレスポンスのアーギュメント（３２ビット長）とコマンド「ＡＣＭＤ」に対するレスポンスのアーギュメント（３２ビット長）の両方を格納する必要がある。そこで、例えば、レジスタ２２ｍを１２８ビット長程度分確保しておき、その中のコマンドに応じた所定位置にレスポンスのアーギュメントを書き込むようにしても良い。
【００４１】
レジスタ２２ｎは、レスポンスのエラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等）チェックを行うことを指定するデータがレジスタ２２ｉに書き込まれている場合に、指定されたエラーチェックの結果を表すデータを書き込むためのレジスタである。なお、エラーチェックの結果を表すデータは、エラーの種類に応じた位置のビットがセットされるようにしても良いし、エラーの種類がコード化されるようにしても良い。また、ＣＭＤ５５自動実行フラグをセットしてコマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行させた場合には、コマンド「ＣＭＤ５５」に対するレスポンスにエラーが発生する場合とコマンド「ＡＣＭＤ」に対するレスポンスにエラーが発生する場合があり得る。そこで、例えば、レジスタ２２ｎとしてエラーチェックの結果を表すデータ複数個分の容量を確保しておき、その１つにコマンド「ＣＭＤ５５」に対するレスポンスのエラーチェックの結果を表すデータを書き込み、他の１つにコマンド「ＡＣＭＤ」に対するレスポンスのエラーチェックの結果を表すデータを書き込むようにしても良い。メインＣＰＵ２は、レスポンスのエラーチェックを行うことを指定した場合に、このレジスタ２２ｎを読み出すことで、エラーの発生の有無を取得することができる。
【００４２】
レジスタ２２ｏは、ＣＭＤ線を使用中であるか否かを表すフラグ（以下、「ＣＭＤ線使用中フラグ」という）を書き込むためのレジスタである。ＣＭＤ線使用中フラグは、ＳＤＭＭＣホストコントローラ１０がコマンドの発行を開始するとセットされ、ＳＤＭＭＣホストコントローラ１０がレスポンスの受信を完了するとクリアされる。メインＣＰＵ２は、このレジスタ２２ｏを読み出すことで、コマンドの実行中か否か、すなわち、次のコマンドの発行を指示することが可能か否かを判断することができる。
【００４３】
なお、図３に示すレジスタマップは一例であり、種々の変形実施も可能である。例えば、全レジスタのビット幅を３２ビット長とし、３２ビットに満たないビット長を有する複数のデータを結合して１つのレジスタに格納するようにしても良い。また、例えば、クロック信号ＳＤＣＬＫの出力又は停止をクロック出力部２１に行わせるためのフラグを格納するためのレジスタを設けて、メインＣＰＵ２がクロック信号ＳＤＣＬＫの出力又は停止をクロック出力部２１に行わせるようにしても良い。また、例えば、エラーが発生した場合に、割り込み信号をメインＣＰＵ２に出力するか否かを指示するためのデータを格納するためのレジスタを設けて、エラーが発生した場合に割り込み信号がメインＣＰＵ２に出力されるようにしても良い。
【００４４】
再び図２を参照すると、ＳＤＭＭＣ制御部２３は、コマンド・レスポンス送受信部２３ａと、データ送受信部２３ｂとを含む。
コマンド・レスポンス送受信部２３ａは、メインＣＰＵ２によってレジスタ２２ａ〜２２ｋに書き込まれた情報に基づいてコマンドをカードに発行し、当該コマンドに対するレスポンスをカードから受け取って、レスポンスに基づく情報をレジスタ２２ｌ〜２２ｏに書き込む。
【００４５】
なお、本実施形態においては、コマンド・レスポンス送受信部２３ａは、コマンドを発行する信号線ＣＭＤ＿ｏｕｔとレスポンスを受信する信号線ＣＭＤ＿ｉｎとを別個に有している。そして、カードインタフェース１３は、コマンド発行時には、コマンド・レスポンス送受信部２３ａによって信号線ＣＭＤ＿ｏｕｔ上に供給されるコマンドをカードとの間のＣＭＤ線に出力し、レスポンス受信時には、カードとの間のＣＭＤ線上に供給されるレスポンスを信号線ＣＭＤ＿ｉｎに出力する。
【００４６】
データ送受信部２３ｂは、レジスタ２２ａに書き込まれたインデックスで表されるコマンドがデータ転送を伴うコマンドである場合に動作を行い、レジスタ２２ａに書き込まれたインデックスで表されるコマンドがデータ転送を伴わないコマンドである場合には動作を行わない。
【００４７】
レジスタ２２ａに書き込まれたインデックスで特定されるコマンドがカードへのデータ書き込みを伴うコマンドである場合には、コマンド・レスポンス送受信部２３ａが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスの受信完了後に、カードへのデータ書き込みの開始をデータ送受信部２３ｂに指示する。また、レジスタ２２ａに書き込まれたインデックスで特定されるコマンドがカードからのデータ読み出しを伴うコマンドである場合には、コマンド・レスポンス送受信部２３ａが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスを受信するとともに、カードからのデータ読み出しの開始をデータ送受信部２３ｂに指示する。
【００４８】
ＤＭＡ制御部２４は、レジスタ２２ａに書き込まれたインデックスで特定されるコマンドがデータ転送を伴うコマンドである場合に動作を行い、レジスタ２２ａに書き込まれたインデックスで特定されるコマンドがデータ転送を伴わないコマンドである場合には動作を行わない。
【００４９】
メインＣＰＵ２は、カードへのデータ書き込みを伴うコマンドの実行を指示する場合には、まず、カードに書き込むためのデータをＲＡＭ４（図１参照）のＤＭＡ転送領域内に書き込み、その後、レジスタ２２ａ〜２２ｈに当該コマンドのインデックス等を書き込む。これを受けて、ＳＤＭＭＣホストコントローラ１０のＳＤＭＭＣ制御部２３内のコマンド・レスポンス送受信部２３ａが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスの受信完了後に、カードへのデータ書き込みの開始をデータ送受信部２３ｂに指示する。データ送受信部２３ｂは、コマンド・レスポンス送受信部２３ａからの指示を受けると、ＤＭＡ制御部２４にＲＡＭ４のＤＭＡ転送領域内のデータのＤＭＡ転送を指示する。ＤＭＡ制御部２４は、ＦＩＦＯバッファ２４ａを有しており、データ送受信部２３ｂからの指示を受けると、ＲＡＭ４のＤＭＡ転送領域内のデータをＦＩＦＯバッファ２４ａに順次ＤＭＡ転送する。そして、データ送受信部２３ｂが、ＦＩＦＯバッファ２４ａ内のデータを順次読み出し、カードインタフェース１３を介してカードに順次書き込む。
【００５０】
一方、メインＣＰＵ２は、カードからのデータ読み出しを伴うコマンドの実行を指示する場合には、レジスタ２２ａ〜２２ｈに当該コマンドのインデックス等を書き込む。これを受けて、ＳＤＭＭＣホストコントローラ１０のＳＤＭＭＣ制御部２３内のコマンド・レスポンス送受信部２３ａが、当該コマンドをカードに発行し、当該コマンドに対するレスポンスを受信するとともに、カードからのデータ読み出しの開始をデータ送受信部２３ｂに指示する。データ送受信部２３ｂは、コマンド・レスポンス送受信部２３ａからの指示を受けると、カードインタフェース１３を介してカードからデータを順次読み出してＦＩＦＯバッファ２４ａに順次書き込むとともに、ＤＭＡ制御部２４にＦＩＦＯバッファ２４ａ内のデータのＤＭＡ転送を指示する。ＤＭＡ制御部２４は、データ送受信部２３ｂからの指示を受けると、ＦＩＦＯバッファ２４ａ内のデータをＲＡＭ４のＤＭＡ転送領域に順次ＤＭＡ転送する。
【００５１】
なお、本実施形態においては、データ送受信部２３ｂは、カードに書き込むデータを出力する８ビット幅の信号線ＤＡＴ＿ｏｕｔ［７：０］とカードからデータを読み出す信号線ＤＡＴ＿ｉｎ［７：０］とを別個に有している。そして、カードインタフェース１３は、カードへのデータ書き込み時には、データ送受信部２３ｂによって信号線ＤＡＴ＿ｏｕｔ［７：０］上に供給されるデータをカードとの間のＤＡＴ線（１、４、又は、８ビット幅）に出力し、カードからのデータ読み出し時には、カードとの間のＤＡＴ線上に供給されるデータを信号線ＤＡＴ＿ｉｎ［７：０］に出力する。なお、カードのＤＡＴ端子のビット幅が８ビット幅ではない場合には、カードインタフェース１３が、データのビット幅を適宜変換する。
【００５２】
コマンド自動実行制御部２５は、レジスタ制御部２２とＳＤＭＭＣ制御部２３との間にアドインされており、ＣＭＤ５５自動実行フラグがセットされている場合、すなわちコマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行する場合には、レジスタ制御部２２とＳＤＭＭＣ制御部２３との間でやり取りされる幾つかの信号及び／又はデータに操作を施して、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」の連続自動実行をＳＤＭＭＣ制御部２３に行わせる。一方、コマンド自動実行制御部２５は、ＣＭＤ５５自動実行フラグがセットされていない場合、すなわちコマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行する場合以外の場合には、レジスタ制御部２２とＳＤＭＭＣ制御部２３との間の信号及び／又はデータをそのまま通過させ、何らの操作も行わない。なお、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」の連続自動実行を必要としない場合には、レジスタ制御部２２とＳＤＭＭＣ制御部２３とを直接接続し、コマンド自動実行制御部２５を不要とすることができる。
【００５３】
図４は、コマンド自動実行制御部２５の内部構成を示すブロック図である。図４に示すように、コマンド自動実行制御部２５は、ステートマシン２５ａと、セレクタ２５ｂ〜２５ｄと、ＯＲゲート回路２５ｅとを含んでいる。
【００５４】
ステートマシン２５ａには、コマンド発行開始信号、ＣＭＤ５５自動実行フラグ、データ転送タイプ、ＤＡＴ線使用フラグ、転送ブロックサイズ、及び、転送ブロック数がレジスタ制御部２２から入力される。また、ステートマシン２５ａには、エラー情報及びコマンド完了信号がＳＤＭＭＣ制御部２３から入力される。
【００５５】
コマンド発行開始信号は、コマンドインデックスがメインＣＰＵ２によってレジスタ２２ａ（図３参照）に書き込まれたときに、レジスタ制御部２２によってアサートされる。
ＣＭＤ５５自動実行フラグは、レジスタ２２ｊに格納されているフラグである。
【００５６】
データ転送タイプは、レジスタ２２ｅに格納されているデータである。
ＤＡＴ線使用フラグは、レジスタ２２ｆに格納されているフラグである。
【００５７】
転送ブロックサイズは、レジスタ２２ｇに格納されているデータである。
転送ブロック数は、レジスタ２２ｈに格納されているデータである。
【００５８】
エラー情報は、レスポンスのエラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等）が発生したことを表すデータである。
コマンド完了信号は、発行したコマンドが完了したことを表す信号である。
【００５９】
なお、ステートマシン２５ａの動作については、後で詳細に説明する。
【００６０】
セレクタ２５ｂには、コマンド発行開始信号、ＤＡＴ線使用フラグ、ＡＣＭＤアーギュメント、ＣＭＤ５５アーギュメント、コマンドインデックス、レスポンスタイプ、コマンドタイプ、及び、レスポンスチェックがレジスタ制御部２２から入力される。また、セレクタ２５ｂには、第１出力信号がステートマシン２５ａから入力される。
【００６１】
ＡＣＭＤアーギュメントは、レジスタ２２ｂに格納されているデータである。
ＣＭＤ５５アーギュメントは、レジスタ２２ｋに格納されているデータである。
【００６２】
コマンドインデックスは、レジスタ２２ａに格納されているデータである。
レスポンスタイプは、レジスタ２２ｄに格納されているデータである。
【００６３】
コマンドタイプは、レジスタ２２ｃに格納されているデータである。
レスポンスチェックは、レジスタ２２ｉに格納されているデータである。
【００６４】
セレクタ２５ｂは、第１出力信号がネゲートされているときには、レジスタ制御部２２から入力されるコマンド発行開始信号、ＤＡＴ線使用フラグ、ＡＣＭＤアーギュメント、コマンドインデックス、レスポンスタイプ、コマンドタイプ、及び、レスポンスチェックをそのままＳＤＭＭＣ制御部２３に出力する。また、セレクタ２５ｂは、第１出力信号がアサートされているときには、レジスタ制御部２２から入力されるコマンド発行開始信号、ＤＡＴ線使用信号、ＡＣＭＤアーギュメント、ＣＭＤ５５アーギュメント、コマンドインデックス、レスポンスタイプ、コマンドタイプ、及び／又は、レスポンスチェックに操作を加えて、ＳＤＭＭＣ制御部２３に出力する。なお、セレクタ２５ｂの動作については、後で詳細に説明する。
【００６５】
セレクタ２５ｃには、レスポンス書込みレジスタ指定情報及びエラー情報がＳＤＭＭＣ制御部２３から入力される。また、セレクタ２５ｃには、第２出力信号がステートマシン２５ａから入力される。
【００６６】
レスポンス書込みレジスタ指定情報は、レジスタ２２ｍの何処にレスポンスアーギュメントを書き込むかを指定するデータである。なお、レスポンスアーギュメントそのものは、ＳＤＭＭＣ制御部２３からレジスタ制御部２２に直接送られる。
【００６７】
セレクタ２５ｃは、第２出力信号がネゲートされているときには、ＳＤＭＭＣ制御部２３から入力されるレスポンス書込みレジスタ指定情報及びエラー情報をそのままレジスタ制御部２２に出力する。また、セレクタ２５ｃは、第２出力信号がアサートされているときには、ＳＤＭＭＣ制御部２３から入力されるレスポンス書込みレジスタ指定情報及びエラー情報に操作を加えて、レジスタ制御部２２に出力する。なお、セレクタ２５ｃの動作については、後で詳細に説明する。
【００６８】
セレクタ２５ｄには、コマンド完了信号がＳＤＭＭＣ制御部２３から入力される。また、セレクタ２５ｄには、第２出力信号がステートマシン２５ａから入力される。
【００６９】
セレクタ２５ｄは、第２出力信号がネゲートされているときには、ＳＤＭＭＣ制御部２３から入力されるコマンド完了信号をそのままレジスタ制御部２２に出力する。また、セレクタ２５ｃは、第２出力信号がアサートされているときには、ＳＤＭＭＣ制御部２３から入力されるコマンド完了信号に操作を加えて、レジスタ制御部２２に出力する。なお、セレクタ２５ｄの動作については、後で詳細に説明する。
【００７０】
ＯＲゲート回路２５ｅは、２入力１出力のＯＲゲート回路であり、一方の入力端には、第３出力信号がステートマシン２５ａから入力される。また、ＯＲゲート回路２５ｅの他方の入力端には、カードとの間のＣＭＤ線を使用中であることを表すＣＭＤ線使用中信号が入力される。
【００７１】
次に、本実施形態の動作について説明する。ここでは、ＳＤカード（登録商標）Ｃ２（図１参照）がカードスロット６に装着されている場合について説明する。
まず、コマンド「ＣＭＤ５５」及び「ＡＣＭＤ」以外のコマンド（以下、「通常コマンド」という。）を発行する場合における本実施形態の動作について説明する。
【００７２】
図５は、通常コマンドを発行する場合における本実施形態の動作を示すフローチャートである。
【００７３】
まず、メインＣＰＵ２が、ＲＯＭ３内のドライバプログラムを実行し、通常コマンドのインデックス、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、ＤＡＴ線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックをレジスタ２２ａ〜２２ｉに書き込むことにより、通常コマンドの発行をＳＤＭＭＣホストコントローラ１０に指示する（ステップＳ１１）。
【００７４】
なお、メインＣＰＵ２は、発行を指示する通常コマンドがカードＣ２へのデータ書込みを伴うコマンドである場合には、コマンド発行の指示に先立って、カードＣ２へ書き込むデータをＲＡＭ４のＤＭＡ転送領域内に準備する。
【００７５】
先に説明したように、ＳＤＭＭＣホストコントローラ１０内のコマンド自動実行制御部２５は、通常コマンド発行時には、ＳＤＭＭＣホストコントローラ１０内のレジスタ制御部２２とＳＤＭＭＣ制御部２３との間でやり取りされる信号をそのまま通過させ、何らの操作も行わない。そのため、レジスタ制御部２２からの信号及びデータは、そのままＳＤＭＭＣ制御部２３に入力される。
【００７６】
ＳＤＭＭＣ制御部２３内のコマンド・レスポンス送受信部２３ａは、レジスタ制御部２２からの信号及びデータに従って、カードＣ２にコマンドを発行する（ステップＳ２１）。
【００７７】
カードＣ２は、受信したコマンドを実行して、レスポンスをコマンド・レスポンス送受信部２３ａに送信する（ステップＳ３１）。
【００７８】
コマンド・レスポンス送受信部２３ａは、レスポンスをカードＣ２から受信すると、コマンド完了信号を出力する。レジスタ制御部２２は、コマンド完了信号を受け取ると、レジスタ２２ｌのコマンド完了フラグをセットし、コマンドの完了をメインＣＰＵ２に通知する（ステップＳ２２）。このとき、レジスタ制御部２２が、コマンドの完了を通知するための割込み信号をメインＣＰＵ２に出力するようにしても良い。また、コマンド・レスポンス送受信部２３ａは、レスポンスにエラーが発生した場合には、エラー情報をレジスタ２２ｎに書き込む。
【００７９】
なお、コマンド・レスポンス送受信部２３ａは、発行した通常コマンドがカードＣ２へのデータ書込みを伴うコマンドである場合には、レスポンスを受信したときに、データ送受信部２３ｂにカードＣ２へのデータ書込みの開始を指示する。また、コマンド・レスポンス送受信部２３ａは、発行した通常コマンドがカードＣ２からのデータ読出しを伴うコマンドである場合には、レスポンスを受信したときに、データ送受信部２３ｂにカードＣ２からのデータ読出しの開始を指示する。
【００８０】
次に、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行する場合における本実施形態の動作について説明する。
【００８１】
図６は、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行する場合における本実施形態の動作を示すフローチャートである。
【００８２】
まず、メインＣＰＵ２が、ＲＯＭ３内のドライバプログラムを実行し、ＣＭＤ５５自動実行フラグをレジスタ２２ｊにセットし、コマンド「ＣＭＤ５５」のアーギュメントをレジスタ２２ｋに書き込むとともに、コマンド「ＡＣＭＤ」のインデックス、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、ＤＡＴ線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックを、レジスタ２２ａ〜２２ｉに書き込むことにより、コマンド「ＣＭＤ５５」の発行及びそれに引き続くコマンド「ＡＣＭＤ」の発行をＳＤＭＭＣホストコントローラ１０に指示する（ステップＳ１０１）。
【００８３】
なお、メインＣＰＵ２は、発行を指示するコマンド「ＡＣＭＤ」がカードＣ２へのデータ書込みを伴うコマンドである場合には、コマンド「ＣＭＤ５５」の発行及びそれに引き続くコマンド「ＡＣＭＤ」の発行の指示に先立って、カードＣ２へ書き込むデータをＲＡＭ４のＤＭＡ転送領域内に準備する。
【００８４】
ＳＤＭＭＣホストコントローラ１０は、レジスタ２２ｊに書き込まれたＣＭＤ５５自動実行フラグ及びレジスタ２２ｋに書き込まれたコマンド「ＣＭＤ５５」のアーギュメントに基づいて、コマンド「ＣＭＤ５５」をカードＣ２に発行する（ステップＳ２０１）。
【００８５】
カードＣ２は、コマンド「ＣＭＤ５５」を実行して、コマンド「ＣＭＤ５５」に対するレスポンスをＳＤＭＭＣホストコントローラ１０に送信する（ステップＳ３０１）。
【００８６】
ＳＤＭＭＣホストコントローラ１０は、コマンド「ＣＭＤ５５」に対するレスポンスにエラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等）が発生していた場合には、コマンド「ＡＣＭＤ」をカードＣ２に発行することができないため、処理を終了する（ステップＳ２０２）。
【００８７】
一方、ＳＤＭＭＣホストコントローラ１０は、コマンド「ＣＭＤ５５」に対するレスポンスにエラーが発生していなかった場合には、レジスタ２２ａ〜２２ｉに書き込まれたコマンド「ＡＣＭＤ」のインデックス、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、ＤＡＴ線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックに基づいて、コマンド「ＡＣＭＤ」をカードＣ２に発行する（ステップＳ２０３）。
【００８８】
カードＣ２は、コマンド「ＡＣＭＤ」を実行して、コマンド「ＡＣＭＤ」に対するレスポンスをコマンド・レスポンス送受信部２３ａに送信する（ステップＳ３０２）。
【００８９】
ＳＤＭＭＣホストコントローラ１０は、コマンド「ＡＣＭＤ」に対するレスポンスを受信すると、コマンド「ＣＭＤ５５」及びそれに引き続くコマンド「ＡＣＭＤ」の完了をメインＣＰＵ２に通知する（ステップＳ２０４）。このとき、ＳＤＭＭＣホストコントローラ１０が、コマンドの完了を通知するための割込み信号をメインＣＰＵ２に出力するようにしても良い。また、ＳＤＭＭＣホストコントローラ１０は、コマンド「ＡＣＭＤ」に対するレスポンスにエラーが発生していた場合には、エラー情報をレジスタ２２ｎに書き込む。なお、ＳＤＭＭＣホストコントローラ１０は、コマンド「ＡＣＭＤ」に対するレスポンスにエラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等）が発生していた場合には、エラー情報をレジスタ２２ｎに書き込む。
【００９０】
なお、ＳＤＭＭＣホストコントローラ１０は、発行したコマンド「ＡＣＭＤ」がカードＣ２へのデータ書込みを伴うコマンドである場合には、レスポンスを受信したときに、カードＣ２へのデータ書込みを開始する。また、ＳＤＭＭＣホストコントローラ１０は、発行したコマンド「ＡＣＭＤ」がカードＣ２からのデータ読出しを伴うコマンドである場合には、レスポンスを受信したときに、カードＣ２からのデータ読出しを開始する。
【００９１】
図７は、コマンド自動実行制御部２５内のステートマシン２５ａの状態遷移図である。
図７に示すように、ステートマシン２５ａは、アイドルステートＳＴ１、ＣＭＤ５５実行終了待ちステートＳＴ２、及び、ＡＣＭＤ発行ステートＳＴ３の３つの状態を取り得る。
【００９２】
ステートマシン２５ａは、初期においてアイドルステートＳＴ１状態であり、
（１）レジスタ２２ｅに格納されているコマンド「ＡＣＭＤ」がデータ転送を伴うコマ
ンドであり、コマンド発行開始信号がアサートされ、ＣＭＤ５５自動実行フラグ
がセットされており、レジスタ２２ｅに格納されているコマンド「ＡＣＭＤ」の
データ転送タイプが「Ｍｕｌｔｉｐｌｅ」又は「Ｓｔｒｅａｍ」であり且つレジ
スタ２２ｈに格納されている転送ブロック数及びレジスタ２２ｇに格納されてい
る転送ブロックサイズがゼロではない場合
（２）レジスタ２２ｅに格納されているコマンド「ＡＣＭＤ」がデータ転送を伴うコマ
ンドであり、コマンド発行開始信号がアサートされ、ＣＭＤ５５自動実行フラグ
がセットされており、レジスタ２２ｅに格納されているコマンド「ＡＣＭＤ」の
データ転送タイプが「Ｓｉｎｇｌｅ」又は「Ｉｎｆｉｎｉｔｅ」であり且つレジ
スタ２２ｇに格納されている転送ブロックサイズがゼロではない場合
（３）レジスタ２２ｅに格納されているコマンド「ＡＣＭＤ」がデータ転送を伴わない
コマンドであり、コマンド発行開始信号がアサートされ、ＣＭＤ５５自動実行フ
ラグがセットされている場合
のいずれかの場合には、ＣＭＤ５５実行終了待ちステートＳＴ２に遷移する。なお、ステートマシン２５ａは、上記（１）〜（３）以外の場合には、メインＣＰＵ２からのコマンド指示の内容に誤りがあるものとして、状態遷移を行わない。
【００９３】
次に、ステートマシン２５ａは、コマンド・レスポンス送受信部２３ａからコマンド「ＣＭＤ５５」に対するコマンド完了信号を受信すると、ＣＭＤ５５実行終了待ちステートＳＴ２からＡＣＭＤ発行ステートＳＴ３に遷移する。なお、このとき、エラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等）が発生していた場合には、ステートマシン２５ａは、ＣＭＤ５５実行終了待ちステートＳＴ２からＡＣＭＤ発行ステートＳＴ３ではなくアイドルステートＳＴ１に遷移して、処理を終了する。
【００９４】
そして、ステートマシン２５ａは、ＡＣＭＤ発行ステートＳＴ３でクロック信号１周期相当の時間待機した後、アイドルステートＳＴ１に遷移する。
【００９５】
図８は、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行する場合における本実施形態のタイミングチャートである。
【００９６】
先に説明したように、コマンド発行開始信号は、コマンドインデックスがメインＣＰＵ２によってレジスタ２２ａに書き込まれたとき（図６のステップＳ１０１に対応）に、レジスタ制御部２２によってアサートされる。タイミングＴＭ１においてレジスタ制御部２２によってアサートされたコマンド発行開始信号は、セレクタ２５ｂ（図４参照）を経由して、ＳＤＭＭＣ制御部２３内のコマンド・レスポンス送受信部２３ａに送られる。
【００９７】
また、コマンド発行開始信号がレジスタ制御部２２によってアサートされると、コマンド自動実行制御部２５内のステートマシン２５ａは、アイドルステートＳＴ１からＣＭＤ５５実行終了待ちステートＳＴ２に遷移する。ステートマシン２５ａは、ＣＭＤ５５実行終了待ちステートＳＴ２状態であるとき又はコマンド発行開始信号がアサートされているとき、第１出力信号（図４参照）をアサートし、ＣＭＤ５５実行終了待ちステートＳＴ２状態であるとき、第２出力信号（図４参照）をアサートする。
【００９８】
セレクタ２５ｂは、第１出力信号がアサートされると、レジスタ２２ｂに格納されているコマンドアーギュメント（コマンド「ＡＣＭＤ」のアーギュメント）ではなくレジスタ２２ｋに格納されているＣＭＤ５５アーギュメントをアーギュメントとして選択し、コマンド・レスポンス送受信部２３ａに出力する。また、セレクタ２５ｂは、第１出力信号がアサートされると、レジスタ２２ｆに格納されているＤＡＴ線使用フラグ、レジスタ２２ａに格納されているコマンドインデックス、レジスタ２２ｄに格納されているレスポンスタイプ、レジスタ２２ｃに格納されているコマンドタイプ、及び、レジスタ２２ｉに格納されているレスポンスチェックに代えて、コマンド「ＣＭＤ５５」用に用意された固定値をコマンド・レスポンス送受信部２３ａに出力する。なお、コマンド「ＣＭＤ５５」用の固定値は、ＳＤカード（登録商標）の規格書に従って定まる値であり、トランジスタ回路やＲＯＭ等の回路によって用意可能である。
【００９９】
コマンド・レスポンス送受信部２３ａは、コマンド発行開始信号がアサートされると、タイミングＴＭ２において、コマンドの発行を開始する。このとき、セレクタ２５ｂが、レジスタ２２ｂに格納されているコマンドアーギュメント（コマンド「ＡＣＭＤ」のアーギュメント）ではなくレジスタ２２ｋに格納されているＣＭＤ５５アーギュメントをアーギュメントとして選択出力しており、また、レジスタ２２ｆに格納されているＤＡＴ線使用フラグ、レジスタ２２ａに格納されているコマンドインデックス、レジスタ２２ｄに格納されているレスポンスタイプ、レジスタ２２ｃに格納されているコマンドタイプ、及び、レジスタ２２ｉに格納されているレスポンスチェックに代えてコマンド「ＣＭＤ５５」用に用意された固定値をコマンド・レスポンス送受信部２３ａに出力しているので、コマンド・レスポンス送受信部２３ａは、コマンド「ＣＭＤ５５」をカードＣ２に発行することになる（図６のステップＳ２０１に対応）。
【０１００】
コマンド・レスポンス送受信部２３ａは、コマンド「ＣＭＤ５５」に対するレスポンスの受信を完了すると、タイミングＴＭ３において、コマンド完了信号をアサートするとともに、その１クロック周期後のタイミングＴＭ４において、ＣＭＤ線使用中信号をネゲートする。
【０１０１】
セレクタ２５ｃは、タイミングＴＭ３においてステートマシン２５ａの第２出力信号がアサートされているため、コマンド・レスポンス制御部２３ａから入力されるレスポンス・エラー情報書込みレジスタ指定情報に代えて、レジスタ２２ｍ内のコマンド「ＣＭＤ５５」に対するレスポンスを格納するための所定位置及びレジスタ２２ｎ内のコマンド「ＣＭＤ５５」に対するエラーを格納するための所定位置を特定するために用意された固定値をレジスタ制御部２２に出力する。これにより、コマンド「ＣＭＤ５５」に対するレスポンス及びコマンド「ＣＭＤ５５」に対するレスポンスのエラー情報は、レジスタ２２ｍ内のコマンド「ＣＭＤ５５」に対するレスポンスを格納するための所定位置及びレジスタ２２ｎ内のコマンド「ＣＭＤ５５」に対するレスポンスのエラーを格納するための所定位置にそれぞれ格納されることになる。メインＣＰＵ２は、レジスタ２２ｍ内のコマンド「ＣＭＤ５５」に対するレスポンスを格納するための所定位置及びレジスタ２２ｎ内のコマンド「ＣＭＤ５５」に対するレスポンスのエラーを格納するための所定位置を参照することにより、コマンド「ＣＭＤ５５」に対するレスポンス及びコマンド「ＣＭＤ５５」に対するレスポンスのエラー情報を取得可能である。
【０１０２】
セレクタ２５ｄは、タイミングＴＭ３においてステートマシン２５ａの第２出力信号がアサートされているため、コマンド・レスポンス制御部２３ａから入力されるコマンド完了信号をマスクする。従って、コマンド「ＣＭＤ５５」が完了したことを表すコマンド完了フラグがレジスタ２２ｌにセットされることはない。
【０１０３】
なお、このとき、エラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等）が発生していた場合には、ステートマシン２５ａは、ＣＭＤ５５実行終了待ちステートＳＴ２からアイドルステートＳＴ１に遷移して、処理を終了する（図６のステップＳ２０２に対応）。
【０１０４】
次に、ステートマシン２５ａは、コマンド・レスポンス制御部２３ａによるコマンド完了信号のアサートを受けて、ＣＭＤ５５実行終了待ちステートＳＴ２からＡＣＭＤ発行ステートＳＴ３に遷移する。ステートマシン２５ａは、ＡＣＭＤ発行ステートＳＴ３状態のとき、第１、第２出力信号をネゲートし、第３出力信号をアサートする。さらに、ステートマシン２５ａは、その１クロック周期後に、ＡＣＭＤ発行ステートＳＴ３からアイドルステートＳＴ１に遷移する。
【０１０５】
セレクタ２５ｂは、第１出力信号がネゲートされると、レジスタ２２ｋに格納されているＣＭＤ５５アーギュメントではなくレジスタ２２ｂに格納されているコマンドアーギュメント（コマンド「ＡＣＭＤ」のアーギュメント）をアーギュメントとして選択し、コマンド・レスポンス送受信部２３ａに出力する。また、セレクタ２５ｂは、第１出力信号がネゲートされると、レジスタ２２ｆに格納されているＤＡＴ線使用フラグ、レジスタ２２ａに格納されているコマンドインデックス、レジスタ２２ｄに格納されているレスポンスタイプ、レジスタ２２ｃに格納されているコマンドタイプ、及び、レジスタ２２ｉに格納されているレスポンスチェックを、コマンド・レスポンス送受信部２３ａに出力する。さらに、セレクタ２５ｂは、第１出力信号がネゲートされたとき、タイミングＴＭ４において、コマンド発行開始信号をアサートする。
【０１０６】
タイミングＴＭ４において第３出力信号がアサートされると、ＯＲゲート回路２５ｅからレジスタ制御部２２に出力されるＣＭＤ線使用中信号は、ネゲートされることなく、アサートされ続けることになる。従って、レジスタ２２ｏのＣＭＤ線使用中フラグがクリアされることはない。これにより、メインＣＰＵ２が、タイミングＴＭ４において新たなコマンドを発行できると誤って判断することはない。
【０１０７】
コマンド・レスポンス送受信部２３ａは、コマンド発行開始信号がアサートされると、タイミングＴＭ５において、コマンドの発行を開始する。このとき、セレクタ２５ｂが、レジスタ２２ｋに格納されているＣＭＤ５５アーギュメントではなくレジスタ２２ｂに格納されているコマンドアーギュメント（コマンド「ＡＣＭＤ」のアーギュメント）をアーギュメントとして選択出力しており、また、レジスタ２２ｆに格納されているＤＡＴ線使用フラグ、レジスタ２２ａに格納されているコマンドインデックス、レジスタ２２ｄに格納されているレスポンスタイプ、レジスタ２２ｃに格納されているコマンドタイプ、及び、レジスタ２２ｉに格納されているレスポンスチェックをコマンド・レスポンス送受信部２３ａに出力しているので、コマンド・レスポンス送受信部２３ａは、コマンド「ＡＣＭＤ」をカードＣ２に発行することになる（図６のステップＳ２０３に対応）。
【０１０８】
コマンド・レスポンス送受信部２３ａは、コマンド「ＡＣＭＤ」に対するレスポンスの受信を完了すると、タイミングＴＭ６において、コマンド完了信号をアサートするとともに、その１クロック周期後のタイミングＴＭ７において、ＣＭＤ線使用中信号をネゲートする。
【０１０９】
セレクタ２５ｃは、第２出力信号がネゲートされているため、コマンド・レスポンス制御部２３ａから入力されるレスポンス・エラー情報書込みレジスタ指定情報をそのままレジスタ制御部２２に出力する。これにより、コマンド「ＡＣＭＤ」に対するレスポンス及びエラー情報は、レスポンス・エラー情報書込みレジスタ指定情報によって特定される位置に格納されることになる。
【０１１０】
セレクタ２５ｄは、第２出力信号がネゲートされているため、コマンド・レスポンス制御部２３ａから入力されるコマンド完了信号をそのままレジスタ制御部２２に出力する。従って、コマンド「ＡＣＭＤ」が完了したことを表すコマンド完了フラグがレジスタ２２ｌにセットされることになる（図６のステップＳ２０４に対応）。これにより、メインＣＰＵ２は、コマンド「ＣＭＤ５５」及びそれに引き続くコマンド「ＡＣＭＤ」が完了したことを判断可能である。
【０１１１】
次に、本実施形態の比較例について説明する。
図９は、本実施形態の比較例としてのＳＤＭＭＣホストコントローラ５０の構成を示すブロック図である。
【０１１２】
先に説明したように、図２に示す本実施形態としてのＳＤＭＭＣホストコントローラ１０内のコマンド自動実行制御部２５は、レジスタ制御部２２とＳＤＭＭＣ制御部２３との間にアドインされ、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行する場合に、レジスタ制御部２２とＳＤＭＭＣ制御部２３との間でやり取りされる幾つかの信号に操作を施す一方、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行する場合以外の場合には、レジスタ制御部２２とＳＤＭＭＣ制御部２３との間の信号をそのまま通過させる。従って、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」の連続自動実行を必要としない場合には、レジスタ制御部２２とＳＤＭＭＣ制御部２３とを直接接続し、コマンド自動実行制御部２５を不要とすることができる。図９に示す比較例は、図２に示すＳＤＭＭＣホストコントローラ１０内のコマンド自動実行制御部２５をアドインすることなく、レジスタ制御部２２とＳＤＭＭＣ制御部２３とを直接接続したものである。なお、本比較例においては、図３に示す複数のレジスタの内のレジスタ２２ｊ（ＣＭＤ５５自動実行フラグを格納）及びレジスタ２２ｋ（ＣＭＤ５５アーギュメントを格納）が不要となる。
【０１１３】
図１０は、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して実行する場合における比較例の動作を示すフローチャートである。
【０１１４】
まず、メインＣＰＵ２が、ドライバプログラムを実行し、コマンド「ＣＭＤ５５」のインデックス、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、ＤＡＴ線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックを、レジスタ２２ａ〜２２ｉに書き込むことにより、コマンド「ＣＭＤ５５」の発行をＳＤＭＭＣホストコントローラ５０に指示する（ステップＳ４０１）。
【０１１５】
ＳＤＭＭＣホストコントローラ５０は、レジスタ２２ａ〜２２ｉに書き込まれたコマンド「ＣＭＤ５５」のインデックス等に基づいて、コマンド「ＣＭＤ５５」をカードＣ２に発行する（ステップＳ５０１）。
【０１１６】
カードＣ２は、コマンド「ＣＭＤ５５」を実行して、コマンド「ＣＭＤ５５」に対するレスポンスをＳＤＭＭＣホストコントローラ５０に送信する（ステップＳ６０１）。
【０１１７】
ＳＤＭＭＣホストコントローラ５０は、コマンド「ＣＭＤ５５」に対するレスポンスをカードＣ２から受信すると、コマンド「ＣＭＤ５５」の完了をメインＣＰＵ２に通知する（ステップＳ５０２）。
【０１１８】
次に、メインＣＰＵ２は、レジスタ２２ｎを参照し、コマンド「ＣＭＤ５５」に対するレスポンスにエラー（インデックスエラー、エンドビットエラー、ＣＲＣエラー、タイムアウトエラー等）が発生していないことを確認した後（ステップＳ４０２）、コマンド「ＡＣＭＤ」のインデックス、アーギュメント、コマンドタイプ、レスポンスタイプ、データ転送タイプ、ＤＡＴ線使用フラグ、転送ブロックサイズ、転送ブロック数、及び、レスポンスチェックを、レジスタ２２ａ〜２２ｉに書き込むことにより、コマンド「ＡＣＭＤ」の発行をＳＤＭＭＣホストコントローラ５０に指示する（ステップＳ４０３）。
【０１１９】
なお、メインＣＰＵ２は、発行を指示するコマンド「ＡＣＭＤ」がカードＣ２へのデータ書込みを伴うコマンドである場合には、コマンド「ＡＣＭＤ」の発行の指示に先立って、カードＣ２へ書き込むデータをＲＡＭ４のＤＭＡ転送領域内に準備する。
【０１２０】
一方、メインＣＰＵ２は、コマンド「ＣＭＤ５５」に対するレスポンスにエラーが発生していた場合には、コマンド「ＡＣＭＤ」を発行することができないため、コマンド「ＡＣＭＤ」の発行をＳＤＭＭＣホストコントローラ５０に指示することなく、処理を終了する（ステップＳ４０２）。
【０１２１】
ＳＤＭＭＣホストコントローラ５０は、レジスタ２２ａ〜２２ｉに書き込まれたコマンド「ＡＣＭＤ」のインデックス等に基づいて、コマンド「ＡＣＭＤ」をカードＣ２に発行する（ステップＳ５０３）。
【０１２２】
カードＣ２は、コマンド「ＡＣＭＤ」を実行して、コマンド「ＡＣＭＤ」に対するレスポンスをＳＤＭＭＣホストコントローラ５０に送信する（ステップＳ６０２）。なお、このとき、ＳＤＭＭＣホストコントローラ５０は、カードＣ２に発行したコマンド「ＡＣＭＤ」がデータ転送を伴うコマンドである場合には、データ転送を行う。
【０１２３】
ＳＤＭＭＣホストコントローラ５０は、コマンド「ＡＣＭＤ」に対するレスポンスをカードＣ２から受信すると、コマンド「ＡＣＭＤ」の完了をメインＣＰＵ２に通知する（ステップＳ５０４）。
【０１２４】
このように、本比較例においては、メインＣＰＵ２が、コマンド「ＣＭＤ５５」の発行を指示し（ステップＳ４０１）、コマンド「ＣＭＤ５５」に対するレスポンスにエラーがないことを確認し（ステップＳ４０２）、コマンド「ＡＣＭＤ」の発行を指示（ステップＳ４０３）しなければならない。そのため、コマンド「ＣＭＤ５５」の完了からコマンド「ＡＣＭＤ」の発行までの時間が長くなり、ひいては、コマンド「ＣＭＤ５５」の発行からコマンド「ＡＣＭＤ」の完了までの時間が長くなってしまう。また、メインＣＰＵ２の処理量が大きくなってしまう。
【０１２５】
なお、図１０において、メインＣＰＵ２は、ステップＳ４０１とステップＳ４０２との間の時間及びステップＳ４０３以降の時間をリアルタイムＯＳやアプリケーションプログラム等の実行に充てることができる。しかしながら、ステップＳ４０１の後にドライバプログラムから他プログラムへコンテキストスイッチングを行い、ステップＳ４０２の前に他プログラムからドライバプログラムへコンテキストスイッチングを行い、ステップＳ４０３の後にドライバプログラムから他プログラムへコンテキストスイッチングを行う必要があり、計３回のコンテキストスイッチングを行わなければならないため、処理負荷が非常に大きい。また、ステップＳ４０２、Ｓ４０３を実行しなければならないため、他プログラムを実行可能な時間（ステップＳ４０１とステップＳ４０２との間の時間とステップＳ４０３以降の時間との和）が短くなってしまう。
【０１２６】
これに対し、本実施形態においては、メインＣＰＵ２は、コマンド「ＣＭＤ５５」の発行及びそれに引き続くコマンド「ＡＣＭＤ」の発行を指示（図６のステップＳ１０１）するだけで済む。そのため、コマンド「ＣＭＤ５５」の完了からコマンド「ＡＣＭＤ」の発行までの時間を短くし、ひいては、コマンド「ＣＭＤ５５」の発行からコマンド「ＡＣＭＤ」の完了までの時間を短くすることができ、処理速度を向上させることができる。また、メインＣＰＵ２の処理量を少なくすることができる。
【０１２７】
また、本実施形態においては、コマンド「ＣＭＤ５５」に対するレスポンスのエラーを検出した場合に、メインＣＰＵ２からの指示を待つことなく、コマンド「ＡＣＭＤ」のカードへの発行を行わないようにしたので、メインＣＰＵ２の処理負荷を更に低減することができる。
【０１２８】
なお、図６において、メインＣＰＵ２は、ステップＳ１０１以降の時間をリアルタイムＯＳやアプリケーションプログラム等の実行に充てることができる。そして、ステップＳ１０１の後にドライバプログラムから他プログラムへの計１回のコンテキストスイッチングを行えば良いため、処理負荷が非常に小さい。また、他プログラムを実行可能な時間（ステップＳ１０１以降の時間）を比較例よりも長くすることができる。
【０１２９】
また、本実施形態に係るＳＤＭＭＣコントローラ１０は、比較例のＳＤＭＭＣコントローラ５０のレジスタ制御部２２とＳＤＭＭＣ制御部２３との間にコマンド自動実行制御部２５をアドインするだけで実現可能であり、コマンド自動実行制御部２５は１２０〜１３０ゲート程度の回路規模で実現可能である。そのため、本実施形態に係るＳＤＭＭＣコントローラ１０は、比較例と比べて、設計工数のアップは非常に僅かであり、コストアップも非常に僅かである。さらに、コマンド自動実行制御部２５は、コマンド「ＣＭＤ５５」とコマンド「ＡＣＭＤ」を連続して自動実行する場合以外の場合には、レジスタ制御部２２とＳＤＭＭＣ制御部２３との間で受け渡しされる信号及び／又はデータに何らの操作も施さないので、ＳＤＭＭＣコントローラ１０のデバッグが容易となる。
【０１３０】
なお、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。また図１〜図４の各図において、すべてのブロックを含める必要はなく、その一部のブロックを省略する構成にしてもよい。
【０１３１】
例えば、電子機器、ホストコントローラの構成は、図１、図２等で説明した構成に限定されず、種々の変形実施が可能である。また本発明のホストコントロール制御手法も本実施形態で説明したものに限定されるものではなく、種々の変形実施が可能である。
【０１３２】
また、明細書又は図面中の記載において広義な用語（電子機器、ホストコントローラ、カード、情報処理装置、第１〜第３の手段等）として引用された用語（ＳＤＭＭＣホストコントローラ、ＳＤカード（登録商標）、ＣＰＵ等）は、明細書又は図面中の他の記載においても広義な用語に置き換えることができる。
【０１３３】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【０１３４】
また、本発明は、ＳＤカード（登録商標）を発展した規格やＳＤカード（登録商標）と同様の思想に基づく規格に準拠したカードのホストコントローラにも適用できる。
【図面の簡単な説明】
【０１３５】
【図１】本実施形態のホストコントローラが適用された電子機器の構成例の図。
【図２】図１のカードコントローラの内部構成のブロック図。
【図３】図２のレジスタ制御部内のレジスタマップを示す図。
【図４】図２のコマンド自動実行制御部の内部構成のブロック図。
【図５】本実施形態の動作例のフロー図。
【図６】本実施形態の動作例のフロー図。
【図７】図４のステートマシンの状態遷移図。
【図８】本実施形態の動作例のタイミング図。
【図９】比較例の内部構成のブロック図。
【図１０】比較例の動作例のフロー図。
【符号の説明】
【０１３６】
１  電子機器、２  メインＣＰＵ、３  ＲＯＭ、４  ＲＡＭ、５  カードコントローラ、６  カードスロット、１０  ＳＤＭＭＣホストコントローラ、１１  ＣＰＵインタフェース、１２  ＤＭＡインタフェース、１３  カードインタフェース、２１  クロック出力部、２２  レジスタ制御部、２２ａ〜２２ｏ  レジスタ、２３  ＳＤＭＭＣ制御部、２３ａ  コマンド・レスポンス送受信部、２３ｂ  データ送受信部、２４  ＤＭＡ制御部、２４ａ  ＦＩＦＯバッファ、２５  コマンド自動実行制御部、２５ａ  ステートマシン、２５ｂ〜２５ｄ  セレクタ、２５ｅ  ＯＲゲート回路、Ｃ１〜Ｃ４  カード、
【図１】
2008276441.tif 000003
【図２】
2008276441.tif 000004
【図３】
2008276441.tif 000005
【図４】
2008276441.tif 000006
【図５】
2008276441.tif 000007
【図６】
2008276441.tif 000008
【図７】
2008276441.tif 000009
【図８】
2008276441.tif 000010
【図９】
2008276441.tif 000011
【図１０】
2008276441.tif 000012