本実施形態を概略的に説明すると、次のようである。
(機能拡張方法)
ホストドライバが、追加機能を制御する機能ドライバを探して、対応する機能ドライバがホストにインストールされていた場合、その機能ドライバに制御を渡す仕組みを取り入れることにより、機能拡張が容易に行えるようになる。機能固有の制御は、機能ドライバの中に隠蔽されるため、ホストドライバは最小限の情報のみで追加機能を実装可能となる。例えばファームウェアが管理する複数ページの拡張レジスタを有し、これら拡張レジスタのページ0に、特定のドライバを認識するための標準的な汎用情報(general information)フィールドを提供する。これによりホストシステムは、プラグ・アンド・プレイの実装が可能となる。また、マルチ機能カード/デバイスをサポートするために、個々の機能を指し示すことができるようにホストシステムが管理しておくことで、ホストソフトウエアの改変なしにマルチ機能カード/デバイスを使用可能にする。
(SDメモリ又はSDIOホストコントローラの対応)
SDメモリ用のホストコントローラにおいても、追加機能の制御を効率良く行える拡張レジスタをアクセスするための専用コマンドを定義する。512バイトの固定ブロック長の転送とすることにより、従来のSDメモリ用ホストコントローラからこの専用コマンドを発行できる。さらに、コマンドの引数として有効データ長の情報や、ライト時のマスク機能を持つことにより、リード・モディファイ・ライトを不要にすることが可能となる。
SDIOカード対応のホストコントローラにおいては、SDIOのアクセスコマンドからも、拡張レジスタをアクセスできるようにすることにより、小さいブロック長転送とマルチブロック転送に対応可能となるため、さらに最適化したドライバを作ることが可能になる。
データの転送用ポートとしてのデータポートをサポートすることで、拡張レジスタ空間の消費量が少ない実装が可能となる。また、データポートを用いることにより、拡張レジスタ以外のデバイスへのデータ転送も効率良く行うことが可能となる。複数ブロックによるバースト転送コマンドをサポートすることができる。データポートは、機能の実装時に拡張レジスタの任意のアドレスをデータポートとして定義できる。カードはアドレスを解読してデータポートか拡張レジスタかを判断する。
(リロケータブルアドレスによる拡張レジスタ定義)
カードベンダーにより、拡張レジスタ上の任意の位置に追加機能を制御するレジスタを割り当てることを可能とし、実装したレジスタのアドレス情報を汎用情報フィールドから提供することにより、レジスタ配置をリロケータブルとすることを可能としている。このため、従来標準化が必要であったアドレス配置は不要となり、メモリデバイスを製造し易くなる。再配置が可能であるため、レジスタを拡張しても容易に対応ができる。
以下、実施の形態について、図面を参照して説明する。
(第1の実施形態)
図1は、本実施形態に係るメモリシステムを概略的に示している。
メモリシステムは、例えばSDカードのようなメモリデバイス11と、ホスト機器20により構成される。
メモリデバイス11は、ホスト機器20に接続されたときに電源供給を受けて動作し、ホスト機器20からのアクセスに応じた処理を行う。このメモリデバイス11は、コントローラ11aを有している。
コントローラ11aは、例えばホストインタフェース(I/F)12、CPU13、ROM(Read only Memory)14、RAM(Random Access Memory)15、バッファ16、メモリインターフェース(I/F)17により構成されている。これらは、バスにより接続されている。メモリインターフェース17には、例えばNAND型フラッシュメモリ18と、拡張機能部としてのSDIO19が接続されている。拡張機能部は、例えば無線LAN装置などを適用することが可能である。
ホストインタフェース12は、コントローラ11aとホスト機器20との間のインターフェース処理を行う。
メモリインターフェース17は、コントローラ11aとNAND型フラッシュメモリ18、又はSDIO19との間のインターフェース処理を行う。
CPU13は、メモリデバイス11全体の動作を司るものである。このCPU13を正制御するプログラムは、ROM14の中に格納されているファームウェア(制御プログラム等)を用いるかあるいは、RAM115上にロードして所定の処理を実行する。すなわち、CPU13は、各種のテーブルや後述する拡張レジスタをRAM18上に作成したり、ホスト機器20からライト(書き込み)コマンド、リード(読み出し)コマンド、イレース(消去)コマンドを受けてNAND型フラッシュメモリ18上の領域をアクセスしたり、バッファ16を介してデータ転送処理を制御したりする。
ROM14は、CPU13により使用される制御プログラムなどのファームウェアを格納する。RAM15は、CPU13の作業エリアとして使用され、制御プログラムや各種のテーブルや後述する拡張レジスタを記憶する。
バッファ16は、ホスト機器20から送られてくるデータを、例えばNAND型フラッシュメモリ18へ書き込む際、一定量のデータ(例えば1ページ分)を一時的に記憶したり、NAND型フラッシュメモリ18から読み出されたデータをホスト機器20へ送り出す際、一定量のデータを一時的に記憶したりする。またバッファを介することにより、SDバスインターフェースとバックエンドを非同期に制御することができる。
NAND型フラッシュメモリ18は、例えば積層ゲート構造のメモリセル、又はMONOS構造のメモリセルにより構成されている。
SDIO19は、例えばデジタルカメラやPHSなどの周辺機器やインターフェースとしての機能を有している。例えば、SDIO19として無線LAN装置を適用することで、無線通信機能を有さないデジタルカメラでも外部サーバ、外部PC等との間で無線によるデータ通信を行うことが可能となる。
ホスト機器20は、例えばデジタルカメラやPHSなどが適用可能である。ホスト機器20は、ホストコントローラ21、CPU22、ROM23、RAM24、例えばハードディスク25(SSDを含む)により構成されている。これらはバスにより接続されている。
CPU22は、ホスト全体を制御する。ROM23は、CPU22の動作に必要なファームウェアを記憶している。RAM24は、例えばCPU22の作業領域として使用されるが、CPU22が実行可能なプログラムもここにロードされ実行される。ハードディスク25は、各種データを保持する。ホストコントローラ21は、メモリデバイス11が接続された状態において、メモリデバイス11とのインターフェース処理を行う。さらに、CPU22の指示に従って、後述する各種コマンドを発行する。
(ファームウェアの構成)
図2は、メモリデバイス11のROM14に記憶されたファームウェアの機能構成の一例を示している。これらの機能はコントローラ11aを構成するCPU13等の各ハードウェアとの組み合わせにより実現されるものである。ファームウェアは、例えばコマンド処理部14a、フラッシュメモリ制御部14b、拡張レジスタ処理部14c、機能処理プログラム14dにより構成されている。拡張レジスタ処理部14cは、メモリデバイス11が起動された際、RAM15内に拡張レジスタ31を生成する。この拡張レジスタ31は、仮想レジスタであり、拡張機能を定義可能とされている。
(拡張レジスタの構成)
図2に示すように、拡張レジスタ31は、例えば8ページにより構成されている、1ページは、512バイトにより構成されている。512バイトの拡張レジスタをバイト単位にアクセスするため、最低9ビットのアドレスが必要となり、8ページアクセスするために、最低3ビットのアドレスが必要となる。合計12ビットのアドレスにより、拡張レジスタの全空間がアクセス可能となる。512バイトは殆どのホストがサポート可能なアクセス単位であるが、512バイトに限定されず大きくしても良い。長いビット長のアドレスフィールドで構成される場合は、下位何ビットかがアクセス単位として使用され、残りの上位のビットは、複数ページのひとつを選択するために使用される。
512バイト単位とする理由は、多数のメモリカードホストコントローラが、1ブロック=512バイトを単位としてリード/ライト転送を行う構成になっているためである。SDIO対応のホストコントローラであれば、1バイト単位のリード/ライトが可能であるが、全てのホストコントローラがこれをサポートしているわけではない。大多数のホストコントローラで拡張機能を制御できるようにするためには、512バイト単位のアクセスが行えると都合が良い。
8ページ(ページ0〜ページ7)の内、ページ0は、拡張機能のプラグ・アンド・プレイを行うために汎用情報フィールドを記録しておくための領域である。汎用情報フィールドの詳細については後述する。ページ1〜ページ7は、拡張機能を制御するためのレジスタが定義される。ページ0は位置が特定し易いために、汎用情報フィールドを記録しておく場所としては適切であるが、必ずしもページ0である必要はなく、特定のページ位置を汎用情報フィールドの記載する場所として定義することもできる。
拡張レジスタのリード/ライトは、以下に定義される専用のリード/ライトコマンドが用いられる。これらのコマンドは、拡張レジスタをリード/ライトする第1の動作モードと、データポートを構成する第2の動作モードを有している。
(拡張レジスタのリードコマンド(CMD48))
図3は、拡張レジスタのリードコマンド(CMD48)のフィールド構成の一例を示している。“S”は、コマンドのスタートビットを示し、“T”は転送方向を示すビットであり、“index”は、コマンド番号を示している。“RS”(レジスタセレクト)は拡張レジスタ31内のページを示し、“OFS”は選択されたページ内におけるデータの位置(ページの先頭からのオフセット)を示している。3ビットの“RS”と、9ビットの“OFS”で、512バイトの拡張レジスタ8ページ分の空間をバイト単位に指定することができる。具体的には、選択された拡張レジスタ内のリード開始位置が“RS”と“OFS”により指定される。
“LEN”はデータ長を示している。9ビットのLENフィールドにより、512バイトの拡張レジスタ内の読み出しに必要な有効なデータ長が指定される。
“CRC7”は、巡回冗長検査(cyclic redundancy check)コードを示し、“E”は、コマンドのエンドビットを示している。“rsv”は、予備のビットを示している。
(拡張レジスタのリードコマンド、第1の動作モード)
図4は、第1の動作モードによる拡張レジスタのリード動作の例を示している。
図4に示すように、メモリデバイス11は、ホスト機器20からコマンド(CMD48)を受け取ると、レスポンス(R1)をホスト機器20に返し、その後、拡張レジスタ31から512バイトのデータブロックを読み出す。
具他的には、コマンド(CMD48)の引数で、拡張レジスタのページと、ページ内の読み出すべきデータの位置が、“RS”と“OFS”で指定され、データ長が“LEN”で指定される。このようにして指定された拡張レジスタ内のデータが、512バイトのデータブロックの先頭にセットされ、読み出される。512バイトのデータブロックのうち、“LEN”で指定されたデータ長を超えるデータは、無効データとなる。データブロックの最後にはCRCコードが付加され、正しくデータが受け取れたかをチェックすることが可能とされている(無効データを含めてチェックを行う)。有効データが先頭から配置されているため、ホスト機器20は、有効データを探すために、データシフトなどの操作を行う必要がない。
(拡張レジスタのリードコマンド、第2の動作モード)
図5は、第2の動作モードによるデータポートリードの動作の例を示している。
メモリデバイス11は、このコマンド(CMD48)を受け取ると、レスポンス(R1)を返し、その後に512バイトのデータブロックを返す。
コマンドの引数“RS”,“OFS”により、拡張レジスタの選択されたページ内の位置が指定される。図5ではレングスが1の場合のデータポート例が示されている。すなわち、データポートは、拡張レジスタマップ上において、1バイトのアドレスを占有するだけで良い。データポートであるかどうかをアドレスのデコードによって識別できれば良く、実際に1バイト幅のポートを通してデータが伝送される必要はないので、データ伝送性能には影響しない。このデータポートに割り当てられたデバイスから1ブロック(512バイト単位)のデータをリードすることができる。すなわち、1回当たり、1ブロック(512バイト単位)のデータをリードすることができる。この読み出されたデータは、例えばバッファ16に保持され、ホスト機器20によって読み出される。
続いて同じデータポートをリードすると、続きの512バイトのデータを読み出すことができる。データポートから読み出すデータを何処から取ってくるかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。512バイトのデータブロックの最後にCRCコードが付加され、正しくデータが受け取れたか否かがチェック可能とされている。
(拡張レジスタのライトコマンド(CMD49))
図6は、拡張レジスタのライトコマンドの一例を示している。ライトコマンド(CMD49)において、リードコマンド(CMD48)と同一部分には同一符号を付している。ライトコマンドとリードコマンドは、“index”により区別される。3ビットの“RS”と、9ビットの“OFS”により、拡張レジスタのページと選択されたページ内のデータの位置が指定される。9ビットの“LEN”フィールドにより、512バイトの拡張レジスタに書き込むデータ長が指定される。したがって、512バイト内の任意のデータ長(バイト単位)のデータを拡張レジスタの任意のページと場所に書き込むことが可能である。
ライトコマンド(CMD49)は、コマンドの引数の中にマスクレジスタが設けられている。すなわち、“Mask”は、8ビット長のマスクレジスタを示している。このマスクレジスタにより、1バイトのデータのライトにおいて、ビット単位のオペレーションが可能となり、特定のビットにのみデータを書き込むことが可能となる。このため、1バイト内のビットオペレーションであれば、リード・モディファイ・ライトを行う必要がない。マスクレジスタは、データ長が1バイトのとき、すなわち、“LEN=0”(レングス1)のとき有効となる。マスクレジスタ“Mask”のデータが“1”のビットは、データが書き込まれ、マスクレジスタ“Mask”のデータが“0”のビットは、既にセットされた値が保存される。
すなわち、図7(a)に示すようなデータを保持している拡張レジスタを仮定した場合において、マスクレジスタのデータが、図7(b)に示すようである場合、ライトコマンドが実行されることにより、図7(c)に示すように、マスクレジスタのデータが“1”のビットはデータが書き込まれ、データが“0”のビットは、元のデータが保持される。このため、リード・モディファイ・ライトを行うことなく、所要のビットのみデータを書き換えることが可能となる。“x”で示す部分が、新しいデータが書き込まれたビットを示す。
また、より長いマスクデータを別の手段によって供給できる場合、LEN>1でもマスクライトが可能であるが、図7に示す例では、コマンド引数にマスクデータを割り当てているため、8ビットマストとしている。
(拡張レジスタのライトコマンド、第1の動作モード)
図8は、第1の動作モードによる拡張レジスタのライト動作の例を示している。
メモリデバイス11は、このコマンド(CMD49)を受け取ると、レスポンス(R1)を返し、その後、512バイトのデータブロックを受け取る。
メモリデバイス11は、データブロックが正しく受け取れたかどうかを示すCRCコードをホスト機器20に返す。その後、このコマンドの処理が終了するまでビジーを返し、ホスト機器20が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ16に保持されている。
コマンド処理において、コマンドの引数“RS”、“OFS”により、拡張レジスタ内のページと位置が指定され、“LEN”によりデータ長が指定される。バッファ16に保持されたデータブロックのうち、先頭から“LEN”で指定した長さのデータが拡張レジスタに書き込まれる。“LEN”で指定されたデータ長を超えるデータブロック中のデータは無効データとして破棄される。
有効データをデータブロックの先頭から配置することにより、ホストシステムは有効データをデータブロックの途中に配置する操作が不要となる。
(拡張レジスタのライトコマンド、第2の動作モード)
図9は、第2の動作モードによるライトデータポートの動作の例を示している。
メモリデバイス11は、このコマンド(CMD49)を受け取ると、レスポンス(R1)を返し、その後、512バイトのデータブロックを受け取る。
メモリデバイス11は、データブロックが正しく受け取れたかどうかを示すCRCコードをホストに返す。その後、このコマンド処理が終わるまでビジーを返し、ホスト機器20が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ16に保持されている。
コマンド処理において、コマンドの引数“RS”、“OFS”により、拡張レジスタ内のページと位置が指定され、データポートが指定される。データポートは、拡張レジスタマップ上において、1バイトのアドレスを占有するだけでよい。このデータポートに、バッファ16に保持された1ブロック(512バイト単位)のデータをある割り当てたデバイスにライトすることができる。すなわち、1回当たり、1ブロックのデータをライトすることができる。
続いて同じデータポートをライトすると、続く512バイトのデータを割り当てたデバイスに書き込むことができる。データポートのデータを何処に渡すかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。
(汎用情報フィールドの使用例)
図10は、拡張レジスタ31のページ0に示された汎用情報フィールドの例を示している。この汎用情報フィールドにより、ホスト機器20が拡張機能を制御するドライバを特定できるようにすることにより、拡張機能を追加した場合において、ホストシステムが容易に拡張機能を使えることができ、プラグ・アンド・プレイを実現することができる。
図10を参照して、標準のホストドライバが処理すべきシーケンス例を説明する。
(ストラクチャレビジョン)
ストラクチャレビジョンは、拡張レジスタ31のページ0のフォーマットを定義するレビジョンである。汎用情報フィールドに新しい情報を追加した場合、ストラクチャレビジョンを更新することにより、どのバージョンの汎用情報フィールドを保持しているかを示す。以前のバージョンの機能ホストドライバは、新しいフィールドを無視する。
(データ長)
データ長は、ページ0に記録されている有効データ長を示している。
(拡張機能数(=N))
拡張機能数は、デバイスが何個の拡張機能をサポートしているかを示している。ホストドライバは、起動時に、サポートしている機能数だけ繰り返し、各拡張機能用のドライバがインストールされているかどうかを調べる。
(デバイス1機能識別コード)
デバイス1機能識別コードに、コードが設定してある場合、標準ドライバを用いることができることを示す。OSが標準ドライバをサポートしている場合、専用ドイバをインストールすることなく、このデバイスが使用できる。専用ドライバがインストールされている場合は、そちらの使用を優先する。非標準の機能の場合、このフィールドに“0”が設定される。この場合は、専用ドライバによってのみこの機能は制御される。
(デバイス1製造者識別情報、デバイス1機能識別情報)
デバイス1製造者識別情報、デバイス1機能識別情報は、それぞれ専用ドライバを特定するための情報であり、これらのフィールドには、例えばASCII文字列により製造者名や販売者名、又は拡張機能の識別情報が記載される。ホストドライバは、これらの情報をもとにデバイス1の専用ドライバがインストールされているかどうかを探す。
機能識別情報には、例えばASCII文字列によりデバイスの型番、レビジョンなどが記載される。
(次デバイスの先頭アドレス)
次デバイスの先頭アドレスは、次のデバイス情報が記載されているページ0内のアドレスを示している。ホストシステムがこのデバイスをサポートしていない場合、このデバイスは使用できないため、次のデバイスがチェックされる。これ以降のフィールドは可変長のため、この位置に定義している。
(デバイス1アドレスポインタ1〜X、レングスフィールド1〜X)
デバイス1アドレスポインタ1〜X、レングスフィールド1〜Xは、ひとつの機能に複数の拡張レジスタ領域を定義できることを示している。それぞれのアドレスとレングスを下記に列挙する。
(デバイス1アドレスポインタ1(開始アドレス)、レングス1)
デバイス1が使用する拡張レジスタの第1領域。拡張レジスタのページ1〜7の空間内の先頭アドレスと、使用する拡張レジスタ領域の大きさを示している。
すなわち、1つのデバイスに、1つ又は複数の拡張レジスタ領域を割り付けることができ、アドレスポインタは、ページ0以外の任意の拡張領域の場所(開始アドレス)を示している。レングスは、ポインタを先頭アドレスとした拡張レジスタを占有する大きさを示している。
(デバイス1アドレスポインタ2(開始アドレス)、レングス2)
デバイス1に割り当てられた拡張レジスタ内の第2領域の位置と領域の大きさを示している。これにより、例えば標準ドライバは、第1領域のみで制御するが、専用ドライバは、第1領域と第2領域を用いて効率良く制御することを可能にするなどの応用が可能となる。
(デバイス1アドレスポインタX(開始アドレス)、レングスX)
デバイス1に割り当てられた第X領域の位置と領域の大きさを示している。
このように、拡張レジスタ内に複数の領域を定義できる。各領域はオーバーラップしないように配置される。レングス情報によりオーバーラップがあるかどうかをチェックすることができる。
追加フィールドが必要になった場合、これ以降に追加定義していく。新しいフィールドが認識できないホストは、認識可能なフィールドまで読み出し、追加フィールドは無視する。上記の(次デバイスの先頭アドレス)フィールドによりスキップすることができる。
(リードコマンド(CMD48)の動作)
図11は、上記リードコマンド(CMD48)に対応するメモリデバイス11内のコントローラ11aの動作を示している。
リードコマンドを受けると、CPU13により、コマンドの引数“RS”、“OFS”が解析され、リードコマンドがデータポートかどうか判別される(ST11)。すなわち、拡張レジスタ内のページ“RS”と、ページ内におけるデータの位置が判別される。この結果、コマンドが拡張レジスタのリードであると判別された場合、第1の動作モードにより、拡張レジスタ31の選択されたページの“OFS”で示された位置からデータ長“LEN”のデータが取得される(ST12)。この取得されたデータは、バッファ16にセットされる(ST13)。
一方、ステップST11において、リードコマンドがデータポートであると判別された場合、第2の動作モードにより、拡張レジスタ31の選択されたページの“OFS”で示された位置のデータポートを介して、例えばSDIO19の特定のファンクションから512バイトのデータが取得される(ST14)。この取得されたデータは、バッファ16にセットされる(ST15)。
(ライトコマンド(CMD49)の動作)
図12は、上記ライトコマンド(CMD49)に対応するメモリデバイス11内のコントローラ11aの動作を示している。
ライトコマンドを受けると、CPU13(コマンド処理部14a)により、コマンドの引数“RS”、“OFS”が解析され、ライトコマンドがデータポートかどうか判別される(ST21)。すなわち、拡張レジスタ内のページ“RS”と、ページ内におけるデータの位置が判別される。この結果、ライトコマンドがデータポート以外と判別された場合、コマンドの引数“LEN=0”(レングス1)であるかどうか、すなわち、マスクが有効かどうか判別される(ST22)。この判別の結果、“LEN=0”ではないと判別された場合(レングスが1より大きい)、拡張レジスタ処理部14cにより拡張レジスタのライト処理が行われる。すなわち、バッファ16から“LEN”により指定された長さのデータが取得される(ST23)。この取得されたデータは、拡張レジスタの“RS”で選択されたページの“OFS”で指定された位置にセットされる。
一方、上記ステップST22において、“LEN=0”であり(レングスが1)、マスクが有効であると判別された場合、拡張レジスタ処理部14cによりバッファ16から1バイトのデータと、1バイトのマスクが取得される(ST25)。この1バイトのデータと、1バイトのマスクにより、図7A、7B、7Cに示すマスク動作が実行され、拡張レジスタの“RS”で選択されたページの“OFS”で指定された位置のデータの一部が書き換えられる(ST26)。
また、上記ステップ21において、データポートであると判別された場合、バッファ16から512バイトのデータが取得される(ST27)。この取得されたデータは、拡張レジスタ31の選択されたページの“OFS”で示された位置のデータポートを介して、例えばSDIO19の特定のファンクションに転送される(ST28)。
(ホストドライバ処理)
図13は、ホスト機器20の処理を示している。ホスト機器20に、メモリデバイス11が接続されると、メモリデバイス11が起動され、メモリデバイス11のRAM15に拡張レジスタ31が展開される。メモリデバイス11は、ホストドライバによって先ず、リードコマンド(CM48)を発行して、拡張レジスタ31のページ0のデータを取得する(ST31)。次に、取得したページ0のストラクチャレビジョンが確認され、どのバージョンの汎用情報フィールドを保持しているかが確認される(ST32)。この後、サポート機能数Nと、デバイス情報の先頭アドレスが取得される(ST33、ST34)。
次いで、ホスト機器20内に、取得した拡張機能に対応する専用機能ドライバがインストールされているかどうか検索される(ST35、ST36)。この結果、専用機能ドライバが無い場合、拡張レジスタのページ0に記載された機能識別コードが“0”であるかどかが判別される(ST37)。この結果、機能識別コードが“0”である場合、この拡張機能はサポートされていないため、このデバイスは使用できないと認識され、次のデバイスに対するドライバの検索に移る(ST34)。
また、ステップST37の判別の結果、機能識別コードが“0”でない場合、ホスト機器20にインストールされている標準機能ドライバが検索される(ST38、ST39)。この結果、標準機能ドライバが無い場合、この拡張機能はサポートされていないため、デバイスは使用できないと認識され、次のデバイスに対するドライバの検索に移る(ST34)。
また、ステップST35、ST36の検索の結果、標準機能ドライバが有った場合、及びステップST35、ST36の検索の結果、専用機能ドライバが有った場合、ページ0に記載されたデバイスのアドレス及びレングス数が取得される(ST40)。この動作がアドレス及びレングス数だけ実行される(ST41)。
この後、検索された専用機能ドライバ、又は標準機能ドライバがホスト機器20の例えばハードディスク25からRAM24にロードされ、ページ0に記載された1つ又は複数の拡張領域のアドレスポインタ(開始アドレス)が機能ドライバに渡され、その拡張機能が初期化される(ST42)。上記アドレス、レングス情報は、前記RAM24にロードした機能ドライバを実行するときに渡される。標準機能ドライバと専用機能ドライバでは、受け渡しできるアドレス、レングス情報の数が異なる可能性があるが、ページ0に登録された順番に受け渡しできる数だけ受け渡される。したがって、最初に登録されたアドレス、レングス領域は、共通的な機能レジスタとして働き、後ろに登録されているアドレス、レングス領域は、オプション的な役割を果たすことができる。
初期化は機能ドライバが行う。すなわち、機能ドライバは、ホストドライバから渡された開始アドレスを基に、その機能に割り当てられた拡張レジスタをアクセスしてデバイスを初期化する。初期化においては、デバイスの消費電力を考慮する必要がある。ホストが供給可能な電力の範囲でデバイスを使う必要があるためである。デバイスが複数のパワーモードを持っている場合、ホストが供給可能なデバイスパワー以下のパワーモードを選択する必要がある。ホストシステムは、別な手段によってホストシステムが供給可能な電力を機能ドライバに伝えることで、パワーモードの選択が可能となる。
上記ステップST34〜ST43の動作が、サポート機能数Nに達するまで繰り返される(ST43)。
尚、ページ0に例えば新たなフィールドが追加された場合、新しいフィールドの処理がステップST40、ST41の間に追加される。新しいフィールドを識別できないホストドライバは、そのフィールドをスキップするように構成される。
上記のように、ホスト機器20は、拡張レジスタ31のページ0の情報を取得し、この情報に基づき、ドライバを検索することにより、プラグ・アンド・プレイを実現することができる。また、従来のように拡張レジスタの固定位置を決める必要がなく、デバイスベンダーは任意の拡張レジスタ位置に機能を定義することができるため、機能拡張を容易に実装することができる。
図14は、図13の変形例を示すものであり、図13と同一部分には同一符号を付し、異なる部分についてのみ説明する。
図14は、専用機能ドラバと、標準機能ドライバの検索処理が異なっている。すなわち、ステップST34において、デバイス情報の先頭アドレスが取得された後、先ず、機能識別コードが“0”であるか否かが判別される(ST51)。この結果、“0”でない場合、すなわち、標準機能である場合、専用ドライバを使用するかどうかが判別される(ST53)。この結果、専用ドライバを使用しない場合、標準機能ドライバが検索される(ST54、ST55)。この検索の結果、標準機能ドライバが無い場合、及びステップST53において、専用機能ドライバを使用すると判別された場合、専用機能ドライバが検索される(ST52、ST56)。この検索の結果、専用機能ドライバがあった場合、及びステップST55において、標準機能ドライバが有った場合、前述したように、アドレス、レングス数が取得される(ST40)。
上記動作によっても、図13と同様に、プラグ・アンド・プレイを実現することができる。
尚、上記説明において、拡張機能用のドライバは、ホスト機器20内にインストールされ、ホスト機器20内を検索すると説明した。しかし、これに限定されるものではなく、拡張機能用のドライバは、メモリカード11に格納されていてもよい。この場合、メモリカード11も拡張機能用のドライバの検索対象とされる。
図33は、カードにオプション設定があり、そのオプションによって機能ドライバが異なる場合、機能ドライバを特定するための情報を示している。図33に示すように、機能特定コードは、オプションコードとファンクションコードの2種類の情報を示している。ファンクションコードは特定の標準化された機能仕様を示し、オプションの種類もこの機能仕様で定義される。オプションコードは、カードが機能ドライバに影響するオプションを実装しているかどうかを示す情報である。この例は、CMD48/49をサポートしているかどうかの情報と、CMD52/53をサポートしているかどうかの情報を示している。オプションコードが1バイトであるとすると、CMD48/49を用いるドライバは、“01h”(“h”は16進数を示す)で表され、CMD52/53を用いるドライバは、“02h”で表される。機能ドライバをホストシステムにインストールするとき、機能ドライバ実装コードとして登録される。二つのドライバがインストールされたホストシステムの場合、“01h”と“02h”のオプションコードを持っている。
CMD48/49を用いるように設計されたカードは、オプションコードに“01h”が表示されている。ホストシステムは、オプションコードに基づきCMD48/49のドライバを選択する。また、CMD52/53を用いるように設計されたカードは、オプションコードに“02h”が表示されている。ホストシステムは、オプションコードに基づきCMD52/53のドライバを選択することができる。
ここで重要なのは、ホストドライバは、オプション情報に関する知識が不要であり、汎用的なホストドライバが作れる点にある。オプション情報に関する知識は、機能ドライバがホストシステムにインストールされたときに与えられる。ホストドライバにオプション情報に関する知識は不要であるため、新しいカードをインストールした場合でも、ホストドライバを更新する必要がない。機能仕様は自由にオプションの内容を決めることができ、またこの方法により、ホストシステムにオプションの組み合わせに対応した複数の機能ドライバをインストールしておき、カードのサポート状況に応じて最適な機能ドライバを選択することができる。
(SDIOにおける拡張レジスタアクセス)
図15は、SDIOにおける拡張レジスタアクセスを示している。
SDメモリカードに対応するホストコントローラは、コマンドCMD48、CMD49を用いて拡張レジスタをアクセスして、拡張機能を制御することができる。すなわち、固定長ブロック、シングルブロック転送をサポートしている。
これに対して、SDIOカードに対応するホストコントローラでもコマンドCMD48、CMD49を用いて拡張レジスタをアクセスできるようにするとともに、拡張レジスタをSDIOの各ファンクション領域にマッピングすることで、SDIOコマンドCMD52(ライトコマンド)、CMD53(データ転送コマンド)からもアクセスすることが可能となる。SDIOコマンドを用いると、可変ブロック長、マルチブロック転送をサポートでき、ドライバの最適化を図ることができる。コマンドCMD48、CMD49でアクセスする場合、上記SDIO空間上のマッピングに関係なく、拡張レジスタをアクセスすることができる。
具体的には、拡張レジスタをSDIOで使用する場合、拡張レジスタの各ページは、各ファンクション領域にマッピングされる。図15に示す例の場合、拡張レジスタのページ0は、ファンクション領域61のファンクション0にマッピングされ、ページ1、ページ2はファンクション1にマッピングされ、ページ3はファンクション2にマッピングされている。ファンクション0は、各ページの機能レジスタがSDIOマップのどこに配置されているかを示すアドレス情報を保持している。このため、このアドレス情報を用いることにより、コマンドCMD48、CMD49を用いたドライバだけでなく、コマンドCMD52、CMD53を用いたドライバにより、拡張レジスタの各ページをアクセスすることが可能である。
尚、ホスト機器20は、拡張レジスタの第1ページに記載された汎用情報フィールドから、拡張機能に割り当てられた拡張レジスタの位置情報をドライバに渡す。これにより、拡張機能が任意の位置に配置されていても制御可能となる。
また、ホスト機器20は、前述したプラグ・アンド・プレイにより、メモリデバイス11とデータ転送が可能となった状態において、前記コマンドCMD48、CMD49、CMD52、CMD53を用いて、拡張機能部としてのSDIOとデータ伝送が可能となる。
上記実施形態によれば、メモリデバイス11のRAM15内に複数ページの拡張レジスタ31を設け、これら拡張レジスタ31のページ0に、特定のドライバを認識するための標準的な汎用情報フィールドを設定している。このため、ホスト機器20は、拡張レジスタ31のページ0の汎用情報フィールドを参照してドライバを設定することにより、プラグ・アンド・プレイを実現することができる。
また、拡張レジスタをアクセスするための専用のコマンドCMD48、CMD49を定義することにより、メモリ用のホストコントローラにおいても、追加機能を効率良く制御することができる。
しかも、データの転送は、512バイトの固定ブロック長の転送としているため、従来のメモリ用ホストコントローラから拡張レジスタをアクセスするための専用コマンドを発行できる。
さらに、コマンドの引数として有効データ長の情報や、ライト時のマスク機能を設定しているため、データの一部を書き換える際に、リード・モディファイ・ライトが不要であり、容易にデータの一部を書き換えることができる。
また、SDIOカード対応のホストコントローラにおいては、データポートをサポートしているため、ある特定デバイスに対するデータ転送が行え、かつ拡張レジスタ空間の消費量を低減できる実装が可能となる。
また、データポートを用いることにより、SDIOにおいて複数ブロックによるバースト転送コマンドをサポートすることができ、メモリ以外のデバイスのデータ転送を効率良く行うことができる。(本実施形態では記載されていなが、メモリにおいても複数ブロックによるバースト転送コマンドを定義すれば複数ブロック転送は可能になる。)
さらに、SDIOカード対応のホストコントローラにおいては、SDIOのアクセスコマンドを用いて、拡張レジスタをアクセスすることにより、小さいブロック長転送とマルチブロック転送とに対応可能となる。このため、さらに最適化したドライバを作ることが可能となる。
また、カードベンダーにより、拡張レジスタ上の任意の位置に追加機能を制御するレジスタを割り当てることを可能とし、実装したレジスタのアドレス情報をページ0の汎用情報フィールドから提供している。このため、定義された機能レジスタをリロケータブルに配置することが可能である。このため、従来標準化が必要であったアドレス割り当てを決める作業が不要であり、デバイスの製造を容易化できる。
尚、拡張レジスタは、複数ページに限定されるものではなく、1ページとし、1ページ内で、上記ページ0とページ1〜7に対応する領域を設定することも可能である。
(レビジョン確認による使用可能な機能の決定)
上記各機能は、その機能で定義した拡張レジスタ・セットにレビジョンを示すレジスタを具備する。また、機能ドライバは対応するレビジョンをドライバ自身が知っている。ある機能をレビジョンアップで拡張する場合、従来の機能と互換性を維持しつつ機能を拡張することにより互換性を維持することができる。リムーバブルカードを用いる場合、カードの機能レビジョンと、ホストシステムにインストールされている機能ドライバのレビジョンの組み合わせによって使用可能な機能が決定される。
図16は、レビジョン管理の例を示している。図16は、カードと機能ドライバのレビジョンに応じて、利用可能な機能の例を示している。例えば3つのレビジョン(A<B<C)がある場合を説明する。この場合、CはBの機能を包含し、BはAの機能を包含するような拡張が行われている。レビジョン管理は、機能ドライバによって行われる。機能ドライバ自身は自分のレビジョンを知っている。利用可能な機能は、図16に示すような組み合わせで決定される。全ての機能ドライバレビジョンで、レビジョンAの機能は使用可能であり、レビジョンBの機能を使うためには、機能ドライバレビジョンがB以上である必要がある。
(第2の実施形態)
図17、図18は、第2の実施形態に係るリードコマンドCMD48、及びライトコマンドCMD49のフィールド構成の一例を示している。尚、図17、図18において、図3、図6と同一部分には同一符号を付し、説明は省略する。
図17、図18に示すCMD48、CMD49は、図3、図6に示すCMD48、CMD49において、“RS”と“OFS”の12ビットで構成していたアドレスフィールドを “FNO”、“Addr”により構成される20ビットに拡張し、SDIOとの親和性・互換性を考慮している。
“MIO”フィールドは、メモリ空間と、SDIO空間を分離するビットであり、相互に独立して拡張レジスタを定義できる。このため、拡張レジスタを定義するときに双方の干渉を防ぐことができる。“MIO”=0のとき、メモリ用の拡張レジスタをアクセスでき、“MIO”=1のとき、SDIO用の拡張レジスタをアクセスできる。
“FNO/FID”フィールドは、“MIO”フィールドの値により、“FNO”と“FID”の一方に設定される。“MIO”=1の場合“FNO”は、機能番号を示す3ビットのフィールドであり、“MIO”=0の場合“FID”は、機能識別情報を示す4ビットのフィールドである。ビット数が異なるため別なシンボルで表記している。前記汎用情報フィールを読む場合は、“FNO/FID”=0を設定する。ホストドライバは、このフィールドを0にセットしておけば良い。“FID”は、メモリ空間では使用しないが、“FNO”はSDIO空間において8個の機能空間を区別するために使用される。
すなわち、“FNO/FID”(4ビット)は、“MIO”=1のとき、ビット38〜36は、“FNO”を示し、ビット35は、常に“0”とされる。
また、“FNO/FID”は、“MIO”=0のとき、ビット38〜36は、“FID”を示す。“FID”は、メモリ空間を増加せず、機能を識別するために使用される。
(メモリ空間を“FID”によって増やしても良く、これは制約ではない。)
カードに機能を実装するとき、“FID/FNO”にユニークな値が割り当てられ、後述するように、汎用情報のフィールド定義に表示される。このため、機能ドライバがデータポートへのコマンド発行時、引数に“FID/FNO”を設定することにより、カードは、コマンドが指定した機能に対するコマンドであることが確認できる。したがって、間違ったデータポートの指定により、誤書き込みによるデータ破壊、誤動作などを防止でき、安全性が担保される。
また、ホストはアドレス情報から機能を特定しようとするとアドレス情報をデコードしなければならないが、“FID/FNO”だけでも機能識別が可能となる。したがって、ホストドライバの制御を簡素化できる。すなわち、同じコマンドが複数の機能により混在して使用されるため、ホストおよびカードにおいて、各機能を識別することが可能なように、“FID/FNO”が設定されている。
“Addr”フィールド(17ビット)は、アドレスであり、128KBの空間をアクセスできる。“Addr”の上位8ビットは、ページ番号として用いられ、8ビットにより0〜7ページのうちの1ページが選択される。下位9ビットで選択されたページ内の512バイトのブロックがアクセスされる。すなわち、“MIO”、“FNO”(“MIO”=1)、“Addr”を用いることにより、拡張レジスタの位置が指定される。
図17に示す“Len”フィールド(8ビット)は、有効データ長を示している。
また、図18に示すライトコマンド(CMD49)において、“MW”は、マスクライトモードを指定するビットである。“MW”=0のとき、マスクがディスエーブルとされ、“MW”=1のとき、マスクがイネーブルとされる。
また、“Len/Mask”フィールドは、マスクがディスエーブル(“MW”=0)のとき、データ長が16−08ビットの9ビットに設定される。また、マスクがイネーブル(“MW”=1)のとき、データ長は1に設定され、16−08ビットのうちの下位8ビットにより書き込み動作が上述したように制御される。すなわち、8ビットの各ビットは、“1”のとき、レジスタのデータが書き込まれ、“0”のとき、レジスタのビットは変化されず、既にセットされた値が保存される。
第2の実施形態では、SDIOコマンドCMD52、CMD53がアクセス可能な空間と、CMD48、CMD49がアクセス可能なSDIO空間を一致させることができる。すなわち、どちらのコマンドを用いても同じ拡張レジスタ・セットをアクセスすることが可能になる。
(拡張レジスタのリードコマンド、第1の動作モード)
図19は、拡張レジスタのリードコマンド(CMD48)の第1の動作モードによる拡張レジスタのリード動作の例を示している。
図19に示すように、メモリデバイス11は、ホスト機器20からコマンド(CMD48)を受け取ると、レスポンス(R1)をホスト機器20に返し、その後、拡張レジスタ31から512バイトのデータブロックを読み出す。
具体的には、コマンド(CMD48)の引数としての“FNO”(MIO=1)、“Addr”により、ページ内の読み出すべきデータの位置が指定され、読み出すべき有効データ長が“Len”で指定される。このようにして指定された拡張レジスタ内のデータが、512バイトのデータブロックの先頭にセットされ、読み出される。512バイトのデータブロックのうち、“Len”で指定されたデータ長を超えるデータは、無効データとなる。データブロックの最後にはCRCコードが付加され、正しくデータが受け取れたかをチェックすることが可能とされている(無効データを含めてチェックを行う)。
図20は、第2の動作モードによるデータポートリードの動作の例を示している。
メモリデバイス11は、このコマンド(CMD48)を受け取ると、レスポンス(R1)を返し、その後に512バイトのデータブロックを返す。
メモリデバイス11は、コマンドの引数の“FID/FNO”が割り当てられた拡張レジスタ・セットに一致するかどうかを検証する。拡張レジスタ・セットは、“FNO”(“MIO”=1)と“Addr”によって特定される。これらが一致している場合、コマンドの引数“Addr”により、拡張レジスタの選択されたページ内の位置が指定される。データポートは、拡張レジスタマップ上において、1バイトのアドレスを占有するだけで良い。データポートであるかどうかはアドレスのデコードによって識別すれば良く、実際に1バイト幅のポートを通してデータが伝送される必要はないので、データ伝送性能には影響しない。このデータポートに割り当てられたデバイスから1ブロック(512バイト単位)のデータをリードすることができる。すなわち、1回当たり、1ブロック(512バイト単位)のデータをリードすることができる。この読み出されたデータは、例えばバッファ16に保持され、ホスト機器20によって読み出される。
続いて同じデータポートをリードすると、続きの512バイトのデータを読み出すことができる。データポートから読み出すデータを何処から取ってくるかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。512バイトのデータブロックの最後にCRCコードが付加され、正しくデータが受け取れたか否かがチェック可能とされている。
また、上記検証の結果、“FID/FNO”が機能に割り当てられた値と不一致である場合、データ転送動作は実行されず、データブロックは転送されない。
(拡張レジスタのライトコマンド、第1の動作モード)
図21は、拡張レジスタのライトコマンドの一例を示している。
メモリデバイス11は、このコマンド(CMD49)を受け取ると、レスポンス(R1)を返し、その後、512バイトのデータブロックを受け取る。
メモリデバイス11は、データブロックが正しく受け取れたかどうかを示すCRCコードをホスト機器20に返す。その後、このコマンドの処理が終了するまでビジーを返し、ホスト機器20が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ16に保持されている。
ライトコマンド(CMD49)において、リードコマンド(CMD48)と同一部分には同一符号を付している。ライトコマンドとリードコマンドは、“index”により区別される。“FNO”(“MIO”=1)と17ビットの“Addr”により、拡張レジスタのページと選択されたページ内のデータの位置が指定される。さらに、9ビットの“Len”フィールドにより、512バイトの拡張レジスタに書き込むデータ長が指定される。したがって、512バイト内の任意のデータ長(バイト単位)のデータを拡張レジスタの任意のページと場所に書き込むことが可能である。
ライトコマンド(CMD49)は、上記のように、コマンドの引数の中にマスクレジスタが設けられている。すなわち、“Mask”は、8ビット長のマスクレジスタを示している。このマスクレジスタにより、1バイトのデータのライトにおいて、ビット単位のオペレーションが可能となり、特定のビットにのみデータを書き込むことが可能となる。このため、1バイト内のビットオペレーションであれば、リード・モディファイ・ライトを行う必要がない。マスクレジスタは、データ長が1バイトのとき、すなわち、“Mask”の上位1ビットが“1”のとき有効となる。
(拡張レジスタのライトコマンド、第2の動作モード)
図22は、第2の動作モードによるライトデータポートの動作の例を示している。
メモリデバイス11は、このコマンド(CMD49)を受け取ると、レスポンス(R1)を返す。その後、メモリデバイス11は、コマンドの引数の“FID/FNO”が拡張レジスタ・セットに一致するかどうかを検証する。拡張レジスタ・セットは、“FNO”(“MIO”=1)と“Addr”によって特定される。これらが一致している場合、コマンドの引数“Addr”により、拡張レジスタの選択されたページ内の位置を指定し、512バイトのデータブロックを受け取る。
次いで、メモリデバイス11は、データブロックが正しく受け取れたかどうかを示すCRCコードをホストに返す。その後、このコマンド処理が終わるまでビジーを返し、ホスト機器20が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ16に保持されている。
コマンド処理において、コマンドの引数“Addr”により、拡張レジスタ内のページと位置が指定され、データポートが指定される。データポートは、拡張レジスタマップ上において、1バイトのアドレスを占有するだけでよい。このデータポートに、バッファ16に保持された1ブロック(512バイト単位)のデータをある割り当てたデバイスにライトすることができる。すなわち、1回当たり、1ブロックのデータをライトすることができる。
続いて同じデータポートをライトすると、続く512バイトのデータを割り当てたデバイスに書き込むことができる。データポートのデータを何処に渡すかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。
また、上記検証の結果、“FID/FNO”が機能に割り当てられた値と不一致である場合、データ転送動作は実行されず、データブロックは破棄される。
(汎用情報フィールドの使用例)
図23は、第2の実施形態に係るFIDの指定に関する例を示した図である。汎用情報フィールドの意味は、図10と同じである。異なる点は、拡張アドレス、長さフィールドのフォーマットで、“FID/FNO”の値を設定するために4ビットフィールドが確保されていることにある。各機能毎にユニークな“FID/FNO”が設定される。カードに実装された各機能は自分の“FID/FNO”を認識している。
(リードコマンド(CMD48)の動作)
図24は、図19、図20に示すリードコマンド(CMD48)に対応するメモリデバイス11内のコントローラ11aの動作を示している。
リードコマンドを受けると、CPU13により、コマンドの引数“FID/FNO”が割り当てられた拡張レジスタ・セットに一致するかどうかが検証される(ST51)。拡張レジスタ・セットは、“FNO”(“MIO”=1)と“Addr”によって特定される。検証の結果、両者が一致している場合、コマンドの引数の“Addr”が解析され、リードコマンドがデータポートかどうか判別される(ST52)。すなわち、“FNO”(“MIO”=1)と“Addr”でデータポートとして定義されたアドレスであるかどうかが判別される。
この結果、アドレスがデータポートとしてのアドレスではなく、コマンドが拡張レジスタのリードであると判別された場合、第1の動作モードにより、位置“Addr”に基づき、拡張レジスタ31の選択されたページからデータ長“Len”のデータが取得される(ST53)。この取得されたデータ長“Len”のデータは、バッファ16の512バイトのデータブロックにセットされる(ST54)。
一方、ステップST52において、リードコマンドがデータポートであると判別された場合、第2の動作モードにより、拡張レジスタ31の選択されたページの予め設定された位置のデータポートを介して、例えばSDIO19の特定の機能(ファンクション)から512バイトのデータが取得される(ST55)。この取得されたデータは、バッファ16の512バイトのデータブロックにセットされる(ST56)。
上記ステップST51の判別の結果、データポートのコマンドでは無い場合、処理が終了される。
(ライトコマンド(CMD49)の動作)
図25は、上記ライトコマンド(CMD49)に対応するメモリデバイス11内のコントローラ11aの動作を示している。
ライトコマンドを受けると、CPU13(コマンド処理部14a)により、コマンドの引数“FID/FNO”が割り当てられた拡張レジスタ・セットに一致するかどうか検証する(ST61)。拡張レジスタ・セットは、“FNO”(“MIO”=1)と“Addr”によって特定される。検証の結果、両者が一致している場合、コマンドの引数“Addr”が解析され、ライトコマンドがデータポートかどうか判別される(ST62)。すなわち、“FNO”(“MIO”=1)と“Addr”で予め設定されたデータポートの位置かどうかが判別される。
この結果、ライトコマンドがデータポート以外と判別された場合、コマンドの引数“MW”が“1”かどうか、すなわち、マスクライトかどうかが判別される(ST63)。
この判別の結果、マスクライトではないと判別された場合、拡張レジスタ処理部14cにより拡張レジスタのライト処理が行われる。すなわち、バッファ16のデータブロックから“Len”により指定された長さのデータが取得される(ST64)。この取得されたデータは、“Addr”に基づき、拡張レジスタの選択されたページの指定された位置にセットされる(ST65)。
一方、上記ステップST63において、“MW”=“1”であり、マスクライトであると判別された場合、拡張レジスタ処理部14cによりバッファ16のデータブロックから1バイトのデータが取得されるとともに、引数から1バイトのマスクが取得される(ST66)。
次いで、1バイトのデータと、1バイトのマスクにより、図7A、7B、7Cに示すマスク動作が実行され、“Addr”で指定された拡張レジスタの所定のページ、所定の位置に1バイトのマスク動作が実行されたデータがセットされる(ST67)。
また、上記ステップST62において、ライトコマンドがデータポートであると判別された場合、バッファ16のデータブロックから512バイトのデータが取得される(ST68)。この取得されたデータは、拡張レジスタ31の指定されたページの位置のデータポートを介して、例えばSDIO19の特定の機能に送られる(ST69)。
上記ステップST61の判別の結果、データポートのコマンドでは無い場合、処理が終了される。
(CMD58、CMD59)
図26、図27は、データの転送効率を良くするためのマルチブロック転送コマンドを示すものであり、図26は、CMD58(Multi-Block Read)、図27は、CMD59(Multi-Block Write)を示している。
CMD58、CMD59の引数は、CMD48、CMD49と類似しているが一部定義が異なる。また、CMD58には、CMD48の引数“Len”がなく、CMD59には、CMD49の引数“MW”及び“Len/Mask”がない。これは、マルチブロック転送がデータポートに対する転送を想定しているためである。CMD58、CMD59はオプションコマンドであり、データポートは、複数のシングルブロック転送コマンドCMD48、CMD49で代替できるようになっている。
マルチブロック転送は、データポートを経由したデータ転送を想定している。したがって、このコマンドのアドレスが、拡張レジスタ空間の中のデータポートとして定義されたアドレスと一致した場合のみ、このコマンドが有効になる。このため、このコマンドが通常の拡張レジスタに対して実行された場合、エラーとなりデータ転送は実行されない。
“FID/FNO”フィールド(4ビット)には、発行されたコマンドがどの機能で用いるコマンドであるかを識別するためのコードが設定される。このため、“FID”フィールドを用いることにより、この値で機能を識別することができ、実装が容易になる。アドレス“Addr”フィールドでもファンクションは識別可能である。しかし、カードによって割り当てられるアドレスが異なるため、ホストドライバがアドレスから機能を特定することは管理がし難いという問題がある。このため、ホストドライバは、“FID”フィールドの値に基づき、機能毎にホストシステムに実装されているデータバッファなどを切り替え制御に用いることができる。
CMD58/59の引数には、データ長を指定する“Len”フィールドがない。この理由は、長いデータ伝送は、長いブロック数を指定する必要があり、この情報はリード/ライトコマンドの引数には指定しきれないためである。したがって、CMD58/59を発行する前にデータ転送に必要なブロック数を指定しておく必要がある。このため、例えば拡張レジスタにブロック数を設定するレジスタ定義し、CMD49で設定する方法や、ブロック数を設定するコマンド(CMD23)を、CMD58/59を発行する直前に発行する、などの方法が用いられる。
拡張レジスタにデータを設定する場合、各機能で独立して設定することができ、他の機能から影響されない。共通のブロック数コマンド(CMD23)を用いる場合、メモリマルチブロックコマンドに対するブロック数の設定と区別が必要である。このため、各CMD58/59の直前に発行する必要があり、ホストドライバは、CMD23の直後に他のコマンドが発行されないように順番を管理する必要がある。
ホストは、複数機能カード/デバイスのひとつの機能を特定するためには、初期化で得られるカード固有アドレス(RCA:Relative Card Address)やデバイスID、前記“MIO”と前記“FID/FNO”情報が必要である。
図28は、第2の実施形態に係る汎用情報フィールドの表示位置を示している。図28(a)に示すメモリ空間では、拡張レジスタのページ0に配置され、図28(b)に示すSDIO空間では、従来のレジスタとコンフリクトしない特定の位置に配置される。例えば図28(b)において、SDIO用汎用情報は、機能(ファンクション)0の“008FFh”−“00800h”(512バイト)(“h”は16進数を示す)0に配置されている。
図29は、第2の実施形態に係るメモリ空間とSDIO空間の対応関係の一例を示している。図29において、図15と同一部分には同一符号を付している。
メモリ拡張レジスタは、CMD48/49によりアクセスが可能である。具体的には、512バイトの固定ブロック長で、シングルブロック転送が行われる。さらにデータポートの場合、CMD58/59でマルチブロック転送を行うことができる。SDIO拡張レジスタは、CMD48/49だけでなく、CMD52/53によってもアクセスが可能である。CMD53は可変長コマンドのため、データポートでなくてもSDIO拡張レジスタのアクセスに用いることができる。
(機能ドライバインストール)
SDIO機能(CMD52/53)が使用可能かどうかは、ホストシステムがサポートする機能によって決まる。SDIOをサポートしないホストは、CMD48/49、CMD58/59を用いた機能ドライバをインストールする。SDIOをサポートするホストシステムは、さらにCMD52/53を用いた機能ドライバもインストールすることが可能となる。
尚、CMD53は、例えば可変ブロック長、及び複数ブロック転送をサポートするリード又はライトが可能なコマンドであり、CMD52は、例えばデータを持たず、引数とレスポンスで1バイトのデータのリード、ライトを可能とするコマンドである。
CMD48/49のSDIO拡張レジスタ空間は、CMD52/53の空間と等価である。CMD53が可変ブロック長とマルチブロック転送をサポートするため、データ転送は最適化されたSDIOドライバを使用することにより一層効率的に実行される。
CIS(Card Information Structure)を参照することなく、CMD48/49をサポートするホストが、その情報を参照するように、SDIOの汎用情報は、前記した機能0の特定の位置から見られる。
(機能ドライバの選択)
SDIO対応カードに関して、CMD52/53を用いた機能ドライバがインストールされている場合、その機能ドライバが使用され、インストールされていない場合、CMD48/49、CMD58/59を用いた機能ドライバが使用される。
SDIO非対応カードに関して、CMD48/49、CMD58/59を用いた機能ドライバが使用される。
(SDIOの初期化動作)
図30は、コンボカードにおけるSDIOの初期化動作を概略的に示している。
従来、SDIOの初期化シーケンスは、最初にSDIO初期化コマンド(CMD5)を実行しないとSDIO機能が有効にならないという定義になっている。このため、コンボカードでメモリを使用している場合でも、SDIOを使用する時点で再初期化が必要になるため、ホストにとって使いにくい仕様となっていた。
通常、I/O機能は、その機能を使う直前に初期化するのがシステムリソースを無駄にしないためや、消費電力を無駄に消費しないために好ましい。機能が初期化されるタイミングとしては、機能を用いるアプリケーションが起動したタイミングで行うのが良い。
また、再初期化では、カード固有アドレス(RCA)の変更が行われるため、メモリのアクセス方法にも影響を与えてしまう。メモリ制御に影響を与えず、SDIO機能を有効にするため、メモリ初期化シーケンスを基本として、SDIO機能は後で追加できることが望ましい。
そのため、図30に示すように、メモリデバイス11が起動され、初期化されると(ST71)、コマンド(CMD3)が発行され、カード固有アドレス(RCA)が取得される(ST72)。この後、コマンド(CMD7)が発行され(ST73)、メモリデバイス11が転送状態、すなわち、メモリが使用可能な状態に設定される(ST74)。この状態にいて、SDIOの初期化コマンド(CMD5)が発行される(ST75)。これにより、SDIOが初期化され、CMD52とCMD53の受付が可能とされる(ST76)。
尚、カード固有アドレス(RCA)はメモリの初期化で取得した値を維持する。これは初期化方法の追加であり、従来のSDIO初期化シーケンスでも初期化は可能であり互換性がある。
上記構成によれば、機能を用いるアプリケーションが起動したタイミングにおいて、機能が初期化されるため、メモリ制御に影響を与えることなく、各機能を初期化することができる。
(機能ドライバインターフェース)
従来、SDIOは、共通レジスタに必要な制御ビットを割り当てて制御していた。これを行うためハードウェアを実装する必要がある。専用の機能ドライバで機能を制御する場合、実装は自由に行うことができる。このため、必ずしも共通レジスタで制御を行う必要はない。従来共通レジスタで行っていた制御を機能ドライバのAPI(Application Program Interface)として定義すれば、制御をソフトウエア化することができる。APIレベルを標準化することにより、ハードウェアによる標準化は不要であり、実装を容易化することができる。
APIの例を以下に示す。
(1) Initialize Function
機能を初期化するために、ホストドライバから呼び出す。
(2) Abort/Reset Function
機能のアボート、又はリセット。
(3) Get Function Information
機能レビジョンの読み出し。
機能情報の読み出し(サポート情報など)。
割り込み情報の読み出し (ポーリング)。
(4) Power Consumption Control
機能が実装しているパワーモード情報。
(5) Power Off Notification
電源を切っても良いタイミングを通知する。
(6) Application Interface
アプリケーションとの間の制御インターフェース。
特に、複数機能が実装されているカードにおいて、カードの電源を切る場合、各機能が電源を停止できる状態としてから、ホストはカード電源を切る必要がある。Power Off Notificationはこの制御に用いられるAPIである。
図31は、メモリデバイス11としてのSDカードとホスト機器20の機能インターフェースの関係を概略的に示している。
ホスト機器20は、ホストコントローラ21、ホストドライバ71、ファイルシステム72、メモリアプリケーション73、機能ドライバ74、機能アプリケーション75により構成されている。また、メモリデバイス11としてのSDカードは、拡張レジスタ31、例えばSDIOからなる機能ハードウェア19を含んでいる。
ホスト機器20において、ホストドライバ71は、機能ドライバ74を見つけ、ロードする機能がサポートしている。すなわち、ホストドライバ71は、拡張レジスタの汎用情報フィールドを参照して、機能ドライバ74を検出し、その機能ドライバを実行することにより、拡張機能を使用することができる。また、拡張機能レジスタ31を制御する機能ドライバ74と機能アプリケーション74との間は、機能仕様により定義されたAPIによりコミュニケートされる。
SDカードは、標準化のため、機能仕様により定義された拡張機能レジスタ31と、ホストドライバ71が機能ドライバ74を見つけてロードすることができるように、上述した汎用情報フィールドを有している。
ホストコントローラ21とメモリデバイス11は、上述したコマンドCMD48/49等を用いてコミュニケートされる。
上記構成によれば、従来共通レジスタで行っていた制御を機能ドライバのAPIとして定義することにより、制御をソフトウエア化することができる。また、APIレベルを標準化することにより、ハードウェアによる標準化が不要であり、実装を容易化することができる。
また、ホストドライバ71は、拡張レジスタの汎用情報フィールドを参照して、機能ドライバ74を検出し、その機能ドライバを実行することにより、拡張機能を使用することができる。したがって、ホスト機器20は、容易に拡張機能を使用することが可能である。
(“FID”によるデータバッファの制御)
メモリデバイス11は、アドレス情報を識別することにより、どの機能に対するコマンドであるかを判別することが可能ではある。しかし、アドレス範囲は機能によって異なるため、ホスト機器20はアドレスから機能を識別するのが難しい。
このため、上述したように、“FID/FNO”を用いることにより、ホスト機器20は簡単に機能を識別することが可能である。
また、“FID/FNO”を用いることにより、例えばホスト機器20の複数のバッファを制御することが可能である。
図32に示すように、ホスト機器20は、メモリデバイス11としてのSDカードの複数の機能に対してデータ転送を行う場合、各機能に対応して独立したバッファ81、82を持っている。これらバッファ81、82は、マルチプレクサ(MUX)83を介してホストコントローラ21に接続されている。このマルチプレクサ83を“FID/FNO”により制御することにより、各機能に対応したバッファ81、82を選択することができる。
すなわち、ホスト機器20は、CMD58/59に設定した“FID/FNO”に応じて、対応するバッファ81、82をマルチプレクサ83により選択することができる。
ホストコントローラ21から例えばリードコマンドCMD58が発行された場合、メモリデバイス11の対応する機能の拡張レジスタから読み出されたデータは、ホストコントローラ21を介してマルチプレクサ83に供給される。マルチプレクサ83は、“FID/FNO”に基づき、受け取ったデータをバッファ81、82のうちの一方に供給する。
また、ホストコントローラ21から例えばライトデータコマンドCMD59が発行された場合、マルチプレクサ83は、“FID/FNO”に基づき、バッファ81、82のうちの一方から選択されたデータをホストコントローラ21に供給し、ホストコントローラ21は、メモリデバイス11にデータを転送する。メモリデバイス11は、“FID/FNO”に基づき、対応する機能の拡張レジスタにデータを供給する。
このように、“FID/FNO”を用いて、マルチプレクサ83を制御することにより、各機能に対応したバッファ82、83を確実に選択することが可能である。
(第3の実施形態)
上記のように、拡張レジスタをメモリデバイスとしてのSDカードの内部に設け、ホスト機器から供給されるコマンドCMD48、CMD49、CMD58、CMD59によって拡張レジスタにデータを書き込んだり、拡張レジスタからデータを読み出したりすることが可能されている。
第3の実施形態では、ホスト機器20から拡張機能部19に必要なコマンドや、メッセージを転送したり、拡張機能部19からのレスポンスをホスト機器20に転送したりする具体的な方法について説明する。
第3の実施形態は、拡張機能の動作に必要なコマンドとレスポンスを定義するとともに、これらコマンドとレスポンスを受け渡す場所を定めている。さらに、ホスト機器20と拡張機能部19との間で、長いデータを転送する場合、必要に応じて例えばコマンドペイロードと称するデータを追加し、データを転送する方法を定義する。
図34は、第3の実施形態を示すものであり、ホスト機器20とメモリデバイス11としてのSDカードとの関係を、ファームウェアレベルで概略的に示している。図34において、図1と同一部分には、同一符号を付している。
ホスト機器20は、拡張機能アプリケーションを20−1、カードコマンド発行部20−1を有している。
メモリデバイス11は、コントローラ11a、NANDフラッシュメモリ、拡張機能部19を有している。コントローラ11aは、カードコマンド制御部11−1、拡張レジスタ31、メモリ制御部11−2を有している。
ホスト機器20からメモリデバイス11の拡張機能部19にコマンドやメッセージなどのデータを送受信する場合、カードコマンド発行部20−2は、CMD48/49/58/59のいずれかと、コマンドヘッダ20a、レスポンスヘッダ20c、及び必要に応じてコマンドペイロード20b、レスポンスペイロード20dを発行する。
すなわち、ホスト機器20からメモリデバイス11にデータを転送する場合、コマンドヘッダ20aと、必要に応じてコマンドペイロード20bが用いられる。コマンドヘッダ20aは、CMD49によりメモリデバイス11に供給され、コマンドペイロード20bは、CMD59によりメモリデバイス11に供給される。
一方、ホスト機器20により、メモリデバイス11の拡張機能からのレスポンスを受け取る場合、レスポンスヘッダ20cと、必要に応じてレスポンスペイロード20dが用いられる。レスポンスヘッダ20cは、CMD48を用いて受け取られ、レスポンスペイロード20dは、CMD58(Multi-Block Read)を用いて受け取られる。
(コマンドCMD58、59)
図35は、リードコマンドとしてのCMD58を示し、図36は、ライトコマンドとしてのCMD59を示している。図34、図35において、CMD58/59の引数は、図26、図27と類似する。このため、図26、図27と異なる部分についてのみ説明する。
図26、図27に示す例の場合、長いデータを転送する際、CMD58/59を発行する直前において、ブロック数を設定するCMD23を発行した。
これに対して、第3の実施形態において、CMD58/59は、CMD23を用いることなく、長いデータを転送可能としている。
図35、図36において、図26、図27と異なる部分は、引数“BUS” (Block Unit Select)と“BUC”(Block Unit Count)である。“FNO”は、“FID/FNO”と実質的に同一であり、“MIO”により選択されたメモリ空間、又はSDIO区間における機能空間を区別するために使用される。
“BUS”は、ブロックユニットのサイズを指定するフィールドである。“BUS”=“0”の場合、ブロックユニットサイズは、512バイトであり、“BUS”=“1”の場合、ブロックユニットサイズは、32Kバイトである。32Kバイトは、64ブロックデータ(64×512バイト)が1ブロックユニットとして扱われることを示している。
“BUC”は、ブロックユニット数を指定するフィールドである。このフィールドで指定するブロックユニットサイズは、“BUS”で指定されたブロックユニットサイズによって計算して転送するデータの合計のサイズを計算する。ただし、データ転送時のデータサイズの単位となるブロックはBUSに関らず、512バイト固定である。
また、後述するように、“ADDR”(アドレスフィールド)において指定されたアドレスにより、拡張レジスタのポートが指定される。
(コマンドの送受信パターン)
図37は、ホスト機器20とメモリデバイス11との間において送受信されるコマンドのパターンを示している。コマンドの送受信パターンとして、例えば3つのタイプがある。
図37(a)に示すタイプ1は、CMD49によりコマンドヘッダ20aをホスト機器20からメモリデバイス11に送信し、CMD48によりメモリデバイス11からのレスポンスヘッダをホスト機器20で受信する場合を示している。
このタイプ1のパターンは、短いデータの送受信に適している。
図37(b)に示すタイプ2は、CMD49によりコマンドヘッダ20aをホスト機器20からメモリデバイス11に送信し、この後、CMD59によりコマンドペイロード20bをホスト機器20からメモリデバイス11に送信する。この後、CMD48によりメモリデバイス11からのレスポンスヘッダ20cをホスト機器20で受信する場合を示している。
コマンドヘッダ20aの送信とコマンドペイロード20bの送信の順番は、この限りではなく、先ず、コマンドペイロード20bを送信し、次いで、コマンドヘッダ20aを送信してもよい。
このタイプ2のパターンは、512バイトより長いデータを拡張機能に送信する場合に適している。
図37(c)に示すタイプ3は、CMD49によりコマンドヘッダ20aをホスト機器20からメモリデバイス11に送信し、この後、CMD48によりメモリデバイス11からのレスポンスヘッダ20cをホスト機器20で受信し、次いで、CMD58によりメモリデバイス11からのレスポンスペイロード20dをホスト機器20で受信する場合を示している。
ここで、レスポンスドヘッダ20cの受信とレスポンスペイロード20dの受信の順番は、この限りではなく、先ず、レスポンスペイロード20dを受信し、次いで、レスポンスヘッダ20cを受信してもよい。
このタイプ3のパターンは、512バイトより長いデータを拡張機能から受信する場合に適している。
コマンドペイロード20bやレスポンスペイロード20dを必要とするかどうかは、後述するように、コマンドヘッダ20aにより指定される。
図38は、コマンドヘッダ20a、コマンドペイロード20b、レスポンスヘッダ20c、レスポンスペイロード20dのデータ構造の例を示している。
コマンドヘッダ20aは、512バイトにより構成され、例えば“オペレーションコード(OPコード)”、“rsv”、“アーギュメント長”、“ペイロード長”、“アーギュメント”、“パディング”を含んでいる。コマンドヘッダ20aのデータ構造は、後述するように、“OPコード”の内容により、“アーギュメント”の内容が変更される。
“OPコード”は、拡張機能を動作させるためのコマンドのコードを示している。さらに、後述するように、コマンドペイロード20bやレスポンスペイロード20dを必要とするかどうかは、“OPコード”内において指定される。
“アーギュメント長”は、“アーギュメント”のデータ長を示し、“ペイロード長”は、ペイロードのデータ長を示している。
“パディング”は、コマンドヘッダの長さを機器のデータ転送処理単位(512バイト)に揃えるためのデータであり、データそのものに意味はない。コマンドペイロード20b、レスポンスヘッダ20c、レスポンスペイロード20dの“パディング”も、コマンドヘッダ20aの“パディング”と同様である。
コマンドペイロード20bは、512バイト×N(Nは、1以上の自然数)のデータ長を有し、このデータ長は、コマンドヘッダ20aのペイロード長により管理される。コマンドペイロード20bは、例えば実データとしての“コマンドペイロード”と“パディング”とにより構成されている。“コマンドペイロード”の内容は、“OPコード”に応じて変わるものである。
例えば“OPコード”が拡張処理部19を介してNANDフラッシュメモリ18にデータを書き込む処理を指示する場合、コマンドペイロードは、書き込みデータである。
また、拡張処理部19が認証処理機能を有する場合において、“OPコード”が暗号化キーブロックのデータを書き込む指示である場合、“コマンドペイロード”は、暗号化キーブロックのデータとなる。
レスポンスヘッダ20cは、512バイトにより構成されている。レスポンスヘッダ20cは、例えば“レスポンスコード”、“レスポンスデータ長”、“レスポンスデータ”、“パディング”を含んでいる。
レスポンスペイロード20dは、“レスポンスペイロード”と“パディング”により構成されている。“レスポンスペイロード”の内容は、レスポンスの内容に従って変化する。レスポンスが、拡張機能を介してNANDフラッシュメモリのデータを読み出した結果である場合、“レスポンスペイロード”の内容は、読み出しデータである。
(コマンドヘッダ、ペイロード、及びレスポンスヘッダの例)
図39、図40は、コマンドヘッダ、ペイロード、及びレスポンスヘッダの例を示している。
図39は、拡張機能がメモリデバイス11の認証処理で使用される暗号化キーを処理する機能を有する場合の例を示している。
メモリデバイス11の認証処理で使用される暗号化キーブロック(Encrypted Key Block: EKB)と称するデータをメモリデバイス11に書き込む場合において、EKBをメモリデバイスに書き込むため、“Write EKB”と称するコマンドを送信する例を示している。
図39(a)は、この場合のコマンドヘッダ20aの一例を示すものである。
“OP Code”(OPコード)は“80h”であり、“Write EKB”コマンドを示している。
“Reserved”は、将来の拡張目的や機器がデータ処理し易いように、データの位置調整のために設定されている。
“Argument Length”は、このコマンドのアーギュメントの長さを示し、この例では“04h”が設定されている。
“Payload Length”は、ペイロードの長さを示し、“N”が設定されている。
“Block Number”から“Padding data”まではアーギュメントとして扱われる。“Block Number”は記録するEKBの番号を示し、“n”は、複数のEKBのうちの1つを区別するための識別番号である。
“Reserved”及び“Padding Data”は、前述した通りである。
図39(b)は、この例におけるコマンドペイロード20bの一例を示している。“Write EKB”の場合、“マンドペイロード”として、EKBデータそのものを転送する。コマンドペイロード20bの長さは、前述したコマンドヘッダ20aの“Payload Length”で規定される。メモリデバイス11は、コマンドペイロード20bを受け取る前に、コマンドヘッダaにより“ペイロード長”が通知されることにより、記録のための事前準備を行うことができる。
図39(c)は、この例におけるレスポンスヘッダ20cの一例を示している。“Write EKB”の場合、レスポンスヘッダ20cは、“Response Code”と“Padding Data”により構成される。“Response Code”には、EKBデータの書き込み処理結果が示される。例えば書き込みが成功した場合、“Response Code”として“00h”が設定される。
図40は、拡張機能がメモリデバイス11の認証処理で使用されるEKBデータをメモリデバイスから読み出す場合に使用する“Read EKB”と称するコマンドを送信する例を示している。
図40(a)は、この場合のコマンドヘッダ20aの一例を示すものである。“OP Code”、“Reserved”、“Argument Length”、“Payload Length”の意味は、図39に示す“Write EKB”と同様である。
“OP Code”は“81h”であり、“Read EKB”コマンドを示している。
“Argument Length”は、この例の場合、“0Ch”に設定されている。
“Payload Length”は、“N”が設定されている。
“Block Number”から“Padding data”まではアーギュメントとして扱われる。“Block Number”は、記録されたEKBの番号“n”を示している。
“EKB Offset”は、読み出すEKBの読み出し開始アドレスを示している。
“EKB Length”は、読み出すEKBの長さを示している。
図40(b)は、この例におけるレスポンスペイロード20bの一例を示している。“Read EKB”の場合、レスポンスペイロード20bは、コマンドヘッダ20aで指定された“Block Number”、“EKB Offset”、“EKB Length”に基づき、拡張機能部19から読み出されたEKBデータをホスト機器20に転送する。このため、“レスポンスペイロード”は、EKBデータそのものである。
レスポンスヘッダ20cは、“Read EKB”の場合の“レスポンスヘッダ”は、“Response Code”と“Padding Data”により構成される。“Response Code”には読み出し処理の結果が示される。例えば読み出し処理が成功した場合、“00h”が設定される。
この例において、“Response Data”は使用されなかったが、EKBデータを転送するとき、EKBデータのダイジェストデータを“Response Data”に記録してデータ転送することもできる。このダイジェストデータは、例えば暗号のハッシュ関数SHA1等を利用することが可能であり、メモリのデータ転送と計算処理の値を分けてメモリデバイス11からホスト機器20に転送することが可能である。
図41は、コマンドヘッダ20aの“OP Code”の一例を示している。
“OP Code”は、拡張機能の処理コマンドを1から順番に割り振ることも可能である。また“OP Code”内にコマンドペイロード20bや、レスポンスペイロード20dの有無を示すビットを割り当てることも可能である。
図41において、“OP Code”の6ビット目は、例えば“コマンドペイロードビット”と呼ばれ、コマンドペイロードを必要とするかどうかを示すビットである。“コマンドペイロードビット”が“1”である場合、このコマンドはコマンドペイロードを送ることを示す。
また、“コマンドペイロードビット”が“0”である場合、このコマンドはコマンドペイロードを送らず、コマンドヘッダのみ、コマンド処理を実行することを示す。
“OP Code”の5ビット目は、“レスポンスペイロードビット”と呼ばれ、レスポンスペイロードを必要とするかどうかを示すビットである。“レスポンスペイロードビット”が“1”である場合、このコマンドはレスポンスペイロードをメモリデバイスが送信することを示す。
また、“レスポンスペイロードビット”が“0”である場合、メモリデバイスはレスポンスペイロードを送信せず、コマンド処理の実行結果として、レスポンスヘッダのみ送信することを示す。
図42は、第3の実施形態に適用される拡張レジスタ31のマップの一例を示している。このマップにおいて、オフセットは、拡張レジスタの先頭アドレスからの相対アドレスを示しており、このオフセットは、CMD58、CMD59の“ADDR”フィールドにより指定される。
オフセット“4”は、“拡張レジスタステータス”と称するレジスタを示している。この“拡張レジスタステータス”は、拡張レジスタがアイドル状態であるか、送信状態であるか、受信状態であるかを示す読み出し専用のレジスタである。
オフセット“8”は、“拡張レジスタオペレーション”と称するレジスタを示している。この拡張レジスタオペレーション”は、CMD58、CMD59により使用される書き込み、又は読み出し可能なレジスタである。このレジスタは、リセット可能とされている。
オフセット“12”は、“拡張コマンドポート”と称するレジスタであり、拡張コマンドの書き込み専用ポートである。
オフセット“13”は、“拡張コマンドペイロードポート”と称するレジスタであり、コマンドペイロードの書き込み専用ポートである。
オフセット“14”は、“拡張レスポンスペイロードポート”と称するレジスタであり、拡張レスポンスペイロードの読み出し専用ポートである。
オフセット“15”は、“拡張レスポンスポート”と称するレジスタであり、拡張レスポンスの読み出し専用ポートである。
(トランザクションデータ(タイプ1))
図43は、図37(a)に示すCMD49によりコマンドヘッダ20aをホスト機器20からメモリデバイス11に送信し、CMD48によりメモリデバイス11からのレスポンスヘッダをホスト機器20で受信するタイプ1の場合のトランザクションデータを示している。
ホスト機器20よりCMD49が発行されてコマンドヘッダ20aが転送されると、図18に示すCMD49の“Addr”により、拡張レジスタ内のページと位置が指定され、“拡張コマンドポート”が指定される。この“拡張コマンドポート”を介して、拡張機能部19にOPコード等が転送される。
また、ホスト機器20よりCMD48が発行されると、図17に示すCMD49の“Addr”により、拡張レジスタ内のページと位置が指定され、“拡張レスポンスポート”が指定される。この“拡張レスポンスポート”を介して、拡張機能部19からレスポンスヘッダ20cが読み出され、ホスト機器20に転送される。
図44は、トランザクションデータ(タイプ1)のタイミングチャートを示している。
図44に示すように、メモリデバイス11は、CMD49を受け取ると、レスポンスR1を返し、その後、512バイトのデータブロックとしてのコマンドヘッダ20aを受け取る。
メモリデバイス11は、コマンドヘッダ20aが正しく受け取れたかどうかを示すCRCコードをホスト機器20に返す。その後、コマンドヘッダ20aに記載されたコマンド処理が終わるまでビジーを返し、ホスト機器20が次のコマンドを発行できるタイミングを知らせる。コマンドヘッダ20aは、バッファ16に保持されている。
コマンド処理において、CMD49の引数“Addr”により、拡張レジスタ内のページと位置が指定され、データポートとしての“拡張コマンドポート”が指定される。この“拡張コマンドポート”を介してバッファ16に保持された1ブロック(512バイト)のコマンドヘッダが拡張機能部19の割り当てられたデバイスに書き込まれる。
この後、メモリデバイス11は、CMD48を受け取ると、レスポンスR1を返す。
コマンド処理において、メモリデバイス11は、CMD49の引数“Addr”により、拡張レジスタ内のページと位置を指定し、データポートとしての“拡張レスポンスポート”が指定される。この“拡張レスポンスポート”を介して拡張機能部19の割り当てられたデバイスから、512バイトのデータブロックとしてのレスポンスヘッダ20cが読み出される。この読み出されたレスポンスヘッダ20cは、ホスト機器20に転送される。
(トランザクションデータ(タイプ2))
図45は、図37(b)に示すCMD49によりコマンドヘッダ20aをホスト機器20からメモリデバイス11に送信した後、CMD59によりコマンドペイロード20bを送信し、CMD48によりメモリデバイス11からレスポンスヘッダを読み出し、ホスト機器20で受信するタイプ1の場合のトランザクションデータを示している。
タイプ1と同様に、ホスト機器20よりCMD49が発行されてコマンドヘッダ20aが転送されると、CMD49の“Addr”により、拡張レジスタ内のページと位置が指定され、“拡張コマンドポート”が指定される。この“拡張コマンドポート”を介して、拡張機能部19にOPコード等が転送される。
次いで、ホスト機器20よりCMD59が発行されてコマンドペイロード20bがメモリデバイス11に転送され、拡張レジスタの“拡張コマンドペイロードポート”を介して、拡張機能部19に複数のペイロードブロックが転送される。
この後、ホスト機器20よりCMD48が発行されると、拡張レジスタの“拡張レスポンスポート”を介して、拡張機能部19からレスポンスヘッダ20cが読み出され、ホスト機器20に転送される。
図46は、トランザクションデータ(タイプ2)のタイミングチャートを示している。
図46に示すように、メモリデバイス11は、CMD49を受け取ると、レスポンスR1を返し、その後、512バイトのコマンドヘッダ20aを受け取る。
メモリデバイス11は、コマンドヘッダ20aが正しく受け取れたかどうかを示すCRCコードをホスト機器20に返す。その後、コマンドヘッダ20aに記載されたコマンド処理が終わるまでビジーを返し、ホスト機器20が次のコマンドを発行できるタイミングを知らせる。コマンドヘッダ20aは、バッファ16に保持されている。コマンド処理は、トランザクションデータ(タイプ1)と同様であるため、説明は省略する。
次いで、メモリデバイス11は、CMD59を受け取ると、レスポンスR1を返す。
コマンド処理において、メモリデバイス11は、CMD59の引数“ADDR”により、拡張レジスタ内のページと位置を指定し、データポートとしての“拡張コマンドペイロードポート”が指定される。この“拡張コマンドペイロードポート”を介して拡張機能部19の割り当てられたデバイスに、コマンドペイロード20bを構成する512バイトのデータブロックとしてのレスポンスヘッダ20cが書き込まれる。
具体的には、メモリデバイス11は、先ず、CMD59の“BUS”に指定されたサイズ(512バイト/32kバイト)の1ブロックのデータを受け取る。次いで、メモリデバイス11は、512バイトのデータが正しく受け取れたかどうかを示すCRCコードをホスト機器20に返し、データの受信処理が終わるまでビジーを出力する。
この後、CMD59の“BUC”に指定されたブロック数のデータの受信が完了するまで、上記動作が繰り返される。
尚、コマンドペイロード20bによりメモリデバイス11に送られたデータは、バッファ16に保持される。このため、メモリデバイス11は、ホスト機器20の制御無しで、バッファ16に保持されたデータを、1ブロック単位で拡張機能部19に転送することが可能であり、所謂DMA(Direct Memory Access)転送が可能となる。
この後、メモリデバイス11は、CMD48を受け取ると、レスポンスR1を返し、その後、ホスト機器20は、512バイトのデータブロックとしてのレスポンスヘッダ20cを“拡張レスポンスポート”を介して受け取る。コマンド処理は、トランザクションデータ(タイプ1)と同様であるため、説明は省略する。
(トランザクションデータ(タイプ3))
図47は、図37(c)に示すCMD49によりコマンドヘッダ20aをホスト機器20からメモリデバイス11に送信した後、CMD48によりメモリデバイス11からレスポンスヘッダを読み出し、ホスト機器20で受信し、次いで、CMD58によりレスポンスペイロード20bを受信するタイプ3の場合のトランザクションデータを示している。
トランザクションデータ(タイプ1)、(タイプ2)と同様に、ホスト機器20よりCMD49が発行されてコマンドヘッダ20aが転送されると、メモリデバイス11は、CMD49の“Addr”により、拡張レジスタ内のページと位置が指定され、“拡張コマンドポート”を指定する。この“拡張コマンドポート”を介して、拡張機能部19にコマンドヘッダ20aが転送される。
次いで、ホスト機器20よりCMD58が発行されると、拡張レジスタの“拡張レスポンスペイロードポート”を介して、拡張機能からレスポンスペイロード20dが読み出され、ホスト機器20に転送される。
この後、ホスト機器20よりCMD48が発行されると、拡張レジスタの“拡張レスポンスポート”を介して、拡張機能からレスポンスヘッダ20cが読み出され、ホスト機器20に転送される。
図48は、トランザクションデータ(タイプ3)のタイミングチャートを示している。
図48に示すように、メモリデバイス11は、CMD49を受け取ると、レスポンスR1を返し、その後、512バイトのコマンドヘッダ20aを受け取る。
メモリデバイス11は、コマンドヘッダ20aが正しく受け取れたかどうかを示すCRCコードをホスト機器20に返す。その後、コマンドヘッダ20aに記載されたコマンド処理が終わるまでビジーを返し、ホスト機器20が次のコマンドを発行できるタイミングを知らせる。コマンドヘッダ20aは、バッファ16に保持されている。コマンド処理は、トランザクションデータ(タイプ1)と同様であるため、説明は省略する。
次いで、メモリデバイス11は、CMD58を受け取ると、レスポンスR1を返し、その後、レスポンスペイロード20dを構成する512バイトのデータを受け取る。
コマンド処理において、メモリデバイス11は、CMD58の“ADDR”に基づき、“拡張レスポンスペイロードポート”を指定し、この拡張レスポンスペイロードポート”を介して、拡張機能部19からCMD58の“BUS”に指定されたサイズ(512バイト/32kバイト)の1ブロックのデータを受け取る。この受け取ったデータはホスト機器20に転送される。次いで、メモリデバイス11は、512バイトのデータが正しく受け取れたかどうかを示すCRCコードをホスト機器20に送る。
この後、CMD58の“BUC”に指定されたブロック数のデータの受信が完了するまで、上記動作が繰り返される。
この後、メモリデバイス11は、CMD48を受け取ると、レスポンスR1を返し、その後、ホスト機器20は、512バイトのデータブロックとしてのレスポンスヘッダ20cを“拡張レスポンスポート”を介して受け取る。コマンド処理は、トランザクションデータ(タイプ1)と同様であるため、説明は省略する。
尚、トランザクションデータ(タイプ2)において、コマンドヘッダ20aは、マンドペイロード20bより先に転送したが、コマンドペイロード20bを転送した後、コマンドヘッダ20を転送してもよい。
また、トランザクションデータ(タイプ3)において、レスポンスヘッダ20cは、レスポンスペイロード20dの後に転送したが、レスポンスヘッダ20cを転送した後、レスポンスペイロード20dを転送してもよい。
上記第3の実施形態によれば、ホスト機器20とメモリデバイス11の拡張機能部19との間のデータの送受信を、CMD48/49/58/59と、コマンドヘッダ及びレスポンスヘッダと、コマンドペイロード及びレスポンスペイロードとに分けている。このため、コマンド処理の後、コマンドヘッダ20aに基づき、次のコマンドペイロード20bにより転送されるデータを拡張機能部19への転送するための準備を行うことができる。このため、コマンドペイロードにより送られてきたデータを効率的に拡張機能部19に転送することが可能である。したがって、例えばコマンドペイロードにより送られて来たデータは、DMAにより転送することができる。
また、レスポンスをレスポンスヘッダ20cとレスポンスペイロード20dに分けている。このため、コマンド処理の後、レスポンスヘッダ20cに基づき、レスポンスの準備をした後、拡張機能部19から送られたデータをレスポンスペイロード20dとして効率的にホスト機器20に転送することが可能となる。
また、ホスト機器20は、CMD49により、拡張機能部19の動作を指示するOPコードとアーギュメントを含むコマンドヘッダ20aを拡張レジスタの拡張コマンドポートを介して拡張機能部19に転送した後、CMD48により、拡張レジスタの拡張レスポンスポートを介して拡張機能部19から供給されるレスポンスコードとレスポンスデータを含むレスポンスヘッダ20cを受けている。このため、拡張機能部19に必要なコマンドや、メッセージを転送したり、拡張機能部19からのレスポンスをホスト機器20に転送したりすることが可能である。
また、長いデータを拡張レジスタに転送する場合、CMD59により複数のブロックにより構成されたコマンドペイロード20bを拡張レジスタの拡張コマンドペイロードポートを介して拡張機能部19に転送することができ、CMD58により複数のブロックにより構成された長いデータを含むレスポンスペイロードを拡張レジスタの拡張レスポンスペイロードポートを介して読み出すことができる。したがって、長いデータを拡張機能部19に対して書き込み、読み出すことが可能である。
しかも、CMD58/59は、引数としてブロックのサイズを指定する“BUS”と、ブロック数を指定する“BUC”を有している。したがって、ブロック数を指定するCMD23を用いる必要がないため、長いデータを容易に転送することが可能である。
(第4の実施形態)
第1乃至第3の実施形態において、メモリデバイス11は、CMD48/49を受けるとレスポンスR1をホスト機器20に返す。
しかし、メモリデバイス11内部の拡張機能部19は、コマンドに対する処理の完了や、エラーなどのイベントをホスト機器20に通知する手段がなかった。拡張レジスタを介してこれらのイベントを表示することは可能であるが、ホスト機器20はイベントが起こったかどうかをポーリングする必要があり非効率であった。
そこで、第4の実施形態は、拡張レジスタをアクセスするコマンドを含む全てのコマンドに対して返信されるレスポンR1に、拡張レジスタのイベントを通知するフラグを設け、ホスト機器20が拡張レジスタをアクセスすることなく、ホスト機器20にイベントを通知可能とする。
図49は、レスポンスR1のデータ構造の一例を示している。レスポンスR1は、例えば32ビットにより構成されている。このうち、例えば第18ビットが拡張機能のイベントを示すフラグEF_EVENT(Extension Function Event)に設定されている。
メモリカード11内の例えば複数の拡張機能のうちの少なくとも1つにイベントが発生すると、フラグEF_EVENTが“1”に設定される。このフラグEF_EVENTのビットは、以降のレスポンスにおいて、“0”に戻してもよいし、次に説明するフラグが読まれたとき、“0”に戻してもよい。
図50は、例えば拡張レジスタ内に設けられた拡張機能イベントフラグ(Extension Function Event Flag)の一例を示している。
この拡張機能イベントフラグは、例えば17ビットにより構成されており、各ビットに対応して拡張機能の番号が対応されている。
拡張機能において、イベントが発生した場合、該当する拡張機能の番号のビットが“1”に設定される。イベントの種別は各拡張機能の拡張レジスタ内で通知できるように定義しても良い。このビットは、このビットの値が読み出された時点で“0”に戻っても良いし、各拡張機能に“0”に戻るタイミングを定義しても良い。
図51は、ホスト機器20にアプリケーションと、拡張機能アプリケーション1、拡張機能アプリケーション2、及びこれらに対応したファイルシステム、拡張機能ドライバ1、及び拡張機能ドライバ2が設けられている場合の例を示している。このような構成のホスト機器20により、メモリデバイス11をアクセスする場合の動作について説明する。
図52は、上記構成のホスト機器20により、メモリデバイス11をアクセスする場合の動作のシーケンスチャートの例を示している。
先ず、ホスト機器20のアプリケーション、又はファイルシステムから書き込み、又は読み出し要求が発生すると(S81)、カードドライバ、又はホストコントローラからCMDXXが発生される(S82)。このCMDXXは、CMD48/49/58/59のいずれかである。
メモリデバイス11は、CMDXXを受けるとレスポンスR1をホスト機器20に返す(S83)。
このレスポンスR1に含まれるフラグEF_EVENTが“1”に設定されている場合、カードドライバ、又はホストコントローラは、CMD48を発行し(S85)、拡張レジスタの拡張機能イベントフラグを読み出す(S86)。
カードドライバ、又はホストコントローラは、拡張機能イベントフラグを解析し、例えば拡張機能ドライバ1にイベントが発生したことを検出すると、割り込み、又はカードドライバのポーリングにより、拡張機能ドライバ1に通知する(S87)。
この後、機能拡張ドライバ1は、カードドラバ、又はホストコントローラに対してイベントの内容を読み出すためCMD48を発行し(S88)、カードドラバ、又はホストコントローラは、メモリデバイス11にCMD48を発行する(S89)。
メモリデバイス11は、CMD48を受けると、レスポンスR1をホスト機器20に返す(S90)。
この後、コマンド処理により、拡張機能部からイベントの内容がホスト機器20に転送される(S91)。このイベントの内容は、さらに機能拡張ドライバ1に転送される(S92)。
上記第4の実施形態によれば、CMD48/49/58/59のレスポンスR1に拡張機能のいずれかにイベントが発生したことを示すフラグEF_Eventを設けている。このため、ホスト機器20は、レスポンスR1を受けることにより、拡張機能のいずれかにイベントが発生したことを知ることができる。したがって、ポーリングにより、イベントの発生を検出する必要がないため、効率良くイベントを検出することが可能である。
また、拡張レジスタ内に拡張機能イベントフラグを設け、この拡張機能イベントフラグにより、拡張機能部19の何れの機能によりイベントが発生したこと特定可能としている。このため、ホスト機器20は、フラグEF_Eventによりイベントの発生が検出された場合、拡張機能イベントフラグを読み出すことにより、イベントが発生した拡張機能を容易に特定することができる。
(第5の実施形態)
第1乃至第4の実施形態は、ホスト機器20によりメモリデバイス11の拡張機能をアクセスする場合について説明した。
これに対して、第5の実施形態は、ホスト機器20とメモリデバイス11との間に変換機器を設け、この変換機器を介してメモリデバイス11の拡張機能をアクセスする場合について説明する。具体的には、例えばパーソナルコンピュータとしてのホスト機器20にメモリデバイス11を接続するためのアダプタが接続される場合がある。第5の実施形態は、このようなアダプタが接続された場合においても、ホスト機器20とメモリデバイス11の拡張機能部19とのデータ転送を可能とするものである。
図53は、ホスト機器20とメモリデバイス11との間に、例えばUniversal Serial Bus(USB)タイプの接続機器としてのアダプタ100が接続されている場合の例を概略的に示している。
アダプタ100は、変換器101を有している。変換器101は、コマンド分割部102、レスポンス結合部103、及びコマンド発行部104を有している。
図54、図55は、図53で示す例の処理動作を示している。図54は、データの書き込み動作の例を示し、図55は、データの読み出し動作の例を示している。
USBタイプのアダプタ100を用いてメモリデバイス11がホスト機器20に接続される場合、データをホスト機器20からアダプタ100に対して、先ずCommand Block Wrapper (CBW) と呼ばれるメッセージを送り、データの送信もしくは受信を行う。最後にCommand Status Wrapper (CSW)と呼ばれるメッセージをアダプタ100からホスト機器20へ送信してデータの送受信を制御する。CBWにおいて、データの送受信の方向、送受信のデータの長さを指定できる。
ホスト機器20は、メモリデバイス11の拡張機能部19に長いデータを転送する場合、前述したコマンドヘッダ20a、及びコマンドペイロード20bを使用し、拡張機能部19からホスト機器20に長いデータを転送する場合、レスポンスヘッダ20c、及びレスポンスペイロード20dが使用される。
図54に示すように、データの書き込み時、ホスト機器20はCBWを変換器101へ送る(S101)。変換器101は、CSWを解析し、この後にデータが書き込まれることを、送られてくるデータの長さと共に知ることができる(S102)。この時、データの長さに基づきコマンドペイロードが含まれるかどうかを判断できる。
変換器101は、ホスト機器20から転送されたコマンドヘッダ20a、コマンドペイロード20bを受けると(S103)、コマンド分割部102により、コマンドヘッダ20a、コマンドペイロード20bを分離する。すなわち、コマンド分割部102は、転送されたデータのうち、最初の512バイトをコマンドヘッダ20aとみなし、これ以降のデータをコマンドペイロード20bとみなして、これらを分割する。長さが512バイトを超えない場合、変換器101はコマンドペイロードが無いものとして処理する。
コマンド発行部104は、コマンド分割部102から供給されたコマンドヘッダ20aに対してCMD49を発行し(S104)、メモリデバイス11からレスポンスR1を受けた後(S105)、CMD49によりコマンドヘッダ20aをメモリデバイス11に転送する(S106)。メモリデバイス11の内部動作(S107)は、上述した通りである。
また、コマンド発行部104は、コマンド分割部102から供給されたコマンドペイロード20bに対してCMD59を発行し(S108)、メモリデバイス11からレスポンスR1を受けた後(S109)、コマンドペイロード20bをメモリデバイス11に転送する(S110)。メモリデバイス11は、コマンドペイロードを処理する(S111)。
CMD59の発行時、コマンドペイロードの長さと等しいかそれ以上の長さになるように“BUS”、“BUC”を設定する。コマンドペイロードの長さ以上に“BUS”、“BUC”を設定した場合、コマンドペイロードを送信した後、“BUS”、“BUC”で設定した長さの任意のデータを続けて送信しても良いし、送信を中止するコマンドを発行して次の作業に進んでも良い。
変換器101は、データをメモリデバイス11に送信した後、CSWをホスト機器20に送信する(S112)。これによりホスト機器20は、変換器101の処理が終了したことを知ることができる。
一方、図55に示すように、メモリデバイス11から長いデータを読み出す場合、ホスト機器20から変換機101へCBWが送られる(S121)。変換器101は、CBWを解析し、この後にデータ読み出しが行われることを、読み出すデータの長さと共に知ることができる(S122)。この時、データの長さからレスポンスペイロードが必要かどうか判断できる。もし指定されたデータの長さが512バイトを超えていた場合、レスポンスペイロードの読み出しが必要であると判断する。
変換器101のコマンド発行部104は、レスポンスペイロードの読み出しが必要な場合、CMD58を発行する(S123)。CMD58発行時、レスポンスペイロードの長さと等しいかそれ以上の長さになるように“BUS”、“BUC”を設定する。レスポンスペイロードの長さ以上に“BUS”、“BUC”を設定した場合、レスポンスペイロードを受け終わった後、“BUS”、“BUC”で設定した長さになる任意のデータを続けて読み出しても良いし、送信を中止するコマンドを発行して次の作業に進んでも良い。
メモリデバイス11からレスポンスR1を受けた後(S124)、コマンド発行部104は、メモリデバイス11から受け取ったブロックをレスポンス結合部103に供給する(S125)。
この後、コマンド発行部104は、CMD48を発行する(S126)。コマンド発行部104は、メモリデバイス11からレスポンスR1を受けた後(S127)、メモリデバイス11から供給された512バイトのデータをレスポンスヘッダ20cとしてレスポンス結合部103に供給する(S128)。
レスポンス結合部103は、レスポンスヘッダ20cと、複数のブロックにより構成されたレスポンスペイロード20dを結合してホスト機器20に転送する(S129)。
最後に変換器101はCSWをホスト機器20に送信する(S130)。ホスト機器は、これにより変換器101が処理を終了したことを知ることができる。
コマンド分割部102、及びレスポンス結合部103は、処理を行うのに十分なサイズの作業領域を持っていない場合、コマンド発行部104、及びホスト機器20へそれまで作業領域に蓄積されたデータをその都度それぞれに送り出して逐次処理することも可能である。
尚、上記説明は、長いデータを転送する場合であったが、コマンドペイロード20b、及びレスポンスペイロード20dを使用しないデータ転送の場合、変換器101のコマンド分割部102は、単にコマンドヘッダ20aを出力し、レスポンス結合部103は、単にレスポンスヘッダ20cを出力する。
また、メモリデバイス11は、必要なデータを送った後にタイムアウトする(例えば250msec)。この後、レスポンスペイロードが送り終わったことをレスポンスR1のイベントを用いて示しても良い。
図56は、第5の実施形態の変形例を示すものであり、アダプタの他の例を示している。
図56において、アダプタ110は、ホスト機器20に対してメモリデバイス11と例えばハードディスク113を接続可能としている。
アダプタ110は、分配器111と、変換器101、及びブリッジ回路112を有している。分配器111の第1の端子は、USBを介してホスト機器20に接続されている。分配器111の第2の端子は、変換器101を介してメモリデバイス11に接続されている。変換器101の構成は、上述した通りである。分配器111の第3の端子は、ブリッジ回路112、SATA(serial ATA)ケーブル114を介してハードディスク113に接続されている。ブリッジ回路112は、例えば図示せぬメモリインターフェースモジュールと、メモリ制御モジュールなどを含んでいる。
このような構成の場合においても、変換器101を用いることにより、ホスト機器20とメモリデバイス11の拡張機能部19との間でデータを転送することが可能である。
上記第5の実施形態によれば、ホスト機器20とメモリデバイス11との間にアダプタ100が設けられている場合においても、アダプタ100に変換器101を設けることにより、ホスト機器20とメモリデバイス11の拡張機能部19との間でデータを転送することが可能である。
尚、上記実施形態において、拡張機能の一例としては、コントローラに実装されるセキュリティ機能や、メモリ、例えばNANDフラッシュメモリに実装されるセキュリティ機能がある。
コントローラに実装されるセキュリティ機能とは、例えば鍵情報及びコントローラ固有の識別情報等をコントローラに格納し、これらの情報を基にホスト機器との間でセキュアな通信チャンネルを構成するための機能等である。
また、メモリに実装されるセキュリティ機能とは、例えば鍵情報、メモリ固有の識別情報、及びこの識別情報を暗号化して生成された暗号化識別情報等をメモリに格納し、これらの情報を基にコントローラを介してホスト機器との間で認証処理を実施するための機能等である。
その他、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。