コマンドパススルー機構を備えたメディアカード
本発明は、ホストとメモリカードの間でアプリケーション特有の命令を伝送するための技法を呈示している。アプリケーション特有プロトコル用のコマンドは、ホストとメモリカードの間で通信するのに用いられる伝送プロトコルのデータ部分に、シグネチャーと共に埋め込まれている。これによって、伝送プロトコルに対応するコマンドを欠いているアプリケーション特有コマンドの伝送でも、なおそのプロトコルで伝送できるようになる。本方法は、ホスト側で、デバイスドライバレベル、又はファイルレベルの何れでも実施することができる。アプリケーション特有プロトコルの読み取りコマンドを実施するために、読み取りコマンドが埋め込まれている第1プロトコルの書き込みコマンドが、先ず、論理アドレスに送られ、続いて、第2読み取りコマンドが同じ論理アドレスに送られる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概括的には、取り外し可能な電子回路カードの使用と構造に、より具体的には、パーソナルコンピューター又は他のホストが、メディア特有のカードコマンドを、これらのコマンドをサポートしないリーダー及び/又はホストソフトウェアを通して、使用できるようにすることに関する。
【背景技術】
【0002】
最近、コンパクトフラッシュカード、セキュアデジタル(SD)カード、マルチメディアカード(MMC)、xD、及びソニーメモリスティック/メモリスティックProの様な小型フォーマットフラッシュメモリカードが、消費者に広く受け容れられている。これらのデバイスは、主に、デジタルカメラ及びフラッシュメモリ音楽プレーヤーの様な消費者用電子機器のために設計されている。しかしながら、それらは、更に、データをアップロード及びダウンロードするために、パーソナルコンピューターへ使い勝手良く接続できるようになっているのが望ましい。
【0003】
カードが違えば、電気的インターフェースも異なり、そのカード用のホストが使うことのできるメディア特定のコマンドを有していることも多い。更に、カードプロトコルは、カードのフォームファクタ相互間で異なるだけでなく、同じフォームファクタを有する様々なカード相互間でも異なるが、それは、これらのカードが、カード毎に異なることがある追加的機能でオーバーロードになった状態で開始されるからである。コマンドは、しばしば、特別な入力−出力(I/O)及びセキュリティオペレーションの様な固有の機能を有している。その様なカードの使用法は更に多様になり、より多くの型式のアプリケーションで用いられるので、これらの新規のアプリケーションは、既存のプロトコルには無い機能又はコマンドを伴うことも多い。
【0004】
異なる機械的及び/又は電気的インターフェースを有する市販の不揮発性メモリカードの例には、本出願の譲受人であるカリフォルニア州サニーベールのSanDisk(サンディスク)社から販売されている同類のマルチメディアカード(「MMC」)とセキュアデジタル(「SD」)メモリカードが含まれる。国際標準化機構(「ISO」)と国際電気標準会議(「IEC」)の標準に準拠している他のカードもあり、広く実施されている例は、ISO/IEC7816標準として知られている。
【0005】
MMCの物理的及び電気的仕様は、「マルチメディアカードシステム仕様書」に定められており、カリフォルニア州クパチーノのマルチメディアカード協会(「MMCA」)によって時々更新され、発行されている。1999年6月、2000年1月、2001年6月、及び2004年2月付けの、その仕様書の2.11、2.2、3.1、及び4.0バージョンを、それぞれ参考文献として明確にここに援用する。1枚のカードに128メガバイトまでの様々な記憶容量を有するMMC製品は、現在SanDisk社から販売されている。これらの製品については、SanDisk社が発行した2000年4月付けの「マルチメディアカード製品マニュアル」改訂第2版に記載されており、このマニュアルを参考文献として明確にここに援用する。MMC製品の電気的オペレーションの或る態様については、米国特許第6,279,144号と、1998年11月4日出願の米国特許出願第09/186,064号にも記載されている。物理的なカード構造と、それを製造する方法は、米国特許第6,040,622号に記載されている。SanDisk社に譲渡されているこれらの特許出願及び特許を、参考文献として明確にここに援用する。
【0006】
更に新しいSDカードは、MMCカードに似ており、追加のメモリチップを収容する厚み増加以外は、同じ寸法を有している。両者の大きな違いは、SDカードが、カードとホストの間のデータ転送をより速くできるようにするため、追加的データ接点を含んでいることである。(追加的データ接点を備えたMMCカードのバージョンも入手できる――、先に述べたMMC仕様書のバージョン4.0を参照されたい。)SDカードの別の接点は、SDカードを受け入れるように設計されているソケットがMMCカードも受け入れるようにするため、MMCカードの接点と同じになっている。SDカードとの電気的及び機能的なインターフェースは、更に、米国特許第6,820,148号に記載されている様に、SDカードを受け入れるように設計されているソケットを、MMCカードも受け入れることができるように作られており、上記特許を参考文献としてここに援用する。SDカードの或る態様については、2000年8月17日出願の米国特許出願第09/641,023号に記載されており、同出願を参考文献としてここに援用する。(SDカードの仕様書は、SD協会(SDA)のメンバー会社には入手可能である。)
【0007】
ISO/IEC7816標準に従って作られたカードは、形状が異なり、異なる位置に表面接点を有しており、MMC及びSDカードとは異なる電気的インターフェースを有している。ISO/IEC7816標準は、「識別(ID)カード−接点を備えた集積回路カード」という総タイトルを有しており、1994年から2000年までの個別のデータを担持する第1−10部で構成されている。この標準は、その複写をスイスのジュネーブのISO/IECから入手可能であり、参考文献として明確にここに援用する。ISO/IEC7816カードは、認可されていない方式でデータを読み取ることを極めて難しく又は不可能にする安全な方式でデータを記憶しなければならない用途では、特に有用である。小さなISO/IEC7816カードは、各種用途の中でも、携帯電話で広く用いられている。先に述べた様に、その様なメモリカードが新しい用途に用いられる場合、それらは、プロトコルの既存のバージョンに欠けている機能又はコマンドを必要とすることがある。この状況を図1に示している。図1の上部に示している様に、目的は、ホスト側とカード側の特定のアプリケーションの間でコマンドとデータを交換すること、換言すると安全なデータ転送又はeコマース・アプリケーションにある。これを実施するために、コマンドは、ホストとカードの間で伝送される必要があり、図1の下部は、ホスト側の幾つかのソフトウェア層と、カード側の幾つかのファームウェア層を示している。ホストのアプリケーション層からの命令は、オペレーティングシステム、ファイル層、及びデバイス(カード)ドライバを通して送られ、命令がカードに伝送されるプロトコルで終了する。カード内で、命令は、標準的なカード操作を取り扱うデバイス層のファームウェアによって取り上げられ、ファームウェアのアプリケーション層に送られる。伝送プロトコルの命令は、用いられている設備次第で、ホストからカードへ直接に、又は、適用されているリーダー又はハードウェアを通して、の何れかで交換されることになり、そのリーダー又はハードウェアは、1つのプロトコルから別のプロトコルに翻訳するのに用いられる自身のソフトウェア/ファームウェア層を有してもよい。問題が生じ得るのは、これらの層の間の翻訳における或る段階で、アプリケーションの意図された命令が、途中のある点で、対応するコマンドを欠いていることがある場合である。
【0008】
1つの例として、カードは、しばしば、ホストシステムからのコマンドを受け入れるハードウェアアダプター(例えば、USB用)を使用することにより、PCホストと接続される。しかしながら、PCホストのホストアプリケーションが、これらのコマンドをカードアプリケーションに伝送したくても、メディア特定コマンドの多くは、ホストとハードウェアアダプターが通信するプロトコルで利用できない。
【0009】
図2は、第1ホストとカードのシステムを示しており、カード101は、スロット153に挿入するなど直接に、又はある種のアダプターを通して、の何れかでホスト151に接続することができる。カードのファームウェアは、FW105で示されている。(図3のカードファームウェア105とリーダーファームウェア335の両方に関して、より一般的には、これらの機能は、ハードウェア、ソフトウェア、又はこれらの或る組み合わせで実現されるものと理解されたい。)その様なホスト151の一例は、デジタルカメラ又は電話である。多数の型式のその様なカードが、目下使用されており、開発されている。カードとホストは、多数の特定のプロトコルを通して通信し、その多くが特定のメディアに特有のものであり、プロトコルは様々なメディア特定のコマンドを含んでいることがある。コマンドの多くはメディア特有であってもよいので、その様なコマンドがホストとメディアの間で交換されるとき、ラインに沿ったどこかで、コマンドを、メディア特有のコマンドをサポートしていない別のプロトコルに翻訳しなければならない場合がある。この別のプロトコルが対応するコマンドを有していない場合、ホストは、コマンドを成功裏に発行することができなくなる。
【0010】
例えば、カードをホスト内で使用するだけでなく、ユーザーが、パーソナルコンピューター上でカードにアクセスするのも一般的である。例えば、デジタルカメラで使用したカードの場合、カードに記憶されている写真にパーソナルコンピューター上でアクセスしたいと思うのも普通のことである。この状況を、図3のボックス線図で示している。カード101は、通常、カード101の受口333を有するカードリーダー331を通して、パーソナルコンピューターPC351と通信できるようにするが、カードがPC351に直接取り付けられてもよい場合もある。リーダー331とPC351は、通常、カード101がホスト151と通信するのに使用するプロトコルとは少なくともある程度は異なる或るプロトコルを通して通信することになる。リーダー331は、ファームウェア335(又はハードウェア、ソフトウェア、又はそれらの組み合わせ)に基づいて、PC351からのコマンドを、カード101に適した形態に翻訳するが、その際一般的には、この機能は、実施形次第で、ソフトウエァとハードウェアの何らかの組み合わせで実行できるものと理解されたい。このプロセスを、図4に概略的に示している。
【0011】
具体的な例を提供するため、図4では、リーダー331は、SCSIコマンドセットを使用してPC351と通信するUSBデバイスとしており、カード101は、SDカードとしている。PC351とリーダー331は、SCSIプロトコルを使用するので、ホストがリーダーを通してコマンドをカードに発行したいとき、ホストは、コマンド401をSCSIコマンドセットで発行する。コマンド401をリーダーに転送するために、コマンドは、USBラッパー403内に置かれ、USB接続に沿ってリーダーに伝送され、そこでUSBラッパーが取り外される。カードリーダー331は、次に、コマンド401を、SCSIコマンドセットから、SDセットの対応する1つ又は複数のコマンド405に翻訳し、それがカード101に送られるようになるが、リーダーが、SCSIコマンドセットとSDコマンドセットの間で所与のコマンドを翻訳する場合、両方のセットで等価なコマンドとなる必要がある。従って、ホストが、例えば、SDプロトコルで安全な読み取りコマンドを発行することによって、SDカードの安全領域の読み取りを実行したい場合は、その様なSCSI等価物がないので、リーダーは、それがSCSIコマンドセット内では見つからないため、これを翻訳する方法がなく、読み取り要求は、ユーザーのアクセス権が不十分な領域に向けられているとみなされることになる。同じ状況は、ホストがリーダーにリーダーが理解するプロトコルで送るための1つ又は複数の等価なSCSIコマンドが無い場合、様々なカード型式用の他のメディア特定コマンドにも当て嵌まる。
【0012】
従って、その様なメディアカード特有のコマンドは、アダプターのファームウェア又はメディアカードをホストするリーダーを変えて、メディアカードがホストと通信するのに使用するプロトコルに対応するコマンドを導入すること無く、ホストからカードに送ることはできない。別体のカードリーダーでなくても、通信経路に沿った何処かにプロトコルの変化が必要なとき、又は、ホストのオペレーティングシステムがカードの特徴に気付かないときは、同様の状況が生じ得る。
【0013】
先行技術では、この問題の対処法は、アダプターのファームウェアを変えてアダプターを通してその様な命令を送るための特別なコマンドをサポートするか、又はリーダー−ホストプロトコルで新しいコマンドを作成するかの何れかであり、その何れも、例えば、SDカードのプロトコルで、チャレンジコマンドを送信し、応答コマンドを受信するなどに対応するコマンドの様な、特定のメディアコマンドに合わせて作られる。これらの対処法は、多くの理由で、実用的ではない。先ず、プロトコルは、有用であるためには広く受け入れられる必要があるので、普通は標準に基づいており、あまり複雑でないコマンドセットが好まれる傾向があり、従って、新しいメディアが導入されると既存のメディアは進化するので、様々な新しいメディア特定のコマンドをコマンドセットに導入するのは難しい。代わりに、特別なコマンドが、自体をサポートしないメディア特定コマンドを通過できるようにアダプターのファームウェアが変更されれば、その様なアダプターの各ベンダのソフトウェアは、適切なファームウェアの変更を受け入れて、作る必要がある。従って、リーダーのファームウェア又はホスト−リーダープロトコルの何れかを変える必要無しに、パーソナルコンピューターが様々なメディア特定コマンドを利用できるようにする方法を導入することは、非常に有用である。
【0014】
より一般的には、カードがホストに直接接続されているときでも、新しいアプリケーション特定コマンドが導入されると、プロトコルは更新される必要がある。既存のプロトコルが新しい機能を組み込むように拡張され、標準化されたとしても、このことにより、旧バージョン又はそれらの他のベンダとの互換性に関わる問題が持ち込まれ、標準化されたプロトコルの実用性が大きく害される。更に、プロトコルを、新しいアプリケーションに適合させてもよいが、カードの使用を拡げるために更に多くのアプリケーションが生じてくるので、一時的な解決法に過ぎない。従って、やはり、ホストのオペレーティングシステムがメディア特定コマンドをサポートしない場合に適応する必要がある。
【特許文献1】米国特許第6,279,144号
【特許文献2】米国特許出願09/186,064号
【特許文献3】米国特許第6,040,622号
【特許文献4】米国特許第6,820,148号
【特許文献5】米国特許出願第09/641,023号
【特許文献6】米国特許出願第10/256,689号
【特許文献7】米国特許出願第29/203,693号
【特許文献8】米国特許出願第10/826,801号
【特許文献9】米国特許出願第10/826,796号
【特許文献10】米国仮特許出願第60/638,804号
【特許文献11】米国特許出願第11/067,298号
【特許文献12】米国特許出願第10/703,471号
【特許文献13】米国特許出願第10/899,260号
【特許文献14】米国特許出願第11/050,013号
【特許文献15】米国特許出願第10/841,379号
【特許文献16】米国特許出願第11/060,249号
【特許文献17】米国特許出願第11/060,174号
【特許文献18】米国特許出願第11/060,248号
【非特許文献1】「マルチメディアカードシステム仕様書」2.11、2.2、3.1、及び4.0版
【非特許文献2】「マルチメディアカード製品マニュアル」改訂第2版
【非特許文献3】ISO/IEC7816標準「識別カード−接点を備えた集積回路カード」
【発明の開示】
【課題を解決するための手段】
【0015】
従って、本発明は、簡潔且つ概括的には、(メモリカード又は他の集積回路カードの様な)デバイスが、アプリケーション又はメディア特定コマンドをホストと交換する方法と技法を提供する。ホストとカードは、直接に、又はリーダー又はハードウェアアダプターを通して、の何れかで通信し、メディア特定コマンドの等価物を持っていないプロトコルを通して、アプリケーション特定コマンドを伝送する。例えば、1つの実施形態では、PCは、たとえカードリーダーがその様なコマンドをサポートしていなくても、カードリーダーを通してSD(セキュアデジタル)メモリカードの安全なデータ領域を読み取ることができる。
【0016】
より具体的には、ホストは、ホストとカード間の通信経路間でサポートされているプロトコルのコマンドを有する命令を形成するが、実際のメディア又はアプリケーション特有コマンドは、その命令の中に埋め込まれている。代表的な実施形態では、メディア特有コマンドは、命令のデータ部分に埋め込まれている。次に、カードは、ホストと通信するプロトコルで命令を受信し、それをアプリケーションのプロトコルに翻訳する。埋め込まれたコマンドは、トランスペアレントな方法で送られる。例えば、伝送プロトコルは、実際にはデータにメディア特有コマンドが入っているのに、データであるとみなしたものを単にカードに送る。一旦カードに入ると、カードは、実際のコマンドが命令の中に埋め込まれていることを認識し、それを抽出する。このことは、コマンドのデータ部分がシグネチャーを含んでいると判断することによって行われ、シグネチャーが見つかれば、埋め込まれたコマンドが抽出されて実行され、シグネチャーが見つからなければ、伝送プロトコルのコマンドが実行される。代表的な実施形態では、シグネチャーと埋め込まれたコマンドは、データ部分の第1セクター内に置かれている。変換はデバイス側で実施され、実際のコマンドが抽出され、ホスト側では、コマンドがデバイスのドライバレベル又はファイルシステムレベルの何れかに埋め込まれる。デバイスのドライバレベルの実施では、コマンドを特定の論理ブロックのアドレスに指定するが、ファイルレベルでは、何れかの論理ブロックアドレスを用いることもできる。デバイスのドライバレベルの実施には、オーバーヘッドをあまり必要としないが、多くのオペレーティングシステムでは、ユーザーが持ち合わせないアクセス特権を必要とすることもある。
【0017】
本発明の様々な態様は、カードプロトコルが、ホストとハードウェアカードリーダーの間で用いられるプロトコルに等価物を持っていないコマンドを有する場合に限定されず、中間プロトコルが、中間プロトコルに足りないコマンドを搬送しなければならない場合もある。第1組の実施形態は、カードが、自身のプロトコルで直接ホストと通信できるが、カード(又は他のデバイス)は、使用するには追加の一組のコマンドを必要とする、追加の一組の機能を備えたアプリケーションを有している場合を考えている。これらのコマンドは、ホストとカードが通信するのに使用する標準的なプロトコルの一部ではなく、即ちホスト上の標準的なオペレーティングシステムによってサポートされていない。従って、これらのコマンドを、カード上のアプリケーション(ファームウェアレベルで実施可能)とホスト上のアプリケーション(ソフトウェアレベルで実施可能)の間で送受信するには、特別な手段が必要である。本発明の基本的な態様では、アプリケーションコマンドは、中間プロトコル、この場合はカードプロトコル内の命令のデータ部分に埋め込まれている。本発明の別の態様では、これは、ホストアプリケーションからデバイスへの経路の開放、閉鎖、及び管理に関係する一組のコマンドを有することによって達成される。
【0018】
第2の代表的な実施形態は、デバイス(カード)ドライバレベルで実施され、特定の論理ブロックアドレス(logical block address)(LBA)、カードパススルー(CPT)モードLBAをデータセクターの特別なシグネチャーによって指定して、そのセクターに特別なコマンドが埋め込まれていることをカードに通知する命令を使用する。これは、CPTモードをサポートするようなカードのファームウェアの変更として実施される。これにより、各メディア特定コマンドに従ってアダプターのファームウェアを変える必要が無くなるので、カードは、メディア特定の適合構造を作る必要無しに(即ち、カードがどの様なOSの下でも使用できるようにホストのオペレーティングシステムを変更する必要無しに)、例えばどの様なUSBリーダー又はアダプターででも実行させることができる。カードのファームウェアは、通常の読み取り/書き込みコマンドを尊重し続ける。特定のLBAオフセットへの読み取り/書き込みコマンドがあれば、シグネチャーが検査され、データが、埋め込まれているメディアカード特定コマンドを含んでいるか否か判断される。プロトコルは、どの様なメディアカードのファームウェアででも実施することができる。従って、リーダーのファームウェアへの変更無しに、アダプター又はUSB又は他のリーダー又はホストOSにファームウェアの変更を必要としない。
【0019】
第3組の代表的な実施形態は、ホスト側のファイルレベルで実施される。メディア特定コマンドは、ここでも中間プロトコルに埋め込まれているが、ハードウェア特定の、特別なプロトコルを参照することに依存するのではなく、埋め込まれたコマンドと付随するデータは、全て、ファイルのデータ部分に置かれ、それがメディアに転送され、そこで、ファームウェアが実際のコマンドを再抽出する。これらの実施形態では、ホストは、ファイルをメモリデバイスに書き込むようファイルシステムに告げるだけで、そこでデバイス特定のコマンドが再びデータ部分に埋め込まれる。どの様なLBAへの読み取り/書き込みコマンドでも、特定の論理アドレスとは対照的に、デバイスはシグネチャーを検査し、データが、埋め込まれているメディアカード特定コマンドを含んでいるか否か判断する。代表的な実施形態は、このシグネチャーを、書き込みコマンドと関係付けられている全てのファイルのデータの第1セクターに置いている。適切なシグネチャーが見つかれば、埋め込まれたコマンドは抽出され、シグネチャーが見つからなければ、コマンドは、中間プロトコルの標準的なコマンドとして解釈される。この様に、本発明のファイルレベルの実施形態は、デバイスへのファイルの書き込みは、一般的にオペレーティングシステム内で許可されているので、デバイスレベルアプリケーションで特定の論理アドレスを使用させることになる特権問題を回避することができる。
【0020】
全ての代表的な実施形態において、埋め込まれたコマンドは、中間プロトコルの書き込みコマンドのデータ部分に置かれる。例えば、デバイス又はアプリケーション特定プロトコルの、例えばN個のセクターの書き込みコマンドは、(N+1)個のデータセクターを有する中間プロトコルの書き込みコマンドから成り、第1セクターには、実際に埋め込まれている書き込みコマンドが入り、残りのN個のセクターには、書き込まれる実際のデータが入る。より一般的には、コマンド(及びシグネチャー)は、埋め込まれたコマンドによってデバイスに転送されることになるあらゆるデータと共に、関係付けられたデータ部分を受け入れる全てのコマンド内に置かれる。データがデバイスからホストへ転送されることを要求するデバイス又はアプリケーション特定プロトコルで読み取り又は他のコマンドを実施するために、代表的な実施形態は、一対のコマンドを使用しており、第1コマンドは、ここでも、埋め込まれている読み取りコマンドに対応する、中間プロトコルの1つのデータセクターを備えている書き込みコマンドであり(埋め込まれている読み取りコマンドに関係付けられた実データは無い)、デバイスからホストへの実際のデータ転送は、次に、第2コマンドによって行われ、ホストの読み取りは、第1コマンドと同じ論理アドレスに指定される。
【0021】
本発明の更なる詳細、特徴、及び利点は、以下の説明を添付図面と関連付けて読めば明白になるであろう。
【発明を実施するための最良の形態】
【0022】
主要な態様では、本発明は、標準的なカードプロトコルの一部ではない(即ち、ホスト上の標準的なOSによってサポートされていない)コマンドを、ホスト上のアプリケーション(通常、カード上のアプリケーションを使用するソフトウェア)と、カード上のアプリケーション(通常、カード上の特定アプリケーションとしてこれらの追加的機能を実施するカードのファームウェア)の間で送受信できるようにしている。代表的な実施形態は、書き込みの様な、何れのホストもサポートする標準的なコマンドに特別なコマンドを埋め込むことによって、これを達成する。これにより、背景技術に記載した様なメモリカードが、全ての標準的なホスト装置及びPCに認識され、連結され、使用されるようになる一方で、標準としてサポートされていない追加の非標準的な機能が、システム内に組み込まれるようになる。
【0023】
具体例として、技術背景で図2−4に関して論じた特定の事例では、これらの方法は、安全な読み取りの様な、SDカードに特定のコマンドを、等価なコマンドを持ち合わせていないUSBプロトコルを通して伝送できるようにしている。一般的に言えば、これは、伝送プロトコル内に在るコマンド部分と、メディア特定コマンドが埋め込まれているデータ部分とから成る命令を形成することによって達成される。例えば、書き込みコマンドは、何れのメモリカードシステムにも基本的なものなので、伝送プロトコル内に存在し、関係付けられたデータ部分を有している。実際のアプリケーション特定コマンドは、データ部分に、メディア特定コマンドが実行されるべきであることを示すシグネチャーと共に置かれる。デバイスに転送されることになる実際の埋め込まれているメディア特定コマンドに関係付けられた全てのデータも、伝送プロトコルのコマンドのデータ部分に置かれる。SD/USBの例では、10個のセクターの書き込み読み取りをUSBプロトコル内でSDカードに送るために、命令は、1つのコマンドと11個のデータセクターで構成されているUSBプロトコルで発行され、第1データセクターには、実際のSD安全書き込みコマンドが、シグネチャー及び関連情報と共に入っており、その後に、書き込まれるデータの10個のセクターが続いている。カード内に受信すると、ファームウェアは、実際の安全書き込みコマンドを抽出し、シグネチャーを検査し、データの読み取りを実行する。
【0024】
読み取り(及びデータをデバイスからホストへ転送する他のコマンド)では、中間プロトコルの書き込みコマンドは、ここでも、埋め込まれている読み取りコマンドを搬送するのに用いられるが、データがホストに送り返されるという規定は無いので、中間プロトコルの第2の読み取りコマンドと対になる。より具体的には、この対の第1コマンドは、ホストからの、埋め込まれている読み取りコマンドによる、論理ブロックアドレスLBA=XYZへの(中間プロトコルでの)書き込みである。デバイスのドライバレベルでの実施では、それは特定のアドレスへのものとなるが、ファイルレベルの実施では、これは何れのアドレスでもよい。この対の第2のコマンドは、この同じアドレスLBA=XYZへの標準的なホスト読み取りである。指定されたデータは、ホストに転送される。
【0025】
より具体的には、本発明は、システムが使用できる媒介又は伝送プロトコルの命令の中に、所望のコマンドを、付随するデータと共に埋め込むことによって、アプリケーション又はメディア特定命令を、ホストとカードの間で交換できるようにする。特定のコマンドは、一方のホストで実行されている特定のアプリケーションと、他方の特定のカード上の対応するアプリケーションとの間で分割される。伝送経路に沿った中間点で、命令は、中間プロトコルによる通常のコマンドとして現れ、実際のアプリケーション特定コマンドは、トランスペアレントな方式で送られる。代表的な実施形態では、これは、書き込みコマンドの様なデータ部分を受け入れる伝送プロトコルのコマンドを使用し、実際のアプリケーション又はメディア特定コマンドをこのデータ部分に埋め込むことによって行われる。(或るやり方では、これは、2002年9月26日出願の同時係属中の共有譲渡されている米国特許出願第10/256,689号に記載されている発明の拡張であり、同出願を参考文献としてここに援用する。)命令が(伝送プロトコルで)カードに到着すると、データ部分は、それが適切なシグネチャーを含んでいるか否かを知るために検査され、含んでいれば、埋め込まれたコマンドが抽出される。これを、図5に概略的に示している。
【0026】
図5は、アプリケーション特定コマンドが、本発明の具体的な実施形態に従って、どの様にプロトコル内に埋め込まれて、プロトコルを、ホストアプリケーションからカード側のアプリケーションに送るのに使われるかを示す概略図である。アプリケーション又はメディア特定の命令がコマンド部分、CMD、及び幾つかの対応するデータを有する事例を考えてみる。例えば、CMDは、アプリケーション特定の書き込みでもよい。この命令を伝送するために、ホスト側は伝送プロトコル内に、例えば書き込みコマンドの様な対応するデータ部分を有するCMD’と呼ぶコマンドを取り込む。この命令のデータ部分に置かれているものは何でも簡単に送られるので、実際に意図するアプリケーション特定コマンドCMDが(その対応するデータと共に)このデータ部分に埋め込まれていれば、コマンドCMDが伝送プロトコルで認識されなくても、それは、カードに伝送される。カードに入ると、コマンドCMDは、データ部分から抽出されなければならない。これは、カードパススルー(card pass through)シグネチャー(CPTシグネチャー)を、同様にデータ部分に置くことによって行われる。即ち、入ってくる命令がカードに達すると、データ部分は、シグネチャーが検査され、シグネチャーが見つかれば、実際のコマンドが抽出される。
【0027】
図5で、埋め込まれたコマンドが入っている伝送プロトコルの命令を510で示している。コマンド部分511は、コマンドCMD’を有しており、実際には実行されない一種の「ダミー」コマンドと考えることができるが、データ部分513をカード側へ送る働きをする。データ部分513は、シグネチャー及び実際のコマンドCMDを備えた第1部分513aと、CMDに対応する何らかのデータの第2部分513bに分割される。例えば、CMDが書き込みコマンド型式であれば、513bは書き込まれるデータであり、それが、例えば状態検査であれば、513bは無い。(後で詳しく述べる様に、埋め込まれている読み取りコマンドは、幾らか更に含有しており、この実施形態では、伝送プロトコルの区分511内の書き込みコマンドCMD’、データ部分の区分513a内の埋め込まれている読み取りコマンドCMD、および実際のデータが無い部分513bを送ることを含んでいる。)カード側では、513aは、シグネチャーが検査され、見つからなければ、コマンドCMD’が、データとして全ての513と共に実行される。シグネチャーが見つかれば、コマンドCMDを備えたコマンド部分531と、データ部分533内の全ての対応するデータとを有する実際の命令530が抽出される。(SCSIプロトコルの様な、コマンド部分511に十分な余裕があるプロトコルでは、CPTシグネチャー、コマンドCMD、又はそれら両方を、データ部分ではなく、伝送プロトコルのコマンド部分に埋め込むこともできる。)
【0028】
図1と本発明のより抽象的な説明に戻るが、本発明は、アプリケーションのホスト側とカード側が、経路に沿う何処かでアプリケーションに適合していないプロトコルを使って互いに通信しなければならない場合でも、通信できるようにしている。これは、背景技術で説明したように、アダプターが、カードの特徴に気付かない場合に起こり得るが、ホストのオペレーティングシステムがカードの特徴に気付かない場合も同様である。このことは、メディア又はアプリケーション特定コマンド両方のシステムに関する問題を、ホストとカードの間に在るホストアダプターが有っても無くても、解決する。更に、カードプロトコルが、カードの形状情報で異なる場合だけでなく、これらのカードはカード毎に異なる追加の機能でオーバーロードになるので、同じ形状情報であってもカード間で異なっている場合も許容する。呈示されている取り決めは、カードアダプターとホストOSが特定のカードプロトコルに無関心なシステムを考えており、そのカードプロトコルは、一方ではホスト側でそして他方では特定のカード側で実行されている特定のアプリケーションの間で分割される特定コマンドを有している。
【0029】
ホスト側では、本発明は、ファイルモードでアプリケーションがホストファイルシステムを使用し、ファイルに書き込むファイルシステムレベル、又はデバイスドライバを使用するモードのデバイスドライバレベル、の何れかで実施することができる。両方のバージョンの具体例を以下に提供する。どの型式の実施形態が望ましいかは、具体的なアプリケーションやオペレーティングシステムの詳細の様な細目によることが多い。例えば、デバイスドライバレベルでの実施の方が簡単で、ソフトウェア/ファームウェアのオーバーヘッドが少なくて済むが、論理アドレスへの直接書き込みを使用することになり、その様な直接的な書き込みには、ユーザーは持ち合わせていない管理者の特権が必要となる。代わりに、ファイルシステムレベルでの実施を使用することによって、これらの面倒さを回避できるが、追加オーバーヘッドの経費が必要になる。
【0030】
本発明を、3つの特定の実施形態に関して、より詳細に説明する。これらの全ては、新しい機能をサポートするためにホストカードプロトコルを変えること無く、又は追加のプロトコルをサポートしない中間ソフトウェア/ハードウェアを通してそれを使用しながら、特別な非標準的機能を、ホスト上で使用されるカード内で実施されるようにする。第2及び第3組の実施形態は、ホスト側で(それぞれ、デバイスドライバレベルとファイルシステムレベルで)実施される2つの方法について述べており、一方第1は、カード側の実施について述べている。この第1の実施形態は、第2と第3を補い、カード側がどの様に作動するかを説明しており、全ての実施形態のために全体的な詳細を提供するのに用いられることになる。以下に更に詳しく述べる様に、これは、標準的な利用可能なコマンドを使って、非標準的なコマンドを包むために行われる。これら事例のそれぞれで、代表的な実施形態は、何処でもサポートされる標準的な読み書きを選定する。なお、これら特定の実施形態では、これらの実施形態の全てで、カードには特定の論理ブロックアドレス(LBA)への書き込みが見えているので、カードは、ファイルの概念を認識する必要はない。このLBAは、デバイスドライバモードでの様に、この目的のために特別に割り当てられている(又は再度割り当てられる)か、又は、ファイルドライバモードでは任意のアドレスか、の何れでもよい。主な違いはホスト側にあり、アプリケーションは、ファイルモードでは、ホストファイルシステムを使用し、ファイルに書き込んでおり、第1モードでは、デバイスドライバを使用し、直接LBAに書き込んでいる。
【0031】
以下に、本発明の様々な態様を、数多くの特定の実施形態の例で呈示する。例えば、本実施形態は、メディア特定コマンドを、書き込みコマンドのデータ部分に埋め込んでおり、より一般的には、メディア又はアプリケーション特定コマンドは、他のコマンドに埋め込むことができる。更に、上記背景技術の議論は、特定プロトコル領域を備えた特定のハードウェア設備に基づいており、即ち、そこでは、PC/ホストは、ホストとリーダーの間の1つのプロトコルと、リーダーとカードの間の第2のプロトコルを使用して、ハードウェアリーダーを通してカードと通信する。これらの実施形態は、全てが、数多くの手法で一般化し、拡張することができる。
【0032】
上記背景技術の議論は、カードとPCがリーダーを通して通信する例に焦点を当てた。より一般的には、本発明の様々な態様は、ホスト(例えば、PC)と最終行先の間の経路の何処かで、伝送する必要のある1つ又は複数のコマンドの等価物を持っていないプロトコルが用いられるときに当て嵌まる。先に述べた様に、ハードウェアのカードリーダーが、ホストがカードに送りたいと思っているカードプロトコル(例えば、SDカードの安全読み取り)のメディア特定コマンドの等価物を持っていないプロトコル(例えば、USB/SCSI)でホストと通信するときに問題が発生するだけでなく、カードが直接ホストに取り付けられるときにも発生する。更に複雑な場合、幾つかの中間プロトコルがあってもよく、その場合、第2例に見られる様に、幾つかの埋め込み層を用いることもできる。
【0033】
別体のカードリーダーを必要としない場合の1つの具体的な例では、カードに2セットの接点があり、一方はUSBポート用であり、他方は標準的なカード接点のセット(MMC、SD、CFなど)用である。(その様な二重接点カードの例について、2004年4月16日出願の米国特許出願第29/203,693号、第10/826,801号、及び第10/826,796号に記載されており、それら全てを参考文献としてここに援用する。)「通常の」カード接点を使って、カードは、第1ホストと、メディア特定コマンドが使用可能なカード特定プロトコルで通信することができる。第2セットの接点(ここではUSB)を使って、カードは、メディア特定コマンドの等価物を持ち合わせていない別の異なるプロトコルで、PCの様な他のホストと通信することができる。この場合、第2ホストと他のプロトコルは、本発明に従って、メディア特定コマンドを埋め込むことにより、例えば、USB接点を使って、カードは、USBポートでPCに直接接続することができ、カードとPCは、USBを通して、SCSIプロトコルで、先に述べた様にSCSIプロトコルに埋め込まれている任意のSD特定コマンドを使って、通信する。
【0034】
先に述べた様に、具体的な関心事の一組の実施形態では、ホストとカードは、カードのプロトコルで通信するが、ホストアプリケーションは、カードの「通常の」メモリ機能が気付かない層内で、カードのアプリケーションと、コマンド及びデータを交換したいと望むかもしれない。例えば、SDメモリカードでは、デバイスのアプリケーション層のパーティションは、SD特定ファームウェア層から隠すことができる。ホストとカードは、標準的なSDプロトコルを使って通信するが、隠されているデバイスアプリケーションは、アプリケーション特定コマンドをSDプロトコル内に埋め込むことによって、対応するホストアプリケーションと通信することができる。第1の代表的な実施形態は、この性質を備えている。
【0035】
代表的な実施形態は、メディア特定(又はアプリケーション特定)コマンドを書き込みコマンド内に埋め込んでいる。例として用いられている書き込みコマンドは、コマンドを中間プロトコルのデータ部分に埋め込み、書き込みコマンドは、本来的にデータ部分を有している。より一般的には、書き込みコマンドのみならず、データ部分を受け入れる何れのコマンドでも、同様に用いることができる。書き込みは、データを転送するためのプロトコル内の基本的な命令なので、以下の代表的な実施形態では、書き込みについて述べていく。更に、全ての例で、メディア又はアプリケーション特定コマンドは、分かり易くするためデータ部分の最初に埋め込まれているが、より一般的には、それらは、データ部分の何処に置いてもよく、シグネチャーによって識別されることになる。(先に述べた様に、より一般的には、シグネチャー、アプリケーションコマンド、又はそれらの両方は、SCSIプロトコルの様な、コマンド部分に十分な余裕を有しているプロトコルの伝送プロトコルのコマンド部分に埋め込んでもよい。)
【0036】
本発明が関与している問題は、より抽象的なレベルで表すことができる。ホストアプリケーションが、デバイスアプリケーションと、コマンドのセット(α、β、γ、...)を有するプロトコルで通信しなければならないが、通信経路の何処かで、コマンドのセット(A、B、...)を有する別のプロトコルを用いなければならない場合を考えてみる。背景技術の例では、(α、β、γ、...)はSDプロトコルであり、中間コマンドのセット(A、B、...)はSCSIプロトコルとした。以下の議論で、(α、β、γ、...)は特別なアプリケーション(隠しパーティションの様な)のコマンドセットであり、(A、B、...)はカードコマンドのセットとする。A←→α、B←→βなどの対応があれば、問題は無い。メディア又はアプリケーション特定コマンドγ、例えば、SDプロトコルの安全読み取りがあるのに、中間プロトコルに等価物が無い場合、即ち?←→γの場合に、問題が生じる。先行技術では、その様な各γに対して、γに等価な新しいコマンド、即ち、C←→γを導入する必要がある。代わりに、本発明によれば、新しいコマンドを導入するのではなく、メディア特定コマンドが、中間プロトコルの既存のコマンドに埋め込まれ、A(γ)←→γ、ここにA(γ)は、例えばγが埋め込まれている書き込みコマンドを示している。
【0037】
一般化では、コマンド(Fと呼ぶ)は、アプリケーションのホスト側とデバイス側のパイプを開いて通信できるように、(α、β、γ、...)プロトコルに導入される。パイプが開くと、メディア又はアプリケーション特定コマンドを送ることができる。これは、A[F(γ)]←→γと表される。この技法は、第1例で展開される。これは、コマンドの失敗や他の微妙なことの取り扱いを考慮している。コマンド失敗に関わる問題は、中間プロトコルが埋め込まれているコマンドの性質に関する知識を持っていなかったということであり、なぜなら、中間プロトコルがそれを知っていれば、簡単な書き込みコマンドを送信しているに過ぎないからである。埋め込まれたコマンドが、例えば読み取りであれば、PCは、読み取りが失敗するという事象の際には、何が起こったか分からない。中間プロトコルでは、書き込み失敗とみなされ、埋め込まれている読み取りの失敗とは解釈されず、従って、ホストは、実行すべき適切な回復ステップを理解できない。アプリケーションのホスト側とカード側の間のパイプを開くことによって、その様な困難を容易に追跡し、それに対処することができる。
【0038】
(第1の代表的な実施形態)
第1の代表的な実施形態は、ホスト側では第1レベルで実施されるものであり、本発明の様々な態様を説明するのに用いられる。カード側での実施は、ホスト側がファイルレベルで実施されるか或いはデバイスのドライバレベルで実施されるかに関わらず大部分が同じである。この実施形態の具体的なアプリケーションを参照すると、メモリカードの隠しパーティションの説明で提供され、メモリは、公開のアクセス可能な部分と、私的又は「隠された」部分に分割されている。その様な取り決めについては、2004年12月21日出願の米国仮特許出願第60/638,804号に記載されており、同出願を参考文献としてここに援用するが、詳細の大部分はそれに限定されない。ホスト側の部分、特にデバイスのドライバについて先ず説明し、その後、カードの詳細について説明する。隠しパーティションの他の使用例は、2005年2月25日出願の第11/067,298号、2003年11月10日出願の第10/703,471号、2004年7月26日出願の第10/899,260号、及び2005年2月2日出願の第11/050,013号の特許出願に記載されており、それらの全てを参考文献としてここに援用する。
【0039】
図6は、デバイス側の代表的な構造を示す概略ブロック図である。カード1001側では、1つ又は複数のデバイスアプリケーション1023は、それぞれ、ホスト側1051の1つ又は複数のホストアプリケーション1053へのゲートウェイ又は「パイプ」を、非標準的な、この特定の形状情報用のカードの特徴、ここでは隠されているパーティションに提供する。ホスト側の層については、以下に図7で詳しく説明する。カード側では、デバイスアプリケーション1023が、パーティションアクセス(読み取り及び書き込み)、状態、及び他のデバイスアプリケーション情報を提供する。デバイスアプリケーション1023は、以下に記載されている代表的なプロトコルを介してホストアプリケーション1053と通信し、メディア層1025を通してカードシステムとメモリリソースを使用する。メモリ自体は、メモリ1011に示されており、普通はNOR又はNAND種のフラッシュメモリであるが、2004年5月7日出願の米国特許出願第10/841,379号に記載のものを含め他の不揮発性メモリでもよく、同特許出願を参考文献としてここに援用する。FE(フロントエンド)層1021は、ホスト側からの(CF、SD、MMCなどのプロトコルの様なカード型式のインターフェースでの)コマンドを取り扱うファームウェア層である。BE(バックエンド)層1027は、メモリに対する読み取りと書き込みを含めメモリ1011の管理を取り扱うファームウェア層である。メディア層1025は、デバイスアプリケーションファームウェア1023をBE層1027と接続させ、更に、アプリケーションファームウェアをコントローラーのRAMリソースとインターフェースさせるが、それについてはこの図では具体的に示していない。
【0040】
命令がホスト1051から送られると、その命令は、最初にデバイス1001のフロントエンド(FE)層1021で受信される。コマンドは、ホストとデバイスの間で用いられる中間プロトコル、例えばSDプロトコルにある。コマンドは、FE層1021に到着すると、コマンドパススルーシグネチャーが検査され、シグネチャーが見つからなければ、命令は、中間プロトコルからの標準的な命令として扱われ、メモリにアクセスし、そうでなければ、標準的な方法で実行することができ、シグネチャーが見つかれば、埋め込まれているアプリケーション特定コマンドが抽出され、適切なデバイスアプリケーション1023に送られて実行される。(ホスト側で)デバイスドライバレベルで実施される場合は、以下の第2の代表的な実施形態での様に、コマンドは、特定の論理アドレスに指定され、一方、ファイルレベルで実施される場合は、この例と以下の第3例の両方での様に、コマンドは、何れの論理アドレスに指定されてもよく、デバイス側から見ると、両実施は、ほぼ同じである。
【0041】
シグネチャーが見つかって、埋め込まれたコマンドが抽出されると、(この例では)隠されているパーティションは、カード1001内に常駐する対応するデバイスアプリケーション1023を介して、ホストアプリケーション1053に利用できるようになる。ホスト及びデバイスのアプリケーションは、ホスト側とカード側の間の読み取り及び書き込みをカバーするプロトコルを使って、並びにパーティション情報に関する報告を行って、通信することになる。この代表的な実施形態では、デバイスは、アプリケーションに対する権利を制御する。権利(読み取り、書き込み)は、デバイスがホストアプリケーションの証明書を確認すると与えられ、承認されると、デバイスアプリケーションは、ホスト/デバイスプロトコルを通して、そのパーティションに対する読み取り及び書き込み特権を認可する。ホストアプリケーションが有効にされると、デバイスは、信頼されている環境内で作動していると想定される。
【0042】
先に述べた様に、第1の代表的な実施形態はファイルレベルで実施され、埋め込まれたコマンドは、書き込みファイルの第1データセクターに置かれる。本実施形態は、どの様な特定の論理アドレスへの参照にも依存せず、具体的なパターン又はシグネチャー用の第1データセクターの検査に依存する。パーティション内のファイルは、ホストによって管理されており、つまり、隠されているパーティションの例では、ホストアプリケーションは、隠されているパーティション内のファイルシステムの所有者である。ホストアプリケーションがアプリケーションへの権利を獲得すると、コンテンツを完全に制御できるようになる。
【0043】
隠されているパーティションのFATは、オペレーティングシステム(OS)によるアクセス特権問題のために読み取れないことが多いので、ホストアプリケーション1053は、ファイルシステム層を実施することになる。隠されているパーティションへのアクセスについては、FATは、アプリケーションへのパイプが開いた後にだけ、利用可能である。(ホストアプリケーションによるコマンド転送は、定義されており、以下に説明する。)ホストアプリケーションは、カードの隠されていない、即ち公開パーティションに在り、OSには、大容量記憶装置で又は取り外し可能なデバイスレベルで見ることができる。幾つかのその様なホストアプリケーションは、この領域に常駐していてもよく、ユーザーは、どれを実行するのか分かるようになっており、それはホスト側で実行される。
【0044】
ホスト側のソフトウェア層について、図7でより詳しく説明する。デバイスドライバ1055は、2つの役割を持っている。それは、バスドライバとして機能し、(中間)プロトコルとファイルシステム1057によってサポートされる標準的なクライアントアプリケーションのIOオペレーションを実行する。更に、それは、アプリケーションと、デバイス又はアプリケーション特定プロトコルを実施する。標準的なIO API及び実施は、全てのカード族、例えば、標準的なSDカードのオペレーションに共通していてもよい。アプリケーション又はデバイス特定API及び実施は、生来プロトコル特定のものである。図7は、共通部分のコード共有と、異なるアプリケーション特定プロトコルの間の簡単なポータビリティを可能にする階層構造の例を示している。
【0045】
ホストアプリケーション層1053とファイルシステム層1057に加えて、ホスト構造は、デバイスアプリケーションに特定の層1059も組み込んでいる。アプリケーション特定のオペレーションを組み込んでいない「標準的な」デバイスのオペレーションには、層1059は使用されず、層1053、1057、及び1055が、先行技術と同様に主に作動する。アプリケーション特定の命令が用いられる場合は、アプリケーション特定コマンドをフォーマットし、埋め込むために、デバイスアプリケーション層1059が、ファイルシステム1057とホスト層1053の間に挿入される。
【0046】
デバイスドライバ1055は、共通の機能性を提供するためインターフェース及びパイプサブ層を含んでいてもよいし、全てのアプリケーション特定プロトコルを最小限変更して使用することもできる。ホストのアプリケーションは、具体的なアプリケーションに従ってプロトコル層と整合していなければならない。インターフェースサブ層は、標準的な一組のデバイス機能を公開する。例えば、これらには、ハードウェアの初期化と設定、ドライブ開閉ルーチン、読み取り及び書き込み動作、及び消去が含まれる。それは、更に、適切な通信方法に対する機能を含んでおり、然るべくパイプを初期化する。
【0047】
図5の510の様な命令が伝送されるとき、場合によっては、オペレーティングシステム(OS)がそれを幾つかの部片に分割するので、他の命令の部片が差し挟まれることもある。その場合、ファイルシステム1057とデバイスドライバ1055は、命令510を分割することができるので、そうすると、コマンド部分511は、全データ部分513の何処にでも取り付けられ、残りのデータ部分は、それに続く1回又は複数回で転送される。その場合、残りのデータの部分の後に続く転送は、区分513aのシグネチャー部分を持ち合わせておらず、標準的なコマンドの様に見える。その様な分割は、読み取り動作でカードからホストへ転送されるデータにも起こる。OSが命令を分割しないか、又はOSが十分に制御されているので、そのようにしないよう命令されているか、の何れかであることが分かっている場合は、手順は簡素化できる。このことを、先ず、図10Aの流れと、図12Aの対応する状態マシン図に関して論じる。より一般的な場合については、図10Bに関して後で論じる。更に、議論を簡潔にするために、図10Aに関する論議は、主に、単一のアプリケーションの場合に基づいているが、一般的には、多数の異なる動作中のアプリケーションがある。図10Bのより一般的な場合は、これをより明示的なものにする。
【0048】
第1の代表的な実施形態では、簡単な隠されているパーティションのプロトコルが、例証のために用いられる。メモリ1011は、2つのパーティションに分割される。第1パーティションは、製品の標準的なパーティションである。標準的なホストは、このパーティションにだけ気付く。第2パーティションは、隠されているパーティションであり、アプリケーション特定コマンドを通してのみアクセス可能である。標準的なホストは、このパーティションに気付かず、それにアクセスする手段を持たない。例の隠されているパーティションのプロトコルは、5つの機能を定めており、それを通して、デバイスとアプリケーションが通信する。
1.隠しパーティションを開く:ユーザーを認証し、読み取り及び書き込み動作を可能にするのに用いられる。
2.隠しパーティションを閉じる:読み取り及び書き込み動作を使用不可能にする。
3.隠しパーティションの状態を得る:図8に示されているデータを戻す。
4.隠しパーティションを読み取る:パーティションが開かれていれば、隠されているパーティションから読み取る。閉じられていれば、エラーを戻す。
5.隠しパーティションに書き込む:パーティションが開かれていれば、隠されているパーティションに書き込む。閉じられていれば、エラーを戻す。
プロトコル層は、安全なプロトコルを実施するのに必要な追加のAPIを提供する。隠されているパーティションの有る特定の例では、プロトコルは、読み取りと書き込みに加えて、パーティションを開く、パーティションを閉じる、パーティションの状態を得る、という3つのサービスを要求する。これらのコマンドを以下の表1に示しており、図8と共にそれらについて更に論じる。
【0049】
パイプサブ層は、メディアコマンド通過の原則による、カードとの通信を担っている。先に述べた様に、メディアコマンド通過プロトコルにおける主題は、特別なコマンド(標準的な製品仕様の一部ではないコマンド)が、標準的な読み取り及び書き込みオペレーション内に埋め込まれていることである。コマンドを標準的な読み取り及び書き込みオペレーションに埋め込むことによって、標準的なホスト及びドライバと共に作業できるようになる。
【0050】
代表的な実施形態では、全てのコマンドは、書き込みコマンドを、メディアカードの或るLBAに送ることによって開始される。アプリケーション特定書き込みコマンドは、最初のセクターがコマンドの引数を保持し、残りのデータブロックが、もしあれば、関連データを保持している、複数のセクターの転送を含んでいる。読み取りコマンドは、2つの部分で実行される。
1.先ず、書き込みコマンドを、読み取りコマンドの性質について説明する適切なデータと共に、選定されたLBAに送ることによって、読み取りコマンドを開始する。
2.書き込みコマンドが、カードアプリケーションを正しい転送状態に設定した後で、書き込みコマンドから選定されたLBAに読み取りコマンドが送られ、実際にカードからホストへデータが転送される。
【0051】
全てのコマンドは、先ず、図9に示しているセクターフォーマットを使って書き込みコマンドを送る。ホストアプリケーションが、書き込みコマンドを送ると決定すると、転送される第1セクターは、上記フォーマットを有することになる。ホストから送られる次のデータブロックは、カードに関する実際のデータを有することになる。ホストアプリケーションは、読み取りコマンドを開始するよう選定すると、先ず、書き込みコマンドを、上記単一のセクターフォーマットを使って、選定されたLBA(LBA=LBA_XYZ)に送り、次に、同じLBAに読み取りコマンドを送る。これについては、以下に詳しく論じる図10Aと図10Bの流れ図で示している。
【0052】
多数の考えられる実施が、メディアコマンド通過プロトコルで可能である。このセクションの例は、ファイルシステム、例えばウインドウズ(登録商標)のファイルシステムの運用を使用する。次のセクションの例は、デバイスと、デバイスドライバレベルで直接通信し、ファイルシステムがオーバーヘッドを有していない。別の実施は、ポケットPC(PPC)である。この事例では、読み取り及び書き込みオペレーションは、PPC記憶ドライバに直接アクセスすることができる。現時点では、ポケットPC装置用の標準的な記憶装置ドライバは無いので、この方法が全てのPPC装置上で作動する保障は無い。クライアントアプリケーションベンダは、共に作動しようと意図する一組のPPC装置で、この方法を試験しなければならない。
【0053】
本例のファイルシステムの実施に戻るが、パイプサブ層は、OSが命令全体を1回の転送で転送する場合は、図10AでLBA_XYZと示されている同一のファイル場所に対して読み取り及び書き込みを行うことによって、コマンド通過LBAに対する読み取り及び書き込みオペレーションを開始する。これは、次のセクションの例にあるような予め決められたアドレスである必要は無いが、何れかの論理ブロックアドレスでなければならない。この例では、実施は、ウインドウズの標準的なファイルシステムAPI−CreateFile、ReadFile、WriteFile、及びSetFilePointerを使用する。実施のセットは、4つ又は5つの部分、即ち、事前要件と、通信パイプの確立と、ファイル長さの検証と、アプリケーション書き込みコマンドと、データが読み取られることになるか、ホストへ戻された他の情報である場合は、読み取りコマンドと、に分割される。
【0054】
ファイルレベルの実施では、ファイルシステムは、埋め込まれているアプリケーション特定コマンドを、認識されずに伝送するのに用いられる。実際の埋め込まれているコマンドは、ファイルシステムが目下送っていると思っている中間プロトコルのコマンドとは性質が異なるので、適切なステップを踏まなければ、衝突が起こり得る。例えば、エラーが生じると、ファイルシステムは、実際のエラーが埋め込まれているコマンド(例えば、読み取り)にあるかもしれないとき、これを中間プロトコルで搬送しているコマンド(書き込み)のエラーとみなすので、エラー回復は複雑なものになりかねない。同様に、ファイルシステムがキャッシングを採用していれば、不調和な結果となりかねない。
【0055】
ファイルのセグメント化からも問題の生じることがあり、代表的な実施は、同一ファイル場所(図10AのLBA_XYZ)に対する読み取りと書き込みに依存しているので、ファイル全体を、メモリ内の連続したセクターのグループに記憶しなければならない。LBA XYZで開始して記憶されることになるデータが、利用可能なセグメントより大きい場合、ファイルシステムは、それを分割する。その結果、アプリケーション特定コマンドの最大データ長さは、最小のOSファイル割り当てユニット(クラスター)より大きくてはいけないので、使用される論理アドレス(LBA_XYZ)は、十分な空間を有する論理ブロックアドレスと関係付けられる。
【0056】
ウインドウズの例では、ファイルシステム実施での事前要件は、少なくとも128個の連続するセクターが入っている標準的なファイルを必要とする。その様なファイルの存在を保証するために、その様なファイルが、フォーマットされたドライブ上に作られる。従って、ホストアプリケーションのベンダがこの方法を選定すれば、アプリケーションとの通信ファイルを展開しなければならない。この例では、設計は、「ファイルパイプ(FilePipe)」と名づけられたファイル(以下に指定されている特定の属性を有する)がデバイスのユーザー領域内に存在していると想定している。その様なファイルが存在していなければ、ドライバは、それを作ろうとする。失敗すれば、アプリケーションは、ユーザーに、ドライブをフォーマットし、アプリケーションをフォーマットされたドライブに再インストールすることを求めることができる。
【0057】
通信パイプを確立するために、デバイスドライバ1055は、
共有されていない
バッファリングしない
隠されている
という属性を有する通信ファイルを開くことが望ましい。共有されていない状態は、他のアプリケーションが、コマンド通過LBAにアクセスするのを防ぐために、ホストアプリケーションだけがファイルにアクセスすることを保証する。バッファリングしない状態は、システムに、中間バッファリング又はキャッシングの無いファイルを開くように命令する。従って、このファイルに対する/からの、書き込み又は読み取りは、キャッシングされたバージョンではなく、カードに対する/からの、読み取り/書き込みコマンドになる。(ファイルがカードにフラッシュされることを保証するために、「バッファリングしない」フラグと「書き込みスルー」フラグの両方を設定しなければならない場合もある。)実際のアプリケーション又はメディア特定コマンドは、別のプロトコルのコマンド内に埋め込まれているので、例えば書き込みエラーがあるときは、ホストは、これを、埋め込まれたコマンドのエラーではなく、中間プロトコルの書き込みコマンドに関するエラーと解釈する。バッファリングしない状態は、データ転送を、意図した埋め込まれたコマンドに繋がれた状態に保つ。隠されている状態は、エンドユーザーが、これをシステムファイルと見ることを意味している。
【0058】
次の実施ステップは、ファイルに、連続している少なくとも128個のセクターが入っていることを検証することである。
【0059】
アプリケーションの書き込みコマンド、即ち、隠されているパーティション例での安全な書き込みでは、書き込みバッファは、先に述べた道筋に沿って準備される。次に、ファイルポインタは、読み取り及び書き込みオペレーションが同一LBA(=LBA XYZ)に対してであることを保証するようリセットされる。バッファは、次に、「FilePipe」の名前を有する「WriteFile」コマンドを呼び出すことによってデバイスに送られる。
【0060】
アプリケーションの読み取りコマンド、即ち、隠されているパーティション例での安全な読み取りでは、ファイルポインタが先ずリセットされ、次いで「WriteFile」コマンドを実行することによって、コマンドバッファが送られる。ファイルポインタは、次に、書き込み及び読み取りオペレーションが同一LBAで行われることを保証するため、再度リセットされる。次に、デバイスから安全が保証されたデータを得るため、「ReadFile」が実行される。
【0061】
カード側に戻るが、デバイスアプリケーション1023は、(この例では)隠されているパーティションを管理し、読み取りと書き込みが、ホストアプリケーションの有効性確認次第となるようにしている。リソースとメモリのアクセスは、隠しパーティションのフェーズでは、メディア層1025を通して行われる。メディア層1025は、デバイスのアプリケーションデータ転送の全てを、メモリ1011の隠されているパーティションに向かわせる。
【0062】
先に述べた様に、デバイスアプリケーション1023は、その特定のコマンドを、ホストアプリケーション1053から、通常のカードプロトコルの読み取り/書き込みコマンドを通して受け取る。例えば、SDカードプロトコルを代表的な実施形態とすると、各コマンドインデクス及び引数は、コマンドセクターにSD書き込みコマンドを介して送られる。読み取りコマンドがデバイスアプリケーションから要求されるとき、ホストアプリケーションは、先ず、書き込みコマンドを(SD書き込みコマンドを通して)送り、その後、実際の読み取りコマンド(SD読み取りコマンド)を送る。読み取りコマンドのコンテキストは、例えば、デバイスアプリケーション専用のRAM空間内に、書き込みコマンドがコマンドセクターに送られている間に保存される。読み取りコマンドが後に続くときは、デバイスアプリケーションは、次に、保存されている読み取りコンテキストをロードし、要求されたデータを転送する。保存されている読み取りコンテキストは、別の読み取りコンテキストに取って代わられるまでは、そのまま残される。これにより、ホストは、別の読み取りコマンド+コマンドセクターを送ること無く、読み取り再試行を実行することができる。
【0063】
殆どのプロトコルコマンドが読み取り/書き込みコマンドとして動作するので、アプリケーション特定の新しいコマンドを、或るLBAへの読み取りと書き込みを通して転送することができる。代表的な実施形態では、全てのコマンドは、書き込みコマンドをメディアカードの或るLBAに送ることによって開始されることになる。アプリケーション特定の書き込みコマンドは、複数のセクター転送を含み、第1セクターは、コマンドの引数を保持し、残りのデータブロックは、関連データがあれば、それを保持する。
【0064】
先に述べた様に、読み取りコマンドは、2つの部分で実行され、即ち、
1.先ず、書き込みコマンドを、選定されたLBAに、読み取りコマンドの性質について説明する適切なデータと共に送ることによって、読み取りコマンドを開始し、
2.書き込みコマンドがカードアプリケーションを正しい転送状態に設定した後で、書き込みコマンドから、選定されたLBAへの読み取りコマンドが送られて、実際にカードからホストへデータが転送される。
【0065】
図9に戻るが、全てのコマンドは、先ず書き込みコマンドを送らなければならず、図9は、引数データセクターの代表的なフォーマットを示している。図9に示している様に、バイト0−31は、アプリケーションパススルーシグネチャー(例えば、「サポートされているパススルーモード」)を保持し、バイト32はアプリケーションのIDを保持し、バイト33は、埋め込まれているコマンドのアプリケーションコマンドオペレーションコードインデクスを保持し、アプリケーションコマンド引数データが残りのセクターを埋めている。
【0066】
この実施形態では、ホストアプリケーション1053が、書き込みコマンドを送ると決定すると、転送される第1セクターは、図9のフォーマットを有することになる。ホスト1051から送られる次のデータブロックは、カード用の埋め込まれたコマンドの実際のデータを有することになる。ホストアプリケーションは、読み取りコマンドを開始するよう選定すれば、先ず、書き込みコマンドを、選定されたLBAに上記単一のセクターフォーマットで送り、次に、読み取りコマンドを同一のLBAに送り、読み取りを行わせる。
【0067】
ホストアプリケーション1053は、図10Aに示している、デバイスから見た通信の流れに従う、先に述べたコマンドの開始に責任を負っている。これを行うために、ホストアプリケーションは、先に述べた様に、埋め込まれたコマンドを搬送することになるカードプロトコルの読み取り及び書き込みオペレーション用の目標LBAを制御する。1つのLBAで1つのコマンドのみと説明しているが、図10A(及び図11A−C、図12など)に示すプロセスは、複数のLBAで起こることもあり、それは、LBAが全て通過モードシグネチャーを信頼していることもあるからである。(この事例については、図10Bに関して後で詳しく説明するが、同図では、各種LBAを添え字LBAiで示している。)デバイスは同時に複数のファイルを扱うことができるので、特定のLBAは、デバイスの状態マシン(後で図12に関して論じる)に信頼されているに過ぎない。
【0068】
プロセスは、ステップ1101で、ここではLBA=LBA XYZと表されている選定されたLBAへの書き込みが受信されると始まる。シグネチャーが検査され(1103)、アプリケーションパススルーシグネチャーであるか否か調べられ、そうでなければ、カードは標準的なIOオペレーション(1105)に連動し、そうであれば、CMD通過モードに入る。ステップ1109は、コマンドの方向(デバイスから見て)がアウトか否かを判断する。方向がアウト(例えば、デバイスのメモリへの書き込み)であれば、コマンドが実行される(1111)。
【0069】
コマンドの方向がアウトでなければ、メモリデバイスは、1113で、読み取り対の第2コマンド、即ちアプリケーション読み取り要求を待つ。代わりに書き込みが到着すれば(1121)、待機状態(1113)に戻る前に標準的なIOオペレーション(1123)へ進む。読み取りコマンドが受信されると、LBAが検査され(1117)、それが選定されたLBAへのものであれば、それは、読み取り対の第2コマンドであり、読み取りが実行され(1119)、LBAが合致しなければ、1123へ進む。
【0070】
2つ以上の可能な実施方式があり、実施の詳細は、目標のプラットフォームによって変わる。ウインドウズNTベースのデスクトップに適用され、ホスト側に関して先に述べた1つの一般的な方式は、仮想ファイルと標準的なウインドウズファイルシステムAPIを使用する方式である。他には、次の例で述べる様に、ウインドウズSCSI通過APIを使って、カードプロトコル(例えばSD)の読み取り及び書き込みオペレーションを直接開始させる方式である。この方式は、ウインドウズNTベースのデスクトップにも適用されるが、カードドライバレベルでの実施に関して先に論じた様に管理権を必要とする。
【0071】
カードのファームウェアとアプリケーションのファームウェアの間のコマンドインターフェースに関して言えば、第1ステップで、カード−FWはアプリケーション特定コマンドを受け取る。カード通過モードがサポートしているシグネチャーを検証した後、カードのFE層1021は、書き込みコマンドと共にアプリケーションIDとコマンドOP−コード用に選定されたLBAに来た引数データセクターを解析する。アプリケーション特定コマンドインタープリターは、アプリケーションインターフェースルーチンをホストデータバッファへのポインタで呼び出す。第2ステップで、アプリケーション特定コマンドシーケンスを開始するとき、アプリケーションFWは、その自身の状態マシンを、アプリケーションコマンドシーケンスを扱うように設定し、更に、フラグを、選定されたLBAへの次の読み取り/書き込みコマンドがアプリケーションFWへのものであることを示すように設定しなければならない。読み取りコマンドがカード(選定されたLBA)に送られる度に、カードのFWは、先ず、このフラグを検査し、このアプリケーション特定読み取りコマンドを、このLBAへの通常の読み取りコマンドと区別する。
【0072】
隠しパーティションのアプリケーション用のプロトコルの例について説明する。図11A−Cは、図10Aと同じプロセスの幾つかを示しているが、ホストとデバイスの間のシステムバスの動作に関して示している。認証と保護パーティションのFAT読み取りのプロセスを図11Aに示している。先ず、ホストは、認証のためにユーザー名+パスワードをカードに送る。認証されると、カードは、アプリケーションが、保護され、隠されているパーティションからFATを読み取ることができるようにする。パーティションは、ホストがセッションを終了するまで、又はデバイスがパワーサイクルを使い果たすまで、開いたままである。パーティションが開いている限り、隠しパーティションへのホストアプリケーションによる読み取りと書き込みは、許される。
【0073】
図11Bは、保護パーティション内のファイルのホスト読み取りを示している。先に述べた様に、アプリケーション特定読み取りコマンドは、2つのカードプロトコルコマンド、即ち、読み取りコマンドおよび引数の性質を指定する書き込みコマンド、ならびに実際の読み取りコマンド、内で発生する。
【0074】
図11Cは、隠しパーティションへのホスト書き込みを示している。認証に合格すると、ホストは、パーティションのFATにアクセスし、新しいファイルをホストへ転送する権利を得る。ホストは、書き込みコマンドを、書き込み開始アドレス及びセクター数と共に保護パーティションに送る。
【0075】
図8は、上で紹介したデバイスアプリケーション状態の実施形態を、隠されているパーティション例の代表的な値と共に示している。幾つかの異なるパーティションも許されるので、デバイスアプリケーションパーティションIDのバイト1は、例では「1」として呈示されている。次の4つのバイトは、パーティションのサイズを示し、ここでは10メガバイト分のセクターとして示されている。バイト5は、パーティションが目下開放されているか否かを示し、次の4つのバイトは、デバイスアプリケーションのバージョンを示すために与えられている。バイト10は、動作状態を提供する。バイト10−511は、セクターを形成するためゼロが詰められている。或るバリエーションでは、バイト11は、最新のトランザクションで書き込まれたセクターの数を記録するのに用いられてもよい。
【0076】
表1は、隠しパーティションのデバイスアプリケーションに送られるアプリケーションプロトコルコマンドの例を載せている。CMDインデクスは、コマンドセクターのバイト33に置かれ、コマンド引数は、バイト34から、表に書き込まれた指定順に置かれている。
【表1】
【0077】
埋め込まれて隠されているパーティションコマンドはSDプロトコルの様なデバイスの書き込みプロトコルを通して転送されるので、パーティションのコマンドインタープリターは、書き込み又は読み取りコマンドが実際にはパーティションのデバイスアプリケーション用であり、SDの通常のオペレーション用ではないことを証明した後で、例えばSDコマンドインタープリターによって呼び出される。コマンドインタープリターは、コマンドセクターを解析した後で、適切なルーチンを呼び出す。或る特定の実施形態では、アプリケーションのコマンドは、MDコマンドが読み取りコマンド又は書き込みコマンドの何れであるかを示すパラメーターを、第1引数として有することができる。第2パラメーターは、ポインタを、割り当てられたRAM内の、コマンドセクターが置かれている場所へ送ることができる。パーティションのデバイスアプリケーション用の関連情報は、セクターのこの点で始まるので、ポインタは、バイト33、コマンドオペレーションコードインデクスを指す。この第2パラメーターによって指し示されるバッファのサイズは、第3パラメーター内に指定される。
【0078】
既に述べた様に、デバイスアプリケーション用の書き込みコマンドは、コマンドセクターがカードプロトコルの順序と同じ順序で解析された直後に実行されるので、簡潔である。例えば、SDの場合は、
1.SD書き込みコマンド(1つ以上のセクター)が受け取られ、第1セクターは、代表的な実施形態では、常にコマンドセクターである。
2.カード層は、第1セクターの最初の32バイトを解析し、コマンドセクターのシグネチャーを認識する。デバイスアプリケーションコマンド解析器(インタープリター)は、ポインタとともにコマンドセクターに呼び出される。
3.コマンドインタープリターは、埋め込まれているアプリケーションコマンドを識別した後で、埋め込まれたコマンドを実行してアプリケーションのコマンドプロセスを開始することになる、対応するルーチンを呼び出す。
4.隠されているパーティションのアプリケーション用のコマンドプロセスが行われ、状態がカード層に戻され、SD書き込みコマンドプロセスが終了するとシーケンスが終了に向かう。SDカードはアイドル状態に入る。
【0079】
これも先に述べた様に、隠されているパーティションのアプリケーションプロトコルの読み取りコマンドは、2段階のプロセスであり、(ここでも、SD実施形態では)SD−書き込みコマンドと、その後のSD−読み取りコマンドで構成されている。第1ステップはSD−書き込みコマンドであり、
1. ホストによって送られた1つのデータブロック(512バイト)によるSD−書き込みコマンド−第1セクターは、代表的な実施形態では、常にコマンドセクターである。
2. カード層は、第1セクターの最初の32バイトを解析し、コマンドセクターのシグネチャーを認識する。デバイスアプリケーションのコマンド解析器(インタープリター)は、ポインタでコマンドセクターに呼び出される。
3. コマンドインタープリターは、埋め込まれているアプリケーションコマンドを識別した後で、(次のSD−読み取りコマンドで)実行されることになる埋め込まれている読み取りコマンドを識別し、このコマンド識別子を保存する。次に、コマンドインタープリターは、カード層読み取りコマンドフラグを設定する。
4. アプリケーションのコマンドプロセスが行われ、状態がカード層に戻され、SD−書き込みコマンドプロセスが終了するとシーケンスが終了に向かう。SDカードは、アイドル状態に入る。
第2ステップはSD−読み取りコマンドであり、
1. SD読み取りコマンド。
2. SDカード層は、アプリケーションカード層読み取りコマンドフラグを検査し、通常のSD読み取りコマンドを呼び出すのではなく、デバイスアプリケーションコマンドインタープリターを、読み取りコマンド指示によって呼び出すように設定されていることを見つける。
3. デバイスアプリケーションコマンドインタープリターは、パーティション読み取りコマンドフラグを識別し、先の書き込みコマンドに保存されていたパーティション読み取りコマンド識別子を呼び戻す。識別子は、対応するパーティション読み取りルーチンに命じて、パーティション読み取りシーケンスを開始する。
4. パーティション読み取りシーケンスが行われ、戻された状態がカード層に送られる。
5. カード層は、SD−読み取りプロセスを終了し、カードはアイドル状態に入る。
【0080】
読み取り及び書き込みプロセスが、カード側アプリケーションのコマンド状態マシンにより示されており、図12にSDベースの実施形態で示されている。これらの埋め込まれたコマンドはSD書き込みコマンドによって送られ、隠されているパーティションの読み取りコマンドを実行しなければならないとき、ホストは、コマンドセクターをSD読み取りコマンドで送ることができないので、デバイスアプリケーション(1023)コマンドインタープリターは、状態マシンを、どの読み取りコマンドがホストアプリケーション1053によって実行されているかを管理し知っているように維持しなければならない。この図で、バブルは、デバイスアプリケーション層(図6、1023)で実行されるデバイス特定アプリケーションコマンドを指し、添付のコメントは、中間(ここではSD)プロトコルにあるFE層(図6、1021)に見られるコマンドを指す。図12の右側(A経路)は、書き込みプロセス用のプロセスであり、データがデバイスに転送されるか、データが転送されないかの何れかであるどの様なプロセスでも、同様な流れを辿ることになる。図12の左側は、データがデバイスからホストへ転送される読み取り又は他のプロセスに対応している。読み取りの流れは、読み取りに必要な対の第1コマンド用のB経路と、対の第2コマンド用のC経路とで構成されている。
【0081】
書き込みの流れと読み取りの流れは、共に同じように始まり、SD書き込みコマンドを受け取り、その書き込みコマンドから、シグネチャーが検出された後で、埋め込まれたコマンドが解析される。書き込みの流れでは、書き込みフラグが駐在しており、書き込みプロセスが実行される。しかしながら、読み取りの流れの最初のフェーズでは、読み取りフラグが設定されることになる。このカード層(SD)読み取りプロセスフラグは、ホストからの読み取りプロセスが検出されるときに、デバイスアプリケーション(1023)によって設定される。フラグは、(SDバス上の)ホストからの次の読み取りコマンドは通常のカード読み取りではなく、取り扱うためデバイスアプリケーション(1023)に送らねばならないことを、カード層に示す。これは、読み取りの流れのフェーズ2で起こり、そこでは、対の第2コマンドに応答して、データがデバイスから転送される。フラグは、カード層が初期設定するときにリセットされる。
【0082】
表1に挙げたコマンドを見ると、OPEN_PARTITIONコマンド(OP−コード 0x01)は、ユーザー名とパスワードを受け入れ、それらを検証する。それらが、デバイスアプリケーションの記憶されている名前及びパスワードに合致すれば、パーティションは、ホストのアクセス(読み取り、書き込み)に対して開かれる。この時点で、1つの認証フレーズが送られ、デバイスアプリケーションのコードのフレーズに対して検証される。このプロセスを図13Aに示している。パーティションは、CLOSE PARTITIONがパーティションを閉じるまで、又は次のパワーサイクルまで、開かれたままになる。
【0083】
CLOSE PARTITIONコマンド(OP−コード 0x02)を使用するのは、アプリケーション作業セッションを閉じ、パーティションを開いたままにしないためである。或る実施形態を図13Bに示している。
【0084】
READ PARTITIONコマンド(OP−コード 0x03)の使用について図13Cに示している。パーティションが開いていれば(1633から1635までのイエス経路)、このコマンドは、ホストアプリケーションが、パーティション(1639、1641)に記憶されているデータを読み取ることができるようにする。代表的な実施形態で、このルーチンは、「フラッシュ読み取り」APIルーチンを呼び出し、このルーチンは、隠されているパーティション空間へのデータ転送を命じる。
【0085】
WRITE PARTITIONコマンド(OP−コード 0x04)は、データを、ホストからカード上の隠されているパーティションに送る。図13Dに示している様に、このコマンドは、パーティションフラグが設定された(1653)ときにだけ、デバイスアプリケーションによって実行される。このルーチンは、「フラッシュ書き込み」(1659、1661)APIルーチンを呼び出し、このルーチンは、隠されているパーティション空間へのデータ転送を命じる。
【0086】
READ PARTITION_STATUSコマンド(OP−コード 0x05)は、図8に示している情報を提供する。これは、図8に関して先に論じた構造を備えたアプリケーション読み取りコマンドである。コマンドが入ってくると、ルーチンは、全ての情報を集め、それを上記構造内に置き、ホストへ送る。
【0087】
先に述べた様に、或るオペレーティングシステムは、時には命令を分割するので、データ部分の全てが、その対応するコマンド部分に取り付けられるわけではない。この場合、書き込み命令のデータの一部は、カードパススルーシグネチャー無しにカードに現れるので、シグネチャーが取り付けられていない伝送プロトコル内の標準的なコマンドと見えるものは、実際には、アプリケーション特定コマンドの残りのこともある。具体例として、例えば10ブロックのデータ部分513を有する図5の命令510の場合を考える。この命令をカードに伝送する際に、ホストのオペレーティングシステムは、データ部分の最初の5ブロックだけを命令に取り付けて送り、残りの5つのブロックを後で伝送することもある。この後者のデータブロックのセットは、送られるときは、シグネチャーとアプリケーションプロトコル用の実際のコマンドが入っている最初のデータブロック513aを欠いており、伝送プロトコルからの標準的なコマンドの一部の様に見える。その様なセグメント化は、埋め込まれたアプリケーション特定コマンドが読み取り型式のコマンドであるときにも起こり得るので、データは、複数の部分でカードからホストへ送られる。図10Bは、図10Aの流れを拡張したもので、アプリケーション特定の読み取り及び書き込みコマンド両方におけるその様なセグメント化を、読み取り及び書き込みプロセスにおいて1つの論理ブロックアドレスLBA=LBA_XYZを論理アドレスLBARi及びLBAWiと置き換えることによって、説明している。読み取りにLBARi、そして書き込みにLBAWiを定義することによって、デバイスは、何れの方向にアプリケーションデータを転送する際の中断にも対処することができる。添え字iは、複数のアプリケーション及び複数のユーザーのホスト装置からの複数のアプリケーション特定コマンドの同時実施を考慮している。
【0088】
図10Bのプロセスは、これも、SDプロトコルを伝送プロトコルとして使用するSDカードの例に基づいており、デバイスがSDアイドル状態にあり、コマンドを1201で受け取ることで始まる。次に、プロセスは、受け取った命令がSD書き込み(1203)であるか否か、そしてそうでなければ、それがSD読み取り(1205)であるか否かを判断する。それがSD書き込みでもSD読み取りでもなければ、SDコマンドが実行され(1207)、デバイスはアイドル状態へ戻る(1209)。
【0089】
受け取った命令が、ステップ1203でSD書き込みであれば、次に、パススルーシグネチャーが検査される(1214)。1214でシグネチャーが見つかれば、これは新しい埋め込まれたコマンドの開始を示しており、このコマンドは次に抽出することができる。1231で、読み取り及び書き込み論理ブロックアドレスLBARi;Wiの全てに対し、入ってくるコマンドの論理ブロックアドレスLBACMDが、目下の書き込みプロセスに割り当てられている論理ブロックアドレスと同じ、即ちLBACMD=LBAWiであれば、対応するLBARi;Wiがクリアされる。通常は、割り当てられているLBACMDを使用すべきでないが、それが既に他のプロセスに割り当てられている場合は、それを打ち切り、アドレスをクリアすることになる。
【0090】
次に、アプリケーション特定コマンドのデータ方向が判断される(1233)。データ転送を伴っていなければ、アプリケーション特定コマンドが実行され(1245)、デバイスはアイドル状態へ戻る(1249)。
【0091】
アプリケーションのコマンドが書き込みであれば、対応する論理アドレスは、LBAWi=LBACMD+データブロック数と設定され(1251)、アプリケーションデータが書き込まれる(1253)。先に論じた様に、ホストのOSは、命令を分割するかもしれないので、コマンドに、対応するデータの全てが伴っているわけではない。埋め込まれたコマンドが抽出され、解析されると、カードは、コマンドがどれだけの数のデータブロックを含んでいるかを知ることになる。1255で、カードは、全データが含まれており書き込まれたか否かを調べるために検査する。そうであれば、LBAWiはクリアされ(1257)、そうでなければ、残りのデータは、エラーやシャットダウンで中断されなければ、最終的には後に続き、上で計算されたアドレスである(このコマンドに対して)連続したカードアドレスへの標準的なSD書き込みコマンドの様になるので、クリアされない。デバイスは、次に、アイドル状態へ戻り(1259)、更なるコマンドを待つことになる。
【0092】
1231に戻り、アプリケーションコマンドが読み取りであれば、デバイスは、LBARi=LBACMDを設定し、データタイプRi=データタイプCMDを設定して(1235)、第2読み取りフェーズでの1263における後続のデータ転送への準備とする。デバイスは、次に、SDアイドルモードに進み、読み取りプロセスの第2フェーズを待つ。この解決法の異なるバリエーションは、LBACMDを使用しないが、異なるアドレスLBAREADは、書き込みコマンドのパラメーター内に明示的に定義される。この方法は、OSのキャッシング機構の回りで作業する。幾つかのシステムでは、ホストOSは、書き込まれたばかりのカードアドレスを読み返そうとしない。ホストOSは、データバッファをホストキャッシュバッファからホストアプリケーションに戻すのではなく、このデータは、書き込まれたばかりなので、カードが有しているデータであると想定している。この場合、データバッファは、カードの応答ではなく、アプリケーション特定コマンドを含んでいる。
【0093】
1214に戻り、(伝送プロトコル内の)コマンドは書き込みである(1203からのイエス経路)が、シグネチャーが無い(1214からのノー経路)場合、コマンドは、実際には、伝送(ここではSD)プロトコル内の書き込みコマンドかもしれないし、アプリケーションプロトコル内の書き込みへの追加データかもしれない。これは、1215で判定され、何れのLBAWiに対してもLBACMD≠LBAWiであれば、それは標準的なSD書き込みであり、1217で実行され、その後、カードはSDアイドル状態に入る(1219)。LBACMDがLBAWiの1つと合致すれば、コマンドは、実際には、対応するアプリケーションコマンドのデータ部分の追加分であり、流れは1251へ進み、この追加のアプリケーションデータが書き込まれる。
【0094】
ステップ1205に戻り、コマンドがSD読み取りであれば、それが実際にSD読み取りであるか、又はアプリケーション読み取りの第2フェーズであるかが判定される。これは、1226でLBACMDとLBARiを比較することによって判定され、何れのLBARiに対してもLBACMD≠LBARiであれば、それは標準的なSD読み取りであり、1277で実行され、その後、カードはSDアイドル状態に入る(1229)。そうではなくLBACMDが何れかのLBARiの1つと合致すれば、それはアプリケーション読み取りの第2フェーズである。
【0095】
LBACMD=LBARiであれば、対応する論理アドレスは、LBARi=LBACMD+データブロック数と設定され(1261)、アプリケーションデータが読み取られる(1263)。デバイスはSDアイドル状態に入る(1269)。アプリケーション読み取りプロセスでは、代表的な流れは、アプリケーション書き込み側のステップ1255と1257に相当するものが欠けている。全ての対応するデータにアクセスされていても、これにより、対応する読み取りフラグの設定が維持される。LBARiを開いた状態に保つことによって、エラーの場合にデータを再び読み取ることができる。この様にしておくと、アドレスが、例えばステップ1231での様に他の目的に再割り当てされた場合、LBARiがクリアされるだけである。
【0096】
10Bで、図10Aに追加されているのは、アプリケーションデータの転送時の中断を考慮していることである。それらは、同じ論理アドレスに対する読み取りと書き込みの必要性を取り除いてもいる。これらは、オペレーティングシステムが十分に制御されていない場合に本技法を使用できるようにするが、それは、図10Aの実施形態に必要なある種の制御は、既知の制御可能なプラットフォームを必要とするかもしれないからである。更に、再度指摘するが、図10Bは、複数のホストアプリケーションがあってもよく、それぞれが独立してカードと通信している場合、データ転送の中断は、1つのプロトコルからの命令の一部を他のプロトコルからの命令の部分の間に差し挟むかもしれないことを、より明示的に組み込んでいる。更に、読み取り及び書き込みプロセス両方で、別々のLBAは、デバイスドライバ層内の何れの読み取り又は書き込みキャッシングでも迂回できるようにしている。
【0097】
(第2の代表的な実施形態)
第1の例は、ファイルレベルで実施された。本発明の様々な態様は、デバイスドライバレベルで実施することもでき、ホストがウインドウズのオペレーティングシステムを使用している場合は、ウインドウズの標準的記憶デバイスドライバの様なデバイスドライバに要求を送ることによって、読み取り及び書き込みオペレーションを開始する。このコマンド通過方法の実施は、デバイスと直接通信し、ファイルシステムのオーバーヘッドを持っていない。しかしながら、この方法は、管理権を必要とする。ホストアプリケーションは、この方法を第1選択として試して使用し、それが失敗すれば、ファイルシステムオペレーションに移ることができる。インターフェース機能は、その方法の間で選択し、それに従って通信パイプを初期化するのに用いることができる。クライアントアプリケーションは、他のオペレーションの前に、このコマンドを呼び出す。アプリケーションが適切な管理権を欠いていれば、この方法で作業するのは例外になり、例外取り扱いコードに従って処理することができる。
【0098】
本例は、上記背景技術で問題となった議論に基づいている。背景技術の議論は、ハードウェアカードリーダーを通してPCに接続されているメモリカードのコンテキストで問題を呈示したが、ここに提供されている他の例と同様に、以下において、状況がより一般的であることが分かる。メモリデバイスは、それが第2ホストに直接接続されているときでさえ、その様なプロトコル翻訳問題、又は、より正確には、無翻訳問題を抱えていることがある。この状況は、メモリデバイスが、メモリデバイスから見て、完全ではないプロトコルを有するホストに接続されているときに生じることがある。これが生じることがある1つの場合は、カードが、2セットの接点を有しており、一方はUSBポートで使用し、他方は標準的なカード接点のセットに使用する場合である。(その様な二重接点のカード例については、2004年4月16日出願の米国特許出願第29/203,693号、第10/826,801号、及び第10/826,796号に記載されている。)第3組の実施形態で論じている様に、プロトコル翻訳は、メモリデバイス自体の中に完全に入っており、ホストには分からない。更に、以下の通り、実施形態を、取り外し可能なメモリカードについて説明しているが、この議論は、埋め込まれているメモリデバイスに適用することもできる。
【0099】
第2の代表的な実施形態の第1組の実施形態では、メディアカード特定コマンドを、メディアカードをホストするアダプター又はリーダーのファームウェアを変えること無くホストからカードに送ることができるようにするために、本発明は、指定された論理ブロックアドレス(LBA)、即ちカード通過モードLBAを使用し、データセクター内の特別なシグネチャーが、特別なコマンドがセクター内に埋め込まれていることをカードに通知する。これは、ファームウェア変更してコマンド通過(CPT)モードをサポートすることによって、実施することができる。これは、アダプターのファームウェア変更を必要としないので、カードは、何れのUSBリーダー又はアダプターでも実行することができる。
【0100】
背景技術で論じた様に、様々な小型フォーマットフラッシュメモリカード(コンパクトフラッシュカード、セキュアデジタル(SD)カード、マルチメディアカード(MMC)、xD、及びソニーメモリスティック/メモリスティックProなど)は、ホスト(デジタルカメラ、フラッシュメモリ音楽プレイヤー)と共に使用するための、異なる電気的インターフェースと、しばしばメディア特定コマンドとを有しており、このコマンドは、PCとハードウェアアダプターの間で使用されるコマンドセットには見られない、PCがカードを読み取ることができるようにしているものである。
【0101】
主要な態様では、本発明は、通常の読み取り/書き込みコマンドを尊重するため、カードのファームウェア変更を使用している。しかしながら、特定のLBAへの読み取り/書き込みコマンドがオフセットすると、シグネチャーが検査され、コマンドのデータ部分に、メディアカードの特定コマンドが埋め込まれているか否か判定される。プロトコルは、どの様なメディアカードのファームウェアでも実施できる。従って、プロトコルは、アダプター、USBリーダー、又はPC(又は、完全なメディア特定コマンドセットにアクセスしない他のホスト)が使用する他のリーダーへ何らのファームウェア変更を要求しない。実際を言えば、カード製造者がこれをする方が、全てのリーダーのベンダでカードコマンドの全てに対してリーダーファームウェア変更を実施するよりも簡単である。
【0102】
本発明の様々な態様は、例を議論する際に、しばしば、セキュアデジタル(SD)又は小型フラッシュ(CF)の様な特定のカードや、SCSIまたはATAの様な特定のプロトコルについて説明されることになるが、この様々な態様は、他の様々なメモリカードやステムにも適用されるものと理解されたい。カード構造とオペレーションに関する様々な詳細については、更に、本明細書で参考文献として援用している特許及び出願に記載されている。
【0103】
図14は、カードとパーソナルコンピューター(又は、より一般的には、カードを読むのにハードウェアアダプターを必要とする全てのホスト)がリーダーを使って通信するプロセスを示している。図14は、USBラッパー又は同様の構造の明示的導入が無視されている場合もあることを除けば、図4と同様であり、これについては以下の議論でも削除されている。背景技術で述べた様に、カードとリーダーは、201で示す様に、カードのプロトコルのコマンドセットからの命令を使って通信する。ホストとリーダーは、通常は、203で示す様に、別のコマンドセットからの命令を使って通信する。リーダーは、2つのコマンドセットの間で、そのファームウェアを使って翻訳する。(ここで、そして以下でも、ファームウェアが引き合いに出されているが、これは、より一般的には、ハードウェア、ソフトウェア、又はこれらの組み合わせで実施することができる。)難しいのは、コマンド201が、PCがリーダと通信するのに使用するプロトコルに等価物を持っていないカードのコマンドセットからのコマンドであるときである。この場合、その様な等価な命令203が無いので、リーダーは、201を、対応するコマンド203に翻訳することができず、他のやり方についても同様である。従って、ホストが、カードのメディア特定の命令の1つを使用したい場合、先行技術では、PCハードウェアアダプタープロトコルのコマンドセットを変更すること無く、これにリーダーを通過させる手段が無い。
【0104】
この特定の例は、ホストからリーダーへはSCSIプロトコルを使用し、リーダーからカードへはSDプロトコルを使用しており、SDコマンド、即ち、安全な書き込みの例は、埋め込まれたコマンドとしてSCSIプロトコルには存在しない。従って、このコマンドを、SDカードで直接伝送することはできるが、本発明の態様を用いて、アプリケーションのホスト側が、ホストとリーダーの間でコマンドを搬送する中間SCSIプロトコルで命令を伝送することができるようにしなければならない。リーダーでは、ダミーコマンドは、各プロトコルにバージョンを有しており、データとして扱われている実際の埋め込まれたコマンドとともに、プロトコル間で翻訳され得る。例えば、ダミーコマンドは、ここでも書き込みと取られる。従って、ホストとアダプターの間では、それはSCSI書き込みコマンドと表され、アダプターとカードの間では、SDコマンドと表されるが、どちらの場合も、実際のコマンドはデータ部分に埋め込まれている。従って、この例では、埋め込まれたコマンドは、第2プロトコルに在るが、このやり方に沿った或る時点では、このアプリケーション特定コマンドを欠いたプロトコルで送られるので、それはまだ埋め込まれている。従って、これは、同じプロトコルのコマンドに埋め込まれている第1プロトコルのコマンドになるので、それと、埋め込まれているコマンドの等価物を持ち合わせていない別の第2プロトコルとの間の翻訳が可能になる。これは、図15に示されている。この議論は、主にSCSIとSD実施形態について論じているが、より一般的には他のプロトコルにも適用されるものと理解されたい。
【0105】
図15は、PC−リーダーのコマンドセット内に等価物を有していないカードのコマンドセットからのコマンドが、両方のコマンドセットの表現を有しているPC−リーダープロトコルの命令203に埋め込まれているときの、本発明の基本的態様の概略図である。代表的な実施形態では、メディア特定コマンドは、ここでも、PC−リーダープロトコルのデータ部分に埋め込まれている。すると、PCとリーダーは、リーダーが対応するコマンド201に翻訳することのできるコマンド203を交換することができる。しかしながら、このコマンド内には、別のメディア特定コマンド601が埋め込まれている。リーダーは、このコマンドを、そのオペレーションにトランスペアレントな方式で通過して翻訳する。代表的な実施形態の機構は、両方のコマンドセットの表現を有する命令201/203が、カードのメモリ内の予め決められた論理アドレスへのアクセスであるということである。例えば、カードは、指定された論理アドレスへの読み取りコマンドを受け取ると、これがメディア特定コマンド601であると警告される。(以下に説明する様に、以下の実施形態は、その様な指定された論理アドレス、より一般的には、書き込みコマンドだけに依存せず、データ部分を備えたあらゆるコマンドが利用されてもよい。)カードは、次に、その様なコマンドのシグネチャーを検査し、これを検証し、次いでコマンド601を抽出する。代表的な実施形態では、SCSI及び他のプロトコルでは、メディア特定コマンドを命令のコマンド部分に埋め込むのに都合のよい場所が無いことが多いので、コマンド601は、命令のデータ部分の内側に置かれる。
【0106】
例えば、PCがSDカードの安全な領域の書き込みを行いたければ、命令203を形成するが、その命令は、指定された論理ブロックアドレス(LBA)への書き込みコマンドで構成されており、コマンドパススルー(CPT)シグネチャーが入っていて、実際の安全な書き込みコマンド601がデータ部分に埋め込まれている。次に、PCは、この命令203をリーダーに送り、リーダーは、それを、SCSIプロトコルの標準的な書き込み命令として解釈する。次に、これは、リーダーによって、SDプロトコルで標準的な書き込み命令201に翻訳される。リーダーは、安全な書き込みコマンド601を、それが書き込みコマンドに取り付けられているデータの一部分であると想定して、通過するだけである。命令201がカードに到着すると、書き込みのために指定されたLBAに基づいて、ファームウェアは、カードが、命令はそうではなくてメディア特定コマンドであると判定できるようにする。コントローラーは、次に、安全な書き込みであると認識するコマンド601を抽出し、命令の実際のデータ部分の安全な書き込みを実行することによってコマンドを実行することに着手する。
【0107】
図16は、NセクターのデータのSDカードへの安全なデータ書き込みを実行する例に関する具体的な実施形態について、より詳細に述べている。一番上の行は、ホストによって形成される命令を示している。安全なデータ書き込みは、例のSCSIプロトコルの類似物を有していないので、コマンド部分は、SCSIプロトコルのコマンドCMD’、ここでは両方のコマンドセットに存在している書き込み、で構成されている。書き込みは、指定されたコマンド通過論理ブロックアドレスCPTLBA(議論を単純化するため、他のコマンドの詳細については示さない)に行われる。破線の右側のデータ部分は、最初のセクターで構成され、メディア特定コマンドが入っており、それに実際のデータのN個のセクターが続いている。最初のデータセクターは、コマンドパススルーシグネチャー、実際のメディア特定コマンド、及び後続のデータが書き込まれることになる実際のアドレスを含んでいる。論理ブロックアドレスCPTLBAは、先に論じた第1の代表的な実施形態の議論に用いられている論理ブロックアドレスLBA_XYZに相当する(例えば、図10A参照)。異なるラベル付けは、ホスト側でデバイスドライバレベルで実施されている本例では、用いられている論理ブロックアドレスが、具体的な指定された論理ブロックアドレスであり、ファイルレベルで実施されている先の例では、それは何れのアドレスでもよい、ということを示すのに用いられている。
【0108】
図16は、先に論じた図5と似ているが、命令510は、この例で明示的に示されている(ホストからリーダーへ、リーダーからデバイスへの)各伝送プロトコル毎に一回繰り返される。図5の命令510は、アプリケーションのホスト側とデバイス側の間の伝送経路に沿った何処かで起こるコマンドCMDの埋め込みを示しており、命令530は、アプリケーションのデバイス側で使用されることになる抽出された形態を示している。図16は、幾つかの中間プロトコルが存在してもよく、実際のコマンド(CMD)は、埋め込まれたコマンドが特定の中間プロトコルに類似物を有する場合でも、これらの内の幾つかを通して埋め込まれることを示している。
【0109】
リーダーから見ると、第1データセクターは、指定された論理ブロックアドレスに書き込まれることになるN+1個のデータセクターとして見えるものの最初の1つに過ぎない。従って、これらは、コンテンツが変更すること無く通過する。命令のコマンド部分は、リーダーによって、PC/リーダープロトコル(CMD’)の表現から、カードのプロトコル(CMD)の表現に翻訳される。この時点で、命令は、カードに伝えることはできるが、まだ、例えばCPTLBAへの書き込みコマンドの後にN+1個のデータセクターが続く形態を有している。
【0110】
カードに入ると、ファームウェアは、実際のコマンドを解きほぐすことができる。ファームウェアは、コマンドが指定されたアドレスを使用すると判定すると、第1データセクターに進み、CPT署名を検査し、実際のメディア特定コマンドを抽出する。これは、実際の命令のコマンドを形成し、その後に、N個の実際のデータセクターが続く。
【0111】
従って、図16に関して述べた様に、N個のデータセクターを備えたメディア特定書き込みコマンドは、PCとリーダーの間で用いられる伝送プロトコルにN+1個のデータセクターとして埋め込まれる。N個のデータセクターを読み取るために、メディア特定読み取りコマンドは、PCとリーダーの間で用いられる読み取り(又はデータを受け入れる他のコマンド)又は伝送プロトコルに1つのデータセクターとして埋め込まれる。この様に、メディア特定読み取りコマンドは、メディア特定読み取りコマンドがデータセクターだけに埋め込まれた書き込みコマンドとして実施することができる。カードは、やはり指定された論理アドレス(CPTLBA)と署名に基づいて、メディア特定コマンドを抽出し、メディア特定読み取りで指定された要求された論理ブロックアドレスからのデータに応答する。書き込み又は読み取り失敗の様な複雑なものに対処するための読み取り実施と方法の詳細については、第1の代表的な実施形態に関して先に詳しく展開した。
【0112】
指定された論理アドレス(CPTLBA)は、ファイルシステムで普通は使用されないセクターであるのが望ましく、そうしておけば、このセクターに送られてくるかもしれない標準的な読み取り又は書き込みコマンドとの衝突を回避できる。例えば、DOSでは、普通は、マスターブートレコードの後に、通常はアクセスされない幾つかの隠されたセクターがある。(オペレーティングシステムの中には、この領域にアクセスするには管理者特権を必要とし、次のセクションのファイルベースの実施において起こり得る厄介なことを迂回できるようになっているものもある。)この論理アドレスを指定された論理アドレスとすることにより、このアドレスへのアクセスは、実際にそこでデータの読み取り又は書き込みを行うためではなく、実際のコマンドは埋め込まれているメディア特定コマンドであることを検査する目的のためである。リーダーは、このコマンドを、通常のデータアクセスとして通過するだけで、カードが全てをソートする。
【0113】
図17A−17Lは、コマンドの様々な例を、どの様にデータセクターに埋め込むことができるかの1つの実施形態を示している。先に述べた様に、メディアカードへの書き込みが実行されると、データ部分の第1セクターには、CPT(カード通過)コマンドが入る。それは、CPT機能が実行されることを示している。従って、10個のセクターに書き込む際は、第1セクターはCPTヘッダーなので、実際には、11個のセクターに書き込む。10個のセクターを読み取るには、ユーザーは、CPTコマンドの1つの書き込みを送り、次いで10個のセクターを読み取らなければならない。実際のアプリケーションは、通常の読み取り又は書き込みコマンドでは達成できない特定のコマンドを実行することである。例えば、CPTモードは、AKE(認証キー交換)の様なメディア特定コマンドか、又はSDカード用のアプリケーションコマンドに用いることができる。
【0114】
図17Aは、埋め込まれたコマンドフォーマットの実施形態を示している。バイト0−31のCPTシグネチャーは、シグネチャーがコマンドと合致することを検査するためのコマンドに依存する文字列である。バイト32のコマンドは、
0−CPTモードチェック:CPTモードサポートに関しメディアカードを検査する
シグネチャー「カード通過モード検査」
1−データアウト:メディアカードに書き込まれるデータ
シグネチャーカード通過出力コマンド」
2−データイン:メディアカードから読み取られるデータ
シグネチャー「カード通過入力コマンド」
3−データ転送が無いコマンド
シグネチャー「カード通過ノーI/Oコマンド」
4−CPTコマンド打ち切り
シグネチャー「カード通過打ち切りコマンド」
5−CPTモードリセット
シグネチャー「カード通過リセットコマンド」
6−CPT状態読み取り
シグネチャー「カード通過状態読み取り」
データ転送長さ(バイト33−35)は、転送されるデータの量(バイト数として)を指定し、データはセクターに転送されるので、不完全なセクターには0が詰められる。データ(バイト36、ビット1)は、データ転送のフラグであり、次のコマンドにデータ転送が無ければ「0」であり、次のコマンドにデータ転送があれば「1」である。同様に、方向(バイト36、ビット0)は、データ転送方向のフラグであり、データ転送が次のコマンドへの入力のためであれば「0」であり、データ転送が次のコマンドへの出力のためであれば「1」である。
【0115】
メディアカード特定コマンド領域(バイト48−511)は、コマンドが抽出されるとメディアカードが実行する実際のコマンドである。メディアカード特定フラグ領域(バイト36、ビット0)は、メディア依存フラグのためのものである。
【0116】
メディアカードは、カード通過コマンドプロトコルをサポートするか否か、実際のコマンドが送られる前に検査されねばならない。先に述べた様に、LBA(CPTLBA−カード通過LBA)は、プロトコルに対して指示される。LBAは、カードの0から最終セクターまでのどの様な数でもよい。例では、これが、LBA2であり、FATファイルシステム内のマスターブートレコード後の第2の隠されたセクターであり、通常、データを保持するのには用いられない。LBAに有効データが入っている場合でも、このプロトコルは、その値を留保することに注目されたい。モードサポートを検査するには、2つの選択肢がある。
【0117】
プロトコルのサポートに関して問合せる第1の選択肢は、メディアカードがCPTモードサポートシグネチャーをCPTLBAセクターに置くときのものである。しかしながら、これは、CPTLBAが、有効な情報を有するセクター、例えば、FAT/ディレクタリ又はユーザーデータ領域内のセクターである場合は望ましくない。CPTモードがサポートされている場合は、随意的に、カードは、図17Bに示している様に、CPTLBAセクターをシグネチャーと共に戻すことができ、バイト0−31は「カード通過モードはサポートされている(空白で詰められている)」であり、バイト32−511は0である。
【0118】
プロトコルのサポートに関して問合せる第2の選択肢は、CPTLBAセクターに、CPTモードをサポートするシグネチャーが入っていない場合に用いることができる。この場合、以下のプロトコルが、モードサポートを検査するのに用いられ、
a)ホストメモリ領域のCPTLBAセクターを読み取り、保存する。
(サポートするシグネチャーは無い)
b)CPTLBAに、CPTモードサポートを問合せるためのシグネチャーが入っているセクターを書き込む。
c)CBTモードサポートの応答を検査するため、CPTLBAセクターを読み取る。
d)CPTLBAに、保存されたメモリ領域からのオリジナルセクターを書き込む。
ステップa)は、指定された論理アドレス(CPTLBA)を、ホストがCPTLBAセクターを読み取り、且つ、メモリに保存するときに、中に入っている全てのデータを維持したままで、サポートに関して検査することができるようにしている。これは、メディアカードがカード通過モードをサポートしていない場合に、セクターを復元するためである。この書き込みは、CPTモードコマンドを使用しない。
【0119】
図17Cは、ステップb)、CPTLBAに問合せるためのシグネチャーが入っているセクターを書き込むことを示している。バイト0−31は、ホストが、バイト0−31のCPTLBAセクター「カード通過モード検査」(空白で詰められている)と書き込むことを含み、その後、バイト32−47では、コマンドとフラグが続く。バイト48−511は0である。
【0120】
ステップc)ホストは、応答するためにCPTLBAセクターを読み取る。応答が図17Dの様に、バイト0−31は「カード通過モードはサポートされている」(空白で詰められている)であり、バイト32−511は0であれば、カード通過モードがサポートされており、他の場合は、カードはCPTプロトコルをサポートしていない。このプロトコルは、プロトコルのサポートに関して問合せるための第1選択肢とは異なることに注目されたい。CPTモード検査コマンドが発行されるときに、シグネチャーに応答がある。
【0121】
ステップd)で、ホストは、保存されているメモリ領域からCPTLBAセクターのオリジナルデータを書き込む。カードがカード通過モードをサポートしていても、適正なシグネチャーが無いので、この書き込みは、特別なCPTコマンドと解釈されないことに注目されたい。
【0122】
図17E−17Gに関し、入力/出力プロトコルを説明する。データをメディアカードに出力するには、先ず、CPTLBAに出力用のシグネチャーを書き込み、その後、データ転送長さに基づいてデータを書き込む。CPTLBAに出力用のシグネチャーを書き込むために、ホストは、書き込みコマンドをメディアカードに送るが、データは、メディアカード特定コマンドが埋め込まれているCPTコマンドフォーマットを有している。長さは、「データ転送長さ」とCPTコマンドフォーマット用の1個のセクターを加えたものである。これは図17Eに示されており、バイト32の1は、「メディアカードに書き込まれることになるデータ」に対応する。
【0123】
データ転送長さに基づく実際の書き込みを図17Fに示しており、メディアカードがデータをどの様に扱うかは、メディアカード特定コマンド次第である。図17Aについて述べたように、この例の「データ転送長さ」情報は、バイトで言えばバイト33−35(MSB、LMSB、LSB)で表現されている。しかしながら、読み取り/書き込みデータがカードとセクターのリーダーの間で転送されるとき、不完全なセクターは、必要に応じて0を詰められる。(例えば、SDカードでは、認証キー交換(AKE)プロセスは、チャレンジ・レスポンスに8バイトを使用する。)従って、ホストは、データセクターに、チャレンジ1とレスポンス2のデータに対して504バイトの0を詰め、カードは、同様にチャレンジ2とレスポンス1のデータを詰める。
【0124】
データをメディアカードから入力する際は、ホストは、CPTLBAに入力用のシグネチャーを書き込み、データ転送長さに基づいてデータを読み取る。図17Gは、読み取られるデータを示すために送られることになるCPTコマンドを示しており、バイト32における2は「メディアカードから読み取られるデータ」に対応する。データ転送長さに基づいてデータを読み取る際は、ホストが読み取りコマンドをメディアカードに送った後、読み取られるセクターの数は[(データ転送長さ)/512]である。(これは、セクター当たり512バイトを想定しており、より一般的には、実際のセクター長さが異なる場合は、512に置き換わる。)開始セクターはCPTLBAである。先のコマンドはCPT入力コマンドなので、カードは、メディアカード特定コマンドに基づいて、そのデータをホストへ送る。
【0125】
入力又は出力の無いコマンドの例には、「データ転送の無いコマンド」、「CPTコマンド打ち切り」、及び「CPTモードリセット」が含まれる。図17Hは、バイト32における3で示す「データ転送の無いコマンド」を示している。
【0126】
図17Iは、バイト32における6で示す「状態読み取り」コマンドを示しており、これは、ホストがCPT状態を読み取れるようにする。例えば、SDカードでは、状態は応答データとして実施することができる。状態は、読み返されたデータの最初の数バイトである。
【0127】
具体例が必要な場合はSDカードを取り上げているが、図17A−17Iは、どの様な特定のメディアプロトコルにも限定されず、また、メディア特定コマンドにも限定されない。メディア特定コマンドの例を挙げると、図17Jは、SD又はMMCカードに特定の埋め込まれたコマンドを示しており、図17Lは、コンパクトフラッシュカードに特定の埋め込まれたコマンドを示している。
【0128】
図17Jでは、SD/MMCの例のためにコマンドのフォーマットを示している。バイト0−35は上記の通りである。SD/MMCコマンドは、メディアカード特定コマンドフィールドを満たしている。バイト48−53は、SDコマンド、例えば安全な読み取りである。メディアカード特定フラグフィールドには、幾つかのフラグが必要であり、定義されている。BLKHは、コマンドが、1つのセクター用か、複数のセクター用かを示し、1つのセクターコマンドが用いられる場合は0、複数のセクターコマンドが用いられる場合は1である。アプリケーションコマンドの場合、APP=1である。応答型式は、コマンドインデクス次第のSD応答型式である。バイト48−52の様々なエントリは、SDコマンドの実際の要素であり、バイト53のCRC7は、随意に0に設定してもよい。
【0129】
SDコマンドの応答データを得る際は、ユーザーは、状態読み出しを送って応答を得ることができる。これは、図17Kに示されている。応答データは、読み取りされたセクターの最初の6バイトとして戻される。
【0130】
図17Lは、埋め込まれたコマンド用の小型フラッシュ(CF)コマンドフォーマットを示している。この場合、コマンドは、バイト48−54にあり、CFコマンドを備えるのに必要な要素を提供する。図17Lでは、メディアカード特定フラグ(バイト36−ビット2からバイト37)が、将来の様々なカードに対するコマンド特定フォーマットに備えて予約されている。
【0131】
(第3の代表的な実施形態)
第3の代表的な実施形態は、第1の代表的な実施形態と同じく、ファイルレベルで実施される。ここで、議論は、ホスト側のファイル内に置かれているものの詳細の方に焦点を当てる。デバイス特定コマンドはファイル内に埋め込まれているので、FAT領域の様なファイルシステム特定データに害を与える術は無い。カードの視点からは、異なる代表的な実施形態は、同様に見え、大きな違いは、情報がホスト側でどのように詰め込まれるかである。具体的なアプリケーションを参照する必要がある場合、第3の代表的な実施形態は、2004年12月21日出願の米国仮特許出願第60/638,804号に呈示されている様な、安全なバスへの安全なリンクの実施形態であり、同出願は、先に参考文献として援用されている。
【0132】
ファイルレベルの実施では、デバイスドライバレベルの実施で生じ得る特権問題の類を克服するだけでなく、特別なコマンドを送る特別なハードウェアを持つことに対して起こり得る必要性も克服することができる。例えば、デバイスドライバレベルの幾つかの場合では、SDカードの安全な領域にアクセスするために特別なコマンドを送らなければならない場合があるが、ファイルレベルの実施では、情報がファイルに詰め込まれているので、最早その必要がない。そのため、ファイルに対する書き込みと読み取りが行える限り、どの様なコマンドセットでも、この実施で送信し受信することができる。
【0133】
先行するセクションの実施形態は、デバイスの入力/出力レベルで作動するカードドライバの実施である。ホスト又はPCアプリケーションとデバイス又はカードドライバの間にオペレーティングシステム(OS)ファイルシステムがある。第3組の実施形態は、OSファイルシステムで作動するファイルI/O実施である。これらの実施形態では、ホストは、ファイルをメモリデバイスに書き込むようにファイルシステムに告げるだけであり、デバイス特定コマンドはここでも埋め込まれている。ファイルのフラッシュメモリへの書き込みの更なる詳細については、2005年2月16日出願の米国特許出願第11/060,249号、第11/060,174号、及び第11/060,248号に記載されており、それら全てを参考文献としてここに援用する。これらの実施形態は、デバイスレベルの実施形態より少し多いファームウェアのオーバーヘッドを必要とするが、数多くの利点を有している。例えば、デバイスレベルでは、アプリケーションが開発される際に、ハードウェアに関する知識を有する必要があるのに対して、ファイルシステムを使うことによって、これは、ハードウェアからも、下部レベルのプロトコルの多くの詳細からも独立したものになる。
【0134】
デバイスレベルの実施形態と同様に、ファイルレベルの実施形態は、ベンダ特定コマンドを、ウインドウズ98/ME/95/DOS及び同様の例に見られる高度SCSIプログラミングインターフェース(ASPI)の様な各ベンダ製品に送るのに用いられる。先に述べたデバイスレベルの実施形態では、使用法は、特定の論理アドレスCPTLBAへの書き込みで作られた。しかしながら、多くのオペレーティングシステムでは、この論理アドレスにアクセスするには、或るアクセス特権が必要である。例えば、或る種のSCSIコマンドは、ユーザーが管理者特権を持っていなければ、ベンダ製品に送ることができない。オペレーティングシステムは、一般的にファイルの書き込みを許容するので、本発明のファイルレベルの実施形態は、メディア特定コマンドをファイルに埋め込み、ファイルをデバイスに書き込み、デバイスへの実際の埋め込みを元に戻すことによって、この特権問題を回避する。ウインドウズオペレーティングシステムの多くのバージョンでは、代表的なCPTLBAを使用しているカードレベルの実施形態は、管理者特権を必要とするのに対して、ファイルの書き込みは、その様な特別なアクセス特権を何ら必要としない。先のように、代表的な実施形態は、メディア特定コマンドを命令のデータ部分に埋め込んだ。
【0135】
オペレーティングシステムのファイルシステムレベルでの実施は、これも、プロトコルに従い、プロトコルを認識するように作られているカードのカードファームウェアによって実施される。シグネチャーは、何れかのLBAへの読み取り/書き込みコマンドによって、検査され、埋め込まれているメディアカード特定コマンドがデータに入っているか否か判定される。この差が、特定アドレスを使用するデバイスのドライバ実施を形成する。他のやり方では、カードから見ると、このセクションのデバイスドライバレベル実施形態と、先のセクションのファイルシステムレベル実施形態との間に殆ど差は無い。
【0136】
先行セクションでのように、ファイルベース実施の代表的な実施形態は、プロトコルを、メディア特定コマンドが埋め込まれる「命令」部分と、コマンドが何らかのデータ転送を伴っていれば、コマンドに関係付けられたデータを保持する「データイン/アウト」部分とに分割する。プロトコルコマンドをカードが受け取ると、ファームウェアは、読み取り又は書き込みオペレーション中に特別なシグネチャーについて検査し、所与のLBAが命令部分であるか否かを判定するが、これは、シグネチャーが常に最初のデータセクターに埋め込まれている実施形態では、プロトコルコマンドの最初のデータセクターで行う必要があるだけである。ホスト側のプログラマーから見ると、クライアントアプリケーションは、命令部分と、恐らくはデータイン/アウト部分とを有する簡単なファイル又は論理セクター(LBA)書き込みオペレーションを発行する。ファームウェアは、コマンドがメディアに対するデータの読み取り又はデータの書き込みの何れかを伴っている場合は、論理対物理マッピングを実行する。ファームウェアは、API命令部分を伝送プロトコルから書き込み又は読み取りとして受け取る際に、それを検出することになる。
【0137】
或る代表的な実施形態では、プロトコルコマンドの命令部分には、シグネチャー、問合せコマンド、ベンダ特定コマンド、及び更新可能フィールドが入っている。ここでは、サイズが、(最も一般的に使用されているデータブロックのサイズである)512バイトの倍数に制限される。代表的な実施形態の命令ページのフォーマットを図18Aに示しており、これは図17Aと非常に良く似ているが、更に詳しい。最初の36バイトは暗号化されず、残りは、サポートされている暗号化アルゴリズムの存在を述べる暗号化/復号情報に従って暗号化/復号される。
【0138】
図18Aに示す様々なフィールドについて述べると、バイト0と1は、API命令ページの候補になり得るLBAを示すのに用いられるシグネチャーバイトである。ファームウェアは、これら2つのバイトが合致するか否か、APIシグネチャーを検査する。以下の例では、バイト0は19であり、バイト1は73である。APIシグネチャーは、ビット2−34に続いており、文字による単一の列である。以下の例では、シグネチャーは「高度プログラミングインターフェース」とする。
【0139】
バイト35は、ファームウェアに、後続の命令ページとデータページが暗号化されているか否かを告げる、暗号化/復号(E/D)情報である。暗号化されていなければ、このフィールドは、API_NO_ENCRYPTIONと設定され、そうでなければ、暗号化名に設定されるので、ファームウェアは、バイト36から始まる単数又は複数の命令ページと、データページを復号及び暗号化することができる。バイト36−39は、ファームウェア作動状態フィールドのフィールドであり、オペレーションの成功又は失敗に基づいて更新される。全てが上手く行けば、API OP SUCCESSと設定され、そうでなければ、エラー値又はAPI OP NO SUCCESSと設定されることになる。そのデフォルト値は、コマンドを発行するときに、0xFFFFFFFFに設定されることが示唆されている。書き込み後に、発呼者は、命令ページを読み取り、要求したオペレーションが成功したか否かを検証することができる。ベンダ識別子フィールド(バイト40−43)を、固有のベンダ識別子として使用してもよい。このフィールドは、ファームウェアも有効なベンダIDを必要とする場合は、ファームウェアに対して自身を識別するために呼び出し環境によって使用することができる。
【0140】
命令ページ数のフィールド(バイト44)は、ファームウェアに命令ページの総数を告げるが、命令ページは、512バイトが限界である。同様に、データページ数のフィールド(バイト45−46)は、ファームウェアに、命令部分に取り付けられているデータイン/アウトページの総数を告げる。データページのサイズは、必ずしもバイトでのデータサイズではなく、場合によっては、データバイトの最後に詰め込みが追加されることもある。例えば、DESは、バイトでのデータサイズが8の倍数でなければならないことを要求する。バイトフィールド(バイト47−50)でのデータサイズは、有効なデータの入っているデータページ内のファームウェアのバイト総数を告げる。メディアから読み取る場合は、このフィールドを、ファームウェアによって、ページ領域内の実際の処理されたバイトサイズで更新しなければならない。データをメディアに書き込むことに関して、これは、データサイズのバイトでの長さである。データが暗号化されている場合、ファームウェアは、先ず、データページの全コンテンツを復号し、次に抽出を行う。バイト51で、ビット0はデータ転送用のフラグであり、目下のコマンドがデータ転送を要求していない場合は「0」に設定され、目下のコマンドがデータ転送を要求している場合は「1」に設定される。
【0141】
バイト51、ビット1と2は、データ転送の方向用のフラグである。数値「00」は、データ転送が目下のコマンドでは入力用であることを示しており、ファームウェアは、書き込み時間中にコマンドを処理し、一旦メディアへ書き込まれたデータページを無効にする。数値「01」は、データ転送が目下のコマンドでは入力用であることを示しており、ファームウェアは、書き込み時間中に、無効にすることなくコマンドを処理する。数値「10」は、データ転送が目下のコマンドでは出力用であることを示している。数値「11」は、留保されている。バイト51、ビット3からバイト52は、メディアカード特定フラグであり、メディアカードの型式に依る。バイト53−63は、将来使用するために予約されているフィールドである。
【0142】
メディアカード問合せコマンドフィールド(バイト64)は、メディアカードの目下の状態と能力を問合せるのに用いられる。既知のサポートには、APIプロトコルにサポートされている、E/Dアルゴリズムにサポートされる、及びAPIプロトコルサポートを使用不能にする、が含まれる。メディアカード問合わせコマンド戻し状態フィールド(バイト65−68)は、メディアカード問合せコマンドの戻し値を保持するのに用いられる。
【0143】
メディアカード特定コマンド長さ(バイト69−70)は、コマンドフィールドが記憶するコマンドバイトの総数を指定し、メディアカードが実行することになる実際のコマンドは、メディアカード特定コマンドに入っている(バイト71−511)。
【0144】
命令ページには、あらゆるデータイン/アウトページが添付されることになる。確立された暗号システムアルゴリズムに基づく発呼者の環境とファームウェアは、コンテンツを暗号化/復号する。データページをメディアに書き込むのが望ましくない場合もあり、その場合は、ファームウェアが、書き込み前にコマンドを処理し、命令ページをメディアだけに書き込んで、ユーザーがそれを読み取り、オペレーションの状態を理解できるようにする。
【0145】
図18B−Fは、実際のコマンドが送られる前に、メディアカードがAPIプロトコルをサポートしているか否かに関して検査するのに用いられるAPIプロトコルのサポートに関する問合せの様な、メディア特定問合せコマンドの幾つかの例を提供している。具体的な手順は、図18Bと図18Cに示されている。メディアにアクセスするのにファイルシステムが用いられる場合、ファイルは、1つの命令ページだけのコンテンツを有するように書き込まれる。図18Bと図18Cの例は、ファイルシステムを通して、どの様にプロトコルに問合せるかを例証している。
【0146】
呼び出し環境はファイル、例えば「myAPI.bin」を開く。プロトコルのサポートを問合せるために、発呼者は、図18Bに示している512バイトをファイルに書き込み、書き込みファイルコマンドを発行する。書き込みファイルコマンドを発行した後で、メディアは、ファイルをメディアに書き込む間又はそれを読み取る間のどちらであっても適切な動作をする。例えば、メディアカードは、書き込む前に命令ページを処理すると仮定する。この場合、以下の動作が行われることになり、即ち、
a)シグネチャーバイトを検証する
b)合致すれば、APIシグネチャーを検証する
c)合致すれば、メディア特定フラグがあればそれを通過する
d)1であるメディアカード問合せコマンド要求を検査する
e)データ転送が無いときは、データフィールドと方向フィールドが0であることを検証する。
f)コマンドを処理し、フィールドを更新し、メディアにファイルを書き込む。
ユーザーがメディアからファイル、myAPI.ファイルを読み取ると、発呼者は、2つのフィールドを検査しなければならず、即ち:(1)ファームウェア作動状態:コマンドオペレーションが成功裏に完了していれば、このフィールドは、API_OP_SUCCESSで更新され、失敗していれば、或るエラー値で更新される、(2)メディアカード問合せコマンド戻し状態は、コマンドオペレーションが成功裏に完了したときにだけ検査されることになる。プロトコルがサポートされていれば、フィールドは1で更新され、サポートされていなければ0で更新される。図18Cを参照のこと。
プロトコルがサポートされていなければ、又はカードがこのプロトコルサポートに対して使用不能になっていれば、これら2つの更新可能なフィールドは、最初のデフォルト値0xFFFFFFFFを維持することになる。
【0147】
メディア特定問合せコマンドの第2例は、どの暗号化/復号アルゴリズムがサポートされているかを判定するための問合せであり、この問合せ前に、APIプロトコルがサポートされているか否か、および稼働中であるか否か、メディアカードを検査しなければならない。これは、図18Dと図18Eを使って示されている。図18Bと図18Cに関して論じたAPIプロトコルのサポートに関する問合せと同様に、ファイル型式システムを使ってメディアにアクセスするときには、1つの命令ページだけのコンテンツを有するファイルが書き込まれることになる。呼び出し環境はファイル、例えば以前と同じ例を使用するとmyAPI.bin、を書き込むことになる。
【0148】
呼び出し環境はファイル、例えばmyAPI.binを書き込むことになる。このコマンドのサポートについて問合せるために、ユーザーは、図18Dに示している512バイトを組み込んで、書き込みファイルコマンドを発行することになる。メディアカードは書き込む前に命令ページを処理すると仮定すると、代表的な動作のセットは以下の通りで、
a)シグネチャーバイトを検証する
b)合致すれば、APIシグネチャーを検証する
c)合致すれば、メディア特定フラグがあれば、それを通過する
d)メディアカード問合せコマンド要求、それは2である、を検査する
e)データ転送が無いときは、データフィールドと方向フィールドが0であることを検証する。
f)コマンドを処理し、フィールドを更新し、メディアにファイルを書き込む。
ユーザーがメディアからファイル、myAPI.binを読み取ると、発呼者は、2つのフィールドを検査することになり、即ち:(1)ファームウェア作動状態:コマンドオペレーションが成功裏に完了していれば、このフィールドは、API OP SUCCESSで更新され、失敗していれば、或るエラー値で更新される、(2)メディアカード問合せコマンド戻し状態は、コマンドオペレーションが成功裏に完了したときにだけ検査されることになる。このフィールドは、32ビットの整数を戻し、0は、何らの暗号化/復号アルゴリズムもサポートされていないことを意味する。そうでなければ、各所定の暗号化/復号アルゴリズム毎に各ビットが設定されることになる。例えば、DESがビット1、3DESがビット3、AESがビット32にあるとすれば、戻し値は、
MSB 10000000 00000000 00000000 00001010 LSB となる。
結果を図18Eに示している。アルゴリズムの最大数は、この代表的な実施形態では32であることに注目されたい。戻し値に基づいて、サポートされているE/Dアルゴリズムの型式を判定できるので、同じ所定のアルゴリズム名をバイト35に設定することによって、命令ページ(バイト36から開始している)とデータページを暗号化することができる。バイト35は、何れの所与の時点でも設定される1ビットだけを有することに注目されたい。2ビット以上が設定されれば、それは失敗になる。
【0149】
メディア特定問合せコマンドの別の例は、メディアカードがAPIプロトコルをサポートしているか否かを判定するための問い合わせであり、サポートしていれば、それを使用不能にする。どの暗号化/復号アルゴリズムがサポートされているかを判定するための問合せと同様に、ファイルが開かれ、このファイルのコンテンツは1つの命令ページだけを有することになる。呼び出し環境はファイル、例えばここでもmyAPI.bin、を開くことになる。このコマンドのサポートについて問合せるために、ユーザーは、図18Fに示されている512バイトをファイルに組み込んで、書き込みファイルコマンドを発行することができる。
【0150】
ファイルを書き込んだ後、ユーザーは、フィールドを読み取り、先ず、(1)ファームウェア作動状態を検査することによって、オペレーションが成功裏に完了しているか否かを検証し、コマンドオペレーションが成功裏に完了していれば、このフィールドは0で更新され、失敗していれば1で更新され、(2)メディアカード問合せコマンド戻し状態は、コマンドオペレーションが成功裏に完了しているときにだけ検査される。プロトコルが使用不能であれば1になり、失敗の場合は0になる。
【0151】
図18Gと図18Hは、ファイルシステムベースのメディア特定読み取り及び書き込みコマンドの具体的な例を示している。ファームウェアコマンドをメディアカードに発行する前に、カードは、それがAPIプロトコルをサポートしているか否かを調べるために検査される。先のプロトコルと同様に、メディアにアクセスするのにファイルシステムが用いられる場合は、ファイルは、1つ又は複数の命令ページとあらゆる関係付けられたデータのページのコンテンツによって開かれる。メディア特定書き込みコマンドの例を図18Gに示している。
【0152】
より具体的には、発呼者がコマンド(例えば、SDカードコマンドセットの「D5」)を発行して、データページを取り、それを隠されている領域に書き込みたいと思っているとしよう。呼び出し環境がファイルを開き、ユーザーは、図18Gに示しているデータページを準備することになる。バイト00−34は、図18A−図18Fに示している通りで、この例の命令のバイト35は、暗号化が使用されていないことを示している。バイト36−39は、ここでも、ファームウェアの作動状態を示しており、イタリック体(ここ及び前の両方)は、フィールドが更新可能なファームウェアであることを示しており、ベンダ又はメディア識別子(本例は、ベンダ識別子を「SNDK」として使用する)がバイト40−43内で続いている。埋め込まれたコマンドは、このメディア/ベンダに特定のものである。バイト44−50は、ここでは示されているページ(NIP=1)だけの命令ページ数、本例ではこれも1(NDP=1)のデータページ数、及びバイト数として、ここでは1セクターの512バイト(DSIB=512)とされている、指定されているデータサイズ、を示している。命令のバイト51−68は、特定のコマンドに必要な、先に述べた命令情報を提供する。
【0153】
実際の埋め込まれているコマンドは、(バイトでの)長さがバイト69−70に指定されており、この場合は、1つのバイト71であり、そこに予約されているか、又は安全な領域への書き込みを示す代表的な「D5」命令が含まれている。メディア特定命令に割り当てられる残りの領域(バイト72−511)は、完全なセクターにするためにゼロを詰められている。実際の特定のコマンド用のデータの(ここでの)512バイトは、次のセクターに続いている。
【0154】
図18Gでは、データフィールド(DATA=1)は、この命令に「入力」が入っており、方向フィールド(方向=00)が、ファームウェアに、データを処理してページをメディアに書き込むことを告げていることに注目されたい。ファイルシステムは、データページをメディアに書き込むので(ファイルシステムで見ると1024バイト、最初の512は埋め込まれたコマンド用)、ファームウェアは、必要に応じて、データページに0又はFFを詰める。
【0155】
発呼者は、メディアカードからファイルを読み取り、ファームウェア作動状態フィールドを検査することによって、オペレーションが成功したか否かを検証する。オペレーションが成功裏に完了していれば、このフィールドは、API OP SUCCESSで更新され、成功していなければ、或るエラー値又はAPI OP NO SUCCESSで更新される。方向が00だったので、データページは0又はFFとなることに注目されたい。
【0156】
メディアカードは書き込む前に命令ページを処理すると仮定すると、代表的な動作のセットは以下の通りで、
a)シグネチャーバイトを検証する
b)シグネチャーが合致すれば、APIシグネチャーを検証する
c)命令ページ(バイト36から)が暗号化されているか否か検査する
d)暗号化されていれば、命令ページ(バイト36から)とデータページを復号する
e)ベンダIDシグネチャーを検証する。
f)ベンダIDが合致すれば、メディア特定フラグ(もしあれば)を通過する
g)方向とデータフィールドを検査する
h)実際の埋め込まれているメディア特定コマンドを処理する
i)命令ページのファームウェア作動状態フィールドを更新し、(要求されれば)バイト36の後の命令ページを暗号化し、それをメディアに書き込む。方向が00なので、必要に応じてデータページを0又はFFと書き込む。
【0157】
メディア特定読み取りコマンドは、数多くの方法で実施することができ、その内の幾つかについて、以下のセクションで更に論じる。ファイルシステムベースのメディア特定読み取りコマンドの実施は、構造が図18Gの書き込み構造と似ているが、ここで図18Hに関して説明する。
【0158】
メディアから読み取れる様に、メディア特定コマンドはD6で、方向は10である。更に、用いられているコマンド及び確立されているプロトコルに基づいて、コンテンツを修正する柔軟性がある。例えば、カードには、このファイルを書き込むよう告げることができ、ファイルは、書き込む前にコンテンツを暗号化するようファームウェアに告げる特別なコマンドを有している。従って、書き込まれたコンテンツは、書き込まれる前に、他の形態に変換してもよい。同じことを読み取りオペレーションにも適用することができる。
【0159】
図18Hは、発呼者がコマンド(例えば、SDカードコマンドセットの「D6」)を発行し、隠されている領域からのデータセクターを読み取り、それをデータページの下に置きたいと思っている場合を示している。呼び出し環境はファイルを開くことになり、ユーザーは、図18Hに示しているようなデータページを準備し、ベンダ識別子は、ここでも「SNDK」とされている。
【0160】
データフィールドは、これが「出力」であると表示するので、データページは更新され、方向フィールドは、ファームウェアに、読み取り中にデータを処理するよう告げる。ファームウェアにとってもう1つの可能性は、コマンドを処理し、データページを更新し、それをメディアに書き込むことである。従って、ファームウェアは、1024バイトをメディアに書き込む。ファームウェアは、ファイルを読み取ると、これが命令ページであることを検出し、次に、コマンドを読み取り、データフィールドを適切に更新する。発呼者は、メディアカードからファイルを読み取ることによって、オペレーションが成功したか否かを検証する。ファイルが読み取られると、発呼者は、ファームウェア作動状態のフィールドを検査することができる。コマンドが成功裏に完了したオペレーションになっていれば、このフィールドは、API OP SUCCESSで更新され、成功していなければ、API OP NO SUCCESSの様な或るエラー値で更新される。読み取られたデータの量も、DSIBフィールドを検査し、それが512に更新されているか否かを調べることによって検証することができる。
【0161】
以上、本発明の様々な態様について、具体的な実施形態について述べてきたが、本発明は、特許請求の範囲に述べる全ての範囲内で保護されるものと理解されたい。
【図面の簡単な説明】
【0162】
【図1】ホストカードシステムの層の概略図である。
【図2】ホストカードシステムのブロック図である。
【図3】カードが、リーダー又はハードウェアアダプターを使って別のホストと通信するシステムのブロック図である。
【図4】図3のシステムでデータ及びコマンドを転送するための先行技術の技法の概略図である。
【図5】本発明の代表的な実施形態による、アプリケーション特定コマンドがどの様に埋め込まれるかを示している。
【図6】ファームウェア層の関係に関する代表的な構造を示すブロック図である。
【図7】デバイスのドライバ層の概略図である。
【図8】パーティション状態コマンドへの応答に含まれている情報を示している。
【図9】引数データセクターの代表的なフォーマットを示している。
【図10A】ホスト側の通信の流れを示している。
【図10B】ホスト側の通信の流れを示している。
【図11A】ホストアプリケーション−デバイスアプリケーションプロトコルを示している。
【図11B】ホストアプリケーション−デバイスアプリケーションプロトコルを示している。
【図11C】ホストアプリケーション−デバイスアプリケーションプロトコルを示している。
【図12】隠しパーティションアプリケーションのコマンドの状態マシン図である。
【図13A】隠しパーティションプロトコルの一組のコマンドのプロセスの流れを示している。
【図13B】隠しパーティションプロトコルの一組のコマンドのプロセスの流れを示している。
【図13C】隠しパーティションプロトコルの一組のコマンドのプロセスの流れを示している。
【図13D】隠しパーティションプロトコルの一組のコマンドのプロセスの流れを示している。
【図14】図4の簡素化バージョンである。
【図15】本発明の態様による、図3のシステムでデータとコマンドを転送するための技法の概略図である。
【図16】特定の実施形態による、図15の詳細を示す。
【図17A】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17B】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17C】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17D】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17E】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17F】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17G】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17H】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17I】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17J】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17K】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17L】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図18A】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18B】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18C】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18D】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18E】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18F】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18G】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18H】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【技術分野】
【0001】
本発明は、概括的には、取り外し可能な電子回路カードの使用と構造に、より具体的には、パーソナルコンピューター又は他のホストが、メディア特有のカードコマンドを、これらのコマンドをサポートしないリーダー及び/又はホストソフトウェアを通して、使用できるようにすることに関する。
【背景技術】
【0002】
最近、コンパクトフラッシュカード、セキュアデジタル(SD)カード、マルチメディアカード(MMC)、xD、及びソニーメモリスティック/メモリスティックProの様な小型フォーマットフラッシュメモリカードが、消費者に広く受け容れられている。これらのデバイスは、主に、デジタルカメラ及びフラッシュメモリ音楽プレーヤーの様な消費者用電子機器のために設計されている。しかしながら、それらは、更に、データをアップロード及びダウンロードするために、パーソナルコンピューターへ使い勝手良く接続できるようになっているのが望ましい。
【0003】
カードが違えば、電気的インターフェースも異なり、そのカード用のホストが使うことのできるメディア特定のコマンドを有していることも多い。更に、カードプロトコルは、カードのフォームファクタ相互間で異なるだけでなく、同じフォームファクタを有する様々なカード相互間でも異なるが、それは、これらのカードが、カード毎に異なることがある追加的機能でオーバーロードになった状態で開始されるからである。コマンドは、しばしば、特別な入力−出力(I/O)及びセキュリティオペレーションの様な固有の機能を有している。その様なカードの使用法は更に多様になり、より多くの型式のアプリケーションで用いられるので、これらの新規のアプリケーションは、既存のプロトコルには無い機能又はコマンドを伴うことも多い。
【0004】
異なる機械的及び/又は電気的インターフェースを有する市販の不揮発性メモリカードの例には、本出願の譲受人であるカリフォルニア州サニーベールのSanDisk(サンディスク)社から販売されている同類のマルチメディアカード(「MMC」)とセキュアデジタル(「SD」)メモリカードが含まれる。国際標準化機構(「ISO」)と国際電気標準会議(「IEC」)の標準に準拠している他のカードもあり、広く実施されている例は、ISO/IEC7816標準として知られている。
【0005】
MMCの物理的及び電気的仕様は、「マルチメディアカードシステム仕様書」に定められており、カリフォルニア州クパチーノのマルチメディアカード協会(「MMCA」)によって時々更新され、発行されている。1999年6月、2000年1月、2001年6月、及び2004年2月付けの、その仕様書の2.11、2.2、3.1、及び4.0バージョンを、それぞれ参考文献として明確にここに援用する。1枚のカードに128メガバイトまでの様々な記憶容量を有するMMC製品は、現在SanDisk社から販売されている。これらの製品については、SanDisk社が発行した2000年4月付けの「マルチメディアカード製品マニュアル」改訂第2版に記載されており、このマニュアルを参考文献として明確にここに援用する。MMC製品の電気的オペレーションの或る態様については、米国特許第6,279,144号と、1998年11月4日出願の米国特許出願第09/186,064号にも記載されている。物理的なカード構造と、それを製造する方法は、米国特許第6,040,622号に記載されている。SanDisk社に譲渡されているこれらの特許出願及び特許を、参考文献として明確にここに援用する。
【0006】
更に新しいSDカードは、MMCカードに似ており、追加のメモリチップを収容する厚み増加以外は、同じ寸法を有している。両者の大きな違いは、SDカードが、カードとホストの間のデータ転送をより速くできるようにするため、追加的データ接点を含んでいることである。(追加的データ接点を備えたMMCカードのバージョンも入手できる――、先に述べたMMC仕様書のバージョン4.0を参照されたい。)SDカードの別の接点は、SDカードを受け入れるように設計されているソケットがMMCカードも受け入れるようにするため、MMCカードの接点と同じになっている。SDカードとの電気的及び機能的なインターフェースは、更に、米国特許第6,820,148号に記載されている様に、SDカードを受け入れるように設計されているソケットを、MMCカードも受け入れることができるように作られており、上記特許を参考文献としてここに援用する。SDカードの或る態様については、2000年8月17日出願の米国特許出願第09/641,023号に記載されており、同出願を参考文献としてここに援用する。(SDカードの仕様書は、SD協会(SDA)のメンバー会社には入手可能である。)
【0007】
ISO/IEC7816標準に従って作られたカードは、形状が異なり、異なる位置に表面接点を有しており、MMC及びSDカードとは異なる電気的インターフェースを有している。ISO/IEC7816標準は、「識別(ID)カード−接点を備えた集積回路カード」という総タイトルを有しており、1994年から2000年までの個別のデータを担持する第1−10部で構成されている。この標準は、その複写をスイスのジュネーブのISO/IECから入手可能であり、参考文献として明確にここに援用する。ISO/IEC7816カードは、認可されていない方式でデータを読み取ることを極めて難しく又は不可能にする安全な方式でデータを記憶しなければならない用途では、特に有用である。小さなISO/IEC7816カードは、各種用途の中でも、携帯電話で広く用いられている。先に述べた様に、その様なメモリカードが新しい用途に用いられる場合、それらは、プロトコルの既存のバージョンに欠けている機能又はコマンドを必要とすることがある。この状況を図1に示している。図1の上部に示している様に、目的は、ホスト側とカード側の特定のアプリケーションの間でコマンドとデータを交換すること、換言すると安全なデータ転送又はeコマース・アプリケーションにある。これを実施するために、コマンドは、ホストとカードの間で伝送される必要があり、図1の下部は、ホスト側の幾つかのソフトウェア層と、カード側の幾つかのファームウェア層を示している。ホストのアプリケーション層からの命令は、オペレーティングシステム、ファイル層、及びデバイス(カード)ドライバを通して送られ、命令がカードに伝送されるプロトコルで終了する。カード内で、命令は、標準的なカード操作を取り扱うデバイス層のファームウェアによって取り上げられ、ファームウェアのアプリケーション層に送られる。伝送プロトコルの命令は、用いられている設備次第で、ホストからカードへ直接に、又は、適用されているリーダー又はハードウェアを通して、の何れかで交換されることになり、そのリーダー又はハードウェアは、1つのプロトコルから別のプロトコルに翻訳するのに用いられる自身のソフトウェア/ファームウェア層を有してもよい。問題が生じ得るのは、これらの層の間の翻訳における或る段階で、アプリケーションの意図された命令が、途中のある点で、対応するコマンドを欠いていることがある場合である。
【0008】
1つの例として、カードは、しばしば、ホストシステムからのコマンドを受け入れるハードウェアアダプター(例えば、USB用)を使用することにより、PCホストと接続される。しかしながら、PCホストのホストアプリケーションが、これらのコマンドをカードアプリケーションに伝送したくても、メディア特定コマンドの多くは、ホストとハードウェアアダプターが通信するプロトコルで利用できない。
【0009】
図2は、第1ホストとカードのシステムを示しており、カード101は、スロット153に挿入するなど直接に、又はある種のアダプターを通して、の何れかでホスト151に接続することができる。カードのファームウェアは、FW105で示されている。(図3のカードファームウェア105とリーダーファームウェア335の両方に関して、より一般的には、これらの機能は、ハードウェア、ソフトウェア、又はこれらの或る組み合わせで実現されるものと理解されたい。)その様なホスト151の一例は、デジタルカメラ又は電話である。多数の型式のその様なカードが、目下使用されており、開発されている。カードとホストは、多数の特定のプロトコルを通して通信し、その多くが特定のメディアに特有のものであり、プロトコルは様々なメディア特定のコマンドを含んでいることがある。コマンドの多くはメディア特有であってもよいので、その様なコマンドがホストとメディアの間で交換されるとき、ラインに沿ったどこかで、コマンドを、メディア特有のコマンドをサポートしていない別のプロトコルに翻訳しなければならない場合がある。この別のプロトコルが対応するコマンドを有していない場合、ホストは、コマンドを成功裏に発行することができなくなる。
【0010】
例えば、カードをホスト内で使用するだけでなく、ユーザーが、パーソナルコンピューター上でカードにアクセスするのも一般的である。例えば、デジタルカメラで使用したカードの場合、カードに記憶されている写真にパーソナルコンピューター上でアクセスしたいと思うのも普通のことである。この状況を、図3のボックス線図で示している。カード101は、通常、カード101の受口333を有するカードリーダー331を通して、パーソナルコンピューターPC351と通信できるようにするが、カードがPC351に直接取り付けられてもよい場合もある。リーダー331とPC351は、通常、カード101がホスト151と通信するのに使用するプロトコルとは少なくともある程度は異なる或るプロトコルを通して通信することになる。リーダー331は、ファームウェア335(又はハードウェア、ソフトウェア、又はそれらの組み合わせ)に基づいて、PC351からのコマンドを、カード101に適した形態に翻訳するが、その際一般的には、この機能は、実施形次第で、ソフトウエァとハードウェアの何らかの組み合わせで実行できるものと理解されたい。このプロセスを、図4に概略的に示している。
【0011】
具体的な例を提供するため、図4では、リーダー331は、SCSIコマンドセットを使用してPC351と通信するUSBデバイスとしており、カード101は、SDカードとしている。PC351とリーダー331は、SCSIプロトコルを使用するので、ホストがリーダーを通してコマンドをカードに発行したいとき、ホストは、コマンド401をSCSIコマンドセットで発行する。コマンド401をリーダーに転送するために、コマンドは、USBラッパー403内に置かれ、USB接続に沿ってリーダーに伝送され、そこでUSBラッパーが取り外される。カードリーダー331は、次に、コマンド401を、SCSIコマンドセットから、SDセットの対応する1つ又は複数のコマンド405に翻訳し、それがカード101に送られるようになるが、リーダーが、SCSIコマンドセットとSDコマンドセットの間で所与のコマンドを翻訳する場合、両方のセットで等価なコマンドとなる必要がある。従って、ホストが、例えば、SDプロトコルで安全な読み取りコマンドを発行することによって、SDカードの安全領域の読み取りを実行したい場合は、その様なSCSI等価物がないので、リーダーは、それがSCSIコマンドセット内では見つからないため、これを翻訳する方法がなく、読み取り要求は、ユーザーのアクセス権が不十分な領域に向けられているとみなされることになる。同じ状況は、ホストがリーダーにリーダーが理解するプロトコルで送るための1つ又は複数の等価なSCSIコマンドが無い場合、様々なカード型式用の他のメディア特定コマンドにも当て嵌まる。
【0012】
従って、その様なメディアカード特有のコマンドは、アダプターのファームウェア又はメディアカードをホストするリーダーを変えて、メディアカードがホストと通信するのに使用するプロトコルに対応するコマンドを導入すること無く、ホストからカードに送ることはできない。別体のカードリーダーでなくても、通信経路に沿った何処かにプロトコルの変化が必要なとき、又は、ホストのオペレーティングシステムがカードの特徴に気付かないときは、同様の状況が生じ得る。
【0013】
先行技術では、この問題の対処法は、アダプターのファームウェアを変えてアダプターを通してその様な命令を送るための特別なコマンドをサポートするか、又はリーダー−ホストプロトコルで新しいコマンドを作成するかの何れかであり、その何れも、例えば、SDカードのプロトコルで、チャレンジコマンドを送信し、応答コマンドを受信するなどに対応するコマンドの様な、特定のメディアコマンドに合わせて作られる。これらの対処法は、多くの理由で、実用的ではない。先ず、プロトコルは、有用であるためには広く受け入れられる必要があるので、普通は標準に基づいており、あまり複雑でないコマンドセットが好まれる傾向があり、従って、新しいメディアが導入されると既存のメディアは進化するので、様々な新しいメディア特定のコマンドをコマンドセットに導入するのは難しい。代わりに、特別なコマンドが、自体をサポートしないメディア特定コマンドを通過できるようにアダプターのファームウェアが変更されれば、その様なアダプターの各ベンダのソフトウェアは、適切なファームウェアの変更を受け入れて、作る必要がある。従って、リーダーのファームウェア又はホスト−リーダープロトコルの何れかを変える必要無しに、パーソナルコンピューターが様々なメディア特定コマンドを利用できるようにする方法を導入することは、非常に有用である。
【0014】
より一般的には、カードがホストに直接接続されているときでも、新しいアプリケーション特定コマンドが導入されると、プロトコルは更新される必要がある。既存のプロトコルが新しい機能を組み込むように拡張され、標準化されたとしても、このことにより、旧バージョン又はそれらの他のベンダとの互換性に関わる問題が持ち込まれ、標準化されたプロトコルの実用性が大きく害される。更に、プロトコルを、新しいアプリケーションに適合させてもよいが、カードの使用を拡げるために更に多くのアプリケーションが生じてくるので、一時的な解決法に過ぎない。従って、やはり、ホストのオペレーティングシステムがメディア特定コマンドをサポートしない場合に適応する必要がある。
【特許文献1】米国特許第6,279,144号
【特許文献2】米国特許出願09/186,064号
【特許文献3】米国特許第6,040,622号
【特許文献4】米国特許第6,820,148号
【特許文献5】米国特許出願第09/641,023号
【特許文献6】米国特許出願第10/256,689号
【特許文献7】米国特許出願第29/203,693号
【特許文献8】米国特許出願第10/826,801号
【特許文献9】米国特許出願第10/826,796号
【特許文献10】米国仮特許出願第60/638,804号
【特許文献11】米国特許出願第11/067,298号
【特許文献12】米国特許出願第10/703,471号
【特許文献13】米国特許出願第10/899,260号
【特許文献14】米国特許出願第11/050,013号
【特許文献15】米国特許出願第10/841,379号
【特許文献16】米国特許出願第11/060,249号
【特許文献17】米国特許出願第11/060,174号
【特許文献18】米国特許出願第11/060,248号
【非特許文献1】「マルチメディアカードシステム仕様書」2.11、2.2、3.1、及び4.0版
【非特許文献2】「マルチメディアカード製品マニュアル」改訂第2版
【非特許文献3】ISO/IEC7816標準「識別カード−接点を備えた集積回路カード」
【発明の開示】
【課題を解決するための手段】
【0015】
従って、本発明は、簡潔且つ概括的には、(メモリカード又は他の集積回路カードの様な)デバイスが、アプリケーション又はメディア特定コマンドをホストと交換する方法と技法を提供する。ホストとカードは、直接に、又はリーダー又はハードウェアアダプターを通して、の何れかで通信し、メディア特定コマンドの等価物を持っていないプロトコルを通して、アプリケーション特定コマンドを伝送する。例えば、1つの実施形態では、PCは、たとえカードリーダーがその様なコマンドをサポートしていなくても、カードリーダーを通してSD(セキュアデジタル)メモリカードの安全なデータ領域を読み取ることができる。
【0016】
より具体的には、ホストは、ホストとカード間の通信経路間でサポートされているプロトコルのコマンドを有する命令を形成するが、実際のメディア又はアプリケーション特有コマンドは、その命令の中に埋め込まれている。代表的な実施形態では、メディア特有コマンドは、命令のデータ部分に埋め込まれている。次に、カードは、ホストと通信するプロトコルで命令を受信し、それをアプリケーションのプロトコルに翻訳する。埋め込まれたコマンドは、トランスペアレントな方法で送られる。例えば、伝送プロトコルは、実際にはデータにメディア特有コマンドが入っているのに、データであるとみなしたものを単にカードに送る。一旦カードに入ると、カードは、実際のコマンドが命令の中に埋め込まれていることを認識し、それを抽出する。このことは、コマンドのデータ部分がシグネチャーを含んでいると判断することによって行われ、シグネチャーが見つかれば、埋め込まれたコマンドが抽出されて実行され、シグネチャーが見つからなければ、伝送プロトコルのコマンドが実行される。代表的な実施形態では、シグネチャーと埋め込まれたコマンドは、データ部分の第1セクター内に置かれている。変換はデバイス側で実施され、実際のコマンドが抽出され、ホスト側では、コマンドがデバイスのドライバレベル又はファイルシステムレベルの何れかに埋め込まれる。デバイスのドライバレベルの実施では、コマンドを特定の論理ブロックのアドレスに指定するが、ファイルレベルでは、何れかの論理ブロックアドレスを用いることもできる。デバイスのドライバレベルの実施には、オーバーヘッドをあまり必要としないが、多くのオペレーティングシステムでは、ユーザーが持ち合わせないアクセス特権を必要とすることもある。
【0017】
本発明の様々な態様は、カードプロトコルが、ホストとハードウェアカードリーダーの間で用いられるプロトコルに等価物を持っていないコマンドを有する場合に限定されず、中間プロトコルが、中間プロトコルに足りないコマンドを搬送しなければならない場合もある。第1組の実施形態は、カードが、自身のプロトコルで直接ホストと通信できるが、カード(又は他のデバイス)は、使用するには追加の一組のコマンドを必要とする、追加の一組の機能を備えたアプリケーションを有している場合を考えている。これらのコマンドは、ホストとカードが通信するのに使用する標準的なプロトコルの一部ではなく、即ちホスト上の標準的なオペレーティングシステムによってサポートされていない。従って、これらのコマンドを、カード上のアプリケーション(ファームウェアレベルで実施可能)とホスト上のアプリケーション(ソフトウェアレベルで実施可能)の間で送受信するには、特別な手段が必要である。本発明の基本的な態様では、アプリケーションコマンドは、中間プロトコル、この場合はカードプロトコル内の命令のデータ部分に埋め込まれている。本発明の別の態様では、これは、ホストアプリケーションからデバイスへの経路の開放、閉鎖、及び管理に関係する一組のコマンドを有することによって達成される。
【0018】
第2の代表的な実施形態は、デバイス(カード)ドライバレベルで実施され、特定の論理ブロックアドレス(logical block address)(LBA)、カードパススルー(CPT)モードLBAをデータセクターの特別なシグネチャーによって指定して、そのセクターに特別なコマンドが埋め込まれていることをカードに通知する命令を使用する。これは、CPTモードをサポートするようなカードのファームウェアの変更として実施される。これにより、各メディア特定コマンドに従ってアダプターのファームウェアを変える必要が無くなるので、カードは、メディア特定の適合構造を作る必要無しに(即ち、カードがどの様なOSの下でも使用できるようにホストのオペレーティングシステムを変更する必要無しに)、例えばどの様なUSBリーダー又はアダプターででも実行させることができる。カードのファームウェアは、通常の読み取り/書き込みコマンドを尊重し続ける。特定のLBAオフセットへの読み取り/書き込みコマンドがあれば、シグネチャーが検査され、データが、埋め込まれているメディアカード特定コマンドを含んでいるか否か判断される。プロトコルは、どの様なメディアカードのファームウェアででも実施することができる。従って、リーダーのファームウェアへの変更無しに、アダプター又はUSB又は他のリーダー又はホストOSにファームウェアの変更を必要としない。
【0019】
第3組の代表的な実施形態は、ホスト側のファイルレベルで実施される。メディア特定コマンドは、ここでも中間プロトコルに埋め込まれているが、ハードウェア特定の、特別なプロトコルを参照することに依存するのではなく、埋め込まれたコマンドと付随するデータは、全て、ファイルのデータ部分に置かれ、それがメディアに転送され、そこで、ファームウェアが実際のコマンドを再抽出する。これらの実施形態では、ホストは、ファイルをメモリデバイスに書き込むようファイルシステムに告げるだけで、そこでデバイス特定のコマンドが再びデータ部分に埋め込まれる。どの様なLBAへの読み取り/書き込みコマンドでも、特定の論理アドレスとは対照的に、デバイスはシグネチャーを検査し、データが、埋め込まれているメディアカード特定コマンドを含んでいるか否か判断する。代表的な実施形態は、このシグネチャーを、書き込みコマンドと関係付けられている全てのファイルのデータの第1セクターに置いている。適切なシグネチャーが見つかれば、埋め込まれたコマンドは抽出され、シグネチャーが見つからなければ、コマンドは、中間プロトコルの標準的なコマンドとして解釈される。この様に、本発明のファイルレベルの実施形態は、デバイスへのファイルの書き込みは、一般的にオペレーティングシステム内で許可されているので、デバイスレベルアプリケーションで特定の論理アドレスを使用させることになる特権問題を回避することができる。
【0020】
全ての代表的な実施形態において、埋め込まれたコマンドは、中間プロトコルの書き込みコマンドのデータ部分に置かれる。例えば、デバイス又はアプリケーション特定プロトコルの、例えばN個のセクターの書き込みコマンドは、(N+1)個のデータセクターを有する中間プロトコルの書き込みコマンドから成り、第1セクターには、実際に埋め込まれている書き込みコマンドが入り、残りのN個のセクターには、書き込まれる実際のデータが入る。より一般的には、コマンド(及びシグネチャー)は、埋め込まれたコマンドによってデバイスに転送されることになるあらゆるデータと共に、関係付けられたデータ部分を受け入れる全てのコマンド内に置かれる。データがデバイスからホストへ転送されることを要求するデバイス又はアプリケーション特定プロトコルで読み取り又は他のコマンドを実施するために、代表的な実施形態は、一対のコマンドを使用しており、第1コマンドは、ここでも、埋め込まれている読み取りコマンドに対応する、中間プロトコルの1つのデータセクターを備えている書き込みコマンドであり(埋め込まれている読み取りコマンドに関係付けられた実データは無い)、デバイスからホストへの実際のデータ転送は、次に、第2コマンドによって行われ、ホストの読み取りは、第1コマンドと同じ論理アドレスに指定される。
【0021】
本発明の更なる詳細、特徴、及び利点は、以下の説明を添付図面と関連付けて読めば明白になるであろう。
【発明を実施するための最良の形態】
【0022】
主要な態様では、本発明は、標準的なカードプロトコルの一部ではない(即ち、ホスト上の標準的なOSによってサポートされていない)コマンドを、ホスト上のアプリケーション(通常、カード上のアプリケーションを使用するソフトウェア)と、カード上のアプリケーション(通常、カード上の特定アプリケーションとしてこれらの追加的機能を実施するカードのファームウェア)の間で送受信できるようにしている。代表的な実施形態は、書き込みの様な、何れのホストもサポートする標準的なコマンドに特別なコマンドを埋め込むことによって、これを達成する。これにより、背景技術に記載した様なメモリカードが、全ての標準的なホスト装置及びPCに認識され、連結され、使用されるようになる一方で、標準としてサポートされていない追加の非標準的な機能が、システム内に組み込まれるようになる。
【0023】
具体例として、技術背景で図2−4に関して論じた特定の事例では、これらの方法は、安全な読み取りの様な、SDカードに特定のコマンドを、等価なコマンドを持ち合わせていないUSBプロトコルを通して伝送できるようにしている。一般的に言えば、これは、伝送プロトコル内に在るコマンド部分と、メディア特定コマンドが埋め込まれているデータ部分とから成る命令を形成することによって達成される。例えば、書き込みコマンドは、何れのメモリカードシステムにも基本的なものなので、伝送プロトコル内に存在し、関係付けられたデータ部分を有している。実際のアプリケーション特定コマンドは、データ部分に、メディア特定コマンドが実行されるべきであることを示すシグネチャーと共に置かれる。デバイスに転送されることになる実際の埋め込まれているメディア特定コマンドに関係付けられた全てのデータも、伝送プロトコルのコマンドのデータ部分に置かれる。SD/USBの例では、10個のセクターの書き込み読み取りをUSBプロトコル内でSDカードに送るために、命令は、1つのコマンドと11個のデータセクターで構成されているUSBプロトコルで発行され、第1データセクターには、実際のSD安全書き込みコマンドが、シグネチャー及び関連情報と共に入っており、その後に、書き込まれるデータの10個のセクターが続いている。カード内に受信すると、ファームウェアは、実際の安全書き込みコマンドを抽出し、シグネチャーを検査し、データの読み取りを実行する。
【0024】
読み取り(及びデータをデバイスからホストへ転送する他のコマンド)では、中間プロトコルの書き込みコマンドは、ここでも、埋め込まれている読み取りコマンドを搬送するのに用いられるが、データがホストに送り返されるという規定は無いので、中間プロトコルの第2の読み取りコマンドと対になる。より具体的には、この対の第1コマンドは、ホストからの、埋め込まれている読み取りコマンドによる、論理ブロックアドレスLBA=XYZへの(中間プロトコルでの)書き込みである。デバイスのドライバレベルでの実施では、それは特定のアドレスへのものとなるが、ファイルレベルの実施では、これは何れのアドレスでもよい。この対の第2のコマンドは、この同じアドレスLBA=XYZへの標準的なホスト読み取りである。指定されたデータは、ホストに転送される。
【0025】
より具体的には、本発明は、システムが使用できる媒介又は伝送プロトコルの命令の中に、所望のコマンドを、付随するデータと共に埋め込むことによって、アプリケーション又はメディア特定命令を、ホストとカードの間で交換できるようにする。特定のコマンドは、一方のホストで実行されている特定のアプリケーションと、他方の特定のカード上の対応するアプリケーションとの間で分割される。伝送経路に沿った中間点で、命令は、中間プロトコルによる通常のコマンドとして現れ、実際のアプリケーション特定コマンドは、トランスペアレントな方式で送られる。代表的な実施形態では、これは、書き込みコマンドの様なデータ部分を受け入れる伝送プロトコルのコマンドを使用し、実際のアプリケーション又はメディア特定コマンドをこのデータ部分に埋め込むことによって行われる。(或るやり方では、これは、2002年9月26日出願の同時係属中の共有譲渡されている米国特許出願第10/256,689号に記載されている発明の拡張であり、同出願を参考文献としてここに援用する。)命令が(伝送プロトコルで)カードに到着すると、データ部分は、それが適切なシグネチャーを含んでいるか否かを知るために検査され、含んでいれば、埋め込まれたコマンドが抽出される。これを、図5に概略的に示している。
【0026】
図5は、アプリケーション特定コマンドが、本発明の具体的な実施形態に従って、どの様にプロトコル内に埋め込まれて、プロトコルを、ホストアプリケーションからカード側のアプリケーションに送るのに使われるかを示す概略図である。アプリケーション又はメディア特定の命令がコマンド部分、CMD、及び幾つかの対応するデータを有する事例を考えてみる。例えば、CMDは、アプリケーション特定の書き込みでもよい。この命令を伝送するために、ホスト側は伝送プロトコル内に、例えば書き込みコマンドの様な対応するデータ部分を有するCMD’と呼ぶコマンドを取り込む。この命令のデータ部分に置かれているものは何でも簡単に送られるので、実際に意図するアプリケーション特定コマンドCMDが(その対応するデータと共に)このデータ部分に埋め込まれていれば、コマンドCMDが伝送プロトコルで認識されなくても、それは、カードに伝送される。カードに入ると、コマンドCMDは、データ部分から抽出されなければならない。これは、カードパススルー(card pass through)シグネチャー(CPTシグネチャー)を、同様にデータ部分に置くことによって行われる。即ち、入ってくる命令がカードに達すると、データ部分は、シグネチャーが検査され、シグネチャーが見つかれば、実際のコマンドが抽出される。
【0027】
図5で、埋め込まれたコマンドが入っている伝送プロトコルの命令を510で示している。コマンド部分511は、コマンドCMD’を有しており、実際には実行されない一種の「ダミー」コマンドと考えることができるが、データ部分513をカード側へ送る働きをする。データ部分513は、シグネチャー及び実際のコマンドCMDを備えた第1部分513aと、CMDに対応する何らかのデータの第2部分513bに分割される。例えば、CMDが書き込みコマンド型式であれば、513bは書き込まれるデータであり、それが、例えば状態検査であれば、513bは無い。(後で詳しく述べる様に、埋め込まれている読み取りコマンドは、幾らか更に含有しており、この実施形態では、伝送プロトコルの区分511内の書き込みコマンドCMD’、データ部分の区分513a内の埋め込まれている読み取りコマンドCMD、および実際のデータが無い部分513bを送ることを含んでいる。)カード側では、513aは、シグネチャーが検査され、見つからなければ、コマンドCMD’が、データとして全ての513と共に実行される。シグネチャーが見つかれば、コマンドCMDを備えたコマンド部分531と、データ部分533内の全ての対応するデータとを有する実際の命令530が抽出される。(SCSIプロトコルの様な、コマンド部分511に十分な余裕があるプロトコルでは、CPTシグネチャー、コマンドCMD、又はそれら両方を、データ部分ではなく、伝送プロトコルのコマンド部分に埋め込むこともできる。)
【0028】
図1と本発明のより抽象的な説明に戻るが、本発明は、アプリケーションのホスト側とカード側が、経路に沿う何処かでアプリケーションに適合していないプロトコルを使って互いに通信しなければならない場合でも、通信できるようにしている。これは、背景技術で説明したように、アダプターが、カードの特徴に気付かない場合に起こり得るが、ホストのオペレーティングシステムがカードの特徴に気付かない場合も同様である。このことは、メディア又はアプリケーション特定コマンド両方のシステムに関する問題を、ホストとカードの間に在るホストアダプターが有っても無くても、解決する。更に、カードプロトコルが、カードの形状情報で異なる場合だけでなく、これらのカードはカード毎に異なる追加の機能でオーバーロードになるので、同じ形状情報であってもカード間で異なっている場合も許容する。呈示されている取り決めは、カードアダプターとホストOSが特定のカードプロトコルに無関心なシステムを考えており、そのカードプロトコルは、一方ではホスト側でそして他方では特定のカード側で実行されている特定のアプリケーションの間で分割される特定コマンドを有している。
【0029】
ホスト側では、本発明は、ファイルモードでアプリケーションがホストファイルシステムを使用し、ファイルに書き込むファイルシステムレベル、又はデバイスドライバを使用するモードのデバイスドライバレベル、の何れかで実施することができる。両方のバージョンの具体例を以下に提供する。どの型式の実施形態が望ましいかは、具体的なアプリケーションやオペレーティングシステムの詳細の様な細目によることが多い。例えば、デバイスドライバレベルでの実施の方が簡単で、ソフトウェア/ファームウェアのオーバーヘッドが少なくて済むが、論理アドレスへの直接書き込みを使用することになり、その様な直接的な書き込みには、ユーザーは持ち合わせていない管理者の特権が必要となる。代わりに、ファイルシステムレベルでの実施を使用することによって、これらの面倒さを回避できるが、追加オーバーヘッドの経費が必要になる。
【0030】
本発明を、3つの特定の実施形態に関して、より詳細に説明する。これらの全ては、新しい機能をサポートするためにホストカードプロトコルを変えること無く、又は追加のプロトコルをサポートしない中間ソフトウェア/ハードウェアを通してそれを使用しながら、特別な非標準的機能を、ホスト上で使用されるカード内で実施されるようにする。第2及び第3組の実施形態は、ホスト側で(それぞれ、デバイスドライバレベルとファイルシステムレベルで)実施される2つの方法について述べており、一方第1は、カード側の実施について述べている。この第1の実施形態は、第2と第3を補い、カード側がどの様に作動するかを説明しており、全ての実施形態のために全体的な詳細を提供するのに用いられることになる。以下に更に詳しく述べる様に、これは、標準的な利用可能なコマンドを使って、非標準的なコマンドを包むために行われる。これら事例のそれぞれで、代表的な実施形態は、何処でもサポートされる標準的な読み書きを選定する。なお、これら特定の実施形態では、これらの実施形態の全てで、カードには特定の論理ブロックアドレス(LBA)への書き込みが見えているので、カードは、ファイルの概念を認識する必要はない。このLBAは、デバイスドライバモードでの様に、この目的のために特別に割り当てられている(又は再度割り当てられる)か、又は、ファイルドライバモードでは任意のアドレスか、の何れでもよい。主な違いはホスト側にあり、アプリケーションは、ファイルモードでは、ホストファイルシステムを使用し、ファイルに書き込んでおり、第1モードでは、デバイスドライバを使用し、直接LBAに書き込んでいる。
【0031】
以下に、本発明の様々な態様を、数多くの特定の実施形態の例で呈示する。例えば、本実施形態は、メディア特定コマンドを、書き込みコマンドのデータ部分に埋め込んでおり、より一般的には、メディア又はアプリケーション特定コマンドは、他のコマンドに埋め込むことができる。更に、上記背景技術の議論は、特定プロトコル領域を備えた特定のハードウェア設備に基づいており、即ち、そこでは、PC/ホストは、ホストとリーダーの間の1つのプロトコルと、リーダーとカードの間の第2のプロトコルを使用して、ハードウェアリーダーを通してカードと通信する。これらの実施形態は、全てが、数多くの手法で一般化し、拡張することができる。
【0032】
上記背景技術の議論は、カードとPCがリーダーを通して通信する例に焦点を当てた。より一般的には、本発明の様々な態様は、ホスト(例えば、PC)と最終行先の間の経路の何処かで、伝送する必要のある1つ又は複数のコマンドの等価物を持っていないプロトコルが用いられるときに当て嵌まる。先に述べた様に、ハードウェアのカードリーダーが、ホストがカードに送りたいと思っているカードプロトコル(例えば、SDカードの安全読み取り)のメディア特定コマンドの等価物を持っていないプロトコル(例えば、USB/SCSI)でホストと通信するときに問題が発生するだけでなく、カードが直接ホストに取り付けられるときにも発生する。更に複雑な場合、幾つかの中間プロトコルがあってもよく、その場合、第2例に見られる様に、幾つかの埋め込み層を用いることもできる。
【0033】
別体のカードリーダーを必要としない場合の1つの具体的な例では、カードに2セットの接点があり、一方はUSBポート用であり、他方は標準的なカード接点のセット(MMC、SD、CFなど)用である。(その様な二重接点カードの例について、2004年4月16日出願の米国特許出願第29/203,693号、第10/826,801号、及び第10/826,796号に記載されており、それら全てを参考文献としてここに援用する。)「通常の」カード接点を使って、カードは、第1ホストと、メディア特定コマンドが使用可能なカード特定プロトコルで通信することができる。第2セットの接点(ここではUSB)を使って、カードは、メディア特定コマンドの等価物を持ち合わせていない別の異なるプロトコルで、PCの様な他のホストと通信することができる。この場合、第2ホストと他のプロトコルは、本発明に従って、メディア特定コマンドを埋め込むことにより、例えば、USB接点を使って、カードは、USBポートでPCに直接接続することができ、カードとPCは、USBを通して、SCSIプロトコルで、先に述べた様にSCSIプロトコルに埋め込まれている任意のSD特定コマンドを使って、通信する。
【0034】
先に述べた様に、具体的な関心事の一組の実施形態では、ホストとカードは、カードのプロトコルで通信するが、ホストアプリケーションは、カードの「通常の」メモリ機能が気付かない層内で、カードのアプリケーションと、コマンド及びデータを交換したいと望むかもしれない。例えば、SDメモリカードでは、デバイスのアプリケーション層のパーティションは、SD特定ファームウェア層から隠すことができる。ホストとカードは、標準的なSDプロトコルを使って通信するが、隠されているデバイスアプリケーションは、アプリケーション特定コマンドをSDプロトコル内に埋め込むことによって、対応するホストアプリケーションと通信することができる。第1の代表的な実施形態は、この性質を備えている。
【0035】
代表的な実施形態は、メディア特定(又はアプリケーション特定)コマンドを書き込みコマンド内に埋め込んでいる。例として用いられている書き込みコマンドは、コマンドを中間プロトコルのデータ部分に埋め込み、書き込みコマンドは、本来的にデータ部分を有している。より一般的には、書き込みコマンドのみならず、データ部分を受け入れる何れのコマンドでも、同様に用いることができる。書き込みは、データを転送するためのプロトコル内の基本的な命令なので、以下の代表的な実施形態では、書き込みについて述べていく。更に、全ての例で、メディア又はアプリケーション特定コマンドは、分かり易くするためデータ部分の最初に埋め込まれているが、より一般的には、それらは、データ部分の何処に置いてもよく、シグネチャーによって識別されることになる。(先に述べた様に、より一般的には、シグネチャー、アプリケーションコマンド、又はそれらの両方は、SCSIプロトコルの様な、コマンド部分に十分な余裕を有しているプロトコルの伝送プロトコルのコマンド部分に埋め込んでもよい。)
【0036】
本発明が関与している問題は、より抽象的なレベルで表すことができる。ホストアプリケーションが、デバイスアプリケーションと、コマンドのセット(α、β、γ、...)を有するプロトコルで通信しなければならないが、通信経路の何処かで、コマンドのセット(A、B、...)を有する別のプロトコルを用いなければならない場合を考えてみる。背景技術の例では、(α、β、γ、...)はSDプロトコルであり、中間コマンドのセット(A、B、...)はSCSIプロトコルとした。以下の議論で、(α、β、γ、...)は特別なアプリケーション(隠しパーティションの様な)のコマンドセットであり、(A、B、...)はカードコマンドのセットとする。A←→α、B←→βなどの対応があれば、問題は無い。メディア又はアプリケーション特定コマンドγ、例えば、SDプロトコルの安全読み取りがあるのに、中間プロトコルに等価物が無い場合、即ち?←→γの場合に、問題が生じる。先行技術では、その様な各γに対して、γに等価な新しいコマンド、即ち、C←→γを導入する必要がある。代わりに、本発明によれば、新しいコマンドを導入するのではなく、メディア特定コマンドが、中間プロトコルの既存のコマンドに埋め込まれ、A(γ)←→γ、ここにA(γ)は、例えばγが埋め込まれている書き込みコマンドを示している。
【0037】
一般化では、コマンド(Fと呼ぶ)は、アプリケーションのホスト側とデバイス側のパイプを開いて通信できるように、(α、β、γ、...)プロトコルに導入される。パイプが開くと、メディア又はアプリケーション特定コマンドを送ることができる。これは、A[F(γ)]←→γと表される。この技法は、第1例で展開される。これは、コマンドの失敗や他の微妙なことの取り扱いを考慮している。コマンド失敗に関わる問題は、中間プロトコルが埋め込まれているコマンドの性質に関する知識を持っていなかったということであり、なぜなら、中間プロトコルがそれを知っていれば、簡単な書き込みコマンドを送信しているに過ぎないからである。埋め込まれたコマンドが、例えば読み取りであれば、PCは、読み取りが失敗するという事象の際には、何が起こったか分からない。中間プロトコルでは、書き込み失敗とみなされ、埋め込まれている読み取りの失敗とは解釈されず、従って、ホストは、実行すべき適切な回復ステップを理解できない。アプリケーションのホスト側とカード側の間のパイプを開くことによって、その様な困難を容易に追跡し、それに対処することができる。
【0038】
(第1の代表的な実施形態)
第1の代表的な実施形態は、ホスト側では第1レベルで実施されるものであり、本発明の様々な態様を説明するのに用いられる。カード側での実施は、ホスト側がファイルレベルで実施されるか或いはデバイスのドライバレベルで実施されるかに関わらず大部分が同じである。この実施形態の具体的なアプリケーションを参照すると、メモリカードの隠しパーティションの説明で提供され、メモリは、公開のアクセス可能な部分と、私的又は「隠された」部分に分割されている。その様な取り決めについては、2004年12月21日出願の米国仮特許出願第60/638,804号に記載されており、同出願を参考文献としてここに援用するが、詳細の大部分はそれに限定されない。ホスト側の部分、特にデバイスのドライバについて先ず説明し、その後、カードの詳細について説明する。隠しパーティションの他の使用例は、2005年2月25日出願の第11/067,298号、2003年11月10日出願の第10/703,471号、2004年7月26日出願の第10/899,260号、及び2005年2月2日出願の第11/050,013号の特許出願に記載されており、それらの全てを参考文献としてここに援用する。
【0039】
図6は、デバイス側の代表的な構造を示す概略ブロック図である。カード1001側では、1つ又は複数のデバイスアプリケーション1023は、それぞれ、ホスト側1051の1つ又は複数のホストアプリケーション1053へのゲートウェイ又は「パイプ」を、非標準的な、この特定の形状情報用のカードの特徴、ここでは隠されているパーティションに提供する。ホスト側の層については、以下に図7で詳しく説明する。カード側では、デバイスアプリケーション1023が、パーティションアクセス(読み取り及び書き込み)、状態、及び他のデバイスアプリケーション情報を提供する。デバイスアプリケーション1023は、以下に記載されている代表的なプロトコルを介してホストアプリケーション1053と通信し、メディア層1025を通してカードシステムとメモリリソースを使用する。メモリ自体は、メモリ1011に示されており、普通はNOR又はNAND種のフラッシュメモリであるが、2004年5月7日出願の米国特許出願第10/841,379号に記載のものを含め他の不揮発性メモリでもよく、同特許出願を参考文献としてここに援用する。FE(フロントエンド)層1021は、ホスト側からの(CF、SD、MMCなどのプロトコルの様なカード型式のインターフェースでの)コマンドを取り扱うファームウェア層である。BE(バックエンド)層1027は、メモリに対する読み取りと書き込みを含めメモリ1011の管理を取り扱うファームウェア層である。メディア層1025は、デバイスアプリケーションファームウェア1023をBE層1027と接続させ、更に、アプリケーションファームウェアをコントローラーのRAMリソースとインターフェースさせるが、それについてはこの図では具体的に示していない。
【0040】
命令がホスト1051から送られると、その命令は、最初にデバイス1001のフロントエンド(FE)層1021で受信される。コマンドは、ホストとデバイスの間で用いられる中間プロトコル、例えばSDプロトコルにある。コマンドは、FE層1021に到着すると、コマンドパススルーシグネチャーが検査され、シグネチャーが見つからなければ、命令は、中間プロトコルからの標準的な命令として扱われ、メモリにアクセスし、そうでなければ、標準的な方法で実行することができ、シグネチャーが見つかれば、埋め込まれているアプリケーション特定コマンドが抽出され、適切なデバイスアプリケーション1023に送られて実行される。(ホスト側で)デバイスドライバレベルで実施される場合は、以下の第2の代表的な実施形態での様に、コマンドは、特定の論理アドレスに指定され、一方、ファイルレベルで実施される場合は、この例と以下の第3例の両方での様に、コマンドは、何れの論理アドレスに指定されてもよく、デバイス側から見ると、両実施は、ほぼ同じである。
【0041】
シグネチャーが見つかって、埋め込まれたコマンドが抽出されると、(この例では)隠されているパーティションは、カード1001内に常駐する対応するデバイスアプリケーション1023を介して、ホストアプリケーション1053に利用できるようになる。ホスト及びデバイスのアプリケーションは、ホスト側とカード側の間の読み取り及び書き込みをカバーするプロトコルを使って、並びにパーティション情報に関する報告を行って、通信することになる。この代表的な実施形態では、デバイスは、アプリケーションに対する権利を制御する。権利(読み取り、書き込み)は、デバイスがホストアプリケーションの証明書を確認すると与えられ、承認されると、デバイスアプリケーションは、ホスト/デバイスプロトコルを通して、そのパーティションに対する読み取り及び書き込み特権を認可する。ホストアプリケーションが有効にされると、デバイスは、信頼されている環境内で作動していると想定される。
【0042】
先に述べた様に、第1の代表的な実施形態はファイルレベルで実施され、埋め込まれたコマンドは、書き込みファイルの第1データセクターに置かれる。本実施形態は、どの様な特定の論理アドレスへの参照にも依存せず、具体的なパターン又はシグネチャー用の第1データセクターの検査に依存する。パーティション内のファイルは、ホストによって管理されており、つまり、隠されているパーティションの例では、ホストアプリケーションは、隠されているパーティション内のファイルシステムの所有者である。ホストアプリケーションがアプリケーションへの権利を獲得すると、コンテンツを完全に制御できるようになる。
【0043】
隠されているパーティションのFATは、オペレーティングシステム(OS)によるアクセス特権問題のために読み取れないことが多いので、ホストアプリケーション1053は、ファイルシステム層を実施することになる。隠されているパーティションへのアクセスについては、FATは、アプリケーションへのパイプが開いた後にだけ、利用可能である。(ホストアプリケーションによるコマンド転送は、定義されており、以下に説明する。)ホストアプリケーションは、カードの隠されていない、即ち公開パーティションに在り、OSには、大容量記憶装置で又は取り外し可能なデバイスレベルで見ることができる。幾つかのその様なホストアプリケーションは、この領域に常駐していてもよく、ユーザーは、どれを実行するのか分かるようになっており、それはホスト側で実行される。
【0044】
ホスト側のソフトウェア層について、図7でより詳しく説明する。デバイスドライバ1055は、2つの役割を持っている。それは、バスドライバとして機能し、(中間)プロトコルとファイルシステム1057によってサポートされる標準的なクライアントアプリケーションのIOオペレーションを実行する。更に、それは、アプリケーションと、デバイス又はアプリケーション特定プロトコルを実施する。標準的なIO API及び実施は、全てのカード族、例えば、標準的なSDカードのオペレーションに共通していてもよい。アプリケーション又はデバイス特定API及び実施は、生来プロトコル特定のものである。図7は、共通部分のコード共有と、異なるアプリケーション特定プロトコルの間の簡単なポータビリティを可能にする階層構造の例を示している。
【0045】
ホストアプリケーション層1053とファイルシステム層1057に加えて、ホスト構造は、デバイスアプリケーションに特定の層1059も組み込んでいる。アプリケーション特定のオペレーションを組み込んでいない「標準的な」デバイスのオペレーションには、層1059は使用されず、層1053、1057、及び1055が、先行技術と同様に主に作動する。アプリケーション特定の命令が用いられる場合は、アプリケーション特定コマンドをフォーマットし、埋め込むために、デバイスアプリケーション層1059が、ファイルシステム1057とホスト層1053の間に挿入される。
【0046】
デバイスドライバ1055は、共通の機能性を提供するためインターフェース及びパイプサブ層を含んでいてもよいし、全てのアプリケーション特定プロトコルを最小限変更して使用することもできる。ホストのアプリケーションは、具体的なアプリケーションに従ってプロトコル層と整合していなければならない。インターフェースサブ層は、標準的な一組のデバイス機能を公開する。例えば、これらには、ハードウェアの初期化と設定、ドライブ開閉ルーチン、読み取り及び書き込み動作、及び消去が含まれる。それは、更に、適切な通信方法に対する機能を含んでおり、然るべくパイプを初期化する。
【0047】
図5の510の様な命令が伝送されるとき、場合によっては、オペレーティングシステム(OS)がそれを幾つかの部片に分割するので、他の命令の部片が差し挟まれることもある。その場合、ファイルシステム1057とデバイスドライバ1055は、命令510を分割することができるので、そうすると、コマンド部分511は、全データ部分513の何処にでも取り付けられ、残りのデータ部分は、それに続く1回又は複数回で転送される。その場合、残りのデータの部分の後に続く転送は、区分513aのシグネチャー部分を持ち合わせておらず、標準的なコマンドの様に見える。その様な分割は、読み取り動作でカードからホストへ転送されるデータにも起こる。OSが命令を分割しないか、又はOSが十分に制御されているので、そのようにしないよう命令されているか、の何れかであることが分かっている場合は、手順は簡素化できる。このことを、先ず、図10Aの流れと、図12Aの対応する状態マシン図に関して論じる。より一般的な場合については、図10Bに関して後で論じる。更に、議論を簡潔にするために、図10Aに関する論議は、主に、単一のアプリケーションの場合に基づいているが、一般的には、多数の異なる動作中のアプリケーションがある。図10Bのより一般的な場合は、これをより明示的なものにする。
【0048】
第1の代表的な実施形態では、簡単な隠されているパーティションのプロトコルが、例証のために用いられる。メモリ1011は、2つのパーティションに分割される。第1パーティションは、製品の標準的なパーティションである。標準的なホストは、このパーティションにだけ気付く。第2パーティションは、隠されているパーティションであり、アプリケーション特定コマンドを通してのみアクセス可能である。標準的なホストは、このパーティションに気付かず、それにアクセスする手段を持たない。例の隠されているパーティションのプロトコルは、5つの機能を定めており、それを通して、デバイスとアプリケーションが通信する。
1.隠しパーティションを開く:ユーザーを認証し、読み取り及び書き込み動作を可能にするのに用いられる。
2.隠しパーティションを閉じる:読み取り及び書き込み動作を使用不可能にする。
3.隠しパーティションの状態を得る:図8に示されているデータを戻す。
4.隠しパーティションを読み取る:パーティションが開かれていれば、隠されているパーティションから読み取る。閉じられていれば、エラーを戻す。
5.隠しパーティションに書き込む:パーティションが開かれていれば、隠されているパーティションに書き込む。閉じられていれば、エラーを戻す。
プロトコル層は、安全なプロトコルを実施するのに必要な追加のAPIを提供する。隠されているパーティションの有る特定の例では、プロトコルは、読み取りと書き込みに加えて、パーティションを開く、パーティションを閉じる、パーティションの状態を得る、という3つのサービスを要求する。これらのコマンドを以下の表1に示しており、図8と共にそれらについて更に論じる。
【0049】
パイプサブ層は、メディアコマンド通過の原則による、カードとの通信を担っている。先に述べた様に、メディアコマンド通過プロトコルにおける主題は、特別なコマンド(標準的な製品仕様の一部ではないコマンド)が、標準的な読み取り及び書き込みオペレーション内に埋め込まれていることである。コマンドを標準的な読み取り及び書き込みオペレーションに埋め込むことによって、標準的なホスト及びドライバと共に作業できるようになる。
【0050】
代表的な実施形態では、全てのコマンドは、書き込みコマンドを、メディアカードの或るLBAに送ることによって開始される。アプリケーション特定書き込みコマンドは、最初のセクターがコマンドの引数を保持し、残りのデータブロックが、もしあれば、関連データを保持している、複数のセクターの転送を含んでいる。読み取りコマンドは、2つの部分で実行される。
1.先ず、書き込みコマンドを、読み取りコマンドの性質について説明する適切なデータと共に、選定されたLBAに送ることによって、読み取りコマンドを開始する。
2.書き込みコマンドが、カードアプリケーションを正しい転送状態に設定した後で、書き込みコマンドから選定されたLBAに読み取りコマンドが送られ、実際にカードからホストへデータが転送される。
【0051】
全てのコマンドは、先ず、図9に示しているセクターフォーマットを使って書き込みコマンドを送る。ホストアプリケーションが、書き込みコマンドを送ると決定すると、転送される第1セクターは、上記フォーマットを有することになる。ホストから送られる次のデータブロックは、カードに関する実際のデータを有することになる。ホストアプリケーションは、読み取りコマンドを開始するよう選定すると、先ず、書き込みコマンドを、上記単一のセクターフォーマットを使って、選定されたLBA(LBA=LBA_XYZ)に送り、次に、同じLBAに読み取りコマンドを送る。これについては、以下に詳しく論じる図10Aと図10Bの流れ図で示している。
【0052】
多数の考えられる実施が、メディアコマンド通過プロトコルで可能である。このセクションの例は、ファイルシステム、例えばウインドウズ(登録商標)のファイルシステムの運用を使用する。次のセクションの例は、デバイスと、デバイスドライバレベルで直接通信し、ファイルシステムがオーバーヘッドを有していない。別の実施は、ポケットPC(PPC)である。この事例では、読み取り及び書き込みオペレーションは、PPC記憶ドライバに直接アクセスすることができる。現時点では、ポケットPC装置用の標準的な記憶装置ドライバは無いので、この方法が全てのPPC装置上で作動する保障は無い。クライアントアプリケーションベンダは、共に作動しようと意図する一組のPPC装置で、この方法を試験しなければならない。
【0053】
本例のファイルシステムの実施に戻るが、パイプサブ層は、OSが命令全体を1回の転送で転送する場合は、図10AでLBA_XYZと示されている同一のファイル場所に対して読み取り及び書き込みを行うことによって、コマンド通過LBAに対する読み取り及び書き込みオペレーションを開始する。これは、次のセクションの例にあるような予め決められたアドレスである必要は無いが、何れかの論理ブロックアドレスでなければならない。この例では、実施は、ウインドウズの標準的なファイルシステムAPI−CreateFile、ReadFile、WriteFile、及びSetFilePointerを使用する。実施のセットは、4つ又は5つの部分、即ち、事前要件と、通信パイプの確立と、ファイル長さの検証と、アプリケーション書き込みコマンドと、データが読み取られることになるか、ホストへ戻された他の情報である場合は、読み取りコマンドと、に分割される。
【0054】
ファイルレベルの実施では、ファイルシステムは、埋め込まれているアプリケーション特定コマンドを、認識されずに伝送するのに用いられる。実際の埋め込まれているコマンドは、ファイルシステムが目下送っていると思っている中間プロトコルのコマンドとは性質が異なるので、適切なステップを踏まなければ、衝突が起こり得る。例えば、エラーが生じると、ファイルシステムは、実際のエラーが埋め込まれているコマンド(例えば、読み取り)にあるかもしれないとき、これを中間プロトコルで搬送しているコマンド(書き込み)のエラーとみなすので、エラー回復は複雑なものになりかねない。同様に、ファイルシステムがキャッシングを採用していれば、不調和な結果となりかねない。
【0055】
ファイルのセグメント化からも問題の生じることがあり、代表的な実施は、同一ファイル場所(図10AのLBA_XYZ)に対する読み取りと書き込みに依存しているので、ファイル全体を、メモリ内の連続したセクターのグループに記憶しなければならない。LBA XYZで開始して記憶されることになるデータが、利用可能なセグメントより大きい場合、ファイルシステムは、それを分割する。その結果、アプリケーション特定コマンドの最大データ長さは、最小のOSファイル割り当てユニット(クラスター)より大きくてはいけないので、使用される論理アドレス(LBA_XYZ)は、十分な空間を有する論理ブロックアドレスと関係付けられる。
【0056】
ウインドウズの例では、ファイルシステム実施での事前要件は、少なくとも128個の連続するセクターが入っている標準的なファイルを必要とする。その様なファイルの存在を保証するために、その様なファイルが、フォーマットされたドライブ上に作られる。従って、ホストアプリケーションのベンダがこの方法を選定すれば、アプリケーションとの通信ファイルを展開しなければならない。この例では、設計は、「ファイルパイプ(FilePipe)」と名づけられたファイル(以下に指定されている特定の属性を有する)がデバイスのユーザー領域内に存在していると想定している。その様なファイルが存在していなければ、ドライバは、それを作ろうとする。失敗すれば、アプリケーションは、ユーザーに、ドライブをフォーマットし、アプリケーションをフォーマットされたドライブに再インストールすることを求めることができる。
【0057】
通信パイプを確立するために、デバイスドライバ1055は、
共有されていない
バッファリングしない
隠されている
という属性を有する通信ファイルを開くことが望ましい。共有されていない状態は、他のアプリケーションが、コマンド通過LBAにアクセスするのを防ぐために、ホストアプリケーションだけがファイルにアクセスすることを保証する。バッファリングしない状態は、システムに、中間バッファリング又はキャッシングの無いファイルを開くように命令する。従って、このファイルに対する/からの、書き込み又は読み取りは、キャッシングされたバージョンではなく、カードに対する/からの、読み取り/書き込みコマンドになる。(ファイルがカードにフラッシュされることを保証するために、「バッファリングしない」フラグと「書き込みスルー」フラグの両方を設定しなければならない場合もある。)実際のアプリケーション又はメディア特定コマンドは、別のプロトコルのコマンド内に埋め込まれているので、例えば書き込みエラーがあるときは、ホストは、これを、埋め込まれたコマンドのエラーではなく、中間プロトコルの書き込みコマンドに関するエラーと解釈する。バッファリングしない状態は、データ転送を、意図した埋め込まれたコマンドに繋がれた状態に保つ。隠されている状態は、エンドユーザーが、これをシステムファイルと見ることを意味している。
【0058】
次の実施ステップは、ファイルに、連続している少なくとも128個のセクターが入っていることを検証することである。
【0059】
アプリケーションの書き込みコマンド、即ち、隠されているパーティション例での安全な書き込みでは、書き込みバッファは、先に述べた道筋に沿って準備される。次に、ファイルポインタは、読み取り及び書き込みオペレーションが同一LBA(=LBA XYZ)に対してであることを保証するようリセットされる。バッファは、次に、「FilePipe」の名前を有する「WriteFile」コマンドを呼び出すことによってデバイスに送られる。
【0060】
アプリケーションの読み取りコマンド、即ち、隠されているパーティション例での安全な読み取りでは、ファイルポインタが先ずリセットされ、次いで「WriteFile」コマンドを実行することによって、コマンドバッファが送られる。ファイルポインタは、次に、書き込み及び読み取りオペレーションが同一LBAで行われることを保証するため、再度リセットされる。次に、デバイスから安全が保証されたデータを得るため、「ReadFile」が実行される。
【0061】
カード側に戻るが、デバイスアプリケーション1023は、(この例では)隠されているパーティションを管理し、読み取りと書き込みが、ホストアプリケーションの有効性確認次第となるようにしている。リソースとメモリのアクセスは、隠しパーティションのフェーズでは、メディア層1025を通して行われる。メディア層1025は、デバイスのアプリケーションデータ転送の全てを、メモリ1011の隠されているパーティションに向かわせる。
【0062】
先に述べた様に、デバイスアプリケーション1023は、その特定のコマンドを、ホストアプリケーション1053から、通常のカードプロトコルの読み取り/書き込みコマンドを通して受け取る。例えば、SDカードプロトコルを代表的な実施形態とすると、各コマンドインデクス及び引数は、コマンドセクターにSD書き込みコマンドを介して送られる。読み取りコマンドがデバイスアプリケーションから要求されるとき、ホストアプリケーションは、先ず、書き込みコマンドを(SD書き込みコマンドを通して)送り、その後、実際の読み取りコマンド(SD読み取りコマンド)を送る。読み取りコマンドのコンテキストは、例えば、デバイスアプリケーション専用のRAM空間内に、書き込みコマンドがコマンドセクターに送られている間に保存される。読み取りコマンドが後に続くときは、デバイスアプリケーションは、次に、保存されている読み取りコンテキストをロードし、要求されたデータを転送する。保存されている読み取りコンテキストは、別の読み取りコンテキストに取って代わられるまでは、そのまま残される。これにより、ホストは、別の読み取りコマンド+コマンドセクターを送ること無く、読み取り再試行を実行することができる。
【0063】
殆どのプロトコルコマンドが読み取り/書き込みコマンドとして動作するので、アプリケーション特定の新しいコマンドを、或るLBAへの読み取りと書き込みを通して転送することができる。代表的な実施形態では、全てのコマンドは、書き込みコマンドをメディアカードの或るLBAに送ることによって開始されることになる。アプリケーション特定の書き込みコマンドは、複数のセクター転送を含み、第1セクターは、コマンドの引数を保持し、残りのデータブロックは、関連データがあれば、それを保持する。
【0064】
先に述べた様に、読み取りコマンドは、2つの部分で実行され、即ち、
1.先ず、書き込みコマンドを、選定されたLBAに、読み取りコマンドの性質について説明する適切なデータと共に送ることによって、読み取りコマンドを開始し、
2.書き込みコマンドがカードアプリケーションを正しい転送状態に設定した後で、書き込みコマンドから、選定されたLBAへの読み取りコマンドが送られて、実際にカードからホストへデータが転送される。
【0065】
図9に戻るが、全てのコマンドは、先ず書き込みコマンドを送らなければならず、図9は、引数データセクターの代表的なフォーマットを示している。図9に示している様に、バイト0−31は、アプリケーションパススルーシグネチャー(例えば、「サポートされているパススルーモード」)を保持し、バイト32はアプリケーションのIDを保持し、バイト33は、埋め込まれているコマンドのアプリケーションコマンドオペレーションコードインデクスを保持し、アプリケーションコマンド引数データが残りのセクターを埋めている。
【0066】
この実施形態では、ホストアプリケーション1053が、書き込みコマンドを送ると決定すると、転送される第1セクターは、図9のフォーマットを有することになる。ホスト1051から送られる次のデータブロックは、カード用の埋め込まれたコマンドの実際のデータを有することになる。ホストアプリケーションは、読み取りコマンドを開始するよう選定すれば、先ず、書き込みコマンドを、選定されたLBAに上記単一のセクターフォーマットで送り、次に、読み取りコマンドを同一のLBAに送り、読み取りを行わせる。
【0067】
ホストアプリケーション1053は、図10Aに示している、デバイスから見た通信の流れに従う、先に述べたコマンドの開始に責任を負っている。これを行うために、ホストアプリケーションは、先に述べた様に、埋め込まれたコマンドを搬送することになるカードプロトコルの読み取り及び書き込みオペレーション用の目標LBAを制御する。1つのLBAで1つのコマンドのみと説明しているが、図10A(及び図11A−C、図12など)に示すプロセスは、複数のLBAで起こることもあり、それは、LBAが全て通過モードシグネチャーを信頼していることもあるからである。(この事例については、図10Bに関して後で詳しく説明するが、同図では、各種LBAを添え字LBAiで示している。)デバイスは同時に複数のファイルを扱うことができるので、特定のLBAは、デバイスの状態マシン(後で図12に関して論じる)に信頼されているに過ぎない。
【0068】
プロセスは、ステップ1101で、ここではLBA=LBA XYZと表されている選定されたLBAへの書き込みが受信されると始まる。シグネチャーが検査され(1103)、アプリケーションパススルーシグネチャーであるか否か調べられ、そうでなければ、カードは標準的なIOオペレーション(1105)に連動し、そうであれば、CMD通過モードに入る。ステップ1109は、コマンドの方向(デバイスから見て)がアウトか否かを判断する。方向がアウト(例えば、デバイスのメモリへの書き込み)であれば、コマンドが実行される(1111)。
【0069】
コマンドの方向がアウトでなければ、メモリデバイスは、1113で、読み取り対の第2コマンド、即ちアプリケーション読み取り要求を待つ。代わりに書き込みが到着すれば(1121)、待機状態(1113)に戻る前に標準的なIOオペレーション(1123)へ進む。読み取りコマンドが受信されると、LBAが検査され(1117)、それが選定されたLBAへのものであれば、それは、読み取り対の第2コマンドであり、読み取りが実行され(1119)、LBAが合致しなければ、1123へ進む。
【0070】
2つ以上の可能な実施方式があり、実施の詳細は、目標のプラットフォームによって変わる。ウインドウズNTベースのデスクトップに適用され、ホスト側に関して先に述べた1つの一般的な方式は、仮想ファイルと標準的なウインドウズファイルシステムAPIを使用する方式である。他には、次の例で述べる様に、ウインドウズSCSI通過APIを使って、カードプロトコル(例えばSD)の読み取り及び書き込みオペレーションを直接開始させる方式である。この方式は、ウインドウズNTベースのデスクトップにも適用されるが、カードドライバレベルでの実施に関して先に論じた様に管理権を必要とする。
【0071】
カードのファームウェアとアプリケーションのファームウェアの間のコマンドインターフェースに関して言えば、第1ステップで、カード−FWはアプリケーション特定コマンドを受け取る。カード通過モードがサポートしているシグネチャーを検証した後、カードのFE層1021は、書き込みコマンドと共にアプリケーションIDとコマンドOP−コード用に選定されたLBAに来た引数データセクターを解析する。アプリケーション特定コマンドインタープリターは、アプリケーションインターフェースルーチンをホストデータバッファへのポインタで呼び出す。第2ステップで、アプリケーション特定コマンドシーケンスを開始するとき、アプリケーションFWは、その自身の状態マシンを、アプリケーションコマンドシーケンスを扱うように設定し、更に、フラグを、選定されたLBAへの次の読み取り/書き込みコマンドがアプリケーションFWへのものであることを示すように設定しなければならない。読み取りコマンドがカード(選定されたLBA)に送られる度に、カードのFWは、先ず、このフラグを検査し、このアプリケーション特定読み取りコマンドを、このLBAへの通常の読み取りコマンドと区別する。
【0072】
隠しパーティションのアプリケーション用のプロトコルの例について説明する。図11A−Cは、図10Aと同じプロセスの幾つかを示しているが、ホストとデバイスの間のシステムバスの動作に関して示している。認証と保護パーティションのFAT読み取りのプロセスを図11Aに示している。先ず、ホストは、認証のためにユーザー名+パスワードをカードに送る。認証されると、カードは、アプリケーションが、保護され、隠されているパーティションからFATを読み取ることができるようにする。パーティションは、ホストがセッションを終了するまで、又はデバイスがパワーサイクルを使い果たすまで、開いたままである。パーティションが開いている限り、隠しパーティションへのホストアプリケーションによる読み取りと書き込みは、許される。
【0073】
図11Bは、保護パーティション内のファイルのホスト読み取りを示している。先に述べた様に、アプリケーション特定読み取りコマンドは、2つのカードプロトコルコマンド、即ち、読み取りコマンドおよび引数の性質を指定する書き込みコマンド、ならびに実際の読み取りコマンド、内で発生する。
【0074】
図11Cは、隠しパーティションへのホスト書き込みを示している。認証に合格すると、ホストは、パーティションのFATにアクセスし、新しいファイルをホストへ転送する権利を得る。ホストは、書き込みコマンドを、書き込み開始アドレス及びセクター数と共に保護パーティションに送る。
【0075】
図8は、上で紹介したデバイスアプリケーション状態の実施形態を、隠されているパーティション例の代表的な値と共に示している。幾つかの異なるパーティションも許されるので、デバイスアプリケーションパーティションIDのバイト1は、例では「1」として呈示されている。次の4つのバイトは、パーティションのサイズを示し、ここでは10メガバイト分のセクターとして示されている。バイト5は、パーティションが目下開放されているか否かを示し、次の4つのバイトは、デバイスアプリケーションのバージョンを示すために与えられている。バイト10は、動作状態を提供する。バイト10−511は、セクターを形成するためゼロが詰められている。或るバリエーションでは、バイト11は、最新のトランザクションで書き込まれたセクターの数を記録するのに用いられてもよい。
【0076】
表1は、隠しパーティションのデバイスアプリケーションに送られるアプリケーションプロトコルコマンドの例を載せている。CMDインデクスは、コマンドセクターのバイト33に置かれ、コマンド引数は、バイト34から、表に書き込まれた指定順に置かれている。
【表1】
【0077】
埋め込まれて隠されているパーティションコマンドはSDプロトコルの様なデバイスの書き込みプロトコルを通して転送されるので、パーティションのコマンドインタープリターは、書き込み又は読み取りコマンドが実際にはパーティションのデバイスアプリケーション用であり、SDの通常のオペレーション用ではないことを証明した後で、例えばSDコマンドインタープリターによって呼び出される。コマンドインタープリターは、コマンドセクターを解析した後で、適切なルーチンを呼び出す。或る特定の実施形態では、アプリケーションのコマンドは、MDコマンドが読み取りコマンド又は書き込みコマンドの何れであるかを示すパラメーターを、第1引数として有することができる。第2パラメーターは、ポインタを、割り当てられたRAM内の、コマンドセクターが置かれている場所へ送ることができる。パーティションのデバイスアプリケーション用の関連情報は、セクターのこの点で始まるので、ポインタは、バイト33、コマンドオペレーションコードインデクスを指す。この第2パラメーターによって指し示されるバッファのサイズは、第3パラメーター内に指定される。
【0078】
既に述べた様に、デバイスアプリケーション用の書き込みコマンドは、コマンドセクターがカードプロトコルの順序と同じ順序で解析された直後に実行されるので、簡潔である。例えば、SDの場合は、
1.SD書き込みコマンド(1つ以上のセクター)が受け取られ、第1セクターは、代表的な実施形態では、常にコマンドセクターである。
2.カード層は、第1セクターの最初の32バイトを解析し、コマンドセクターのシグネチャーを認識する。デバイスアプリケーションコマンド解析器(インタープリター)は、ポインタとともにコマンドセクターに呼び出される。
3.コマンドインタープリターは、埋め込まれているアプリケーションコマンドを識別した後で、埋め込まれたコマンドを実行してアプリケーションのコマンドプロセスを開始することになる、対応するルーチンを呼び出す。
4.隠されているパーティションのアプリケーション用のコマンドプロセスが行われ、状態がカード層に戻され、SD書き込みコマンドプロセスが終了するとシーケンスが終了に向かう。SDカードはアイドル状態に入る。
【0079】
これも先に述べた様に、隠されているパーティションのアプリケーションプロトコルの読み取りコマンドは、2段階のプロセスであり、(ここでも、SD実施形態では)SD−書き込みコマンドと、その後のSD−読み取りコマンドで構成されている。第1ステップはSD−書き込みコマンドであり、
1. ホストによって送られた1つのデータブロック(512バイト)によるSD−書き込みコマンド−第1セクターは、代表的な実施形態では、常にコマンドセクターである。
2. カード層は、第1セクターの最初の32バイトを解析し、コマンドセクターのシグネチャーを認識する。デバイスアプリケーションのコマンド解析器(インタープリター)は、ポインタでコマンドセクターに呼び出される。
3. コマンドインタープリターは、埋め込まれているアプリケーションコマンドを識別した後で、(次のSD−読み取りコマンドで)実行されることになる埋め込まれている読み取りコマンドを識別し、このコマンド識別子を保存する。次に、コマンドインタープリターは、カード層読み取りコマンドフラグを設定する。
4. アプリケーションのコマンドプロセスが行われ、状態がカード層に戻され、SD−書き込みコマンドプロセスが終了するとシーケンスが終了に向かう。SDカードは、アイドル状態に入る。
第2ステップはSD−読み取りコマンドであり、
1. SD読み取りコマンド。
2. SDカード層は、アプリケーションカード層読み取りコマンドフラグを検査し、通常のSD読み取りコマンドを呼び出すのではなく、デバイスアプリケーションコマンドインタープリターを、読み取りコマンド指示によって呼び出すように設定されていることを見つける。
3. デバイスアプリケーションコマンドインタープリターは、パーティション読み取りコマンドフラグを識別し、先の書き込みコマンドに保存されていたパーティション読み取りコマンド識別子を呼び戻す。識別子は、対応するパーティション読み取りルーチンに命じて、パーティション読み取りシーケンスを開始する。
4. パーティション読み取りシーケンスが行われ、戻された状態がカード層に送られる。
5. カード層は、SD−読み取りプロセスを終了し、カードはアイドル状態に入る。
【0080】
読み取り及び書き込みプロセスが、カード側アプリケーションのコマンド状態マシンにより示されており、図12にSDベースの実施形態で示されている。これらの埋め込まれたコマンドはSD書き込みコマンドによって送られ、隠されているパーティションの読み取りコマンドを実行しなければならないとき、ホストは、コマンドセクターをSD読み取りコマンドで送ることができないので、デバイスアプリケーション(1023)コマンドインタープリターは、状態マシンを、どの読み取りコマンドがホストアプリケーション1053によって実行されているかを管理し知っているように維持しなければならない。この図で、バブルは、デバイスアプリケーション層(図6、1023)で実行されるデバイス特定アプリケーションコマンドを指し、添付のコメントは、中間(ここではSD)プロトコルにあるFE層(図6、1021)に見られるコマンドを指す。図12の右側(A経路)は、書き込みプロセス用のプロセスであり、データがデバイスに転送されるか、データが転送されないかの何れかであるどの様なプロセスでも、同様な流れを辿ることになる。図12の左側は、データがデバイスからホストへ転送される読み取り又は他のプロセスに対応している。読み取りの流れは、読み取りに必要な対の第1コマンド用のB経路と、対の第2コマンド用のC経路とで構成されている。
【0081】
書き込みの流れと読み取りの流れは、共に同じように始まり、SD書き込みコマンドを受け取り、その書き込みコマンドから、シグネチャーが検出された後で、埋め込まれたコマンドが解析される。書き込みの流れでは、書き込みフラグが駐在しており、書き込みプロセスが実行される。しかしながら、読み取りの流れの最初のフェーズでは、読み取りフラグが設定されることになる。このカード層(SD)読み取りプロセスフラグは、ホストからの読み取りプロセスが検出されるときに、デバイスアプリケーション(1023)によって設定される。フラグは、(SDバス上の)ホストからの次の読み取りコマンドは通常のカード読み取りではなく、取り扱うためデバイスアプリケーション(1023)に送らねばならないことを、カード層に示す。これは、読み取りの流れのフェーズ2で起こり、そこでは、対の第2コマンドに応答して、データがデバイスから転送される。フラグは、カード層が初期設定するときにリセットされる。
【0082】
表1に挙げたコマンドを見ると、OPEN_PARTITIONコマンド(OP−コード 0x01)は、ユーザー名とパスワードを受け入れ、それらを検証する。それらが、デバイスアプリケーションの記憶されている名前及びパスワードに合致すれば、パーティションは、ホストのアクセス(読み取り、書き込み)に対して開かれる。この時点で、1つの認証フレーズが送られ、デバイスアプリケーションのコードのフレーズに対して検証される。このプロセスを図13Aに示している。パーティションは、CLOSE PARTITIONがパーティションを閉じるまで、又は次のパワーサイクルまで、開かれたままになる。
【0083】
CLOSE PARTITIONコマンド(OP−コード 0x02)を使用するのは、アプリケーション作業セッションを閉じ、パーティションを開いたままにしないためである。或る実施形態を図13Bに示している。
【0084】
READ PARTITIONコマンド(OP−コード 0x03)の使用について図13Cに示している。パーティションが開いていれば(1633から1635までのイエス経路)、このコマンドは、ホストアプリケーションが、パーティション(1639、1641)に記憶されているデータを読み取ることができるようにする。代表的な実施形態で、このルーチンは、「フラッシュ読み取り」APIルーチンを呼び出し、このルーチンは、隠されているパーティション空間へのデータ転送を命じる。
【0085】
WRITE PARTITIONコマンド(OP−コード 0x04)は、データを、ホストからカード上の隠されているパーティションに送る。図13Dに示している様に、このコマンドは、パーティションフラグが設定された(1653)ときにだけ、デバイスアプリケーションによって実行される。このルーチンは、「フラッシュ書き込み」(1659、1661)APIルーチンを呼び出し、このルーチンは、隠されているパーティション空間へのデータ転送を命じる。
【0086】
READ PARTITION_STATUSコマンド(OP−コード 0x05)は、図8に示している情報を提供する。これは、図8に関して先に論じた構造を備えたアプリケーション読み取りコマンドである。コマンドが入ってくると、ルーチンは、全ての情報を集め、それを上記構造内に置き、ホストへ送る。
【0087】
先に述べた様に、或るオペレーティングシステムは、時には命令を分割するので、データ部分の全てが、その対応するコマンド部分に取り付けられるわけではない。この場合、書き込み命令のデータの一部は、カードパススルーシグネチャー無しにカードに現れるので、シグネチャーが取り付けられていない伝送プロトコル内の標準的なコマンドと見えるものは、実際には、アプリケーション特定コマンドの残りのこともある。具体例として、例えば10ブロックのデータ部分513を有する図5の命令510の場合を考える。この命令をカードに伝送する際に、ホストのオペレーティングシステムは、データ部分の最初の5ブロックだけを命令に取り付けて送り、残りの5つのブロックを後で伝送することもある。この後者のデータブロックのセットは、送られるときは、シグネチャーとアプリケーションプロトコル用の実際のコマンドが入っている最初のデータブロック513aを欠いており、伝送プロトコルからの標準的なコマンドの一部の様に見える。その様なセグメント化は、埋め込まれたアプリケーション特定コマンドが読み取り型式のコマンドであるときにも起こり得るので、データは、複数の部分でカードからホストへ送られる。図10Bは、図10Aの流れを拡張したもので、アプリケーション特定の読み取り及び書き込みコマンド両方におけるその様なセグメント化を、読み取り及び書き込みプロセスにおいて1つの論理ブロックアドレスLBA=LBA_XYZを論理アドレスLBARi及びLBAWiと置き換えることによって、説明している。読み取りにLBARi、そして書き込みにLBAWiを定義することによって、デバイスは、何れの方向にアプリケーションデータを転送する際の中断にも対処することができる。添え字iは、複数のアプリケーション及び複数のユーザーのホスト装置からの複数のアプリケーション特定コマンドの同時実施を考慮している。
【0088】
図10Bのプロセスは、これも、SDプロトコルを伝送プロトコルとして使用するSDカードの例に基づいており、デバイスがSDアイドル状態にあり、コマンドを1201で受け取ることで始まる。次に、プロセスは、受け取った命令がSD書き込み(1203)であるか否か、そしてそうでなければ、それがSD読み取り(1205)であるか否かを判断する。それがSD書き込みでもSD読み取りでもなければ、SDコマンドが実行され(1207)、デバイスはアイドル状態へ戻る(1209)。
【0089】
受け取った命令が、ステップ1203でSD書き込みであれば、次に、パススルーシグネチャーが検査される(1214)。1214でシグネチャーが見つかれば、これは新しい埋め込まれたコマンドの開始を示しており、このコマンドは次に抽出することができる。1231で、読み取り及び書き込み論理ブロックアドレスLBARi;Wiの全てに対し、入ってくるコマンドの論理ブロックアドレスLBACMDが、目下の書き込みプロセスに割り当てられている論理ブロックアドレスと同じ、即ちLBACMD=LBAWiであれば、対応するLBARi;Wiがクリアされる。通常は、割り当てられているLBACMDを使用すべきでないが、それが既に他のプロセスに割り当てられている場合は、それを打ち切り、アドレスをクリアすることになる。
【0090】
次に、アプリケーション特定コマンドのデータ方向が判断される(1233)。データ転送を伴っていなければ、アプリケーション特定コマンドが実行され(1245)、デバイスはアイドル状態へ戻る(1249)。
【0091】
アプリケーションのコマンドが書き込みであれば、対応する論理アドレスは、LBAWi=LBACMD+データブロック数と設定され(1251)、アプリケーションデータが書き込まれる(1253)。先に論じた様に、ホストのOSは、命令を分割するかもしれないので、コマンドに、対応するデータの全てが伴っているわけではない。埋め込まれたコマンドが抽出され、解析されると、カードは、コマンドがどれだけの数のデータブロックを含んでいるかを知ることになる。1255で、カードは、全データが含まれており書き込まれたか否かを調べるために検査する。そうであれば、LBAWiはクリアされ(1257)、そうでなければ、残りのデータは、エラーやシャットダウンで中断されなければ、最終的には後に続き、上で計算されたアドレスである(このコマンドに対して)連続したカードアドレスへの標準的なSD書き込みコマンドの様になるので、クリアされない。デバイスは、次に、アイドル状態へ戻り(1259)、更なるコマンドを待つことになる。
【0092】
1231に戻り、アプリケーションコマンドが読み取りであれば、デバイスは、LBARi=LBACMDを設定し、データタイプRi=データタイプCMDを設定して(1235)、第2読み取りフェーズでの1263における後続のデータ転送への準備とする。デバイスは、次に、SDアイドルモードに進み、読み取りプロセスの第2フェーズを待つ。この解決法の異なるバリエーションは、LBACMDを使用しないが、異なるアドレスLBAREADは、書き込みコマンドのパラメーター内に明示的に定義される。この方法は、OSのキャッシング機構の回りで作業する。幾つかのシステムでは、ホストOSは、書き込まれたばかりのカードアドレスを読み返そうとしない。ホストOSは、データバッファをホストキャッシュバッファからホストアプリケーションに戻すのではなく、このデータは、書き込まれたばかりなので、カードが有しているデータであると想定している。この場合、データバッファは、カードの応答ではなく、アプリケーション特定コマンドを含んでいる。
【0093】
1214に戻り、(伝送プロトコル内の)コマンドは書き込みである(1203からのイエス経路)が、シグネチャーが無い(1214からのノー経路)場合、コマンドは、実際には、伝送(ここではSD)プロトコル内の書き込みコマンドかもしれないし、アプリケーションプロトコル内の書き込みへの追加データかもしれない。これは、1215で判定され、何れのLBAWiに対してもLBACMD≠LBAWiであれば、それは標準的なSD書き込みであり、1217で実行され、その後、カードはSDアイドル状態に入る(1219)。LBACMDがLBAWiの1つと合致すれば、コマンドは、実際には、対応するアプリケーションコマンドのデータ部分の追加分であり、流れは1251へ進み、この追加のアプリケーションデータが書き込まれる。
【0094】
ステップ1205に戻り、コマンドがSD読み取りであれば、それが実際にSD読み取りであるか、又はアプリケーション読み取りの第2フェーズであるかが判定される。これは、1226でLBACMDとLBARiを比較することによって判定され、何れのLBARiに対してもLBACMD≠LBARiであれば、それは標準的なSD読み取りであり、1277で実行され、その後、カードはSDアイドル状態に入る(1229)。そうではなくLBACMDが何れかのLBARiの1つと合致すれば、それはアプリケーション読み取りの第2フェーズである。
【0095】
LBACMD=LBARiであれば、対応する論理アドレスは、LBARi=LBACMD+データブロック数と設定され(1261)、アプリケーションデータが読み取られる(1263)。デバイスはSDアイドル状態に入る(1269)。アプリケーション読み取りプロセスでは、代表的な流れは、アプリケーション書き込み側のステップ1255と1257に相当するものが欠けている。全ての対応するデータにアクセスされていても、これにより、対応する読み取りフラグの設定が維持される。LBARiを開いた状態に保つことによって、エラーの場合にデータを再び読み取ることができる。この様にしておくと、アドレスが、例えばステップ1231での様に他の目的に再割り当てされた場合、LBARiがクリアされるだけである。
【0096】
10Bで、図10Aに追加されているのは、アプリケーションデータの転送時の中断を考慮していることである。それらは、同じ論理アドレスに対する読み取りと書き込みの必要性を取り除いてもいる。これらは、オペレーティングシステムが十分に制御されていない場合に本技法を使用できるようにするが、それは、図10Aの実施形態に必要なある種の制御は、既知の制御可能なプラットフォームを必要とするかもしれないからである。更に、再度指摘するが、図10Bは、複数のホストアプリケーションがあってもよく、それぞれが独立してカードと通信している場合、データ転送の中断は、1つのプロトコルからの命令の一部を他のプロトコルからの命令の部分の間に差し挟むかもしれないことを、より明示的に組み込んでいる。更に、読み取り及び書き込みプロセス両方で、別々のLBAは、デバイスドライバ層内の何れの読み取り又は書き込みキャッシングでも迂回できるようにしている。
【0097】
(第2の代表的な実施形態)
第1の例は、ファイルレベルで実施された。本発明の様々な態様は、デバイスドライバレベルで実施することもでき、ホストがウインドウズのオペレーティングシステムを使用している場合は、ウインドウズの標準的記憶デバイスドライバの様なデバイスドライバに要求を送ることによって、読み取り及び書き込みオペレーションを開始する。このコマンド通過方法の実施は、デバイスと直接通信し、ファイルシステムのオーバーヘッドを持っていない。しかしながら、この方法は、管理権を必要とする。ホストアプリケーションは、この方法を第1選択として試して使用し、それが失敗すれば、ファイルシステムオペレーションに移ることができる。インターフェース機能は、その方法の間で選択し、それに従って通信パイプを初期化するのに用いることができる。クライアントアプリケーションは、他のオペレーションの前に、このコマンドを呼び出す。アプリケーションが適切な管理権を欠いていれば、この方法で作業するのは例外になり、例外取り扱いコードに従って処理することができる。
【0098】
本例は、上記背景技術で問題となった議論に基づいている。背景技術の議論は、ハードウェアカードリーダーを通してPCに接続されているメモリカードのコンテキストで問題を呈示したが、ここに提供されている他の例と同様に、以下において、状況がより一般的であることが分かる。メモリデバイスは、それが第2ホストに直接接続されているときでさえ、その様なプロトコル翻訳問題、又は、より正確には、無翻訳問題を抱えていることがある。この状況は、メモリデバイスが、メモリデバイスから見て、完全ではないプロトコルを有するホストに接続されているときに生じることがある。これが生じることがある1つの場合は、カードが、2セットの接点を有しており、一方はUSBポートで使用し、他方は標準的なカード接点のセットに使用する場合である。(その様な二重接点のカード例については、2004年4月16日出願の米国特許出願第29/203,693号、第10/826,801号、及び第10/826,796号に記載されている。)第3組の実施形態で論じている様に、プロトコル翻訳は、メモリデバイス自体の中に完全に入っており、ホストには分からない。更に、以下の通り、実施形態を、取り外し可能なメモリカードについて説明しているが、この議論は、埋め込まれているメモリデバイスに適用することもできる。
【0099】
第2の代表的な実施形態の第1組の実施形態では、メディアカード特定コマンドを、メディアカードをホストするアダプター又はリーダーのファームウェアを変えること無くホストからカードに送ることができるようにするために、本発明は、指定された論理ブロックアドレス(LBA)、即ちカード通過モードLBAを使用し、データセクター内の特別なシグネチャーが、特別なコマンドがセクター内に埋め込まれていることをカードに通知する。これは、ファームウェア変更してコマンド通過(CPT)モードをサポートすることによって、実施することができる。これは、アダプターのファームウェア変更を必要としないので、カードは、何れのUSBリーダー又はアダプターでも実行することができる。
【0100】
背景技術で論じた様に、様々な小型フォーマットフラッシュメモリカード(コンパクトフラッシュカード、セキュアデジタル(SD)カード、マルチメディアカード(MMC)、xD、及びソニーメモリスティック/メモリスティックProなど)は、ホスト(デジタルカメラ、フラッシュメモリ音楽プレイヤー)と共に使用するための、異なる電気的インターフェースと、しばしばメディア特定コマンドとを有しており、このコマンドは、PCとハードウェアアダプターの間で使用されるコマンドセットには見られない、PCがカードを読み取ることができるようにしているものである。
【0101】
主要な態様では、本発明は、通常の読み取り/書き込みコマンドを尊重するため、カードのファームウェア変更を使用している。しかしながら、特定のLBAへの読み取り/書き込みコマンドがオフセットすると、シグネチャーが検査され、コマンドのデータ部分に、メディアカードの特定コマンドが埋め込まれているか否か判定される。プロトコルは、どの様なメディアカードのファームウェアでも実施できる。従って、プロトコルは、アダプター、USBリーダー、又はPC(又は、完全なメディア特定コマンドセットにアクセスしない他のホスト)が使用する他のリーダーへ何らのファームウェア変更を要求しない。実際を言えば、カード製造者がこれをする方が、全てのリーダーのベンダでカードコマンドの全てに対してリーダーファームウェア変更を実施するよりも簡単である。
【0102】
本発明の様々な態様は、例を議論する際に、しばしば、セキュアデジタル(SD)又は小型フラッシュ(CF)の様な特定のカードや、SCSIまたはATAの様な特定のプロトコルについて説明されることになるが、この様々な態様は、他の様々なメモリカードやステムにも適用されるものと理解されたい。カード構造とオペレーションに関する様々な詳細については、更に、本明細書で参考文献として援用している特許及び出願に記載されている。
【0103】
図14は、カードとパーソナルコンピューター(又は、より一般的には、カードを読むのにハードウェアアダプターを必要とする全てのホスト)がリーダーを使って通信するプロセスを示している。図14は、USBラッパー又は同様の構造の明示的導入が無視されている場合もあることを除けば、図4と同様であり、これについては以下の議論でも削除されている。背景技術で述べた様に、カードとリーダーは、201で示す様に、カードのプロトコルのコマンドセットからの命令を使って通信する。ホストとリーダーは、通常は、203で示す様に、別のコマンドセットからの命令を使って通信する。リーダーは、2つのコマンドセットの間で、そのファームウェアを使って翻訳する。(ここで、そして以下でも、ファームウェアが引き合いに出されているが、これは、より一般的には、ハードウェア、ソフトウェア、又はこれらの組み合わせで実施することができる。)難しいのは、コマンド201が、PCがリーダと通信するのに使用するプロトコルに等価物を持っていないカードのコマンドセットからのコマンドであるときである。この場合、その様な等価な命令203が無いので、リーダーは、201を、対応するコマンド203に翻訳することができず、他のやり方についても同様である。従って、ホストが、カードのメディア特定の命令の1つを使用したい場合、先行技術では、PCハードウェアアダプタープロトコルのコマンドセットを変更すること無く、これにリーダーを通過させる手段が無い。
【0104】
この特定の例は、ホストからリーダーへはSCSIプロトコルを使用し、リーダーからカードへはSDプロトコルを使用しており、SDコマンド、即ち、安全な書き込みの例は、埋め込まれたコマンドとしてSCSIプロトコルには存在しない。従って、このコマンドを、SDカードで直接伝送することはできるが、本発明の態様を用いて、アプリケーションのホスト側が、ホストとリーダーの間でコマンドを搬送する中間SCSIプロトコルで命令を伝送することができるようにしなければならない。リーダーでは、ダミーコマンドは、各プロトコルにバージョンを有しており、データとして扱われている実際の埋め込まれたコマンドとともに、プロトコル間で翻訳され得る。例えば、ダミーコマンドは、ここでも書き込みと取られる。従って、ホストとアダプターの間では、それはSCSI書き込みコマンドと表され、アダプターとカードの間では、SDコマンドと表されるが、どちらの場合も、実際のコマンドはデータ部分に埋め込まれている。従って、この例では、埋め込まれたコマンドは、第2プロトコルに在るが、このやり方に沿った或る時点では、このアプリケーション特定コマンドを欠いたプロトコルで送られるので、それはまだ埋め込まれている。従って、これは、同じプロトコルのコマンドに埋め込まれている第1プロトコルのコマンドになるので、それと、埋め込まれているコマンドの等価物を持ち合わせていない別の第2プロトコルとの間の翻訳が可能になる。これは、図15に示されている。この議論は、主にSCSIとSD実施形態について論じているが、より一般的には他のプロトコルにも適用されるものと理解されたい。
【0105】
図15は、PC−リーダーのコマンドセット内に等価物を有していないカードのコマンドセットからのコマンドが、両方のコマンドセットの表現を有しているPC−リーダープロトコルの命令203に埋め込まれているときの、本発明の基本的態様の概略図である。代表的な実施形態では、メディア特定コマンドは、ここでも、PC−リーダープロトコルのデータ部分に埋め込まれている。すると、PCとリーダーは、リーダーが対応するコマンド201に翻訳することのできるコマンド203を交換することができる。しかしながら、このコマンド内には、別のメディア特定コマンド601が埋め込まれている。リーダーは、このコマンドを、そのオペレーションにトランスペアレントな方式で通過して翻訳する。代表的な実施形態の機構は、両方のコマンドセットの表現を有する命令201/203が、カードのメモリ内の予め決められた論理アドレスへのアクセスであるということである。例えば、カードは、指定された論理アドレスへの読み取りコマンドを受け取ると、これがメディア特定コマンド601であると警告される。(以下に説明する様に、以下の実施形態は、その様な指定された論理アドレス、より一般的には、書き込みコマンドだけに依存せず、データ部分を備えたあらゆるコマンドが利用されてもよい。)カードは、次に、その様なコマンドのシグネチャーを検査し、これを検証し、次いでコマンド601を抽出する。代表的な実施形態では、SCSI及び他のプロトコルでは、メディア特定コマンドを命令のコマンド部分に埋め込むのに都合のよい場所が無いことが多いので、コマンド601は、命令のデータ部分の内側に置かれる。
【0106】
例えば、PCがSDカードの安全な領域の書き込みを行いたければ、命令203を形成するが、その命令は、指定された論理ブロックアドレス(LBA)への書き込みコマンドで構成されており、コマンドパススルー(CPT)シグネチャーが入っていて、実際の安全な書き込みコマンド601がデータ部分に埋め込まれている。次に、PCは、この命令203をリーダーに送り、リーダーは、それを、SCSIプロトコルの標準的な書き込み命令として解釈する。次に、これは、リーダーによって、SDプロトコルで標準的な書き込み命令201に翻訳される。リーダーは、安全な書き込みコマンド601を、それが書き込みコマンドに取り付けられているデータの一部分であると想定して、通過するだけである。命令201がカードに到着すると、書き込みのために指定されたLBAに基づいて、ファームウェアは、カードが、命令はそうではなくてメディア特定コマンドであると判定できるようにする。コントローラーは、次に、安全な書き込みであると認識するコマンド601を抽出し、命令の実際のデータ部分の安全な書き込みを実行することによってコマンドを実行することに着手する。
【0107】
図16は、NセクターのデータのSDカードへの安全なデータ書き込みを実行する例に関する具体的な実施形態について、より詳細に述べている。一番上の行は、ホストによって形成される命令を示している。安全なデータ書き込みは、例のSCSIプロトコルの類似物を有していないので、コマンド部分は、SCSIプロトコルのコマンドCMD’、ここでは両方のコマンドセットに存在している書き込み、で構成されている。書き込みは、指定されたコマンド通過論理ブロックアドレスCPTLBA(議論を単純化するため、他のコマンドの詳細については示さない)に行われる。破線の右側のデータ部分は、最初のセクターで構成され、メディア特定コマンドが入っており、それに実際のデータのN個のセクターが続いている。最初のデータセクターは、コマンドパススルーシグネチャー、実際のメディア特定コマンド、及び後続のデータが書き込まれることになる実際のアドレスを含んでいる。論理ブロックアドレスCPTLBAは、先に論じた第1の代表的な実施形態の議論に用いられている論理ブロックアドレスLBA_XYZに相当する(例えば、図10A参照)。異なるラベル付けは、ホスト側でデバイスドライバレベルで実施されている本例では、用いられている論理ブロックアドレスが、具体的な指定された論理ブロックアドレスであり、ファイルレベルで実施されている先の例では、それは何れのアドレスでもよい、ということを示すのに用いられている。
【0108】
図16は、先に論じた図5と似ているが、命令510は、この例で明示的に示されている(ホストからリーダーへ、リーダーからデバイスへの)各伝送プロトコル毎に一回繰り返される。図5の命令510は、アプリケーションのホスト側とデバイス側の間の伝送経路に沿った何処かで起こるコマンドCMDの埋め込みを示しており、命令530は、アプリケーションのデバイス側で使用されることになる抽出された形態を示している。図16は、幾つかの中間プロトコルが存在してもよく、実際のコマンド(CMD)は、埋め込まれたコマンドが特定の中間プロトコルに類似物を有する場合でも、これらの内の幾つかを通して埋め込まれることを示している。
【0109】
リーダーから見ると、第1データセクターは、指定された論理ブロックアドレスに書き込まれることになるN+1個のデータセクターとして見えるものの最初の1つに過ぎない。従って、これらは、コンテンツが変更すること無く通過する。命令のコマンド部分は、リーダーによって、PC/リーダープロトコル(CMD’)の表現から、カードのプロトコル(CMD)の表現に翻訳される。この時点で、命令は、カードに伝えることはできるが、まだ、例えばCPTLBAへの書き込みコマンドの後にN+1個のデータセクターが続く形態を有している。
【0110】
カードに入ると、ファームウェアは、実際のコマンドを解きほぐすことができる。ファームウェアは、コマンドが指定されたアドレスを使用すると判定すると、第1データセクターに進み、CPT署名を検査し、実際のメディア特定コマンドを抽出する。これは、実際の命令のコマンドを形成し、その後に、N個の実際のデータセクターが続く。
【0111】
従って、図16に関して述べた様に、N個のデータセクターを備えたメディア特定書き込みコマンドは、PCとリーダーの間で用いられる伝送プロトコルにN+1個のデータセクターとして埋め込まれる。N個のデータセクターを読み取るために、メディア特定読み取りコマンドは、PCとリーダーの間で用いられる読み取り(又はデータを受け入れる他のコマンド)又は伝送プロトコルに1つのデータセクターとして埋め込まれる。この様に、メディア特定読み取りコマンドは、メディア特定読み取りコマンドがデータセクターだけに埋め込まれた書き込みコマンドとして実施することができる。カードは、やはり指定された論理アドレス(CPTLBA)と署名に基づいて、メディア特定コマンドを抽出し、メディア特定読み取りで指定された要求された論理ブロックアドレスからのデータに応答する。書き込み又は読み取り失敗の様な複雑なものに対処するための読み取り実施と方法の詳細については、第1の代表的な実施形態に関して先に詳しく展開した。
【0112】
指定された論理アドレス(CPTLBA)は、ファイルシステムで普通は使用されないセクターであるのが望ましく、そうしておけば、このセクターに送られてくるかもしれない標準的な読み取り又は書き込みコマンドとの衝突を回避できる。例えば、DOSでは、普通は、マスターブートレコードの後に、通常はアクセスされない幾つかの隠されたセクターがある。(オペレーティングシステムの中には、この領域にアクセスするには管理者特権を必要とし、次のセクションのファイルベースの実施において起こり得る厄介なことを迂回できるようになっているものもある。)この論理アドレスを指定された論理アドレスとすることにより、このアドレスへのアクセスは、実際にそこでデータの読み取り又は書き込みを行うためではなく、実際のコマンドは埋め込まれているメディア特定コマンドであることを検査する目的のためである。リーダーは、このコマンドを、通常のデータアクセスとして通過するだけで、カードが全てをソートする。
【0113】
図17A−17Lは、コマンドの様々な例を、どの様にデータセクターに埋め込むことができるかの1つの実施形態を示している。先に述べた様に、メディアカードへの書き込みが実行されると、データ部分の第1セクターには、CPT(カード通過)コマンドが入る。それは、CPT機能が実行されることを示している。従って、10個のセクターに書き込む際は、第1セクターはCPTヘッダーなので、実際には、11個のセクターに書き込む。10個のセクターを読み取るには、ユーザーは、CPTコマンドの1つの書き込みを送り、次いで10個のセクターを読み取らなければならない。実際のアプリケーションは、通常の読み取り又は書き込みコマンドでは達成できない特定のコマンドを実行することである。例えば、CPTモードは、AKE(認証キー交換)の様なメディア特定コマンドか、又はSDカード用のアプリケーションコマンドに用いることができる。
【0114】
図17Aは、埋め込まれたコマンドフォーマットの実施形態を示している。バイト0−31のCPTシグネチャーは、シグネチャーがコマンドと合致することを検査するためのコマンドに依存する文字列である。バイト32のコマンドは、
0−CPTモードチェック:CPTモードサポートに関しメディアカードを検査する
シグネチャー「カード通過モード検査」
1−データアウト:メディアカードに書き込まれるデータ
シグネチャーカード通過出力コマンド」
2−データイン:メディアカードから読み取られるデータ
シグネチャー「カード通過入力コマンド」
3−データ転送が無いコマンド
シグネチャー「カード通過ノーI/Oコマンド」
4−CPTコマンド打ち切り
シグネチャー「カード通過打ち切りコマンド」
5−CPTモードリセット
シグネチャー「カード通過リセットコマンド」
6−CPT状態読み取り
シグネチャー「カード通過状態読み取り」
データ転送長さ(バイト33−35)は、転送されるデータの量(バイト数として)を指定し、データはセクターに転送されるので、不完全なセクターには0が詰められる。データ(バイト36、ビット1)は、データ転送のフラグであり、次のコマンドにデータ転送が無ければ「0」であり、次のコマンドにデータ転送があれば「1」である。同様に、方向(バイト36、ビット0)は、データ転送方向のフラグであり、データ転送が次のコマンドへの入力のためであれば「0」であり、データ転送が次のコマンドへの出力のためであれば「1」である。
【0115】
メディアカード特定コマンド領域(バイト48−511)は、コマンドが抽出されるとメディアカードが実行する実際のコマンドである。メディアカード特定フラグ領域(バイト36、ビット0)は、メディア依存フラグのためのものである。
【0116】
メディアカードは、カード通過コマンドプロトコルをサポートするか否か、実際のコマンドが送られる前に検査されねばならない。先に述べた様に、LBA(CPTLBA−カード通過LBA)は、プロトコルに対して指示される。LBAは、カードの0から最終セクターまでのどの様な数でもよい。例では、これが、LBA2であり、FATファイルシステム内のマスターブートレコード後の第2の隠されたセクターであり、通常、データを保持するのには用いられない。LBAに有効データが入っている場合でも、このプロトコルは、その値を留保することに注目されたい。モードサポートを検査するには、2つの選択肢がある。
【0117】
プロトコルのサポートに関して問合せる第1の選択肢は、メディアカードがCPTモードサポートシグネチャーをCPTLBAセクターに置くときのものである。しかしながら、これは、CPTLBAが、有効な情報を有するセクター、例えば、FAT/ディレクタリ又はユーザーデータ領域内のセクターである場合は望ましくない。CPTモードがサポートされている場合は、随意的に、カードは、図17Bに示している様に、CPTLBAセクターをシグネチャーと共に戻すことができ、バイト0−31は「カード通過モードはサポートされている(空白で詰められている)」であり、バイト32−511は0である。
【0118】
プロトコルのサポートに関して問合せる第2の選択肢は、CPTLBAセクターに、CPTモードをサポートするシグネチャーが入っていない場合に用いることができる。この場合、以下のプロトコルが、モードサポートを検査するのに用いられ、
a)ホストメモリ領域のCPTLBAセクターを読み取り、保存する。
(サポートするシグネチャーは無い)
b)CPTLBAに、CPTモードサポートを問合せるためのシグネチャーが入っているセクターを書き込む。
c)CBTモードサポートの応答を検査するため、CPTLBAセクターを読み取る。
d)CPTLBAに、保存されたメモリ領域からのオリジナルセクターを書き込む。
ステップa)は、指定された論理アドレス(CPTLBA)を、ホストがCPTLBAセクターを読み取り、且つ、メモリに保存するときに、中に入っている全てのデータを維持したままで、サポートに関して検査することができるようにしている。これは、メディアカードがカード通過モードをサポートしていない場合に、セクターを復元するためである。この書き込みは、CPTモードコマンドを使用しない。
【0119】
図17Cは、ステップb)、CPTLBAに問合せるためのシグネチャーが入っているセクターを書き込むことを示している。バイト0−31は、ホストが、バイト0−31のCPTLBAセクター「カード通過モード検査」(空白で詰められている)と書き込むことを含み、その後、バイト32−47では、コマンドとフラグが続く。バイト48−511は0である。
【0120】
ステップc)ホストは、応答するためにCPTLBAセクターを読み取る。応答が図17Dの様に、バイト0−31は「カード通過モードはサポートされている」(空白で詰められている)であり、バイト32−511は0であれば、カード通過モードがサポートされており、他の場合は、カードはCPTプロトコルをサポートしていない。このプロトコルは、プロトコルのサポートに関して問合せるための第1選択肢とは異なることに注目されたい。CPTモード検査コマンドが発行されるときに、シグネチャーに応答がある。
【0121】
ステップd)で、ホストは、保存されているメモリ領域からCPTLBAセクターのオリジナルデータを書き込む。カードがカード通過モードをサポートしていても、適正なシグネチャーが無いので、この書き込みは、特別なCPTコマンドと解釈されないことに注目されたい。
【0122】
図17E−17Gに関し、入力/出力プロトコルを説明する。データをメディアカードに出力するには、先ず、CPTLBAに出力用のシグネチャーを書き込み、その後、データ転送長さに基づいてデータを書き込む。CPTLBAに出力用のシグネチャーを書き込むために、ホストは、書き込みコマンドをメディアカードに送るが、データは、メディアカード特定コマンドが埋め込まれているCPTコマンドフォーマットを有している。長さは、「データ転送長さ」とCPTコマンドフォーマット用の1個のセクターを加えたものである。これは図17Eに示されており、バイト32の1は、「メディアカードに書き込まれることになるデータ」に対応する。
【0123】
データ転送長さに基づく実際の書き込みを図17Fに示しており、メディアカードがデータをどの様に扱うかは、メディアカード特定コマンド次第である。図17Aについて述べたように、この例の「データ転送長さ」情報は、バイトで言えばバイト33−35(MSB、LMSB、LSB)で表現されている。しかしながら、読み取り/書き込みデータがカードとセクターのリーダーの間で転送されるとき、不完全なセクターは、必要に応じて0を詰められる。(例えば、SDカードでは、認証キー交換(AKE)プロセスは、チャレンジ・レスポンスに8バイトを使用する。)従って、ホストは、データセクターに、チャレンジ1とレスポンス2のデータに対して504バイトの0を詰め、カードは、同様にチャレンジ2とレスポンス1のデータを詰める。
【0124】
データをメディアカードから入力する際は、ホストは、CPTLBAに入力用のシグネチャーを書き込み、データ転送長さに基づいてデータを読み取る。図17Gは、読み取られるデータを示すために送られることになるCPTコマンドを示しており、バイト32における2は「メディアカードから読み取られるデータ」に対応する。データ転送長さに基づいてデータを読み取る際は、ホストが読み取りコマンドをメディアカードに送った後、読み取られるセクターの数は[(データ転送長さ)/512]である。(これは、セクター当たり512バイトを想定しており、より一般的には、実際のセクター長さが異なる場合は、512に置き換わる。)開始セクターはCPTLBAである。先のコマンドはCPT入力コマンドなので、カードは、メディアカード特定コマンドに基づいて、そのデータをホストへ送る。
【0125】
入力又は出力の無いコマンドの例には、「データ転送の無いコマンド」、「CPTコマンド打ち切り」、及び「CPTモードリセット」が含まれる。図17Hは、バイト32における3で示す「データ転送の無いコマンド」を示している。
【0126】
図17Iは、バイト32における6で示す「状態読み取り」コマンドを示しており、これは、ホストがCPT状態を読み取れるようにする。例えば、SDカードでは、状態は応答データとして実施することができる。状態は、読み返されたデータの最初の数バイトである。
【0127】
具体例が必要な場合はSDカードを取り上げているが、図17A−17Iは、どの様な特定のメディアプロトコルにも限定されず、また、メディア特定コマンドにも限定されない。メディア特定コマンドの例を挙げると、図17Jは、SD又はMMCカードに特定の埋め込まれたコマンドを示しており、図17Lは、コンパクトフラッシュカードに特定の埋め込まれたコマンドを示している。
【0128】
図17Jでは、SD/MMCの例のためにコマンドのフォーマットを示している。バイト0−35は上記の通りである。SD/MMCコマンドは、メディアカード特定コマンドフィールドを満たしている。バイト48−53は、SDコマンド、例えば安全な読み取りである。メディアカード特定フラグフィールドには、幾つかのフラグが必要であり、定義されている。BLKHは、コマンドが、1つのセクター用か、複数のセクター用かを示し、1つのセクターコマンドが用いられる場合は0、複数のセクターコマンドが用いられる場合は1である。アプリケーションコマンドの場合、APP=1である。応答型式は、コマンドインデクス次第のSD応答型式である。バイト48−52の様々なエントリは、SDコマンドの実際の要素であり、バイト53のCRC7は、随意に0に設定してもよい。
【0129】
SDコマンドの応答データを得る際は、ユーザーは、状態読み出しを送って応答を得ることができる。これは、図17Kに示されている。応答データは、読み取りされたセクターの最初の6バイトとして戻される。
【0130】
図17Lは、埋め込まれたコマンド用の小型フラッシュ(CF)コマンドフォーマットを示している。この場合、コマンドは、バイト48−54にあり、CFコマンドを備えるのに必要な要素を提供する。図17Lでは、メディアカード特定フラグ(バイト36−ビット2からバイト37)が、将来の様々なカードに対するコマンド特定フォーマットに備えて予約されている。
【0131】
(第3の代表的な実施形態)
第3の代表的な実施形態は、第1の代表的な実施形態と同じく、ファイルレベルで実施される。ここで、議論は、ホスト側のファイル内に置かれているものの詳細の方に焦点を当てる。デバイス特定コマンドはファイル内に埋め込まれているので、FAT領域の様なファイルシステム特定データに害を与える術は無い。カードの視点からは、異なる代表的な実施形態は、同様に見え、大きな違いは、情報がホスト側でどのように詰め込まれるかである。具体的なアプリケーションを参照する必要がある場合、第3の代表的な実施形態は、2004年12月21日出願の米国仮特許出願第60/638,804号に呈示されている様な、安全なバスへの安全なリンクの実施形態であり、同出願は、先に参考文献として援用されている。
【0132】
ファイルレベルの実施では、デバイスドライバレベルの実施で生じ得る特権問題の類を克服するだけでなく、特別なコマンドを送る特別なハードウェアを持つことに対して起こり得る必要性も克服することができる。例えば、デバイスドライバレベルの幾つかの場合では、SDカードの安全な領域にアクセスするために特別なコマンドを送らなければならない場合があるが、ファイルレベルの実施では、情報がファイルに詰め込まれているので、最早その必要がない。そのため、ファイルに対する書き込みと読み取りが行える限り、どの様なコマンドセットでも、この実施で送信し受信することができる。
【0133】
先行するセクションの実施形態は、デバイスの入力/出力レベルで作動するカードドライバの実施である。ホスト又はPCアプリケーションとデバイス又はカードドライバの間にオペレーティングシステム(OS)ファイルシステムがある。第3組の実施形態は、OSファイルシステムで作動するファイルI/O実施である。これらの実施形態では、ホストは、ファイルをメモリデバイスに書き込むようにファイルシステムに告げるだけであり、デバイス特定コマンドはここでも埋め込まれている。ファイルのフラッシュメモリへの書き込みの更なる詳細については、2005年2月16日出願の米国特許出願第11/060,249号、第11/060,174号、及び第11/060,248号に記載されており、それら全てを参考文献としてここに援用する。これらの実施形態は、デバイスレベルの実施形態より少し多いファームウェアのオーバーヘッドを必要とするが、数多くの利点を有している。例えば、デバイスレベルでは、アプリケーションが開発される際に、ハードウェアに関する知識を有する必要があるのに対して、ファイルシステムを使うことによって、これは、ハードウェアからも、下部レベルのプロトコルの多くの詳細からも独立したものになる。
【0134】
デバイスレベルの実施形態と同様に、ファイルレベルの実施形態は、ベンダ特定コマンドを、ウインドウズ98/ME/95/DOS及び同様の例に見られる高度SCSIプログラミングインターフェース(ASPI)の様な各ベンダ製品に送るのに用いられる。先に述べたデバイスレベルの実施形態では、使用法は、特定の論理アドレスCPTLBAへの書き込みで作られた。しかしながら、多くのオペレーティングシステムでは、この論理アドレスにアクセスするには、或るアクセス特権が必要である。例えば、或る種のSCSIコマンドは、ユーザーが管理者特権を持っていなければ、ベンダ製品に送ることができない。オペレーティングシステムは、一般的にファイルの書き込みを許容するので、本発明のファイルレベルの実施形態は、メディア特定コマンドをファイルに埋め込み、ファイルをデバイスに書き込み、デバイスへの実際の埋め込みを元に戻すことによって、この特権問題を回避する。ウインドウズオペレーティングシステムの多くのバージョンでは、代表的なCPTLBAを使用しているカードレベルの実施形態は、管理者特権を必要とするのに対して、ファイルの書き込みは、その様な特別なアクセス特権を何ら必要としない。先のように、代表的な実施形態は、メディア特定コマンドを命令のデータ部分に埋め込んだ。
【0135】
オペレーティングシステムのファイルシステムレベルでの実施は、これも、プロトコルに従い、プロトコルを認識するように作られているカードのカードファームウェアによって実施される。シグネチャーは、何れかのLBAへの読み取り/書き込みコマンドによって、検査され、埋め込まれているメディアカード特定コマンドがデータに入っているか否か判定される。この差が、特定アドレスを使用するデバイスのドライバ実施を形成する。他のやり方では、カードから見ると、このセクションのデバイスドライバレベル実施形態と、先のセクションのファイルシステムレベル実施形態との間に殆ど差は無い。
【0136】
先行セクションでのように、ファイルベース実施の代表的な実施形態は、プロトコルを、メディア特定コマンドが埋め込まれる「命令」部分と、コマンドが何らかのデータ転送を伴っていれば、コマンドに関係付けられたデータを保持する「データイン/アウト」部分とに分割する。プロトコルコマンドをカードが受け取ると、ファームウェアは、読み取り又は書き込みオペレーション中に特別なシグネチャーについて検査し、所与のLBAが命令部分であるか否かを判定するが、これは、シグネチャーが常に最初のデータセクターに埋め込まれている実施形態では、プロトコルコマンドの最初のデータセクターで行う必要があるだけである。ホスト側のプログラマーから見ると、クライアントアプリケーションは、命令部分と、恐らくはデータイン/アウト部分とを有する簡単なファイル又は論理セクター(LBA)書き込みオペレーションを発行する。ファームウェアは、コマンドがメディアに対するデータの読み取り又はデータの書き込みの何れかを伴っている場合は、論理対物理マッピングを実行する。ファームウェアは、API命令部分を伝送プロトコルから書き込み又は読み取りとして受け取る際に、それを検出することになる。
【0137】
或る代表的な実施形態では、プロトコルコマンドの命令部分には、シグネチャー、問合せコマンド、ベンダ特定コマンド、及び更新可能フィールドが入っている。ここでは、サイズが、(最も一般的に使用されているデータブロックのサイズである)512バイトの倍数に制限される。代表的な実施形態の命令ページのフォーマットを図18Aに示しており、これは図17Aと非常に良く似ているが、更に詳しい。最初の36バイトは暗号化されず、残りは、サポートされている暗号化アルゴリズムの存在を述べる暗号化/復号情報に従って暗号化/復号される。
【0138】
図18Aに示す様々なフィールドについて述べると、バイト0と1は、API命令ページの候補になり得るLBAを示すのに用いられるシグネチャーバイトである。ファームウェアは、これら2つのバイトが合致するか否か、APIシグネチャーを検査する。以下の例では、バイト0は19であり、バイト1は73である。APIシグネチャーは、ビット2−34に続いており、文字による単一の列である。以下の例では、シグネチャーは「高度プログラミングインターフェース」とする。
【0139】
バイト35は、ファームウェアに、後続の命令ページとデータページが暗号化されているか否かを告げる、暗号化/復号(E/D)情報である。暗号化されていなければ、このフィールドは、API_NO_ENCRYPTIONと設定され、そうでなければ、暗号化名に設定されるので、ファームウェアは、バイト36から始まる単数又は複数の命令ページと、データページを復号及び暗号化することができる。バイト36−39は、ファームウェア作動状態フィールドのフィールドであり、オペレーションの成功又は失敗に基づいて更新される。全てが上手く行けば、API OP SUCCESSと設定され、そうでなければ、エラー値又はAPI OP NO SUCCESSと設定されることになる。そのデフォルト値は、コマンドを発行するときに、0xFFFFFFFFに設定されることが示唆されている。書き込み後に、発呼者は、命令ページを読み取り、要求したオペレーションが成功したか否かを検証することができる。ベンダ識別子フィールド(バイト40−43)を、固有のベンダ識別子として使用してもよい。このフィールドは、ファームウェアも有効なベンダIDを必要とする場合は、ファームウェアに対して自身を識別するために呼び出し環境によって使用することができる。
【0140】
命令ページ数のフィールド(バイト44)は、ファームウェアに命令ページの総数を告げるが、命令ページは、512バイトが限界である。同様に、データページ数のフィールド(バイト45−46)は、ファームウェアに、命令部分に取り付けられているデータイン/アウトページの総数を告げる。データページのサイズは、必ずしもバイトでのデータサイズではなく、場合によっては、データバイトの最後に詰め込みが追加されることもある。例えば、DESは、バイトでのデータサイズが8の倍数でなければならないことを要求する。バイトフィールド(バイト47−50)でのデータサイズは、有効なデータの入っているデータページ内のファームウェアのバイト総数を告げる。メディアから読み取る場合は、このフィールドを、ファームウェアによって、ページ領域内の実際の処理されたバイトサイズで更新しなければならない。データをメディアに書き込むことに関して、これは、データサイズのバイトでの長さである。データが暗号化されている場合、ファームウェアは、先ず、データページの全コンテンツを復号し、次に抽出を行う。バイト51で、ビット0はデータ転送用のフラグであり、目下のコマンドがデータ転送を要求していない場合は「0」に設定され、目下のコマンドがデータ転送を要求している場合は「1」に設定される。
【0141】
バイト51、ビット1と2は、データ転送の方向用のフラグである。数値「00」は、データ転送が目下のコマンドでは入力用であることを示しており、ファームウェアは、書き込み時間中にコマンドを処理し、一旦メディアへ書き込まれたデータページを無効にする。数値「01」は、データ転送が目下のコマンドでは入力用であることを示しており、ファームウェアは、書き込み時間中に、無効にすることなくコマンドを処理する。数値「10」は、データ転送が目下のコマンドでは出力用であることを示している。数値「11」は、留保されている。バイト51、ビット3からバイト52は、メディアカード特定フラグであり、メディアカードの型式に依る。バイト53−63は、将来使用するために予約されているフィールドである。
【0142】
メディアカード問合せコマンドフィールド(バイト64)は、メディアカードの目下の状態と能力を問合せるのに用いられる。既知のサポートには、APIプロトコルにサポートされている、E/Dアルゴリズムにサポートされる、及びAPIプロトコルサポートを使用不能にする、が含まれる。メディアカード問合わせコマンド戻し状態フィールド(バイト65−68)は、メディアカード問合せコマンドの戻し値を保持するのに用いられる。
【0143】
メディアカード特定コマンド長さ(バイト69−70)は、コマンドフィールドが記憶するコマンドバイトの総数を指定し、メディアカードが実行することになる実際のコマンドは、メディアカード特定コマンドに入っている(バイト71−511)。
【0144】
命令ページには、あらゆるデータイン/アウトページが添付されることになる。確立された暗号システムアルゴリズムに基づく発呼者の環境とファームウェアは、コンテンツを暗号化/復号する。データページをメディアに書き込むのが望ましくない場合もあり、その場合は、ファームウェアが、書き込み前にコマンドを処理し、命令ページをメディアだけに書き込んで、ユーザーがそれを読み取り、オペレーションの状態を理解できるようにする。
【0145】
図18B−Fは、実際のコマンドが送られる前に、メディアカードがAPIプロトコルをサポートしているか否かに関して検査するのに用いられるAPIプロトコルのサポートに関する問合せの様な、メディア特定問合せコマンドの幾つかの例を提供している。具体的な手順は、図18Bと図18Cに示されている。メディアにアクセスするのにファイルシステムが用いられる場合、ファイルは、1つの命令ページだけのコンテンツを有するように書き込まれる。図18Bと図18Cの例は、ファイルシステムを通して、どの様にプロトコルに問合せるかを例証している。
【0146】
呼び出し環境はファイル、例えば「myAPI.bin」を開く。プロトコルのサポートを問合せるために、発呼者は、図18Bに示している512バイトをファイルに書き込み、書き込みファイルコマンドを発行する。書き込みファイルコマンドを発行した後で、メディアは、ファイルをメディアに書き込む間又はそれを読み取る間のどちらであっても適切な動作をする。例えば、メディアカードは、書き込む前に命令ページを処理すると仮定する。この場合、以下の動作が行われることになり、即ち、
a)シグネチャーバイトを検証する
b)合致すれば、APIシグネチャーを検証する
c)合致すれば、メディア特定フラグがあればそれを通過する
d)1であるメディアカード問合せコマンド要求を検査する
e)データ転送が無いときは、データフィールドと方向フィールドが0であることを検証する。
f)コマンドを処理し、フィールドを更新し、メディアにファイルを書き込む。
ユーザーがメディアからファイル、myAPI.ファイルを読み取ると、発呼者は、2つのフィールドを検査しなければならず、即ち:(1)ファームウェア作動状態:コマンドオペレーションが成功裏に完了していれば、このフィールドは、API_OP_SUCCESSで更新され、失敗していれば、或るエラー値で更新される、(2)メディアカード問合せコマンド戻し状態は、コマンドオペレーションが成功裏に完了したときにだけ検査されることになる。プロトコルがサポートされていれば、フィールドは1で更新され、サポートされていなければ0で更新される。図18Cを参照のこと。
プロトコルがサポートされていなければ、又はカードがこのプロトコルサポートに対して使用不能になっていれば、これら2つの更新可能なフィールドは、最初のデフォルト値0xFFFFFFFFを維持することになる。
【0147】
メディア特定問合せコマンドの第2例は、どの暗号化/復号アルゴリズムがサポートされているかを判定するための問合せであり、この問合せ前に、APIプロトコルがサポートされているか否か、および稼働中であるか否か、メディアカードを検査しなければならない。これは、図18Dと図18Eを使って示されている。図18Bと図18Cに関して論じたAPIプロトコルのサポートに関する問合せと同様に、ファイル型式システムを使ってメディアにアクセスするときには、1つの命令ページだけのコンテンツを有するファイルが書き込まれることになる。呼び出し環境はファイル、例えば以前と同じ例を使用するとmyAPI.bin、を書き込むことになる。
【0148】
呼び出し環境はファイル、例えばmyAPI.binを書き込むことになる。このコマンドのサポートについて問合せるために、ユーザーは、図18Dに示している512バイトを組み込んで、書き込みファイルコマンドを発行することになる。メディアカードは書き込む前に命令ページを処理すると仮定すると、代表的な動作のセットは以下の通りで、
a)シグネチャーバイトを検証する
b)合致すれば、APIシグネチャーを検証する
c)合致すれば、メディア特定フラグがあれば、それを通過する
d)メディアカード問合せコマンド要求、それは2である、を検査する
e)データ転送が無いときは、データフィールドと方向フィールドが0であることを検証する。
f)コマンドを処理し、フィールドを更新し、メディアにファイルを書き込む。
ユーザーがメディアからファイル、myAPI.binを読み取ると、発呼者は、2つのフィールドを検査することになり、即ち:(1)ファームウェア作動状態:コマンドオペレーションが成功裏に完了していれば、このフィールドは、API OP SUCCESSで更新され、失敗していれば、或るエラー値で更新される、(2)メディアカード問合せコマンド戻し状態は、コマンドオペレーションが成功裏に完了したときにだけ検査されることになる。このフィールドは、32ビットの整数を戻し、0は、何らの暗号化/復号アルゴリズムもサポートされていないことを意味する。そうでなければ、各所定の暗号化/復号アルゴリズム毎に各ビットが設定されることになる。例えば、DESがビット1、3DESがビット3、AESがビット32にあるとすれば、戻し値は、
MSB 10000000 00000000 00000000 00001010 LSB となる。
結果を図18Eに示している。アルゴリズムの最大数は、この代表的な実施形態では32であることに注目されたい。戻し値に基づいて、サポートされているE/Dアルゴリズムの型式を判定できるので、同じ所定のアルゴリズム名をバイト35に設定することによって、命令ページ(バイト36から開始している)とデータページを暗号化することができる。バイト35は、何れの所与の時点でも設定される1ビットだけを有することに注目されたい。2ビット以上が設定されれば、それは失敗になる。
【0149】
メディア特定問合せコマンドの別の例は、メディアカードがAPIプロトコルをサポートしているか否かを判定するための問い合わせであり、サポートしていれば、それを使用不能にする。どの暗号化/復号アルゴリズムがサポートされているかを判定するための問合せと同様に、ファイルが開かれ、このファイルのコンテンツは1つの命令ページだけを有することになる。呼び出し環境はファイル、例えばここでもmyAPI.bin、を開くことになる。このコマンドのサポートについて問合せるために、ユーザーは、図18Fに示されている512バイトをファイルに組み込んで、書き込みファイルコマンドを発行することができる。
【0150】
ファイルを書き込んだ後、ユーザーは、フィールドを読み取り、先ず、(1)ファームウェア作動状態を検査することによって、オペレーションが成功裏に完了しているか否かを検証し、コマンドオペレーションが成功裏に完了していれば、このフィールドは0で更新され、失敗していれば1で更新され、(2)メディアカード問合せコマンド戻し状態は、コマンドオペレーションが成功裏に完了しているときにだけ検査される。プロトコルが使用不能であれば1になり、失敗の場合は0になる。
【0151】
図18Gと図18Hは、ファイルシステムベースのメディア特定読み取り及び書き込みコマンドの具体的な例を示している。ファームウェアコマンドをメディアカードに発行する前に、カードは、それがAPIプロトコルをサポートしているか否かを調べるために検査される。先のプロトコルと同様に、メディアにアクセスするのにファイルシステムが用いられる場合は、ファイルは、1つ又は複数の命令ページとあらゆる関係付けられたデータのページのコンテンツによって開かれる。メディア特定書き込みコマンドの例を図18Gに示している。
【0152】
より具体的には、発呼者がコマンド(例えば、SDカードコマンドセットの「D5」)を発行して、データページを取り、それを隠されている領域に書き込みたいと思っているとしよう。呼び出し環境がファイルを開き、ユーザーは、図18Gに示しているデータページを準備することになる。バイト00−34は、図18A−図18Fに示している通りで、この例の命令のバイト35は、暗号化が使用されていないことを示している。バイト36−39は、ここでも、ファームウェアの作動状態を示しており、イタリック体(ここ及び前の両方)は、フィールドが更新可能なファームウェアであることを示しており、ベンダ又はメディア識別子(本例は、ベンダ識別子を「SNDK」として使用する)がバイト40−43内で続いている。埋め込まれたコマンドは、このメディア/ベンダに特定のものである。バイト44−50は、ここでは示されているページ(NIP=1)だけの命令ページ数、本例ではこれも1(NDP=1)のデータページ数、及びバイト数として、ここでは1セクターの512バイト(DSIB=512)とされている、指定されているデータサイズ、を示している。命令のバイト51−68は、特定のコマンドに必要な、先に述べた命令情報を提供する。
【0153】
実際の埋め込まれているコマンドは、(バイトでの)長さがバイト69−70に指定されており、この場合は、1つのバイト71であり、そこに予約されているか、又は安全な領域への書き込みを示す代表的な「D5」命令が含まれている。メディア特定命令に割り当てられる残りの領域(バイト72−511)は、完全なセクターにするためにゼロを詰められている。実際の特定のコマンド用のデータの(ここでの)512バイトは、次のセクターに続いている。
【0154】
図18Gでは、データフィールド(DATA=1)は、この命令に「入力」が入っており、方向フィールド(方向=00)が、ファームウェアに、データを処理してページをメディアに書き込むことを告げていることに注目されたい。ファイルシステムは、データページをメディアに書き込むので(ファイルシステムで見ると1024バイト、最初の512は埋め込まれたコマンド用)、ファームウェアは、必要に応じて、データページに0又はFFを詰める。
【0155】
発呼者は、メディアカードからファイルを読み取り、ファームウェア作動状態フィールドを検査することによって、オペレーションが成功したか否かを検証する。オペレーションが成功裏に完了していれば、このフィールドは、API OP SUCCESSで更新され、成功していなければ、或るエラー値又はAPI OP NO SUCCESSで更新される。方向が00だったので、データページは0又はFFとなることに注目されたい。
【0156】
メディアカードは書き込む前に命令ページを処理すると仮定すると、代表的な動作のセットは以下の通りで、
a)シグネチャーバイトを検証する
b)シグネチャーが合致すれば、APIシグネチャーを検証する
c)命令ページ(バイト36から)が暗号化されているか否か検査する
d)暗号化されていれば、命令ページ(バイト36から)とデータページを復号する
e)ベンダIDシグネチャーを検証する。
f)ベンダIDが合致すれば、メディア特定フラグ(もしあれば)を通過する
g)方向とデータフィールドを検査する
h)実際の埋め込まれているメディア特定コマンドを処理する
i)命令ページのファームウェア作動状態フィールドを更新し、(要求されれば)バイト36の後の命令ページを暗号化し、それをメディアに書き込む。方向が00なので、必要に応じてデータページを0又はFFと書き込む。
【0157】
メディア特定読み取りコマンドは、数多くの方法で実施することができ、その内の幾つかについて、以下のセクションで更に論じる。ファイルシステムベースのメディア特定読み取りコマンドの実施は、構造が図18Gの書き込み構造と似ているが、ここで図18Hに関して説明する。
【0158】
メディアから読み取れる様に、メディア特定コマンドはD6で、方向は10である。更に、用いられているコマンド及び確立されているプロトコルに基づいて、コンテンツを修正する柔軟性がある。例えば、カードには、このファイルを書き込むよう告げることができ、ファイルは、書き込む前にコンテンツを暗号化するようファームウェアに告げる特別なコマンドを有している。従って、書き込まれたコンテンツは、書き込まれる前に、他の形態に変換してもよい。同じことを読み取りオペレーションにも適用することができる。
【0159】
図18Hは、発呼者がコマンド(例えば、SDカードコマンドセットの「D6」)を発行し、隠されている領域からのデータセクターを読み取り、それをデータページの下に置きたいと思っている場合を示している。呼び出し環境はファイルを開くことになり、ユーザーは、図18Hに示しているようなデータページを準備し、ベンダ識別子は、ここでも「SNDK」とされている。
【0160】
データフィールドは、これが「出力」であると表示するので、データページは更新され、方向フィールドは、ファームウェアに、読み取り中にデータを処理するよう告げる。ファームウェアにとってもう1つの可能性は、コマンドを処理し、データページを更新し、それをメディアに書き込むことである。従って、ファームウェアは、1024バイトをメディアに書き込む。ファームウェアは、ファイルを読み取ると、これが命令ページであることを検出し、次に、コマンドを読み取り、データフィールドを適切に更新する。発呼者は、メディアカードからファイルを読み取ることによって、オペレーションが成功したか否かを検証する。ファイルが読み取られると、発呼者は、ファームウェア作動状態のフィールドを検査することができる。コマンドが成功裏に完了したオペレーションになっていれば、このフィールドは、API OP SUCCESSで更新され、成功していなければ、API OP NO SUCCESSの様な或るエラー値で更新される。読み取られたデータの量も、DSIBフィールドを検査し、それが512に更新されているか否かを調べることによって検証することができる。
【0161】
以上、本発明の様々な態様について、具体的な実施形態について述べてきたが、本発明は、特許請求の範囲に述べる全ての範囲内で保護されるものと理解されたい。
【図面の簡単な説明】
【0162】
【図1】ホストカードシステムの層の概略図である。
【図2】ホストカードシステムのブロック図である。
【図3】カードが、リーダー又はハードウェアアダプターを使って別のホストと通信するシステムのブロック図である。
【図4】図3のシステムでデータ及びコマンドを転送するための先行技術の技法の概略図である。
【図5】本発明の代表的な実施形態による、アプリケーション特定コマンドがどの様に埋め込まれるかを示している。
【図6】ファームウェア層の関係に関する代表的な構造を示すブロック図である。
【図7】デバイスのドライバ層の概略図である。
【図8】パーティション状態コマンドへの応答に含まれている情報を示している。
【図9】引数データセクターの代表的なフォーマットを示している。
【図10A】ホスト側の通信の流れを示している。
【図10B】ホスト側の通信の流れを示している。
【図11A】ホストアプリケーション−デバイスアプリケーションプロトコルを示している。
【図11B】ホストアプリケーション−デバイスアプリケーションプロトコルを示している。
【図11C】ホストアプリケーション−デバイスアプリケーションプロトコルを示している。
【図12】隠しパーティションアプリケーションのコマンドの状態マシン図である。
【図13A】隠しパーティションプロトコルの一組のコマンドのプロセスの流れを示している。
【図13B】隠しパーティションプロトコルの一組のコマンドのプロセスの流れを示している。
【図13C】隠しパーティションプロトコルの一組のコマンドのプロセスの流れを示している。
【図13D】隠しパーティションプロトコルの一組のコマンドのプロセスの流れを示している。
【図14】図4の簡素化バージョンである。
【図15】本発明の態様による、図3のシステムでデータとコマンドを転送するための技法の概略図である。
【図16】特定の実施形態による、図15の詳細を示す。
【図17A】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17B】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17C】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17D】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17E】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17F】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17G】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17H】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17I】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17J】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17K】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図17L】多数のコマンドに対する、図16の実施形態の構造の詳細を示す。
【図18A】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18B】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18C】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18D】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18E】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18F】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18G】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【図18H】ファイルレベルの実施形態に関する、図17A−図17Lと同様の図である。
【特許請求の範囲】
【請求項1】
メモリカードと、データ及びコマンドを前記カードと交換することのできるホストと、を備えているシステムを作動させる方法であって、前記ホストと前記カードの間のデータ及びコマンドの交換は、第1プロトコルの第1コマンドセットを前記伝送プロセスの或る段階で使用し、前記ホストと前記カードは、第2プロトコルの第2コマンドセットを使用するアプリケーションを含み、前記方法は、
第1プロトコルからの第1命令に、前記第1コマンドセット内に対応するコマンドがない、前記第2コマンドセットからのコマンドを埋め込む段階と、
前記第1命令を前記ホストから前記メモリカードに伝送する段階と、
前記カード内で前記埋め込まれたコマンドを抽出する段階と、
を含む方法。
【請求項2】
第2プロトコルの第2コマンドセットを使用する前記アプリケーションは、複数のアプリケーションの中の1つであり、且つ、前記第2プロトコルは、複数の対応する第2プロトコルの中の特定の1つであり、前記複数のアプリケーションの中の複数のアプリケーションは同時に作動させることができる、請求項1に記載の方法。
【請求項3】
前記埋め込む段階は、前記ホストによって、前記ファイルシステムレベルで実施される、請求項1に記載の方法。
【請求項4】
前記コマンドは、データを、前記ホストから前記カードに転送するためのものであり、前記データは、前記第1命令に対応するファイルのデータ部分に置かれ、前記方法は、更に、前記ファイルをセグメント化して保持するのに十分な前記カード上の論理アドレスを判定する段階を更に含んでいる、請求項3に記載の方法。
【請求項5】
前記コマンドが、前記カードから前記ホストにデータを転送するためのものであるか否かを判定する段階と、
前記コマンドが、前記カードから前記ホストにデータを転送するためのものであるという判定を受けて、前記転送用のフラグを設定する段階と、
前記カードから、前記コマンドに関係付けられたデータを転送する段階と、
を更に含んでいる、請求項1に記載の方法。
【請求項6】
前記転送されたデータは、前記コマンドに関係付けられた前記データの全てよりも少ない、請求項5に記載の方法。
【請求項7】
第2コマンドに応答して、前記カードから、前記コマンドに関係付けられた前記データを再転送する段階を更に含んでいる、請求項5に記載の方法。
【請求項8】
前記埋め込む段階は、前記ホストによって、カードドライバレベルで実施される、請求項1に記載の方法。
【請求項9】
前記システムは、ハードウェアアダプターを更に備え、それを通して前記ホストとカードが前記データとコマンドを交換するようになっており、前記ホストとハードウェアアダプターは、前記第1プロトコルによって通信し、前記第1命令を前記ホストから前記メモリカードに伝送する前記段階が、
前記第1命令を前記ホストから前記ハードウェアアダプターに伝送する段階と、
前記ハードウェアアダプター内で、前記第1命令を、前記第2プロトコルの対応する命令に翻訳する段階と、
前記対応する命令を、前記ハードウェアアダプターから前記メモリカードに伝送する段階と、
を含んでいる、請求項1に記載の方法。
【請求項10】
前記第1プロトコルからの前記命令が、前記第1プロトコルからのコマンドとデータ部分を含んでいるコマンド部分を有し、前記埋め込まれているコマンドは、前記データ部分に埋め込まれている、請求項1に記載の方法。
【請求項11】
前記データ部分は、前記埋め込まれているコマンドに関係付けられたデータを更に含んでいる、請求項10に記載の方法。
【請求項12】
前記方法は、前記データ部分に含まれている、前記埋め込まれているコマンドに関係付けられたデータが、前記埋め込まれているコマンドに関係付けられたデータの全てであるか否かを判定する段階を更に含んでいる、請求項11に記載の方法。
【請求項13】
前記方法は、前記データ部分に含まれている、前記埋め込まれているコマンドに関係付けられた前記データが、前記埋め込まれているコマンドに関係付けられた前記データの全てではないとする判定を受けて、フラグを、前記埋め込まれているコマンドに関係付けられた追加データを受け取るための設定状態のままに残しておく段階を更に含んでいる、請求項12に記載の方法。
【請求項14】
前記カードで、前記埋め込まれているコマンドを抽出する前記段階は、
前記データ部分がシグネチャーを含んでいることを判定する段階と、
前記命令内の前記シグネチャーの確認に応じて、前記埋め込まれているコマンドを前記データ部分から抽出する段階と、を含んでいる、請求項10に記載の方法。
【請求項15】
前記対応する命令は、前記第2プロトコルからのコマンドを含んでいるコマンド部分と、データ部分と、を有しており、前記埋め込まれているコマンドは、前記データ部分に埋め込まれている、請求項10に記載の方法。
【請求項16】
前記第1プロトコルからの前記コマンドは、所定の論理アドレスへのものである、請求項1に記載の方法。
【請求項17】
前記伝送された、前記カード内の対応する命令を受け取った後で、前記カード内で前記埋め込まれているコマンドを抽出する前に、
前記対応するコマンドが前記所定の論理アドレスへのものであることを判定する段階と、
前記対応するコマンドが前記所定の論理アドレスへのものであるとする判定に対応して、前記命令内のシグネチャーを確認する段階であって、前記埋め込まれているコマンドは、前記シグネチャーの確認に対応して抽出される、確認する段階と、を更に含んでいる、請求項16に記載の方法。
【請求項18】
前記対応するコマンドが前記所定の論理アドレスへのものであることを判定する前記段階と、前記命令内のシグネチャーを確認する前記段階と、前記埋め込まれているコマンドを抽出する段階は、前記カードのファームウェアによって実行される、請求項17に記載の方法。
【請求項19】
前記埋め込まれているコマンドを実行する段階を更に含んでいる、請求項1に記載の方法。
【請求項20】
前記第2プロトコルはSDプロトコルである、請求項1に記載の方法。
【請求項21】
前記埋め込まれているコマンドは、安全なデータアクセスである、請求項20に記載の方法。
【請求項22】
前記第2プロトコルは、MMCプロトコルである、請求項1に記載の方法。
【請求項23】
前記第2プロトコルは、ATAプロトコルである、請求項1に記載の方法。
【請求項24】
前記第1プロトコルは、SCSIプロトコルである、請求項1に記載の方法。
【請求項25】
前記コマンドは、前記ホストと前記カードの間でデータを転送するためのものであり、前記データは、前記ホスト内にキャッシュされていない、請求項1に記載の方法。
【請求項26】
メモリカードと、データ及びコマンドを前記カードと交換することができるホストと、を備えているシステムを作動させる方法であって、前記ホストと前記カードの間のデータ及びコマンドの交換は、第1プロトコルの第1コマンドセットを伝送プロセスの或る段階で使用し、前記ホストと前記カードは、第2プロトコルの第2コマンドセットを使用するアプリケーションを含み、前記方法は、
前記第1プロトコルからの第1命令に、前記第2コマンドセットからのコマンドと、シグネチャーを埋め込む段階であって、前記第1命令は、コマンド部分とデータ部分を含んでおり、前記シグネチャーと、前記第2コマンドセットからの前記コマンドは、前記データ部分に埋め込まれている、埋め込む段階と、
前記ホストからの前記第1命令を前記メモリカードに伝送する段階と、
前記第1命令の前記データ部分に前記シグネチャーが入っているか否か判定する段階と、
前記第1命令に前記シグネチャーが入っていること対応して、前記第2コマンドセットからの前記コマンドを、前記第1命令の前記データ部分から抽出する段階と、を含んでいる方法。
【請求項27】
第2プロトコルの第2コマンドセットを使用する前記アプリケーションは、複数のアプリケーションの中の1つであり、且つ、前記第2プロトコルは、複数の対応する第2プロトコルの中の特定の1つであり、前記複数のアプリケーションの中の複数のアプリケーションは、同時に作動させることができる、請求項26に記載の方法。
【請求項28】
前記データ部分は、更に、前記第2コマンドセットからの前記コマンドに関係付けられたデータを含んでいる、請求項26に記載の方法。
【請求項29】
前記方法は、前記データ部分に含まれている、前記第2コマンドセットからの前記コマンドに関係付けられた前記データが、前記第2コマンドセットからの前記コマンドに関係付けられた前記データの全てであるか否かを判定する段階を更に含んでいる、請求項28に記載の方法。
【請求項30】
前記方法は、前記データ部分に含まれている、前記第2コマンドセットからの前記コマンドに関係付けられた前記データが、前記第2コマンドセットからの前記コマンドに関係付けられた前記データの全てではないとする判定を受けて、フラグを、前記第2コマンドセットからの前記コマンドに関係付けられた追加データを受け取るための設定状態のままに残しておく段階を更に含んでいる、請求項4に記載の方法。
【請求項31】
前記コマンドは、データを前記カードから前記ホストへ転送するためのものであるか否かを判定する段階と、
前記コマンドが、データを前記カードから前記ホストへ転送するためものであるとする判定を受けて、前記転送用にフラグを設定する段階と、
前記カードから、前記コマンドに関係付けられたデータを転送する段階と、を更に含んでいる、請求項26に記載の方法。
【請求項32】
前記転送されたデータは、前記コマンドに関係付けられた前記データの全てよりも少ない、請求項31に記載の方法。
【請求項33】
第2コマンドに応答して、前記カードから、前記コマンドに関係付けられた前記データを再転送する段階を更に含んでいる、請求項31に記載の方法。
【請求項34】
前記第1命令は書き込みである、請求項26に記載の方法。
【請求項35】
前記第2コマンドセットからの前記コマンドは、読み取りである、請求項26に記載の方法。
【請求項36】
前記シグネチャーは、前記データ部分の所定のセクションに入っている、請求項26に記載の方法。
【請求項37】
前記命令は、第1論理アドレスでデータにアクセスするためのものであり、前記命令の前記データ部分にシグネチャーが入っているか否かを判定する前記段階は、所定の論理アドレスに対応している前記第1論理アドレスに応じるものである、請求項26に記載の方法。
【請求項38】
前記埋め込む段階は、前記ホストによって、前記ファイルドライバレベルで実施される、請求項26に記載の方法。
【請求項39】
前記コマンドは、データを、前記ホストから前記カードに転送するためのものであり、前記データは、前記第1命令に対応するファイルのデータ部分に置かれており、前記方法は、更に、前記カード上の論理アドレスが前記ファイルをセグメント化して保持するのに十分であるかを判定する段階を含んでいる、請求項38に記載の方法。
【請求項40】
前記埋め込む段階は、前記ホストによって、前記カードドライバレベルで実施される、請求項26に記載の方法。
【請求項41】
前記システムは、ハードウェアアダプターを更に備え、前記ハードウェアアダプターを通して前記ホストとカードが前記データとコマンドを交換し、前記ホストとハードウェアアダプターは、前記第1プロトコルによって通信し、前記第1命令を前記ホストから前記メモリカードに伝送する前記段階は、
前記第1命令を前記ホストから前記ハードウェアアダプターに伝送する段階と、
前記ハードウェアアダプター内で、前記第1命令を、前記第2プロトコルの対応する命令に翻訳する段階と、
前記対応する命令を、前記ハードウェアアダプターから前記メモリカードに伝送する段階と、を含んでいる、請求項26に記載の方法。
【請求項42】
前記第1プロトコルからの前記命令は、前記第1プロトコルからのコマンドを含んでいるコマンド部分と、データ部分と、を備えており、前記埋め込まれているコマンドは、前記データ部分に埋め込まれている、請求項26に記載の方法。
【請求項43】
前記第1プロトコルからの前記コマンドは、所定の論理アドレスへのものである、請求項26に記載の方法。
【請求項44】
前記埋め込まれているコマンドを実行する段階を更に含んでいる、請求項26に記載の方法。
【請求項45】
前記第2プロトコルはSDプロトコルである、請求項26に記載の方法。
【請求項46】
前記埋め込まれているコマンドは安全なデータアクセスである、請求項45に記載の方法。
【請求項47】
前記第2プロトコルはMMCプロトコルである、請求項26に記載の方法。
【請求項48】
前記第2プロトコルはATAプロトコルである、請求項26に記載の方法。
【請求項49】
前記第1プロトコルはSCSIプロトコルである、請求項26に記載の方法。
【請求項50】
前記コマンドは、前記ホストと前記カードの間でデータを転送するためのものであり、前記データは、前記ホスト内にキャッシュされない、請求項26に記載の方法。
【請求項51】
不揮発性メモリカードを作動させる方法において、
コマンド部分とデータ部分を含んでいる、命令を受け取る段階と、
前記命令の前記データ部分にシグネチャーが入っているか否かを判定する段階と、
前記命令に前記シグネチャーが入っていることに対応して、前記命令の前記データ部分からコマンドを抽出する段階と、を含む方法。
【請求項52】
前記コマンドは、前記カードからデータを転送するためのものであるか否かを判定する段階と、
前記コマンドが前記カードからデータを転送するためのものであるという判定に対応して、前記転送用のフラグを設定する段階と、
前記カードから、前記コマンドに関係付けられたデータを転送する段階と、を更に含んでいる、請求項51に記載の方法。
【請求項53】
第2コマンドに応えて、前記カードから前記コマンドに関係付けられた前記データを再転送する段階を更に含んでいる、請求項52に記載の方法。
【請求項54】
前記データ部分は、前記抽出されたコマンドに関係付けられたデータを更に含んでいる、請求項51に記載の方法。
【請求項55】
前記方法は、前記データ部分に含まれている、前記抽出されたコマンドに関係付けられた前記データが、前記抽出されたコマンドに関係付けられた前記データの全てであるか否かを判定する段階を更に含んでいる、請求項54に記載の方法。
【請求項56】
前記方法は、前記データ部分に含まれている、前記抽出されたコマンドに関係付けられた前記データが、前記抽出されたコマンドに関係付けられた前記データの全てではないという判定に対応して、フラグを、前記抽出されたコマンドに関係付けられた追加データの受け取りのための設定状態のままに残しておく段階を更に含んでいる、請求項55に記載の方法。
【請求項57】
前記シグネチャーが、前記データ部分の所定のセクションに入っている、請求項51に記載の方法。
【請求項58】
前記命令は、第1コマンドセットを有する第1プロトコル内にあり、前記抽出されたコマンドは、第2プロトコルの第2コマンドセットからであり、前記第1コマンドセット内に対応するコマンドを有していない、請求項51に記載の方法。
【請求項59】
前記第2プロトコルは、複数のアプリケーションの中の1つのためのものであり、前記第2プロトコルは、複数の対応するアプリケーションプロトコルの中の特定の1つであり、前記複数のアプリケーションの中の複数のアプリケーションは、同時に作動させることができる、請求項58に記載の方法。
【請求項60】
前記命令は、第1論理アドレスでデータにアクセスするためのものであり、前記命令の前記データ部分にシグネチャーが入っているか否かを判定する前記段階は、所定の論理アドレスに対応している前記第1論理アドレスに応じるものである、請求項51に記載の方法。
【請求項61】
前記命令にシグネチャーが入っていると判定する前記段階と、前記命令の前記データ部分からコマンドを抽出する段階は、前記カードのファームウェアによって実行される、請求項51に記載の方法。
【請求項62】
前記抽出されたコマンドを実行する段階を更に含んでいる、請求項51に記載の方法。
【請求項63】
前記命令はSDプロトコルにある、請求項51に記載の方法。
【請求項64】
前記抽出されたコマンドは安全なデータアクセスである、請求項51に記載の方法。
【請求項65】
前記命令はMMCプロトコルにある、請求項51に記載の方法。
【請求項66】
前記命令はATAプロトコルにある、請求項51に記載の方法。
【請求項67】
第1プロトコルからのコマンドを伝送する方法において、
第2プロトコルからの、関係付けられたデータ部分を受け入れるコマンドを含んでいる、命令を形成する段階と、
前記命令の前記関係付けられたデータ部分に、前記第1プロトコルからの前記コマンドと、前記命令に前記第1プロトコルからのコマンドが入っていることを示すシグネチャーと、を置く段階と、
前記命令を伝送する段階と、を含む方法。
【請求項68】
前記第1プロトコルは、複数のアプリケーションの中の1つのためのものであり、前記第1プロトコルは、複数の対応するアプリケーションプロトコルの中の特定の1つであり、前記複数のアプリケーションの中の複数のアプリケーションは、同時に作動させることができる、請求項67に記載の方法。
【請求項69】
前記第1プロトコルからの前記コマンドに関係付けられたデータを、前記関係付けられたデータ部分に置く段階を更に含んでいる、請求項67に記載の方法。
【請求項70】
前記方法は、前記データ部分に含まれている、前記第1プロトコルからの前記コマンドに関係付けられた前記データが、前記第1プロトコルからの前記コマンドに関係付けられた前記データの全てであるか否かを判定する段階を更に含んでいる、請求項69に記載の方法。
【請求項71】
前記方法は、前記データ部分に含まれている、前記第1プロトコルからの前記コマンドに関係付けられた前記データが、前記第1プロトコルからの前記コマンドに関係付けられた前記データの全てではないという判定に対応して、フラグを、前記第1プロトコルからのコマンドに関係付けられた追加データの受け取りのための設定状態のままに残しておく段階を更に含んでいる、請求項70に記載の方法。
【請求項72】
前記第2プロトコルからの前記命令は、書き込みである、請求項67に記載の方法。
【請求項73】
前記第1プロトコルからの前記コマンドは、読み取りである、請求項67に記載の方法。
【請求項74】
前記シグネチャーは、前記関係付けられたデータ部分の所定のセクションに置かれている、請求項67に記載の方法。
【請求項75】
前記埋め込む段階は、前記ホストによって、前記ファイルドライバレベルで実施される、請求項67に記載の方法。
【請求項76】
前記関係付けられたデータ部分は、ファイルの一部として形成される、請求項67に記載の方法。
【請求項77】
前記第2プロトコルからの前記命令は、所定の論理アドレスに伝送される、請求項67に記載の方法。
【請求項78】
前記第1プロトコルからの前記コマンドは、データを転送するためのものであり、前記データは、前記伝送装置内にキャッシュされない、請求項67に記載の方法。
【請求項79】
メモリカードと、データ及びコマンドを前記カードと交換することのできるホストと、を備えているシステムを作動させる方法であって、前記ホストと前記カードの間のデータ及びコマンドの交換は、第1プロトコルの第1コマンドセットを前記伝送プロセスの或る段階で使用し、前記ホストと前記カードは、第2プロトコルの第2コマンドセットを使用するアプリケーションを含み前記方法は、
第1プロトコルからの第1命令に、前記第2コマンドセットからのコマンドを埋め込む段階と、
前記第1命令を前記ホストから前記メモリカードの第1論理アドレスに伝送する段階と、
前記埋め込まれているコマンドが、データを前記カードから前記ホストへ転送するためのものであるか否かを判定する段階と、
その後、第2命令を前記ホストから前記メモリカードに伝送する段階と、
前記埋め込まれているコマンドが、データを前記カードから前記ホストへ転送するためのものであるという判定に応えて、前記第2命令が、前記メモリカードの前記第1論理アドレスへのものであるか否かを判定する段階と、
前記第2命令が、前記メモリカードの前記第1論理アドレスへのものであるということに対応して、データを前記カードから前記ホストへ転送する段階と、を含む方法。
【請求項80】
前記第1命令は、書き込みである、請求項79に記載の方法。
【請求項81】
前記第2命令からの前記コマンドは、読み取りである、請求項79に記載の方法。
【請求項82】
前記シグネチャーは、前記第1命令の所定のセクションに入っている、請求項79に記載の方法。
【請求項83】
前記埋め込む段階は、前記ホストによって、前記ファイルドライバレベルで実施される、請求項79に記載の方法。
【請求項84】
前記コマンドは、前記ホストと前記カードの間でデータを転送するためのものであり、前記データは、前記ホスト内にキャッシュされていない、請求項79に記載の方法。
【請求項85】
不揮発性メモリと、
第1プロトコルに従って前記カードが接続されているホストと命令を交換するためのフロント層であって、前記第1層は、前記第1プロトコルの入ってくる命令のデータ部分にシグネチャーが入っているか否かを判定し、前記シグネチャーが無いとする判定に対応して、前記第1プロトコルの前記命令に従って前記メモリにアクセスする、フロント層と、
アプリケーション層であって、前記第1プロトコルの入ってくる命令にシグネチャーが入っているとする判定に対応して、前記入ってくる命令は、前記フロント層から前記アプリケーションへ転送され、第2プロトコルの命令が、前記入ってくる命令の前記データ部分から抽出され、前記第2プロトコルの前記命令に従って前記メモリにアクセスする、アプリケーション層と、を備えているメモリカード構造。
【請求項86】
前記シグネチャーは、前記データ部分の所定のセクションに入っている、請求項85に記載のメモリカード構造。
【請求項87】
前記命令は、第1コマンドセットを有する第1プロトコルにあり、前記抽出されたコマンドは、第2プロトコルの第2コマンドセットからであり、前記第1コマンドセット内に対応するコマンドを有していない、請求項85に記載のメモリカード構造。
【請求項88】
前記命令は、第1論理アドレスでデータにアクセスするためのものであり、前記命令の前記データ部分にシグネチャーが入っているか否かの前記判定は、所定の論理アドレスに対応している前記第1論理アドレスに応じるものである、請求項85に記載のメモリカード構造。
【請求項89】
前記フロント層と前記アプリケーション層は、ファームウェアで実施される、請求項85に記載のメモリカード構造。
【請求項90】
前記メモリカード構造は、複数の前記命令を同時に処理することができる、請求項85に記載のメモリカード構造。
【請求項91】
前記アプリケーション層は、複数のアプリケーションを含んでおり、同時に処理される前記複数の命令は、前記アプリケーションの内の2つ以上からのものである、請求項90に記載のメモリカード構造。
【請求項92】
前記入ってくる命令が、前記カードからデータを転送するためのものであるという判定に対応して、前記アプリケーション層は、転送フラグを設定し、前記入ってくる命令に関係付けられたデータを、前記カードから転送する、請求項85に記載のメモリカード構造。
【請求項93】
2番目に入ってくる命令に対応して、前記入ってくる命令に関係付けられた前記データを、前記カードから再転送する、請求項92に記載のメモリカード構造。
【請求項94】
前記アプリケーション層は、前記データ部分が、前記第2プロトコルの前記命令に関係付けられたデータを更に含んでいるか否かを判定する、請求項85に記載のメモリカード構造。
【請求項95】
前記アプリケーション層は、前記データ部分に含まれている、前記第2プロトコルの前記命令に関係付けられた前記データが、前記第2プロトコルの前記命令に関係付けられたデータの全てであるか否かを判定する、請求項94に記載メモリカード構造。
【請求項96】
前記データ部分に含まれている、前記第2プロトコルの前記命令に関係付けられた前記データが、前記第2プロトコルの前記命令に関係付けられたデータの全てではないという判定に対応して、前記アプリケーション層は、フラグを、前記第2プロトコルの前記命令に関係付けられた追加データの前記受け取りのために設定された状態のままに残しておく、請求項95に記載のメモリカード構造。
【請求項97】
前記転送されたデータは、前記コマンドに関係付けられた前記データの全てよりも少ない、請求項51に記載の方法。
【請求項1】
メモリカードと、データ及びコマンドを前記カードと交換することのできるホストと、を備えているシステムを作動させる方法であって、前記ホストと前記カードの間のデータ及びコマンドの交換は、第1プロトコルの第1コマンドセットを前記伝送プロセスの或る段階で使用し、前記ホストと前記カードは、第2プロトコルの第2コマンドセットを使用するアプリケーションを含み、前記方法は、
第1プロトコルからの第1命令に、前記第1コマンドセット内に対応するコマンドがない、前記第2コマンドセットからのコマンドを埋め込む段階と、
前記第1命令を前記ホストから前記メモリカードに伝送する段階と、
前記カード内で前記埋め込まれたコマンドを抽出する段階と、
を含む方法。
【請求項2】
第2プロトコルの第2コマンドセットを使用する前記アプリケーションは、複数のアプリケーションの中の1つであり、且つ、前記第2プロトコルは、複数の対応する第2プロトコルの中の特定の1つであり、前記複数のアプリケーションの中の複数のアプリケーションは同時に作動させることができる、請求項1に記載の方法。
【請求項3】
前記埋め込む段階は、前記ホストによって、前記ファイルシステムレベルで実施される、請求項1に記載の方法。
【請求項4】
前記コマンドは、データを、前記ホストから前記カードに転送するためのものであり、前記データは、前記第1命令に対応するファイルのデータ部分に置かれ、前記方法は、更に、前記ファイルをセグメント化して保持するのに十分な前記カード上の論理アドレスを判定する段階を更に含んでいる、請求項3に記載の方法。
【請求項5】
前記コマンドが、前記カードから前記ホストにデータを転送するためのものであるか否かを判定する段階と、
前記コマンドが、前記カードから前記ホストにデータを転送するためのものであるという判定を受けて、前記転送用のフラグを設定する段階と、
前記カードから、前記コマンドに関係付けられたデータを転送する段階と、
を更に含んでいる、請求項1に記載の方法。
【請求項6】
前記転送されたデータは、前記コマンドに関係付けられた前記データの全てよりも少ない、請求項5に記載の方法。
【請求項7】
第2コマンドに応答して、前記カードから、前記コマンドに関係付けられた前記データを再転送する段階を更に含んでいる、請求項5に記載の方法。
【請求項8】
前記埋め込む段階は、前記ホストによって、カードドライバレベルで実施される、請求項1に記載の方法。
【請求項9】
前記システムは、ハードウェアアダプターを更に備え、それを通して前記ホストとカードが前記データとコマンドを交換するようになっており、前記ホストとハードウェアアダプターは、前記第1プロトコルによって通信し、前記第1命令を前記ホストから前記メモリカードに伝送する前記段階が、
前記第1命令を前記ホストから前記ハードウェアアダプターに伝送する段階と、
前記ハードウェアアダプター内で、前記第1命令を、前記第2プロトコルの対応する命令に翻訳する段階と、
前記対応する命令を、前記ハードウェアアダプターから前記メモリカードに伝送する段階と、
を含んでいる、請求項1に記載の方法。
【請求項10】
前記第1プロトコルからの前記命令が、前記第1プロトコルからのコマンドとデータ部分を含んでいるコマンド部分を有し、前記埋め込まれているコマンドは、前記データ部分に埋め込まれている、請求項1に記載の方法。
【請求項11】
前記データ部分は、前記埋め込まれているコマンドに関係付けられたデータを更に含んでいる、請求項10に記載の方法。
【請求項12】
前記方法は、前記データ部分に含まれている、前記埋め込まれているコマンドに関係付けられたデータが、前記埋め込まれているコマンドに関係付けられたデータの全てであるか否かを判定する段階を更に含んでいる、請求項11に記載の方法。
【請求項13】
前記方法は、前記データ部分に含まれている、前記埋め込まれているコマンドに関係付けられた前記データが、前記埋め込まれているコマンドに関係付けられた前記データの全てではないとする判定を受けて、フラグを、前記埋め込まれているコマンドに関係付けられた追加データを受け取るための設定状態のままに残しておく段階を更に含んでいる、請求項12に記載の方法。
【請求項14】
前記カードで、前記埋め込まれているコマンドを抽出する前記段階は、
前記データ部分がシグネチャーを含んでいることを判定する段階と、
前記命令内の前記シグネチャーの確認に応じて、前記埋め込まれているコマンドを前記データ部分から抽出する段階と、を含んでいる、請求項10に記載の方法。
【請求項15】
前記対応する命令は、前記第2プロトコルからのコマンドを含んでいるコマンド部分と、データ部分と、を有しており、前記埋め込まれているコマンドは、前記データ部分に埋め込まれている、請求項10に記載の方法。
【請求項16】
前記第1プロトコルからの前記コマンドは、所定の論理アドレスへのものである、請求項1に記載の方法。
【請求項17】
前記伝送された、前記カード内の対応する命令を受け取った後で、前記カード内で前記埋め込まれているコマンドを抽出する前に、
前記対応するコマンドが前記所定の論理アドレスへのものであることを判定する段階と、
前記対応するコマンドが前記所定の論理アドレスへのものであるとする判定に対応して、前記命令内のシグネチャーを確認する段階であって、前記埋め込まれているコマンドは、前記シグネチャーの確認に対応して抽出される、確認する段階と、を更に含んでいる、請求項16に記載の方法。
【請求項18】
前記対応するコマンドが前記所定の論理アドレスへのものであることを判定する前記段階と、前記命令内のシグネチャーを確認する前記段階と、前記埋め込まれているコマンドを抽出する段階は、前記カードのファームウェアによって実行される、請求項17に記載の方法。
【請求項19】
前記埋め込まれているコマンドを実行する段階を更に含んでいる、請求項1に記載の方法。
【請求項20】
前記第2プロトコルはSDプロトコルである、請求項1に記載の方法。
【請求項21】
前記埋め込まれているコマンドは、安全なデータアクセスである、請求項20に記載の方法。
【請求項22】
前記第2プロトコルは、MMCプロトコルである、請求項1に記載の方法。
【請求項23】
前記第2プロトコルは、ATAプロトコルである、請求項1に記載の方法。
【請求項24】
前記第1プロトコルは、SCSIプロトコルである、請求項1に記載の方法。
【請求項25】
前記コマンドは、前記ホストと前記カードの間でデータを転送するためのものであり、前記データは、前記ホスト内にキャッシュされていない、請求項1に記載の方法。
【請求項26】
メモリカードと、データ及びコマンドを前記カードと交換することができるホストと、を備えているシステムを作動させる方法であって、前記ホストと前記カードの間のデータ及びコマンドの交換は、第1プロトコルの第1コマンドセットを伝送プロセスの或る段階で使用し、前記ホストと前記カードは、第2プロトコルの第2コマンドセットを使用するアプリケーションを含み、前記方法は、
前記第1プロトコルからの第1命令に、前記第2コマンドセットからのコマンドと、シグネチャーを埋め込む段階であって、前記第1命令は、コマンド部分とデータ部分を含んでおり、前記シグネチャーと、前記第2コマンドセットからの前記コマンドは、前記データ部分に埋め込まれている、埋め込む段階と、
前記ホストからの前記第1命令を前記メモリカードに伝送する段階と、
前記第1命令の前記データ部分に前記シグネチャーが入っているか否か判定する段階と、
前記第1命令に前記シグネチャーが入っていること対応して、前記第2コマンドセットからの前記コマンドを、前記第1命令の前記データ部分から抽出する段階と、を含んでいる方法。
【請求項27】
第2プロトコルの第2コマンドセットを使用する前記アプリケーションは、複数のアプリケーションの中の1つであり、且つ、前記第2プロトコルは、複数の対応する第2プロトコルの中の特定の1つであり、前記複数のアプリケーションの中の複数のアプリケーションは、同時に作動させることができる、請求項26に記載の方法。
【請求項28】
前記データ部分は、更に、前記第2コマンドセットからの前記コマンドに関係付けられたデータを含んでいる、請求項26に記載の方法。
【請求項29】
前記方法は、前記データ部分に含まれている、前記第2コマンドセットからの前記コマンドに関係付けられた前記データが、前記第2コマンドセットからの前記コマンドに関係付けられた前記データの全てであるか否かを判定する段階を更に含んでいる、請求項28に記載の方法。
【請求項30】
前記方法は、前記データ部分に含まれている、前記第2コマンドセットからの前記コマンドに関係付けられた前記データが、前記第2コマンドセットからの前記コマンドに関係付けられた前記データの全てではないとする判定を受けて、フラグを、前記第2コマンドセットからの前記コマンドに関係付けられた追加データを受け取るための設定状態のままに残しておく段階を更に含んでいる、請求項4に記載の方法。
【請求項31】
前記コマンドは、データを前記カードから前記ホストへ転送するためのものであるか否かを判定する段階と、
前記コマンドが、データを前記カードから前記ホストへ転送するためものであるとする判定を受けて、前記転送用にフラグを設定する段階と、
前記カードから、前記コマンドに関係付けられたデータを転送する段階と、を更に含んでいる、請求項26に記載の方法。
【請求項32】
前記転送されたデータは、前記コマンドに関係付けられた前記データの全てよりも少ない、請求項31に記載の方法。
【請求項33】
第2コマンドに応答して、前記カードから、前記コマンドに関係付けられた前記データを再転送する段階を更に含んでいる、請求項31に記載の方法。
【請求項34】
前記第1命令は書き込みである、請求項26に記載の方法。
【請求項35】
前記第2コマンドセットからの前記コマンドは、読み取りである、請求項26に記載の方法。
【請求項36】
前記シグネチャーは、前記データ部分の所定のセクションに入っている、請求項26に記載の方法。
【請求項37】
前記命令は、第1論理アドレスでデータにアクセスするためのものであり、前記命令の前記データ部分にシグネチャーが入っているか否かを判定する前記段階は、所定の論理アドレスに対応している前記第1論理アドレスに応じるものである、請求項26に記載の方法。
【請求項38】
前記埋め込む段階は、前記ホストによって、前記ファイルドライバレベルで実施される、請求項26に記載の方法。
【請求項39】
前記コマンドは、データを、前記ホストから前記カードに転送するためのものであり、前記データは、前記第1命令に対応するファイルのデータ部分に置かれており、前記方法は、更に、前記カード上の論理アドレスが前記ファイルをセグメント化して保持するのに十分であるかを判定する段階を含んでいる、請求項38に記載の方法。
【請求項40】
前記埋め込む段階は、前記ホストによって、前記カードドライバレベルで実施される、請求項26に記載の方法。
【請求項41】
前記システムは、ハードウェアアダプターを更に備え、前記ハードウェアアダプターを通して前記ホストとカードが前記データとコマンドを交換し、前記ホストとハードウェアアダプターは、前記第1プロトコルによって通信し、前記第1命令を前記ホストから前記メモリカードに伝送する前記段階は、
前記第1命令を前記ホストから前記ハードウェアアダプターに伝送する段階と、
前記ハードウェアアダプター内で、前記第1命令を、前記第2プロトコルの対応する命令に翻訳する段階と、
前記対応する命令を、前記ハードウェアアダプターから前記メモリカードに伝送する段階と、を含んでいる、請求項26に記載の方法。
【請求項42】
前記第1プロトコルからの前記命令は、前記第1プロトコルからのコマンドを含んでいるコマンド部分と、データ部分と、を備えており、前記埋め込まれているコマンドは、前記データ部分に埋め込まれている、請求項26に記載の方法。
【請求項43】
前記第1プロトコルからの前記コマンドは、所定の論理アドレスへのものである、請求項26に記載の方法。
【請求項44】
前記埋め込まれているコマンドを実行する段階を更に含んでいる、請求項26に記載の方法。
【請求項45】
前記第2プロトコルはSDプロトコルである、請求項26に記載の方法。
【請求項46】
前記埋め込まれているコマンドは安全なデータアクセスである、請求項45に記載の方法。
【請求項47】
前記第2プロトコルはMMCプロトコルである、請求項26に記載の方法。
【請求項48】
前記第2プロトコルはATAプロトコルである、請求項26に記載の方法。
【請求項49】
前記第1プロトコルはSCSIプロトコルである、請求項26に記載の方法。
【請求項50】
前記コマンドは、前記ホストと前記カードの間でデータを転送するためのものであり、前記データは、前記ホスト内にキャッシュされない、請求項26に記載の方法。
【請求項51】
不揮発性メモリカードを作動させる方法において、
コマンド部分とデータ部分を含んでいる、命令を受け取る段階と、
前記命令の前記データ部分にシグネチャーが入っているか否かを判定する段階と、
前記命令に前記シグネチャーが入っていることに対応して、前記命令の前記データ部分からコマンドを抽出する段階と、を含む方法。
【請求項52】
前記コマンドは、前記カードからデータを転送するためのものであるか否かを判定する段階と、
前記コマンドが前記カードからデータを転送するためのものであるという判定に対応して、前記転送用のフラグを設定する段階と、
前記カードから、前記コマンドに関係付けられたデータを転送する段階と、を更に含んでいる、請求項51に記載の方法。
【請求項53】
第2コマンドに応えて、前記カードから前記コマンドに関係付けられた前記データを再転送する段階を更に含んでいる、請求項52に記載の方法。
【請求項54】
前記データ部分は、前記抽出されたコマンドに関係付けられたデータを更に含んでいる、請求項51に記載の方法。
【請求項55】
前記方法は、前記データ部分に含まれている、前記抽出されたコマンドに関係付けられた前記データが、前記抽出されたコマンドに関係付けられた前記データの全てであるか否かを判定する段階を更に含んでいる、請求項54に記載の方法。
【請求項56】
前記方法は、前記データ部分に含まれている、前記抽出されたコマンドに関係付けられた前記データが、前記抽出されたコマンドに関係付けられた前記データの全てではないという判定に対応して、フラグを、前記抽出されたコマンドに関係付けられた追加データの受け取りのための設定状態のままに残しておく段階を更に含んでいる、請求項55に記載の方法。
【請求項57】
前記シグネチャーが、前記データ部分の所定のセクションに入っている、請求項51に記載の方法。
【請求項58】
前記命令は、第1コマンドセットを有する第1プロトコル内にあり、前記抽出されたコマンドは、第2プロトコルの第2コマンドセットからであり、前記第1コマンドセット内に対応するコマンドを有していない、請求項51に記載の方法。
【請求項59】
前記第2プロトコルは、複数のアプリケーションの中の1つのためのものであり、前記第2プロトコルは、複数の対応するアプリケーションプロトコルの中の特定の1つであり、前記複数のアプリケーションの中の複数のアプリケーションは、同時に作動させることができる、請求項58に記載の方法。
【請求項60】
前記命令は、第1論理アドレスでデータにアクセスするためのものであり、前記命令の前記データ部分にシグネチャーが入っているか否かを判定する前記段階は、所定の論理アドレスに対応している前記第1論理アドレスに応じるものである、請求項51に記載の方法。
【請求項61】
前記命令にシグネチャーが入っていると判定する前記段階と、前記命令の前記データ部分からコマンドを抽出する段階は、前記カードのファームウェアによって実行される、請求項51に記載の方法。
【請求項62】
前記抽出されたコマンドを実行する段階を更に含んでいる、請求項51に記載の方法。
【請求項63】
前記命令はSDプロトコルにある、請求項51に記載の方法。
【請求項64】
前記抽出されたコマンドは安全なデータアクセスである、請求項51に記載の方法。
【請求項65】
前記命令はMMCプロトコルにある、請求項51に記載の方法。
【請求項66】
前記命令はATAプロトコルにある、請求項51に記載の方法。
【請求項67】
第1プロトコルからのコマンドを伝送する方法において、
第2プロトコルからの、関係付けられたデータ部分を受け入れるコマンドを含んでいる、命令を形成する段階と、
前記命令の前記関係付けられたデータ部分に、前記第1プロトコルからの前記コマンドと、前記命令に前記第1プロトコルからのコマンドが入っていることを示すシグネチャーと、を置く段階と、
前記命令を伝送する段階と、を含む方法。
【請求項68】
前記第1プロトコルは、複数のアプリケーションの中の1つのためのものであり、前記第1プロトコルは、複数の対応するアプリケーションプロトコルの中の特定の1つであり、前記複数のアプリケーションの中の複数のアプリケーションは、同時に作動させることができる、請求項67に記載の方法。
【請求項69】
前記第1プロトコルからの前記コマンドに関係付けられたデータを、前記関係付けられたデータ部分に置く段階を更に含んでいる、請求項67に記載の方法。
【請求項70】
前記方法は、前記データ部分に含まれている、前記第1プロトコルからの前記コマンドに関係付けられた前記データが、前記第1プロトコルからの前記コマンドに関係付けられた前記データの全てであるか否かを判定する段階を更に含んでいる、請求項69に記載の方法。
【請求項71】
前記方法は、前記データ部分に含まれている、前記第1プロトコルからの前記コマンドに関係付けられた前記データが、前記第1プロトコルからの前記コマンドに関係付けられた前記データの全てではないという判定に対応して、フラグを、前記第1プロトコルからのコマンドに関係付けられた追加データの受け取りのための設定状態のままに残しておく段階を更に含んでいる、請求項70に記載の方法。
【請求項72】
前記第2プロトコルからの前記命令は、書き込みである、請求項67に記載の方法。
【請求項73】
前記第1プロトコルからの前記コマンドは、読み取りである、請求項67に記載の方法。
【請求項74】
前記シグネチャーは、前記関係付けられたデータ部分の所定のセクションに置かれている、請求項67に記載の方法。
【請求項75】
前記埋め込む段階は、前記ホストによって、前記ファイルドライバレベルで実施される、請求項67に記載の方法。
【請求項76】
前記関係付けられたデータ部分は、ファイルの一部として形成される、請求項67に記載の方法。
【請求項77】
前記第2プロトコルからの前記命令は、所定の論理アドレスに伝送される、請求項67に記載の方法。
【請求項78】
前記第1プロトコルからの前記コマンドは、データを転送するためのものであり、前記データは、前記伝送装置内にキャッシュされない、請求項67に記載の方法。
【請求項79】
メモリカードと、データ及びコマンドを前記カードと交換することのできるホストと、を備えているシステムを作動させる方法であって、前記ホストと前記カードの間のデータ及びコマンドの交換は、第1プロトコルの第1コマンドセットを前記伝送プロセスの或る段階で使用し、前記ホストと前記カードは、第2プロトコルの第2コマンドセットを使用するアプリケーションを含み前記方法は、
第1プロトコルからの第1命令に、前記第2コマンドセットからのコマンドを埋め込む段階と、
前記第1命令を前記ホストから前記メモリカードの第1論理アドレスに伝送する段階と、
前記埋め込まれているコマンドが、データを前記カードから前記ホストへ転送するためのものであるか否かを判定する段階と、
その後、第2命令を前記ホストから前記メモリカードに伝送する段階と、
前記埋め込まれているコマンドが、データを前記カードから前記ホストへ転送するためのものであるという判定に応えて、前記第2命令が、前記メモリカードの前記第1論理アドレスへのものであるか否かを判定する段階と、
前記第2命令が、前記メモリカードの前記第1論理アドレスへのものであるということに対応して、データを前記カードから前記ホストへ転送する段階と、を含む方法。
【請求項80】
前記第1命令は、書き込みである、請求項79に記載の方法。
【請求項81】
前記第2命令からの前記コマンドは、読み取りである、請求項79に記載の方法。
【請求項82】
前記シグネチャーは、前記第1命令の所定のセクションに入っている、請求項79に記載の方法。
【請求項83】
前記埋め込む段階は、前記ホストによって、前記ファイルドライバレベルで実施される、請求項79に記載の方法。
【請求項84】
前記コマンドは、前記ホストと前記カードの間でデータを転送するためのものであり、前記データは、前記ホスト内にキャッシュされていない、請求項79に記載の方法。
【請求項85】
不揮発性メモリと、
第1プロトコルに従って前記カードが接続されているホストと命令を交換するためのフロント層であって、前記第1層は、前記第1プロトコルの入ってくる命令のデータ部分にシグネチャーが入っているか否かを判定し、前記シグネチャーが無いとする判定に対応して、前記第1プロトコルの前記命令に従って前記メモリにアクセスする、フロント層と、
アプリケーション層であって、前記第1プロトコルの入ってくる命令にシグネチャーが入っているとする判定に対応して、前記入ってくる命令は、前記フロント層から前記アプリケーションへ転送され、第2プロトコルの命令が、前記入ってくる命令の前記データ部分から抽出され、前記第2プロトコルの前記命令に従って前記メモリにアクセスする、アプリケーション層と、を備えているメモリカード構造。
【請求項86】
前記シグネチャーは、前記データ部分の所定のセクションに入っている、請求項85に記載のメモリカード構造。
【請求項87】
前記命令は、第1コマンドセットを有する第1プロトコルにあり、前記抽出されたコマンドは、第2プロトコルの第2コマンドセットからであり、前記第1コマンドセット内に対応するコマンドを有していない、請求項85に記載のメモリカード構造。
【請求項88】
前記命令は、第1論理アドレスでデータにアクセスするためのものであり、前記命令の前記データ部分にシグネチャーが入っているか否かの前記判定は、所定の論理アドレスに対応している前記第1論理アドレスに応じるものである、請求項85に記載のメモリカード構造。
【請求項89】
前記フロント層と前記アプリケーション層は、ファームウェアで実施される、請求項85に記載のメモリカード構造。
【請求項90】
前記メモリカード構造は、複数の前記命令を同時に処理することができる、請求項85に記載のメモリカード構造。
【請求項91】
前記アプリケーション層は、複数のアプリケーションを含んでおり、同時に処理される前記複数の命令は、前記アプリケーションの内の2つ以上からのものである、請求項90に記載のメモリカード構造。
【請求項92】
前記入ってくる命令が、前記カードからデータを転送するためのものであるという判定に対応して、前記アプリケーション層は、転送フラグを設定し、前記入ってくる命令に関係付けられたデータを、前記カードから転送する、請求項85に記載のメモリカード構造。
【請求項93】
2番目に入ってくる命令に対応して、前記入ってくる命令に関係付けられた前記データを、前記カードから再転送する、請求項92に記載のメモリカード構造。
【請求項94】
前記アプリケーション層は、前記データ部分が、前記第2プロトコルの前記命令に関係付けられたデータを更に含んでいるか否かを判定する、請求項85に記載のメモリカード構造。
【請求項95】
前記アプリケーション層は、前記データ部分に含まれている、前記第2プロトコルの前記命令に関係付けられた前記データが、前記第2プロトコルの前記命令に関係付けられたデータの全てであるか否かを判定する、請求項94に記載メモリカード構造。
【請求項96】
前記データ部分に含まれている、前記第2プロトコルの前記命令に関係付けられた前記データが、前記第2プロトコルの前記命令に関係付けられたデータの全てではないという判定に対応して、前記アプリケーション層は、フラグを、前記第2プロトコルの前記命令に関係付けられた追加データの前記受け取りのために設定された状態のままに残しておく、請求項95に記載のメモリカード構造。
【請求項97】
前記転送されたデータは、前記コマンドに関係付けられた前記データの全てよりも少ない、請求項51に記載の方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図11A】
【図11B】
【図11C】
【図12】
【図13A】
【図13B】
【図13C】
【図13D】
【図14】
【図15】
【図16】
【図17A】
【図17B】
【図17C】
【図17D】
【図17E】
【図17F】
【図17G】
【図17H】
【図17I】
【図17J】
【図17K】
【図17L】
【図18A】
【図18B】
【図18C】
【図18D】
【図18E】
【図18F】
【図18G】
【図18H】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図11A】
【図11B】
【図11C】
【図12】
【図13A】
【図13B】
【図13C】
【図13D】
【図14】
【図15】
【図16】
【図17A】
【図17B】
【図17C】
【図17D】
【図17E】
【図17F】
【図17G】
【図17H】
【図17I】
【図17J】
【図17K】
【図17L】
【図18A】
【図18B】
【図18C】
【図18D】
【図18E】
【図18F】
【図18G】
【図18H】
【公表番号】特表2009−518759(P2009−518759A)
【公表日】平成21年5月7日(2009.5.7)
【国際特許分類】
【出願番号】特願2008−544612(P2008−544612)
【出願日】平成18年11月30日(2006.11.30)
【国際出願番号】PCT/US2006/061416
【国際公開番号】WO2007/076214
【国際公開日】平成19年7月5日(2007.7.5)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.コンパクトフラッシュ
【出願人】(507208288)サンディスク コーポレーション (11)
【Fターム(参考)】
【公表日】平成21年5月7日(2009.5.7)
【国際特許分類】
【出願日】平成18年11月30日(2006.11.30)
【国際出願番号】PCT/US2006/061416
【国際公開番号】WO2007/076214
【国際公開日】平成19年7月5日(2007.7.5)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.コンパクトフラッシュ
【出願人】(507208288)サンディスク コーポレーション (11)
【Fターム(参考)】
[ Back to top ]