(57)【特許請求の範囲】
【請求項１】
受付可能な動作コマンドの種類が異なる複数のステートのいずれかで動作するメモリカードを制御するメモリカード制御装置において、
ホストシステムが前記メモリカードのアクセスのために発行する、前記メモリカードが実行すべき動作を直接的に指定する動作コマンドと当該動作コマンドに対応する動作を実行すべき前記メモリカードのステートを示す実行ステート情報とを含むダイレクトコマンドを受信する手段と、
前記受信したダイレクトコマンドに従って、前記メモリカードをその定常ステートとして予め決められた特定のステートから前記受信したダイレクトコマンドに含まれる実行ステート情報によって指定されたステートに遷移させる処理、前記受信したダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理、および前記メモリカードを前記特定のステートに戻す処理を、順次実行するダイレクトコマンド実行手段とを具備することを特徴とするメモリカード制御装置。
【請求項２】
前記複数のステートには第１および第２のステートが含まれており、前記定常ステートとして予め決められた前記特定のステートは前記第１のステートであり、
前記実行ステート情報は、前記メモリカードを前記第２のステートに遷移させる必要があるかどうかを示すフラグ情報を含み、
前記ダイレクトコマンド実行手段は、
前記フラグ情報が前記第２のステートに遷移させる必要があることを示す場合、前記メモリカードを前記特定のステートである第１のステートから前記第２のステートに遷移させる処理、前記ダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理、および前記メモリカードを前記第１のステートに戻す処理を、順次実行する手段と、
前記フラグ情報が前記第２のステートに遷移させる必要がないことを示す場合、前記ダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理を実行する手段とを含むことを特徴とする請求項１記載のメモリカード制御装置。
【請求項３】
前記定常ステートとして予め決められた前記特定のステートは、前記メモリカードがそのメモリカードに内蔵されている不揮発性メモリへのデータ書き込みまたは前記不揮発性メモリからのデータ読み出しに関する動作コマンドを受付け可能なステートであることを特徴とする請求項１記載のメモリカード制御装置。
【請求項４】
前記メモリカードには、コンテンツ保護機能を持つ専用のプログラムのみがアクセス可能なデータ記憶領域であるセキュアエリアが設けられており、
前記ホストシステム上で実行される前記コンテンツ保護機能を持つ専用のプログラムが前記セキュアエリアのアクセスのために発行するアクセスコマンドは、前記ダイレクトコマンドであることを特徴とする請求項１記載のメモリカード制御装置。
【請求項５】
前記メモリカードには、前記ホストシステム上で実行されるオペレーティングシステムがアクセス可能なデータ記憶領域であるユーザデータエリアが設けられており、
前記ホストシステムから、前記ユーザデータエリアへのデータ書き込みまたは前記ユーザデータエリアからのデータ読み出しを要求するストレージアクセスコマンドを受信した場合、前記ストレージアクセスコマンドを解釈および実行して当該ストレージアクセスコマンドで指定された要求に対応する動作を前記メモリカードに実行させるために必要な１以上の動作コマンドを前記メモリカードに発行した後、前記メモリカードを前記定常ステートとして予め決められた前記特定のステートに戻す処理を実行するストレージアクセスコマンド実行手段をさらに具備することを特徴とする請求項１記載のメモリカード制御装置。
【請求項６】
受付可能な動作コマンドの種類が異なる複数のステートのいずれかで動作するメモリカードを、ホストシステムからのアクセスコマンドに応じて制御するメモリカード制御装置において、
前記メモリカードには、前記ホストシステム上で実行されるオペレーティングシステムがアクセス可能なデータ記憶領域であるユーザデータエリアと、前記ホストシステム上で実行されるコンテンツ保護機能を持つ専用のプログラムのみがアクセス可能なデータ記憶領域であるセキュアエリアとが設けられており、
前記ホストシステムからのアクセスコマンドが、前記メモリカードに実行させるべき前記セキュアエリアのアクセスに関する動作を直接的に指定する動作コマンドと当該動作コマンドに対応する動作を実行すべき前記メモリカードのステートを示す実行ステート情報とを含むダイレクトコマンド、および前記ユーザデータエリアへのデータ書き込みまたは前記ユーザデータエリアからのデータ読み出しを要求するストレージアクセスコマンド、のいずれであるかを判別する手段と、
前記アクセスコマンドが前記ダイレクトコマンドである場合、前記メモリカードを前記ダイレクトコマンドに含まれる実行ステート情報によって指定されたステートに遷移させる処理、前記ダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理、および前記メモリカードをその定常ステートとして予め決められた特定のステートに戻す処理を、順次実行するダイレクトコマンド実行手段と、
前記アクセスコマンドが前記ストレージアクセスコマンドである場合、前記ストレージアクセスコマンドを解釈および実行して当該ストレージアクセスコマンドで指定された要求に対応する動作を前記メモリカードに実行させるために必要な１以上の動作コマンドを前記メモリカードに発行した後、前記メモリカードを前記定常ステートとして予め決められた前記特定のステートに戻す処理を実行するストレージアクセスコマンド実行手段とを具備することを特徴とするメモリカード制御装置。
【請求項７】
前記複数のステートには第１および第２のステートが含まれており、前記定常ステートとして予め決められた前記特定のステートは前記第１のステートであり、
前記実行ステート情報は、前記メモリカードを前記第２のステートに遷移させる必要があるかどうかを示すフラグ情報を含み、
前記ダイレクトコマンド実行手段は、
前記フラグ情報が前記第２のステートに遷移させる必要があることを示す場合、前記メモリカードを前記特定のステートである第１のステートから前記第２のステートに遷移させる処理、前記ダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理、および前記メモリカードを前記第１のステートに戻す処理を、順次実行する手段と、
前記フラグ情報が前記第２のステートに遷移させる必要がないことを示す場合、前記ダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理を実行する手段とを含むことを特徴とする請求項６記載のメモリカード制御装置。
【請求項８】
前記定常ステートとして予め決められた前記特定のステートは、前記メモリカードが前記ユーザデータエリアへのデータ書き込みまたは前記ユーザデータエリアからのデータ読み出しに関する動作コマンドを受付け可能なステートであることを特徴とする請求項６記載のメモリカード制御装置。
【請求項９】
前記オペレーティングシステムが前記ユーザデータエリアのアクセスのために発行するアクセスコマンドは前記ストレージアクセスコマンドであり、前記コンテンツ保護機能を持つ専用のプログラムが前記セキュアエリアのアクセスのために発行するアクセスコマンドは、前記ダイレクトコマンドであることを特徴とする請求項６記載のメモリカード制御装置。
【請求項１０】
受付可能な動作コマンドの種類が異なる複数のステートのいずれかで動作するメモリカードを制御可能なデータ処理装置において、
前記メモリカードには、前記データ処理装置上で実行されるオペレーティングシステムがアクセス可能なデータ記憶領域であるユーザデータエリアと、前記データ処理装置上で実行されるコンテンツ保護機能を持つ専用のプログラムのみがアクセス可能なデータ記憶領域であるセキュアエリアとが設けられており、
前記オペレーティングシステムまたは前記コンテンツ保護機能を持つ専用のプログラムから発行されるアクセスコマンドを順次受け付け、その受付順に、前記アクセスコマンドが、前記メモリカードに実行させるべき前記セキュアエリアのアクセスに関する動作を直接的に指定する動作コマンドと当該動作コマンドに対応する動作を実行すべき前記メモリカードのステートを示す実行ステート情報とを含むダイレクトコマンド、および前記ユーザデータエリアへのデータ書き込みまたは前記ユーザデータエリアからのデータ読み出しを要求するストレージアクセスコマンド、のいずれであるかを判別する手段と、
前記アクセスコマンドが前記ダイレクトコマンドである場合、前記メモリカードを前記実行ステート情報によって指定されたステートに遷移させる処理、前記ダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理、および前記メモリカードをその定常ステートとして予め決められた特定のステートに戻す処理を、順次実行するダイレクトコマンド実行手段と、
前記アクセスコマンドが前記ストレージアクセスコマンドである場合、前記ストレージアクセスコマンドを解釈および実行して当該ストレージアクセスコマンドで指定された要求に対応する動作を前記メモリカードに実行させるために必要な１以上の動作コマンドを前記メモリカードに発行した後、前記メモリカードを前記定常ステートとして予め決められた前記特定のステートに戻す処理を実行するストレージアクセスコマンド実行手段とを具備することを特徴とするデータ処理装置。
【請求項１１】
受付可能な動作コマンドの種類が異なる複数のステートのいずれかで動作するメモリカードを制御するメモリカード制御方法において、
ホストシステムが前記メモリカードのアクセスのために発行するアクセスコマンドを受信し、
受信したアクセスコマンドが、前記メモリカードが実行すべき動作を直接的に指定する動作コマンドと当該動作コマンドに対応する動作を実行すべき前記メモリカードのステートを示す実行ステート情報とを含むダイレクトコマンドである場合、前記メモリカードをその定常ステートとして予め決められた特定のステートから前記受信したダイレクトコマンドに含まれる実行ステート情報によって指定されたステートに遷移させる処理、前記受信したダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理、および前記メモリカードを前記特定のステートに戻す処理を、順次実行することを特徴とするメモリカード制御方法。
【請求項１２】
受付可能な動作コマンドの種類が異なる複数のステートのいずれかで動作するメモリカードを、ホストシステムからのアクセスコマンドに応じて制御するメモリカード制御方法において、
前記メモリカードには、前記ホストシステム上で実行されるオペレーティングシステムがアクセス可能なデータ記憶領域であるユーザデータエリアと、前記ホストシステム上で実行されるコンテンツ保護機能を持つ専用のプログラムのみがアクセス可能なデータ記憶領域であるセキュアエリアとが設けられており、
前記ホストシステムからのアクセスコマンドが、前記メモリカードに実行させるべき前記セキュアエリアのアクセスに関する動作を直接的に指定する動作コマンドと当該動作コマンドに対応する動作を実行すべき前記メモリカードのステートを示す実行ステート情報とを含むダイレクトコマンド、および前記ユーザデータエリアへのデータ書き込みまたは前記ユーザデータエリアからのデータ読み出しを要求するストレージアクセスコマンド、のいずれであるかを判別し、
前記アクセスコマンドが前記ダイレクトコマンドである場合、前記メモリカードを前記ダイレクトコマンドに含まれる実行ステート情報によって指定されたステートに遷移させる処理、前記ダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理、および前記メモリカードをその定常ステートとして予め決められた特定のステートに戻す処理を、順次実行し、
前記アクセスコマンドが前記ストレージアクセスコマンドである場合、前記ストレージアクセスコマンドを解釈および実行して当該ストレージアクセスコマンドで指定された要求に対応する動作を前記メモリカードに実行させるために必要な１以上の動作コマンドを前記メモリカードに発行した後、前記メモリカードを前記定常ステートとして予め決められた前記特定のステートに戻す処理を実行することを特徴とするメモリカード制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はメモリカードを制御するための装置および方法に関し、特に受付可能な動作コマンドの種類が異なる複数のステートのいずれかで動作するメモリカードをホストシステムからのアクセスコマンドに応じて制御するための装置および方法に関する。
【０００２】
【従来の技術】
近年、パーソナルコンピュータ、ＰＤＡ、カメラ、携帯電話等の様々な携帯型電子機器が開発されている。これら電子機器においては、リムーバブル記憶デバイスの１つであるメモリカードが多く用いられている。メモリカードとしては、ＰＣＭＣＩＡカード（ＰＣカード）、およびそれよりもさらに小型のＳＤ（Secure Digital）カード、が知られている。
【０００３】
このＳＤカードはフラッシュメモリを内蔵するメモリカードであり、セキュリティ、容量、および高速化の要求に見合うように特に設計されている。ＳＤカードは音楽データなどのコンテンツの著作権保護を目的としたセキュリティ機能を有しており、ＳＤカードに記憶した音楽データをその不正コピーなどから保護することができる。
【０００４】
一般に、このようなセキュリティ機能付きメモリカードは、カード内にコントローラと、ユーザが自由にアクセス可能なデータ記憶領域であるユーザデータエリアと、セキュリティ機能に守られたデータ記憶領域であるセキュアエリアが設けられている。
【０００５】
メモリカードがメモリカードアダプタ（ホストコントローラ）のようなメモリカード制御装置を介してパーソナルコンピュータに接続された場合、オペレーティングシステムからのアクセスコマンドはメモリカード制御装置によってカード制御用の１以上の動作コマンドに変換された後にメモリカードに送られる。オペレーティングシステムからはメモリカード内のユーザデータエリアはディスク装置と同様のストレージデバイスとして見えるが、セキュアエリアの存在は全く知ることができない。セキュアエリアをアクセスできるのは、コンテンツ保護のための専用の認証機構を備えた特別なアプリケーションプログラム及び再生機器のみである。
【０００６】
これらアプリケーションプログラム及び再生機器は、セキュアエリアをアクセスするために、メモリカード制御装置に対してセキュアエリアアクセス用の専用のアクセスコマンドを発行する。専用のアクセスコマンドはメモリカード制御装置によって１以上の動作コマンドに変換されてメモリカードに送られる。
【０００７】
【発明が解決しようとする課題】
しかし、このように専用のアクセスコマンドをメモリカード用の動作コマンドに変換してセキュアエリアをアクセスするという構成では、メモリカードのセキュリティ機能等に関する動作コマンドの拡張や、アプリケーションプログラムインタフェース（ＡＰＩ）の変更に伴う専用コマンドの変更等が生じると、それに合わせてメモリカード制御装置自体も新たに設計し直す必要がある。
【０００８】
さらに、一般にメモリカードにおいては、様々なステートが定義されており、ステート毎に受け付け可能な動作コマンドが決まっている。よって、メモリカード制御装置はメモリカードの現在のステートを常に意識しながら、発行すべき動作コマンドの実行に必要なステートにメモリカードを遷移させるという複雑なステート管理制御を行う必要がある。
【０００９】
本発明は上述の事情を考慮してなされたもので、メモリカードのセキュリティ機能等に関する動作コマンドの拡張やアプリケーションプログラムインタフェース（ＡＰＩ）の変更等に柔軟に対応することができ、しかもメモリカードのステート管理制御の単純化を図ることが可能なメモリカード制御装置およびメモリカード制御方法を提供することを目的とする。
【００１０】
【課題を解決するための手段】
上述の課題を解決するため、本発明は、受付可能な動作コマンドの種類が異なる複数のステートのいずれかで動作するメモリカードを制御するメモリカード制御装置において、ホストシステムが前記メモリカードのアクセスのために発行する、前記メモリカードが実行すべき動作を直接的に指定する動作コマンドと当該動作コマンドに対応する動作を実行すべき前記メモリカードのステートを示す実行ステート情報とを含むダイレクトコマンドを受信する手段と、前記受信したダイレクトコマンドに従って、前記メモリカードをその定常ステートとして予め決められた特定のステートから前記受信したダイレクトコマンドに含まれる実行ステート情報によって指定されたステートに遷移させる処理、前記受信したダイレクトコマンドに含まれる前記動作コマンドを前記メモリカードに発行して前記動作コマンドに対応する動作を前記メモリカードに実行させる処理、および前記メモリカードを前記特定のステートに戻す処理を、順次実行するダイレクトコマンド実行手段とを具備することを特徴とする。
【００１１】
このメモリカード制御装置においては、ホストシステムからメモリカードをアクセスするためのアクセスコマンドとして、メモリカードに実行すべき動作を直接的に指定する動作コマンドを含むダイレクトコマンドが用いられている。さらに、このダイレクトコマンドには実行ステート情報も含まれており、メモリカードに発行すべき動作コマンドのみならず、その動作コマンドをメモリカードのどのステートで実行すべきかもダイレクトコマンドによって同時に指定される。ホストシステム上で実行されるソフトウェア等からダイレクトコマンドを受信した場合、１）メモリカードをダイレクトコマンドに含まれる実行ステート情報によって指定されたステートに遷移させる処理、２）ダイレクトコマンドに含まれる動作コマンドをメモリカードに発行して動作コマンドに対応する動作をメモリカードに実行させる処理、および３）メモリカードをその定常ステートとして予め決められた特定のステートに戻す処理が、順次実行される。
【００１２】
このようなダイレクトコマンドを用いることにより、ダイレクトコマンドに含まれる動作コマンドをそのままメモリカードに発行することが可能となるので、インテレジェントなアクセスコマンドを解釈してそのアクセスコマンドを１以上の動作コマンドに変換するといった処理は不要となる。このため、ダイレクトコマンドを例えばセキュアエリアのアクセスに使用することにより、セキュリティ機能の追加・変更等に伴う動作コマンドの拡張、およびアプリケーションプログラムインタフェース（ＡＰＩ）の変更等がなされても、ダイレクトコマンドを発行するソフトウェアのアップデートのみでそれに対応することが可能となる。
【００１３】
さらに、１つのダイレクトコマンドの実行処理過程において、動作コマンドをメモリカードに発行する前にメモリカードを実行ステート情報で指定されたステートに遷移させ、動作コマンドの発行後にメモリカードのステートを定常ステートに戻すという処理が自動的に行われるので、ステート遷移を伴うダイレクトコマンドを実行しても、その実行処理後は常にメモリカードのステートはステート遷移前の定常ステートに戻される。このようにメモリカードを定常ステートに維持しておくことにより、ホストシステムおよびメモリカード制御装置のどちらにおいても、メモリカードのステート管理を一切行うことなく、ダイレクトコマンドに含まれる実行ステージ情報に従ってメモリカードのステートを遷移させるだけで、所望の動作をメモリカードに正常に実行させることが可能となる。
【００１４】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を説明する。
図１には、本発明の一実施形態に係るメモリカード制御装置を用いたデータ処理装置システムの構成が示されている。このデータ処理装置システムは、ホスト装置１１と、ホスト装置１１にＳＤメモリカード１３を接続するためのＳＤカードアダプタ１２とから構成されている。ホスト装置１１は例えばパーソナルコンピュータなどのデータ処理装置である。本例では、ＳＤカードアダプタ１２はＵＳＢ（Universal Serial Bus）デバイスとして実現されており、ＵＳＢケーブル１１７を介してホスト装置１１のＵＳＢコントローラ１１６に接続される。
【００１５】
ＳＤカードアダプタ１２には、ＳＤメモリカード１３を着脱自在に装着することができる。ＳＤメモリカード１３はコンテンツの著作権保護を目的としたセキュリティ機能を有するメモリカードである。ＳＤメモリカード１３には、ユーザが自由にリード／ライトアクセス可能なデータ記憶領域であるストレージエリア（ユーザデータエリアとも言う）１３１と、セキュリティ機能に守られたデータ記憶領域であるセキュアエリア１３２が設けられている。
【００１６】
ＳＤメモリカード１３には様々なステートが定義されており、ＳＤカードアダプタ１２からの動作コマンド、およびＳＤメモリカード１３の内部動作の進捗に合わせてステートの遷移が行われる。この場合、ＳＤメモリカード１３が受け付けおよび実行可能な動作コマンドの種類はステート毎に決められており、ある動作コマンドに対応する動作をＳＤメモリカード１３に実行させるためには、その動作コマンドを受付けおよび実行可能なステートにＳＤメモリカード１３を前もって設定しておくことが必要となる。
【００１７】
ホスト装置１１においては、図示のように、データファイルを扱うファイラソフトなどの通常のアプリケーションプログラム１１１と、著作権保護機能を持つアプリケーションプログラム（ＳＤアプリケーションプログラム）１１２が実行される。
【００１８】
アプリケーションプログラム１１１は、ホスト装置１１上で実行されるオペレーティングシステム（ＯＳ）の一部であるファイルシステム１１３を通じて、ストレージエリア１３１へのデータファイルの書き込み、およびストレージエリア１３１からのデータファイルの読み出しを行うことが出来る。
【００１９】
すなわち、オペレーティングシステム（ＯＳ）のＵＳＢストレージクラスドライバ１１４は、ファイルシステム１１３を介して入力されるアプリケーションプログラム１１１からのファイル操作要求に応じて、ＵＳＢドライバ１１５、ＵＳＢコントローラ１１６を介してＳＤカードアダプタ１２に対してアクセスコマンドを発行する。これにより、ＯＳのファイルシステム１１３は、ＳＤメモリカード１３のストレージエリア１３１をディスク装置と同様のストレージデバイスとして扱うことが出来る。
【００２０】
このアクセスコマンドはＡＴＡコマンドに準拠したインテリジェントなディスクアクセスコマンドであり、ＳＤカードアダプタ１２によってＳＤメモリカード１３用の１以上の動作コマンドに変換された後にＳＤメモリカード１３に送られる。以下、ストレージエリア１３１のアクセスのためにＯＳのＵＳＢストレージクラスドライバ１１４からＳＤカードアダプタ１２に発行されるアクセスコマンドを、“ＯＳストレージコマンド”と称することにする。
【００２１】
ＳＤアプリケーションプログラム１１２は、ＳＤメモリカード１３のセキュリティ機能に対応した専用の認証機構を備えており、ＳＤメモリカード１３のストレージエリア１３１のみならず、セキュアエリア１３２をもアクセスすることができる。セキュアエリア１３２をアクセスする場合、ＳＤアプリケーションプログラム１１２は、ＵＳＢドライバ１１５、ＵＳＢコントローラ１１６を介してＳＤカードアダプタ１２に対してアクセスコマンドを発行する。
【００２２】
このアクセスコマンドはＳＤメモリカード１３にそのまま発行することが可能なダイレクトコマンドであり（パススルーコマンド）、ＳＤメモリカード１３に実行させるべき動作を直接的に指定可能なＳＤカード１３用の動作コマンドを含んでいる。
【００２３】
さらに、このダイレクトコマンドには、そのダイレクトコマンドのパラメータとして実行ステート情報が含まれている。実行ステート情報は、当該ダイレクトコマンドに含まれる動作コマンドに対応する動作をＳＤメモリカード１３のどのステートで実行すべきかを指定する。以下、セキュアエリア１３２のアクセスのためにＳＤアプリケーションプログラム１１２からＳＤカードアダプタ１２に発行されるアクセスコマンドを、“実行ステート付きＳＤダイレクトコマンド”と称することにする。
【００２４】
ＳＤカードアダプタ１２は、そのＳＤカードスロットに装着されたＳＤメモリカード１３を、ＳＤメモリカード１３を使用するホストシステムからのアクセスコマンドに応じて制御する。ＳＤカードアダプタ１２が接続されたホスト装置１１が、具体的にはホスト装置１１上で実行されるＯＳおよびＳＤアプリケーションプログラム１１２がそれぞれホストシステムとして機能する。
【００２５】
ＳＤカードアダプタ１２には、ホストコントローラ１２１が内蔵されている。ホストコントローラ１２１はホスト装置１１とＳＤメモリカード１３との間のインタフェースを行うためのものであり、ＳＤバス１２４を介してＳＤメモリカード１３との間の通信を実行する。このホストコントローラ１２１はマイクロコンピュータを用いて実現されている。ＳＤメモリカード１３とホストコントローラ１２１との間の通信は全てホストコントローラ１２１からの動作コマンドによって制御される。
【００２６】
ホストコントローラ１２１は、ＯＳストレージコマンド実行部１２２とＳＤダイレクトコマンド実行部１２３を有している。ＯＳストレージコマンド実行部１２２は上述のＯＳストレージコマンドを解釈及び実行して、ＯＳストレージコマンドで要求されてデータリード／ライト動作をＳＤメモリカード１３に実行させる為に必要な１以上の動作コマンドを生成し、それら動作コマンドを用いてＳＤメモリカード１３を制御する。
【００２７】
さらに、ＯＳストレージコマンド実行部１２２は、ＯＳストレージコマンドを解釈及び実行した後、ＳＤメモリカード１３のステートを予め決められた特定のステートに戻すための処理を実行する。これは、ＯＳストレージコマンドのコマンド処理実行後は、常にＳＤメモリカード１３をある特定の定常ステートに維持しておくためである。
【００２８】
ＳＤダイレクトコマンド実行部１２３は上述の実行ステート付きＳＤダイレクトコマンドを実行する。この実行ステート付きＳＤダイレクトコマンドの実行過程においては、１）ＳＤメモリカード１３を実行ステート情報によって指定されたステートに遷移させる処理、２）実行ステート付きＳＤダイレクトコマンドに含まれる動作コマンドをＳＤメモリカード１３にそのまま発行してその動作コマンドに対応する動作をＳＤメモリカード１３に実行させる処理、および３）ＳＤメモリカード１３を上述の特定のステートに遷移させてＳＤメモリカード１３のステートを定常ステートに戻す処理が、この順で順次実行される。これにより、ステート遷移を伴う実行ステート付きダイレクトコマンドを実行しても、その実行処理後は常にＳＤメモリカード１３のステートはステート遷移前の定常ステートに戻されることになる。
【００２９】
なお、実行ステート情報によって指定されたステートが定常ステートである場合は、１）と３）の処理は省略され、２）の処理だけが実行される。
【００３０】
このように、ＳＤカードアダプタ１２においては、ホスト装置１１からのアクセスコマンドが受信され、その受信されたアクセスコマンドがＯＳストレージコマンドであるか、実行ステート付きダイレクトコマンドであるかに応じて、互いに異なる処理が実行される。
【００３１】
次に、図２を参照して、ＳＤメモリカード１３の構成の一例について説明する。
【００３２】
ＳＤメモリカード１３には、図示のように、インタフェースドライバ回路２０１、カードインタフェースコントローラ２０２、メモリコアインタフェース２０３、およびメモリコア２０４が内蔵されている。メモリコア２０４は例えばフラッシュＥＥＰＲＯＭ等の不揮発性メモリから構成されており、この不揮発性メモリの記憶空間に上述のストレージエリア１３１とセキュアエリア１３２が設けられている。
【００３３】
カードインタフェースコントローラ２０２は、インタフェースドライバ回路２０１を介してホストコントローラ１２１から受信した動作コマンドに応じた動作を実行する内部コア回路である。このカードインタフェースコントローラ２０２には、セキュアエリア１３２に関する各種ステータス情報の格納に用いられるレジスタ群も内蔵されている。
【００３４】
セキュアエリア１３２に関する各種ステータス情報もセキュアエリア１３２と同様にカードインタフェースコントローラ２０２のセキュリティ機能によって保護されており、その意味で、セキュアエリア１３２に関する各種ステータス情報の格納に用いられるレジスタ群も、セキュアエリア１３２の一部である。よって、セキュアエリア１３２に関する各種ステータス情報のリードアクセスについても、上述の実行ステート付きダイレクトコマンドを用いて実行される。
【００３５】
メモリコアインタフェース２０３は、カードインタフェースコントローラ２０２の制御の下、メモリコア２０４へのデータ書き込み及びメモリコア２０４からのデータ読み出しを実行する。
【００３６】
ＳＤバス１２４には、６本の通信線（データＤＡＴ０−３，コマンドＣＭＤ，クロックＣＬＫ）と３本の電源供給線（ＶＤＤ，ＶＳＳ，ＶＳＳ）が定義されている。６本の通信線（データＤＡＴ０−３，コマンドＣＭＤ，クロックＣＬＫ）の機能は次の通りである。
【００３７】
・ＤＡＴ０−３：  各データ線はホストコントローラ１２１とＳＤメモリカード１３との間のデータ転送に使用される双方向信号線である。
・ＣＭＤ：  ホストコントローラ１２１からＳＤメモリカード１３への動作コマンド（単にコマンドと言う場合もある）の転送、およびＳＤメモリカード１３からホストコントローラ１２１へのレスポンスの転送に使用される。
【００３８】
・ＣＬＫ：  クロック信号線はホストコントローラ１２１からＳＤメモリカード１３へクロック信号ＣＬＫを送信するための信号線である。ホストコントローラ１２１からＳＤメモリカード１３への動作コマンドの転送、およびホストコントローラ１２１とＳＤメモリカード１３との間のデータ転送などは、クロック信号ＣＬＫに同期して実行される。
【００３９】
図３には、ＳＤメモリカード１３の代表的な２つのステートとそれらステートそれぞれで受付および実行可能な動作コマンドとの関係の一例が示されている。
【００４０】
ＳＤメモリカード１３においては、以下のようなステートが定義されている。
【００４１】
・  スタンドバイステート（Stand-by State）
・  トランスファステート（Transfer State）
・  データ送信ステート（Sending-data State）
・  データ受信ステート（Receive-data State）
・  プログラミングステート（Programming State）
・  ディスクコネクトステート（Disconnect State）
この内、スタンドバイステート（Stand-by State）は電力消費の少ない一種のパワーセーブステートであり、このステートで受付け及び実行可能な動作コマンドは、メモリコア２０４のアクセスに関する動作コマンド以外の動作コマンド、例えば、“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンド、“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンド、等である。“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンドは、セキュアエリア１３２に関する各種ステータス情報などの取得を要求する動作コマンドである。“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンドはトランスファステートへの遷移を要求する動作コマンドである。
【００４２】
トランスファステート（Transfer State）は、ＳＤメモリカード１３がホストコントーラ１２１からのメモリコア２０４のアクセスに関する動作コマンドを受付けることが可能なステートであり、このステートでは、例えば、“ＳＤ＿ｒｅａｄ”コマンド、“ＳＤ＿ｗｒｉｔｅ”コマンド、“ＳＤ＿ｓｔａｎｄｂｙ”コマンド、等が受け付け可能である。
【００４３】
“ＳＤ＿ｒｅａｄ”コマンドはメモリコア２０４のストレージエリア１３１からのデータ読み出しを要求する動作コマンドであり、また“ＳＤ＿ｗｒｉｔｅ”コマンドはメモリコア２０４のストレージエリア１３１へのデータ書き込みを要求する動作コマンドである。トランスファステート（Transfer State）で“ＳＤ＿ｒｅａｄ”コマンドを受信したとき、ＳＤメモリカード１３は、データ送信ステート（Sending-data State）に移行する。データ送信ステート（Sending-data State）はメモリコア２０４からデータを読み出して、ＳＤメモリカード１３からホストコントローラ１２１に、読み出しデータを送信するステートである。リードコマンド処理が完了すると、ＳＤメモリカード１３は、トランスファステート（Transfer State）に戻る。
【００４４】
トランスファステート（Transfer State）で“ＳＤ＿ｗｒｉｔｅ”コマンドを受信したときは、ＳＤメモリカード１３は、データ受信ステート（Receive-data State）に移行する。データ受信ステート（Receive-data State）はホストコントーラ１２１から転送される書き込みデータを受信してカードインタフェースコントローラ２０２内のバッファメモリに蓄積するステートである。全ての書き込みデータの受信が終了すると、ＳＤメモリカード１３は、データ受信ステート（Receive-data State）からプログラミングステート（Programming State）に移る。プログラミングステート（Programming State）は、バッファメモリに蓄積されている書き込みデータをメモリコア２０４に書き込んでいるステートである。データ書き込みが終了すると、ＳＤメモリカード１３は、トランスファステート（Transfer State）に戻る。
【００４５】
“ＳＤ＿ｓｔａｎｄｂｙ”コマンドは、トランスファステートへの遷移を要求する動作コマンドである。なお、“ＳＤ＿ｓｔａｎｄｂｙ”コマンドと“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンドは実際には同一の動作コマンド（ＣＭＤ７）で表現され、スタンバイステートで動作コマンド（ＣＭＤ７）を受信すると、トランスファステートへの遷移が行われ、トランスファステートで動作コマンド（ＣＭＤ７）を受信すると、スタンバイステートへの遷移が行われる。
【００４６】
さらに、トランスファステートにおいては、メモリコア２０４のセキュアエリア１３２からのデータ読み出しを要求する“ＳＤ＿ｓｅｃｕｒｅ＿ｒｅａｄ”コマンド、メモリコア２０４のセキュアエリア１３２へのデータ書き込みを要求する“ＳＤ＿ｓｅｃｕｒｅ＿ｗｒｉｔｅ”コマンドを受付けることも出来る。“ＳＤ＿ｓｅｃｕｒｅ＿ｒｅａｄ”コマンド、および“ＳＤ＿ｓｅｃｕｒｅ＿ｗｒｉｔｅ”コマンドを受付けたときのＳＤメモリカード１３のステート遷移動作は、上述した“ＳＤ＿ｒｅａｄ”コマンド、および“ＳＤ＿ｗｒｉｔｅ”コマンドを受付けた場合と同様である。
【００４７】
本実施形態では、上述の定常ステートしてトランスファステートが用いられる。スタンバイステートに設定する必要がある場合以外はＳＤメモリカード１３を常にトランスファステートに維持しておくことにより、メモリコア２０４のアクセスに関する動作コマンドをＳＤメモリカード１３に即座に発行することが可能となる。
【００４８】
次に、ＯＳから発行されるアクセスコマンド（ＯＳストレージコマンド）と、ＳＤアプリケーションプログラム１１２から発行されるアクセスコマンド（実行ステート付きダイレクトコマンド）との間の調停動作について説明する。
【００４９】
ここでは、まず、実行ステート付きダイレクトコマンドを用いる意味を明確にするために、ＳＤアプリケーションプログラム１１２から発行されるダイレクトコマンドに実行ステートが付随していない場合を想定する。
【００５０】
ＳＤアプリケーションプログラム１１２はＳＤメモリカード１３が直接解釈可能な動作コマンドを用いたダイレクトコマンドをアクセスコマンドとして発行する。このため、セキュアエリア１３２に関する各種ステータス情報などの取得を要求する場合には、ＳＤアプリケーションプログラム１１２は、図４に示すように、３つのダイレクトコマンド、すなわち“ＳＤ＿ｓｔａｎｄｂｙ”コマンド、“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンド、“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンド、を順次発行する。
【００５１】
ホスト装置１１においては、全てのプログラムがマルチタスク形式で並列的に実行されている。オペレーティングシステムとＳＤアプリケーションプログラム１１２も並列実行されるので、例えばＳＤアプリケーションプログラム１１２からの“ＳＤ＿ｓｔａｎｄｂｙ”コマンドの発行と“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンドの発行との間に、ＯＳからＯＳストレージコマンドが発行される場合もある。このＯＳストレージコマンドがストレージエリア１３１からのデータ読み出しを要求するためのＩＯリード要求コマンドＯＳ＿ｒｅａｄである場合、ＳＤカードアダプタ１２はＩＯリード要求コマンドＯＳ＿ｒｅａｄを“ＳＤ＿ｒｅａｄ”コマンドに変換して、ＳＤメモリカード１３に発行する。
【００５２】
したがって、ＳＤメモリカード１３が受信する動作コマンドの順番は、“ＳＤ＿ｓｔａｎｄｂｙ”コマンド、“ＳＤ＿ｒｅａｄ”コマンド、“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンド、“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンドとなる。
【００５３】
“ＳＤ＿ｒｅａｄ”コマンドはトランスファステートでのみ受付け可能なコマンドであるので、“ＳＤ＿ｒｅａｄ”コマンドに対応する動作を正常にＳＤメモリカード１３に実行させることはできない。以降の“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンド、“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンドに対応するＳＤメモリカード１３の動作も保証されない。
【００５４】
本実施形態では、実行ステート付きダイレクトコマンドを用いているので、上述のような不具合は生じない。この様子を図５に示す。
【００５５】
図５に示されているように、ＳＤアプリケーションプログラム１１２は、“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンドとそれを実行すべきステート（スタンバイステート）を示す実行ステート情報とを含む実行ステート付きダイレクトコマンドを生成し、それをＳＤカードアダプタ１２に１つのアクセスコマンドとして発行する。
【００５６】
ＳＤカードアダプタ１２は、ＳＤアプリケーションプログラム１１２から実行ステート付きダイレクトコマンドを受信すると、その実行ステート付きダイレクトコマンドを実行して、３つの動作コマンド、すなわち“ＳＤ＿ｓｔａｎｄｂｙ”コマンド、“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンド、“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンド、をＳＤメモリカード１３に順次発行する。ＳＤカードアダプタ１２はＯＳまたはＳＤアプリケーションプログラム１１２からのアクセスコマンドを受付順に順次実行する。したがって、ＯＳからＳＤカードアダプタ１２に対してアクセスコマンド、例えばＩＯリード要求コマンドＯＳ＿ｒｅａｄが何時発行されても、図４で説明したような不具合は生じない。
【００５７】
次に、図６を参照して、受信したアクセスコマンドがＯＳストレージコマンドであるか実行ステート付きダイレクトコマンドであるかをＳＤカードアダプタ１２がどのようにして判別するかについて説明する。
【００５８】
本例では、ＳＤカードアダプタ１２をＵＳＢデバイスとして実現しているので、ＯＳまたはＳＤアプリケーションプログラム１１２からのアクセスコマンドはＵＳＢパケットの形式でＳＤカードアダプタ１２に送られる。ＵＳＢパケット内には通常は使用されない予約フィールドがある。
【００５９】
ＳＤアプリケーションプログラム１１２は、ＵＳＢドライバ１１５に実行ステート付きダイレクトコマンドの送信を要求するとき、予約フィールドにフラグ“１”を設定するようにＵＳＢドライバ１１５に要求する。ＳＤカードアダプタ１２は、受信したＵＳＢパケットの予約フィールドが“１”であるか“０”であるかによって、受信したＵＳＢパケットのペイロード等に含まれるアクセスコマンドがＯＳストレージコマンドであるか実行ステート付きダイレクトコマンド（ベンダ・ユニークコマンド）であるかを判別することが出来る。
【００６０】
図７には、実行ステート付きダイレクトコマンドのフォーマットの一例が示されている。
【００６１】
実行ステート付きダイレクトコマンドは４バイトからなる。オペレーションコード（Operation Code）は、実行ステート付きダイレクトコマンドに含まれる動作コマンドのタイプを示すパラメータである。動作コマンドのタイプは、
・データなしコマンド：  ＳＤメモリカード１３との間のデータ転送が一切不要な動作コマンド
・リードデータありコマンド：  ＳＤメモリカード１３からのデータ読み出しを伴う動作コマンド
・ライトデータありコマンド：  ＳＤメモリカード１３へ書き込むべきライトデータを伴う動作コマンド
の３種類がある。
【００６２】
スタンバイフラグ情報（Stand-by flag）は、実行ステートを指定するパラメータ（実行ステート情報）である。Stand-by flag＝“１”は、動作コマンドをスタンバイステートで実行すべきことを示す。本実施形態では、ＳＤメモリカード１３の定常ステートはトランスファステートであるので、Stand-by flag＝“１”は、動作コマンド発行前にＳＤメモリカード１３をスタンバイステートに遷移させ、動作コマンドを発行してそれに対応する動作が完了した後にＳＤメモリカード１３をトランスファステートに戻すことを、意味している。Stand-by flag＝“０”は、動作コマンド発行前にＳＤメモリカード１３のステート遷移を行う必要がないこと、言い換えれば、動作コマンドを定常ステートであるトランスファステートで実行すべきことを示す。
【００６３】
拡張コマンドフラグ情報（ACMD flag）は、この実行ステート付きダイレクトコマンドに含まれる動作コマンドが拡張コマンドであるかどうかを示す。ACMD flag＝“１”は拡張コマンドであることを示す。コマンドインデックス情報（Command Index to the memory card）は動作コマンドを示すものであり、当該動作コマンドのコマンド番号から構成される。ACMD flag＝“１”の場合には、コマンドインデックス情報で指定されたコマンド番号の動作コマンドの発行に先立って、拡張コマンドであることを示す動作コマンド（ＣＭＤ５５）が発行される。
【００６４】
アーギュメント情報（Command Argument to the memory card）は当該動作コマンドに関する変数等を示す。転送長情報（Data transfer length）は、当該動作コマンドが書き込みデータまたは読み出しデータを伴うコマンドである場合に、その書き込みデータまたは読み出しデータのデータ転送長を示す。
【００６５】
次に、図８を参照して、ホストコントローラ１２１の具体的な構成の一例について説明する。
【００６６】
ホストコントローラ１２１には、上述のＯＳストレージコマンド実行部１２２、およびＳＤダイレクトコマンド実行部１２３に加え、図示のように、コマンド入力バッファ３０１、コマンドディスパッチャ３０２、ＳＤバスインタフェース３０９を備えている。コマンド入力バッファ３０１は例えば先入れ先出し方式のプーリングバッファであり、ＯＳまたはＳＤアプリケーションプログラム１１２から発行されるアクセスコマンドを受信し、その受信したアクセスコマンドを一時的に蓄積する。
【００６７】
コマンドディスパッチャ３０２は、コマンド入力バッファ３０１に蓄積されたアクセスコマンドの種類に応じて、それをＯＳストレージコマンド実行部１２２およびＳＤダイレクトコマンド実行部１２３のどちらに実行させるかを決定する。すなわち、コマンドディスパッチャ３０２は、ＯＳまたはＳＤアプリケーションプログラム１１２から発行されたアクセスコマンドがＯＳストレージコマンドと実行ステート付きダイレクトコマンドのいずれであるかを判別し、ＯＳストレージコマンドであればＯＳストレージコマンド実行部１２２にそのコマンドを処理させ、実行ステート付きダイレクトコマンドであればＳＤダイレクトコマンド実行部１２３にそのコマンドを処理させる。この判別処理は、先に発行されたアクセスコマンドから順に行われる。
【００６８】
ＯＳストレージコマンド実行部１２２には、ＯＳストレージコマンド解釈部３０３、ＳＤコマンド発行部３０４、およびステート復元部３０５が設けられている。ＯＳストレージコマンド解釈部３０３は、コマンドディスパッチャ３０２から受け取ったＯＳストレージコマンドを解釈し、そのＯＳストレージコマンドによって指定された要求に対応する動作をＳＤメモリカード１３に実行させるために必要な１以上の動作コマンドを決定する。これら決定された動作コマンドはＳＤコマンド発行部３０４に通知される。また決定された動作コマンドの中に、スタンバイステートへの遷移を示す“ＳＤ＿ｓｔａｎｄｂｙ”コマンドが含まれる場合には、そのことがステート復元部３０５に通知される。つまり、ＯＳストレージコマンド解釈部３０３は、どの動作コマンドがＳＤメモリカード１３のどのステートで実行可能であるかを管理しており、定常ステートであるトランスファステートでは実行できず、スタンバイステートに遷移させることが必要な動作コマンドについては、その動作コマンドの前に“ＳＤ＿ｓｔａｎｄｂｙ”コマンドを発行すべきことを決定する。
【００６９】
ＳＤコマンド発行部３０４は、ＯＳストレージコマンドによって指定された要求に対応する動作をＳＤメモリカード１３に実行させるために、ＯＳストレージコマンド解釈部３０３から通知された１以上の動作コマンドをＳＤバスインタフェースを通じてＳＤメモリカード１３に発行する。
【００７０】
ステート復元部３０５は、ＳＤメモリカード１３の動作完了後に、ＳＤメモリカード１３のステートを定常ステート（トランスファステート）に戻すために、“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンドを発行する。ＯＳストレージコマンドによって指定された要求に対応する動作が全てトランスファステートで実行できる場合、つまりＳＤメモリカード１３に発行された動作コマンドの中に、スタンバイステートへの遷移を示す“ＳＤ＿ｓｔａｎｄｂｙ”コマンドが含まれていない場合には、ＳＤメモリカード１３はトランスファステートに維持されているため、ステート復元部３０５による“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンドの発行は行われない。
【００７１】
ＳＤダイレクトコマンド実行部１２３には、ＳＤダイレクトコマンド解釈部３０６、実行ステート解釈部３０７、およびＳＤコマンド発行部３０８が設けられている。ＳＤダイレクトコマンド解釈部３０６はコマンドディスパッチャ３０２から受け取った実行ステート付きダイレクトコマンドに含まれるコマンドインデックス情報を取り出し、そのコマンドインデックス情報で示されるコマンドコード番号をそのまま、発行すべき動作コマンドとしてＳＤコマンド発行部３０８に通知する（コマンドパススルー）。
【００７２】
実行ステート解釈部３０７は、コマンドディスパッチャ３０２から受け取った実行ステート付きダイレクトコマンドに含まれるスタンバイフラグ情報（Stand-by flag）を解釈し、Stand-by flag＝“１”であれば、ＳＤコマンド発行部３０８に対して、ＳＤダイレクトコマンド実行部１２３から通知された動作コマンドの発行前に“ＳＤ＿ｓｔａｎｄｂｙ”コマンドを発行し、且つＳＤダイレクトコマンド実行部１２３から通知された動作コマンドに対応するＳＤメモリカード１３の動作が完了した後に“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンドを発行すべきことを、通知する。
【００７３】
ＳＤコマンド発行部３０８は、ＳＤダイレクトコマンド解釈部３０６および実行ステート解釈部３０７からの指示に従い、ＳＤバスインタフェース３０９を介してＳＤメモリカード１３に動作コマンドを発行する。
【００７４】
次に、図９を参照して、ＯＳストレージコマンドおよび実行ステート付きダイレクトコマンドがＳＤカードアダプタ１２によってどのように処理されるかについて説明する。
【００７５】
例えばアプリケーションプログラム１１１がＯＳのファイルシステム１１３に対してストレージエリア１３１に記憶されているデータの読み出しを要求した場合には、ＯＳのＵＳＢストレージクラスドライバ１１４からはＩＯリード要求コマンドＯＳ＿ｒｅａｄがアクセスコマンドとして発行され、それがＵＳＢドライバ１１５を介してＳＤカードアダプタ１２のＯＳストレージコマンド実行部１２２に送られる。ＯＳストレージコマンド実行部１２２では、ＩＯリード要求コマンドＯＳ＿ｒｅａｄがＳＤメモリカード１３用の動作コマンドであるＳＤ＿ｒｅａｄに変換される。このＳＤ＿ｒｅａｄがＳＤメモリカード１３に送られることにより、ストレージエリア１３１からデータを読み出すためのリードアクセスが実行される。ストレージエリア１３１から読み出されたデータは、ＩＯリード要求コマンドＯＳ＿ｒｅａｄに対する応答として、ＳＤカードアダプタ１２、ＵＳＢストレージクラスドライバ１１４、ファイルシステム１１３を介して、アプリケーションプログラム１１１に渡される。
【００７６】
一方、例えばＳＤアプリケーションプログラム１１２がセキュアエリア１３２に関するステータス情報を取得する場合には、ＳＤアプリケーションプログラム１１２は、スタンバイステートで“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンドを実行すべきことを示す、実行ステート付きダイレクトコマンド（ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ  ｏｎ  ｓｔａｎｄｂｙ  ｓｔａｔｅ）を発行する。この実行ステート付きダイレクトコマンドは、ＯＳのファイルシステム１１３およびＵＳＢクラスドライバ１１４を介さずに、ＳＤカードアダプタ１２のＳＤダイレクトコマンド実行部１２３に送られる。ＳＤダイレクトコマンド実行部１２３からＳＤメモリカード１３には、“ＳＤ＿ｓｔａｎｄｂｙ”コマンド、“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンド、“ＳＤ＿ｔｒａｎｓｆｅｒ”コマンド、がこの順に送られる。“ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ”コマンドに対応する動作を実行することによってＳＤメモリカード１３から読み出された情報は、ＯＳのファイルシステム１１３などを介さずに、実行ステート付きダイレクトコマンド（ＳＤ＿ｉｎｆｏｒｍａｔｉｏｎ  ｏｎ  ｓｔａｎｄｂｙ  ｓｔａｔｅ）に対する応答としてＳＤアプリケーションプログラム１１２に渡される。
【００７７】
次に、図１０のフローチャートを参照して、ＳＤカードアダプタ１２のホストコントローラ１２１によって実行されるカード制御処理の手順について説明する。
【００７８】
ホストコントローラ１２１は、コマンド入力バッファ３０１に蓄積されている最も旧いアクセスコマンドをコマンド入力バッファ３０１から取り出し、それがＯＳストレージコマンドであるか、実行ステート付きＳＤダイレクトコマンドであるかを判別する（ステップＳ１０１）。この判別は、例えば、図６で説明したようにＵＳＢパケットの予約フィールドのビット値に基づいて行えばよい。もしＯＳストレージコマンドであれば（ステップＳ１０１のＮＯ）、ホストコントローラ１２１は、ＯＳストレージコマンド実行部１２２を起動し、それにＯＳストレージコマンドを処理させる（ステップＳ１０９）。ＯＳストレージコマンド実行部１２２によるＯＳストレージコマンド処理の詳細は図１１で後述する。
【００７９】
一方、実行ステート付きＳＤダイレクトコマンドであれば（ステップＳ１０１のＹＥＳ）、ホストコントローラ１２１は、ＳＤダイレクトコマンド実行部１２３を起動し、それに実行ステート付きＳＤダイレクトコマンドを処理させる。ＳＤダイレクトコマンド実行部１２３は、まず、Stand-by flag＝“１”であるかどうかを判別し（ステップＳ１０２）、もしStand-by flag＝“１”であれば（ステップＳ１０２のＹＥＳ）、スタンバイステートへの遷移を示す“ＳＤ＿ｓｔａｎｄｂｙ”コマンド（ＣＭＤ７）をＳＤメモリカード１３に発行して、ＳＤメモリカード１３を定常ステート（トランスファステート）からスタンバイステートに遷移させる（ステップＳ１０３）。一方、Stand-by flag＝“０”であれば（ステップＳ１０２のＮＯ）、“ＳＤ＿ｓｔａｎｄｂｙ”コマンド（ＣＭＤ７）は発行されず、ＳＤメモリカード１３は定常ステート（トランスファステート）に維持される。
【００８０】
次いで、ＳＤダイレクトコマンド実行部１２３は、ACMD flag＝“１”であるかどうかを判別し（ステップＳ１０４）、もしACMD flag＝“１”であれば（ステップＳ１０４のＹＥＳ）、後続して発行される動作コマンドが拡張コマンドであることを示す動作コマンド（ＣＭＤ５５）をＳＤメモリカード１３に発行する（ステップＳ１０５）。一方、ACMD flag＝“０”であれば（ステップＳ１０４のＮＯ）、ＣＭＤ５５は発行されない。そして、ＳＤダイレクトコマンド実行部１２３は、コマンドインデックス情報（Command Index to the memory card）で指定されたコマンド番号の動作コマンドをＳＤメモリカード１３に発行して、その動作コマンドに対応する動作をＳＤメモリカード１３に実行させる（ステップＳ１０６）。この場合、必要に応じて、アーギュメント情報（Command Argument to the memory card）で指定された変数等も、当該動作コマンドのパラメタとしてＳＤメモリカード１３に発行される。
【００８１】
当該動作コマンドに対応する処理が完了した後、ＳＤダイレクトコマンド実行部１２３は、ＳＤメモリカード１３がスタンバイステートに遷移されているかどうか、つまりStand-by flag＝“１”に起因してステップＳ１０３にてＣＭＤ７を発行したかどうかを判別する（ステップＳ１０７）。ＳＤメモリカード１３がスタンバイステートに遷移されている場合、つまりステップＳ１０３にてＣＭＤ７を発行した場合には（ステップＳ１０７のＹＥＳ）、ＳＤダイレクトコマンド実行部１２３は、ＳＤメモリカード１３を定常ステートであるトランスファステートに戻すために、ＣＭＤ７をＳＤメモリカード１３に再度発行する。
【００８２】
以下、ＳＤアプリケーションプログラム１１２がセキュアエリア１３２の記憶サイズを取得する場合と、ＳＤメモリカード１３のカード属性（メモリクラスタサイズ等）を取り出す場合の例を示す。ＳＤメモリカード１３のカード属性は、セキュアエリア１３２と直接関係する情報ではないが、ＳＤアプリケーションプログラム１１２から発行されるアクセスコマンドは常に実行ステート付きダイレクトコマンドである。
【００８３】
＜セキュアエリア１３２の記憶サイズを取得する場合＞
ＳＤメモリカード１３からセキュアエリア１３２の記憶サイズを取得するための動作コマンドは、コマンド番号１３の拡張コマンド（ＡＣＭＤ１３）である。この拡張コマンド（ＡＣＭＤ１３）はトランスファステートで受け付けおよび実行可能なコマンドである。ＳＤアプリケーションプログラム１１２が発行する実行ステート付きダイレクトコマンドは、以下の通りである。
【００８４】
Operation Code ＝リードデータありコマンド
Stand-by flag  ＝０
ACMD flag      ＝１
Command Index  ＝１３
この実行ステート付きダイレクトコマンドを受け取ったホストコントローラ１２１は以下の処理を実行する。
【００８５】
（１）Stand-by flag＝０であることを確認する。
【００８６】
（２）ACMD flag＝１、つまり拡張コマンドであることを確認する。
【００８７】
（３）ＣＭＤ５５を発行する。
【００８８】
（４）Command Indexの内容（１３）をＣＭＤ１３として発行して、ＳＤメモリカード１３からセキュアエリア１３２の記憶サイズを取得する。
【００８９】
（５）Stand-by状態に遷移していないことを確認し、終了する。
【００９０】
＜カード属性（メモリクラスタサイズ等）を取得する場合＞
ＳＤメモリカード１３からカード属性（メモリクラスタサイズ等）を取得するための動作コマンドは、コマンド番号９の動作コマンド（ＣＭＤ９）である。この動作コマンド（ＣＭＤ９）はスタンバイステートで受け付けおよび実行可能なコマンドである。ＳＤアプリケーションプログラム１１２が発行する実行ステート付きダイレクトコマンドは、以下の通りである。
【００９１】
Operation Code ＝リードデータありコマンド
Stand-by flag  ＝１
ACMD flag      ＝０
Command Index  ＝９
この実行ステート付きダイレクトコマンドを受け取ったホストコントローラ１２１は以下の処理を実行する。
【００９２】
（１）Stand-by flag＝１であることを確認する。
【００９３】
（２）ＣＭＤ７を発行して、ＳＤメモリカード１３をその定常ステートであるトランスファステートからスタンバイステートに遷移させる。
【００９４】
（３）ACMD flag＝０、つまり拡張コマンドではないことを確認する。
【００９５】
（４）Command Indexの内容（９）をＣＭＤ９として発行して、ＳＤメモリカード１３からカード属性を取得する。
【００９６】
（５）Stand-by状態に遷移していることを確認する。
【００９７】
（６）ＣＭＤ７を再度発行して、ＳＤメモリカード１３をトランスファステートに戻し、終了する。
【００９８】
以上のように、本実施形態おいては、受信したアクセスコマンドに対応する処理が管理要するたびにＳＤメモリカード１３はトランスファステートに戻されるので、ＳＤアプリケーションプログラム１１２は、ＳＤメモリカード１３の現在のステートを一切考慮する必要が無く、単にスタンバイステートに遷移する必要がある動作コマンドを発行する場合にStand-by flagを“１”に設定すればよい。この場合、Stand-by flagを“１”に設定すべきか否かは、発行すべき動作コマンドによって一義的に決定される。また、ホストコントローラ１２１もStand-by flagの内容に従ってステート遷移が必要か否かを判断できるので、ＳＤメモリカード１３の現在のステートを一切考慮する必要はない。さらに、ＳＤメモリカード１３に直接発行可能な動作コマンドのコマンド番号自体がＳＤアプリケーションプログラム１１２から指定されるので、セキュリティ機能の拡張などの目的でＳＤメモリカード１３のコマンド拡張等が行われても、それに合わせてＳＤアプリケーションプログラム１１２をバージョンアップするだけで済み、ホストコントローラ１２１の仕様については一切変更する必要がない。
【００９９】
次に、図１１のフローチャートを参照して、図１０のステップＳ１０９で実行されるＯＳストレージコマンド処理の手順を説明する。
【０１００】
ＯＳストレージコマンド実行部１２２は、まず、受信したＯＳストレージコマンドを解釈して、ＯＳストレージコマンドで要求された処理をＳＤメモリカード１３に実行させるために必要な動作コマンド、およびその動作コマンドを受付けることが可能なＳＤメモリカード１３のステートを決定する（ステップＳ２０１）。ＯＳストレージコマンド実行部１２２は、決定した動作コマンドを受付けることが可能なＳＤメモリカード１３のステートがもしスタンバイステートであれば（ステップＳ２０２のＮＯ）、ＳＤメモリカード１３はその定常ステートであるトランスファステートに維持されているので、スタンバイステートへの遷移を示す“ＳＤ＿ｓｔａｎｄｂｙ”コマンド（ＣＭＤ７）をＳＤメモリカード１３に発行して、ＳＤメモリカード１３を定常ステート（トランスファステート）からスタンバイステートに遷移させる（ステップＳ２０３）。一方、決定した動作コマンドを受付けることが可能なＳＤメモリカード１３のステートがもしトランスファステートであれば（ステップＳ２０２のＹＥＳ）、ＳＤメモリカード１３はその定常ステートであるトランスファステートに維持されているので、トランスファステートに遷移させるための処理は省略される。
【０１０１】
この後、ＯＳストレージコマンド実行部１２２は、ステップＳ２０１で決定した動作コマンドをＳＤメモリカード１３に発行して、その動作コマンドに対応する動作をＳＤメモリカード１３に実行させる（ステップＳ２０４）。この場合、必要に応じて、変数等も当該動作コマンドのパラメタとしてＳＤメモリカード１３に発行される。当該動作コマンドに対応する処理が完了した後、ＯＳストレージコマンド実行部１２２は、ＳＤメモリカード１３がスタンバイステートに遷移されているかどうか、つまりステップＳ２０３にてＣＭＤ７を発行したかどうかを判別する（ステップＳ２０５）。ＳＤメモリカード１３がスタンバイステートに遷移されている場合、つまりステップＳ２０３にてＣＭＤ７を発行した場合には（ステップＳ２０５のＹＥＳ）、ＯＳストレージコマンド実行部１２２は、ＳＤメモリカード１３を定常ステートであるトランスファステートに戻すために、ＣＭＤ７をＳＤメモリカード１３に再度発行する（ステップＳ２０６）。
【０１０２】
このように、ＯＳストレージコマンドの処理のためにＳＤメモリカード１３をスタンバイステートに遷移させた場合には、そのコマンド処理後に、ＳＤメモリカード１３は自動的にトランスファステートに戻される。よって、ＯＳストレージコマンドの実行後も、ＳＤメモリカード１３をトランスファステートに維持することが出来る。
【０１０３】
なお、本実施形態では、トランスファステートをＳＤメモリカード１３の定常ステートとして使用したが、これはＳＤメモリカード１３がトランスファステートである間は、ＳＤメモリカード１３のステート遷移処理無しで、メモリコア２０４のアクセスに関する動作コマンドを即座にＳＤメモリカード１３に発行できるようにするためである。
【０１０４】
原理的には、スタンバイステートをＳＤメモリカード１３の定常ステートとして使用してもよい。この場合、実行ステート付きダイレクトコマンドには、Stand-by flagの代わりに、トランスファステートに遷移すべきかいなかを示すTransfer flagが設定されることになる。
【０１０５】
また、ホストコントローラ１２１は、パーソナルコンピュータ、ＰＤＡ、デー処理装置として機能するホスト装置１１に内蔵することも出来る。この場合、ＳＤメモリカード１３はホスト装置１１に設けられたカードスロットに取り外し自在に装着されることになる。
【０１０６】
またホスト装置１１をＳＤメモリカード１３に記憶された音楽データの再生専用のプレイヤーとして実現した場合には、ストレージエリア１３１およびセキュアエリア１３２を問わず、ＳＤメモリカード１３に対する全てのアクセスを、上述の実行ステート付きダイレクトコマンドを用いて行うようにしても良い。また実行ステート付きダイレクトコマンドを用いたカード制御はセキュアエリアを有するメモリカードに最も適しているが、メモリカードに限らず、Ｉ／Ｏカードの制御に適用することも可能である。
【０１０７】
また、上述のホストコントローラ１２１の機能はすべて、そのホストコントローラ１２１のマイクロコンピュータの動作を制御するためのプログラムであるファームウェアによって実現することが出来る。
【０１０８】
更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【０１０９】
【発明の効果】
以上説明したように、本発明によれば、メモリカードのセキュリティ機能等に関する動作コマンドの拡張やアプリケーションプログラムインタフェース（ＡＰＩ）の変更等に柔軟に対応することができ、しかもメモリカードのステート管理制御の単純化を図ることが可能となる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るメモリカード制御装置を用いたデータ処理装置システムの構成を示すブロック図。
【図２】本実施形態で使用されるメモリカードの構成の一例を示すブロック図。
【図３】本実施形態で使用されるメモリカードの代表的な２つのステートとそれらステートそれぞれで受付および実行可能な動作コマンドとの関係の一例を示す図。
【図４】本実施形態で実行ステート付きダイレクトコマンドを使用しなかった場合に生じ得る不具合を説明するための図。
【図５】本実施形態において実行ステート付きダイレクトコマンドを用いて実行されるアクセスコマンド間の調停処理を説明するための図。
【図６】本実施形態においてアクセスコマンドとして用いられるＵＳＢパケットの一例を示す図。
【図７】本実施形態において用いられる実行ステート付きダイレクトコマンドの構造の一例を示す図。
【図８】本実施形態において用いられるホストコントローラの構成の一例を示すブロック図。
【図９】本実施形態においてＯＳストレージコマンドおよび実行ステート付きダイレクトコマンドがどのように処理されるかを説明するための図。
【図１０】本実施形態で実行されるカード制御処理の手順を示すフローチャート。
【図１１】本実施形態で実行されるＯＳストレージコマンド処理の手順を示すフローチャート。
【符号の説明】
１１…ホスト装置
１２…ＳＤカードアダプタ
１３…ＳＤメモリカード
１１１…通常のアプリケーションプログラム
１１２…ＳＤアプリケーションプログラム
１１３…ファイルシステム
１１４…ＵＳＢストレージクラスドライバ
１１５…ＵＳＢドライバ
１１６…ＵＳＢコントローラ
１２１…ホストコントローラ
１２２…ＯＳストレージコマンド実行部
１２３…ＳＤダイレクトコマンド実行部
１３１…ストレージエリア
１３２…セキュアエリア
【図１】
0003641230.tif 000002
【図２】
0003641230.tif 000003
【図３】
0003641230.tif 000004
【図４】
0003641230.tif 000005
【図５】
0003641230.tif 000006
【図６】
0003641230.tif 000007
【図７】
0003641230.tif 000008
【図８】
0003641230.tif 000009
【図９】
0003641230.tif 000010
【図１０】
0003641230.tif 000011
【図１１】
0003641230.tif 000012