(57)【特許請求の範囲】
【請求項１】
不揮発性半導体記憶装置と、
前記不揮発性半導体記憶装置を制御する制御部と、
前記制御部に接続された作業エリアとしてのメモリと、
前記制御部により制御される拡張機能部と、
前記メモリ上に仮想的に、または制御部にハードウェアとして設けられ、前記拡張機能部の拡張機能を定義可能な一定のブロック長を有する拡張レジスタと、
前記制御部は、前記拡張レジスタを前記一定のデータ長単位でリードする第１のコマンドと、前記拡張レジスタを前記一定のデータ長単位でライトする第２のコマンドとを処理し、
前記拡張レジスタは、第１の領域、前記第１の領域と異なる第２の領域を含み、
前記第１の領域は、前記拡張機能の種別及び制御可能なドライバを特定する第１情報と、前記拡張機能を制御する第２情報が記録された、前記第２の領域内の位置を示すアドレス情報とを記録し、
前記第１、第２のコマンドは、前記複数ページで構成される拡張レジスタの１ページ内のデータをアクセスするために必要なアドレスフィールドと、有効なデータ長を示すレングスフィールドを引数として有し、
前記第１、第２のコマンドの前記アドレスフィールドの値は、それぞれ第１、第２の動作モードを有し、
前記第１のコマンドの前記第１の動作モードは、前記アドレスフィールドが示す拡張レジスタの位置から、レングスフィールドで示されたデータ長のデータを読み出すリード動作であり、
前記第２のコマンドの前記第１の動作モードは、前記アドレスフィールドが示す拡張レジスタの位置に、レングスフィールドで示されたデータ長のデータを書き込むライト動作であり、前記第１、第２のコマンドの前記第２の動作モードは、前記アドレスフィールドが示す特定のアドレスを拡張レジスタのデータポートと解釈し、データポートと関係付けられた前記拡張機能部とのデータ転送を行うことを特徴とするメモリデバイス。
【請求項２】
前記第１のコマンドの前記第１の動作モードにおいて、前記拡張レジスタの指定されたページ内の位置に配置されたデータは、リードデータブロックの先頭から前記データを転送するように配置され、前記データの先頭は前記アドレスフィールドによって指定され、前記レングスフィールドはリードデータブロックからの有効データ長を示し、
前記第２のコマンドの前記第１の動作モードにおいて、ライトデータブロックの先頭から転送されたデータを前記拡張レジスタのページに書き込み、前記拡張レジスタの指定されたページの書き込み位置の先頭は、前記アドレスフィールドによって特定され、前記データ長はレングスフィールドによって特定されることを特徴とする請求項１記載のメモリデバイス。
【請求項３】
前記第２のコマンドは、引数にマスクライトを行うかどうかを選択するビットを持ち、マスクライトを行わない場合、前記レングスフィールドは有効なライトデータ長を示し、マスクライトを行う場合、ライトデータ長は固定値となり、前記レングスフィールドはビット単位に書き込むか元のデータを保持するかを選択するマスク情報を示し、マスク情報は前記ライトデータ長と同じ長さを持つことを特徴とする請求項１記載のメモリデバイス。
【請求項４】
複数の拡張レジスタによって構成された拡張レジスタ・セットを用いた複数の方法によって制御される機能をさらに備え、複数の機能は単一の拡張レジスタ・セットによって制御され、
前記第１の領域内の前記機能識別情報は、全ての機能に対するコマンド情報と、前記第２の領域内の拡張レジスタ・セットの各々の位置を明らかにする複数の情報を含むことを特徴とする請求項１記載のメモリデバイス。
【請求項５】
固定ブロック長、及び複数ブロック転送をサポートするリードコマンドとしての第３のコマンドと、固定ブロック長、及び複数ブロック転送をサポートするライトコマンドとしての第４のコマンドを具備し、
前記第３、第４のコマンドは、引数としてアドレスフィールドを含み、前記アドレスフィールドが拡張レジスタのデータポートを指定した場合のみデータ転送が実行され、データ長転送はブロック数によって指定されることを特徴とする請求項１記載のメモリデバイス。
【請求項６】
前記拡張レジスタの前記第１の領域に配置された汎用情報は、標準の拡張機能を識別するための機能識別コード、製造者を識別するための製造者識別情報、拡張機能のクラスを識別するための機能識別情報のいずれか１つを含み、前記汎用情報は汎用ドライバ又は専用ドライバを選択するための情報として用いられることを特徴とする請求項１記載のメモリデバイス。
【請求項７】
ホストドライバ及びシステムメモリをさらに具備し、前記ホストドライバは、前記第１のコマンドを用いて、前記拡張レジスタの前記第１の領域に記載された前記汎用情報から前記機能識別コード、前記製造者識別情報、前記機能識別情報のいずれか１つを読み出して使用可能な前記汎用ドライバ又は専用ドライバを特定し、特定された前記汎用ドライバ又は専用ドライバが存在する場合、前記ホストドライバは特定された前記汎用ドライバ又は専用ドライバを前記システムメモリにロードし、ロードされた前記汎用ドライバ又は専用ドライバは前記メモリデバイス内の拡張機能を初期化することを特徴とする請求項６記載のメモリデバイスを使用するホストシステム。
【請求項８】
前記ホストドライバは、前記汎用情報から、拡張機能に割り当てられた前記拡張レジスタの位置情報を、ロードされた前記汎用ドライバ又は専用ドライバに渡すことにより、拡張機能が任意の位置に配置されていても制御可能とすることを特徴とする請求項７記載のホストシステム。
【請求項９】
可変ブロック長、及び複数ブロック転送をサポートするリード、ライトが可能な第５のコマンドと、引数とレスポンスで１バイトデータのリード、ライトが可能な第６のコマンドと、
前記第５、第６のコマンドによってアクセス可能な複数のファンクション領域を持ち、先頭のファンクション領域のある一部に前記第１の領域を割り当て、それ以外のファンクション領域に前記第２の領域を割り当て、前記第５、第６のコマンドによってアクセス可能な拡張レジスタ領域を前記第１、第２のコマンドでも、アクセス可能にしたことを特徴とする請求項１記載のメモリデバイス。
【請求項１０】
前記メモリデバイスは、固定ブロック長、及び複数ブロック転送をサポートするリードコマンドとしての第３のコマンドと、固定ブロック長、及び複数ブロック転送をサポートするライトコマンドとしての第４のコマンドを具備し、
前記第３、第４のコマンドは、引数としてアドレスフィールドを含み、前記アドレスフィールドが拡張レジスタのデータポートを指定した場合のみデータ転送が実行され、データ長転送はブロック数によって指定され、
前記第３、第４のコマンドの前記アドレスフィールドの値は、それぞれ第１、第２の動作モードを有し、
前記ホストドライバは、前記第１、第２のコマンド、又は前記第３、第４のコマンドにより、前記第１の動作モードを用いて前記メモリデバイスの前記拡張レジスタをアクセスし、前記第２の動作モードを用いて前記メモリデバイスの前記拡張機能部と前記ホストシステム間でデータ転送を行うことを特徴とする請求項７記載のホストシステム。
【請求項１１】
前記ホストドライバは、各々の機能に単独で割り当てられた、前記機能識別コード、前記製造者識別情報、及び前記機能識別情報を含む汎用情報によって、複数の複数機能デバイスからあるひとつの機能を特定し、
前記拡張レジスタの位置は、特定された機能に対応した前記汎用情報のアドレスフィールドによって決定され、前記拡張レジスタの長さは、前記機能の拡張レジスタ内に特定されることを特徴とする請求項７記載のホストシステム。
【請求項１２】
前記メモリデバイスは、固定ブロック長、及び複数ブロック転送をサポートするリードコマンドとしての第３のコマンドと、固定ブロック長、及び複数ブロック転送をサポートするライトコマンドとしての第４のコマンドを具備し、
前記第３、第４のコマンドは、引数としてアドレスフィールドを含み、前記アドレスフィールドが拡張レジスタのデータポートを指定した場合のみデータ転送が実行され、データ長転送はブロック数によって指定され、
前記ホストドライバは、複数の機能デバイスに対応して個々に配置された前記複数のバッファと、前記第１のコマンド、第２のコマンド、第３のコマンドまたは、第４のコマンドの引数に設定された機能識別情報に基づき、前記複数のバッファの１つを選択し、
前記ホストドライバは、前記複数の機能デバイスを制御するコマンドを発行し、前記コマンドは前記複数の機能デバイスにより混在して使用されることを特徴とする請求項７記載のホストシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
近時、メモリカードは、単なるメモリデバイスとしてだけでなく、付加価値を持たせるため様々な機能の追加が要望されている。また、追加機能をプラグ・アンド・プレイで使用可能にするために、汎用的な初期化手段が望まれている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−４６４９８号公報
【非特許文献】
【０００４】
【非特許文献１】Part 1 Physical Layer Simplified Specification Ver3.01  May 18, 2010（ＵＲＬ：ｈｔｔｐ：//ｗｗｗ.ｓｄｃａｒｄ.ｏｒｇ/ｈｏｍｅ/）
【非特許文献２】Part E1 SDIO Simplified Specification Ver2.00  Feb. 8, 2007（ＵＲＬ：ｈｔｔｐ：//ｗｗｗ.ｓｄｃａｒｄ.ｏｒｇ/ｈｏｍｅ/）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本実施形態は、拡張機能を容易に設定することが可能なメモリシステムを提供しようとするものである。
【課題を解決するための手段】
【０００６】
実施形態によれば、メモリデバイスは、不揮発性半導体記憶装置と、制御部と、メモリと、拡張機能部と、拡張レジスタとを含んでいる。制御部は、不揮発性半導体記憶装置を制御する。メモリは、制御部に接続された作業エリアである。拡張機能部は、制御部により制御される。拡張レジスタは、メモリ上に仮想的に、また制御部にハードウェアとして設けられ、前記拡張機能部の拡張機能を定義可能な一定のブロック長を有する。前記制御部は、前記拡張レジスタを前記一定のデータ長単位でリードする第１のコマンドと、前記拡張レジスタを前記一定のデータ長単位でライトする第２のコマンドとを処理し、前記拡張レジスタは、第１の領域、前記第１の領域と異なる第２の領域を含む。前記第１の領域は、前記拡張機能の種別及び制御可能なドライバを特定する第１情報と、前記拡張機能を制御する第２情報が記録された、前記第２の領域内の位置を示すアドレス情報とを記録する。前記第１、第２のコマンドは、前記複数ページで構成される拡張レジスタの１ページ内のデータをアクセスするために必要なアドレスフィールドと、有効なデータ長を示すレングスフィールドを引数として有する。前記第１、第２のコマンドの前記アドレスフィールドの値は、それぞれ第１、第２の動作モードを有する。前記第１のコマンドの前記第１の動作モードは、前記アドレスフィールドが示す拡張レジスタの位置から、レングスフィールドで示されたデータ長のデータを読み出すリード動作である。前記第２のコマンドの前記第１の動作モードは、前記アドレスフィールドが示す拡張レジスタの位置に、レングスフィールドで示されたデータ長のデータを書き込むライト動作であり、前記第１、第２のコマンドの前記第２の動作モードは、前記アドレスフィールドが示す特定のアドレスを拡張レジスタのデータポートと解釈し、データポートと関係付けられた前記拡張機能部とのデータ転送を行う。
【図面の簡単な説明】
【０００７】
【図１】実施形態に適用されるメモリシステムを概略的に示す構成図。
【図２】図１に示すメモリシステムのファームウェの一例を示す構成図。
【図３】拡張レジスタのリードコマンドの一例を示す構成図。
【図４】リードコマンドによる拡張レジスタのリード動作を示すタイミング図。
【図５】リードコマンドによるデータポートのリード動作を示すタイミング図。
【図６】拡張レジスタのライトコマンドの一例を示す構成図。
【図７】図７（ａ）（ｂ）（ｃ）はマスクレジスタの動作を示す図。
【図８】ライトコマンドによる拡張レジスタのライト動作を示すタイミング図。
【図９】ライトコマンドによるデータポートのライト動作を示すタイミング図。
【図１０】拡張レジスタの先頭ページに設定される汎用情報（General Information）フィールドの一例を示す図。
【図１１】リードコマンドに従ったメモリシステムの動作の一例を示すフローチャート。
【図１２】ライトコマンドに従ったメモリシステムの動作の一例を示すフローチャート。
【図１３】ホストドライバの動作の一例を示すフローチャート。
【図１４】ホストドライバの動作の他の例を示すフローチャート。
【図１５】ＳＤＩＯにおける拡張レジスタのアクセス動作を概略的に示す図。
【図１６】レビジョン管理の一例を示す図。
【図１７】第２の実施形態に係る拡張レジスタのリードコマンドの一例を示す図。
【図１８】第２の実施形態に係る拡張レジスタのライトコマンドの一例を示す図。
【図１９】リードコマンドによる拡張レジスタのリード動作を示すタイミング図。
【図２０】リードコマンドによるデータポートのリード動作を示すタイミング図。
【図２１】ライトコマンドによる拡張レジスタのライト動作を示すタイミング図。
【図２２】ライトコマンドによるデータポートのライト動作を示すタイミング図。
【図２３】拡張レジスタの先頭ページに設定される汎用情報フィールドの一例を示す図。
【図２４】第２の実施形態に係るリードコマンドに従ったメモリシステムの動作の一例を示すフローチャート。
【図２５】第２の実施形態に係るライトコマンドに従ったメモリシステムの動作の一例を示すフローチャート。
【図２６】第２の実施形態に係る拡張レジスタのマルチブロックリードコマンドの一例を示す図。
【図２７】第２の実施形態に係る拡張レジスタのマルチブロックライトコマンドの一例を示す図。
【図２８】第２の実施形態に係る汎用情報の表示位置の一例を示す図。
【図２９】第２の実施形態に係るメモリ空間とＳＤＩＯ空間の関係の一例を示す図。
【図３０】第２の実施形態に係るＳＤＩＯの初期化の簡素化を説明するために示すフローチャート。
【図３１】第２の実施形態に係るメモリデバイスとホストの機能インターフェースの関係を概略的に示す図。
【図３２】第２の実施形態に係り、バッファの制御を説明するために示す概略構成図。
【発明を実施するための形態】
【０００８】
例えばＳＤカードのようなメモリデバイスは、機能を拡張する場合、新たな規格が定められ、その規格に従って、機能が拡張されていた。このため、規格が定まらないと、機能を拡張することが難しかった。
【０００９】
例えばＳＤカードのようなメモリデバイスやホスト機器には、標準的な機能の拡張方法が定義されていなかった。このため、特殊なホストデバイス以外は、メモリデバイスに追加された機能を簡単に使用できるようにすることができなかった。これはメモリデバイスに新しい機能を追加した場合における普及の妨げとなっていた。
【００１０】
また、ホストコントローラの機能に制限があるため、メモリデバイスに追加された機能が使用できない場合があった。具体的には、メモリ用のホストコントローラは、割り込みをサポートしていない場合や、５１２バイトより小さなデータのリード/ライトに対応していない場合が多い。特にＳＤＩＯ規格では、可変ブロック長のマルチブロック転送が定義されているが、メモリ専用ホストでは、このようなデータ転送が行えない場合が多い。このため、例えばデジタルカメラやＰＨＳなどの周辺機器やインターフェースとしての機能を有するＳＤＩＯカードや、ＳＤカードにＳＤＩＯカードが組み込まれたコンボ(combo)カードの機能を拡張した場合、拡張された機能に対応する機能ドライバをホストシステムにインストールする必要があり、またホストドライバを改変しないと機能ドライバを認識することができなかった。
【００１１】
また、ホストはカード/デバイスを特定するカードアドレス(RCA)やDevice IDを使用している。単機能カード/デバイスの場合はこれらの情報で機能が特定できるが、カードアドレスだけでは複数機能デバイスの機能のひとつを特定することができないという問題があった。そのためホストシステムを管理するソフトウエアをマルチファンションカード/デバイス対応ができるように改変しないと複数機能デバイス使用することができなかった。
【００１２】
また、多くのメモリ内のコントローラは、５１２バイト単位にメモリをアクセスする。このため、５１２バイト単位のデータの一部のデータを書き換える場合、リード・モディファイ・ライトが必要となっていた。すなわち、例えば、５１２バイトのデータのうち、１バイトのデータを書き換える場合、５１２バイトのデータがバッファに読み込まれ、バッファ上で１バイトのデータが更新され、この更新された５１２バイトのデータを書き込むという動作が必要である。このため、制御効率が悪かった。
【００１３】
また、一般に、レジスタを用いてカードの機能を拡張する場合、制御レジスタが特定アドレスに割り当てられていた。このため、カードベンダーは、自由に機能拡張に用いるアドレス位置を決めることができなかった。拡張機能を標準化する場合、複数の機能が重複しないようにレジスタアドレスを割り当てする必要があり、機能のサポート状況によっては、アドレス空間が飛び飛びになってしまうという問題があった。ベンダー独自機能を実装する場合においても、自由に追加ができないという問題があった。
【００１４】
そこで、本実施形態は、仮想的な拡張レジスタを用いることにより、機能拡張を可能とし、対応する機能ドライバを探しだすことができる情報を標準化することでフレキシブルな機能拡張手段を提供する。
【００１５】
本実施形態を概略的に説明すると、次のようである。
【００１６】
（機能拡張方法）
ホストドライバが、追加機能を制御する機能ドライバを探して、対応する機能ドライバがホストにインストールされていた場合、その機能ドライバに制御を渡す仕組みを取り入れることにより、機能拡張が容易に行えるようになる。機能固有の制御は、機能ドライバの中に隠蔽されるため、ホストドライバは最小限の情報のみで追加機能を実装可能となる。例えばファームウェアが管理する複数ページの拡張レジスタを有し、これら拡張レジスタのページ０に、特定のドライバを認識するための標準的な汎用情報(general information)フィールドを提供する。これによりホストシステムは、プラグ・アンド・プレイの実装が可能となる。また、マルチ機能カード/デバイスをサポートするために、個々の機能を指し示すことができるようにホストシステムが管理しておくことで、ホストソフトウエアの改変なしにマルチ機能カード/デバイスを使用可能にする。
【００１７】
（ＳＤメモリ又はＳＤＩＯホストコントローラの対応）
ＳＤメモリ用のホストコントローラにおいても、追加機能の制御を効率良く行える拡張レジスタをアクセスするための専用コマンドを定義する。５１２バイトの固定ブロック長の転送とすることにより、従来のＳＤメモリ用ホストコントローラからこの専用コマンドを発行できる。さらに、コマンドの引数として有効データ長の情報や、ライト時のマスク機能を持つことにより、リード・モディファイ・ライトを不要にすることが可能となる。
【００１８】
ＳＤＩＯカード対応のホストコントローラにおいては、ＳＤＩＯのアクセスコマンドからも、拡張レジスタをアクセスできるようにすることにより、小さいブロック長転送とマルチブロック転送に対応可能となるため、さらに最適化したドライバを作ることが可能になる。
【００１９】
データの転送用ポートとしてのデータポートをサポートすることで、拡張レジスタ空間の消費量が少ない実装が可能となる。また、データポートを用いることにより、拡張レジスタ以外のデバイスへのデータ転送も効率良く行うことが可能となる。複数ブロックによるバースト転送コマンドをサポートすることができる。データポートは、機能の実装時に拡張レジスタの任意のアドレスをデータポートとして定義できる。カードはアドレスを解読してデータポートか拡張レジスタかを判断する。
【００２０】
（リロケータブルアドレスによる拡張レジスタ定義）
カードベンダーにより、拡張レジスタ上の任意の位置に追加機能を制御するレジスタを割り当てることを可能とし、実装したレジスタのアドレス情報を汎用情報フィールドから提供することにより、レジスタ配置をリロケータブルとすることを可能としている。このため、従来標準化が必要であったアドレス配置は不要となり、メモリデバイスを製造し易くなる。再配置が可能であるため、レジスタを拡張しても容易に対応ができる。
【００２１】
以下、実施の形態について、図面を参照して説明する。
【００２２】
図１は、本実施形態に係るメモリシステムを概略的に示している。
【００２３】
メモリシステムは、例えばＳＤカードのようなメモリデバイス１１と、ホスト２０により構成される。
【００２４】
メモリデバイス１１は、ホスト２０に接続されたときに電源供給を受けて動作し、ホスト２０からのアクセスに応じた処理を行う。このメモリデバイス１１は、コントローラ１１ａを有している。
【００２５】
コントローラ１１ａは、例えばホストインタフェース（Ｉ／Ｆ）１２、ＣＰＵ１３、ＲＯＭ（Read only Memory）１４、ＲＡＭ（Random Access Memory）１５、バッファ１６、メモリインターフェース（Ｉ／Ｆ）１７により構成されている。これらは、バスにより接続されている。メモリインターフェース１７には、例えばＮＡＮＤ型フラッシュメモリ１８と、拡張機能部としてのＳＤＩＯ１９が接続されている。拡張機能部は、例えば無線ＬＡＮ装置などを適用することが可能である。
【００２６】
ホストインタフェース１２は、コントローラ１１ａとホスト２０との間のインターフェース処理を行う。
【００２７】
メモリインターフェース１７は、コントローラ１１ａとＮＡＮＤ型フラッシュメモリ１８、又はＳＤＩＯ１９との間のインターフェース処理を行う。
【００２８】
ＣＰＵ１３は、メモリデバイス１１全体の動作を司るものである。このＣＰＵ１３を正制御するプログラムは、ＲＯＭ１４の中に格納されているファームウェア（制御プログラム等）を用いるかあるいは、ＲＡＭ１１５上にロードして所定の処理を実行する。すなわち、ＣＰＵ１３は、各種のテーブルや後述する拡張レジスタをＲＡＭ１８上に作成したり、ホスト２０からライト（書き込み）コマンド、リード（読み出し）コマンド、イレース（消去）コマンドを受けてＮＡＮＤ型フラッシュメモリ１８上の領域をアクセスしたり、バッファ１６を介してデータ転送処理を制御したりする。
【００２９】
ＲＯＭ１４は、ＣＰＵ１３により使用される制御プログラムなどのファームウェアを格納する。ＲＡＭ１５は、ＣＰＵ１３の作業エリアとして使用され、制御プログラムや各種のテーブルや後述する拡張レジスタを記憶する。
【００３０】
バッファ１６は、ホスト２０から送られてくるデータを、例えばＮＡＮＤ型フラッシュメモリ１８へ書き込む際、一定量のデータ（例えば１ページ分）を一時的に記憶したり、ＮＡＮＤ型フラッシュメモリ１８から読み出されたデータをホスト２０へ送り出す際、一定量のデータを一時的に記憶したりする。またバッファを介することにより、ＳＤバスインターフェースとバックエンドを非同期に制御することができる。
【００３１】
ＮＡＮＤ型フラッシュメモリ１８は、例えば積層ゲート構造のメモリセル、又はＭＯＮＯＳ構造のメモリセルにより構成されている。
【００３２】
ＳＤＩＯ１９は、例えばデジタルカメラやＰＨＳなどの周辺機器やインターフェースとしての機能を有している。例えば、ＳＤＩＯ１９として無線ＬＡＮ装置を適用することで、無線通信機能を有さないデジタルカメラでも外部サーバ、外部ＰＣ等との間で無線によるデータ通信を行うことが可能となる。
【００３３】
ホスト２０は、例えばデジタルカメラやＰＨＳなどが適用可能である。ホスト２０は、ホストコントローラ２１、ＣＰＵ２２、ＲＯＭ２３、ＲＡＭ２４、例えばハードディスク２５(ＳＳＤを含む)により構成されている。これらはバスにより接続されている。
【００３４】
ＣＰＵ２２は、ホスト全体を制御する。ＲＯＭ２３は、ＣＰＵ２２の動作に必要なファームウェアを記憶している。ＲＡＭ２４は、例えばＣＰＵ２２の作業領域として使用されるが、ＣＰＵ２２が実行可能なプログラムもここにロードされ実行される。ハードディスク２５は、各種データを保持する。ホストコントローラ２１は、メモリデバイス１１が接続された状態において、メモリデバイス１１とのインターフェース処理を行う。さらに、ＣＰＵ２２の指示に従って、後述する各種コマンドを発行する。
【００３５】
（ファームウェアの構成）
図２は、メモリデバイス１１のＲＯＭ１４に記憶されたファームウェアの機能構成の一例を示している。これらの機能はコントローラ１１ａを構成するＣＰＵ１３等の各ハードウェアとの組み合わせにより実現されるものである。ファームウェアは、例えばコマンド処理部１４ａ、フラッシュメモリ制御部１４ｂ、拡張レジスタ処理部１４ｃ、機能処理プログラム１４ｄにより構成されている。拡張レジスタ処理部１４ｃは、メモリデバイス１１が起動された際、ＲＡＭ１５内に拡張レジスタ３１を生成する。この拡張レジスタ３１は、仮想レジスタであり、拡張機能を定義可能とされている。
【００３６】
（拡張レジスタの構成）
図２に示すように、拡張レジスタ３１は、例えば８ページにより構成されている、１ページは、５１２バイトにより構成されている。５１２バイトの拡張レジスタをバイト単位にアクセスするため、最低９ビットのアドレスが必要となり、８ページアクセスするために、最低３ビットのアドレスが必要となる。合計１２ビットのアドレスにより、拡張レジスタの全空間がアクセス可能となる。５１２バイトは殆どのホストがサポート可能なアクセス単位であるが、５１２バイトに限定されず大きくしても良い。長いビット長のアドレスフィールドで構成される場合は、下位何ビットかがアクセス単位として使用され、残りの上位のビットは、複数ページのひとつを選択するために使用される。
【００３７】
５１２バイト単位とする理由は、多数のメモリカードホストコントローラが、１ブロック＝５１２バイトを単位としてリード／ライト転送を行う構成になっているためである。ＳＤＩＯ対応のホストコントローラであれば、１バイト単位のリード／ライトが可能であるが、全てのホストコントローラがこれをサポートしているわけではない。大多数のホストコントローラで拡張機能を制御できるようにするためには、５１２バイト単位のアクセスが行えると都合が良い。
【００３８】
８ページ（ページ０〜ページ７）の内、ページ０は、拡張機能のプラグ・アンド・プレイを行うために汎用情報フィールドを記録しておくための領域である。汎用情報フィールドの詳細については後述する。ページ１〜ページ７は、拡張機能を制御するためのレジスタが定義される。ページ０は位置が特定し易いために、汎用情報フィールドを記録しておく場所としては適切であるが、必ずしもページ０である必要はなく、特定のページ位置を汎用情報フィールドの記載する場所として定義することもできる。
【００３９】
拡張レジスタのリード／ライトは、以下に定義される専用のリード／ライトコマンドが用いられる。これらのコマンドは、拡張レジスタをリード／ライトする第１の動作モードと、データポートを構成する第２の動作モードを有している。
【００４０】
（拡張レジスタのリードコマンド（ＣＭＤ４８））
図３は、拡張レジスタのリードコマンド（ＣＭＤ４８）のフィールド構成の一例を示している。“Ｓ”は、コマンドのスタートビットを示し、“Ｔ”は転送方向を示すビットであり、“ｉｎｄｅｘ”は、コマンド番号を示している。“ＲＳ”（レジスタセレクト）は拡張レジスタ３１内のページを示し、“ＯＦＳ”は選択されたページ内におけるデータの位置（ページの先頭からのオフセット）を示している。３ビットの“ＲＳ”と、９ビットの“ＯＦＳ”で、５１２バイトの拡張レジスタ８ページ分の空間をバイト単位に指定することができる。具体的には、選択された拡張レジスタ内のリード開始位置が“ＲＳ”と“ＯＦＳ”により指定される。
【００４１】
“ＬＥＮ”はデータ長を示している。９ビットのＬＥＮフィールドにより、５１２バイトの拡張レジスタ内の読み出しに必要な有効なデータ長が指定される。
【００４２】
“ＣＲＣ７”は、巡回冗長検査（cyclic redundancy check）コードを示し、“Ｅ”は、コマンドのエンドビットを示している。“ｒｓｖ”は、予備のビットを示している。
【００４３】
（拡張レジスタのリードコマンド、第１の動作モード）
図４は、第１の動作モードによる拡張レジスタのリード動作の例を示している。
【００４４】
図４に示すように、メモリデバイス１１は、ホスト２０からコマンド（ＣＭＤ４８）を受け取ると、レスポンス（Ｒ１）をホスト２０に返し、その後、拡張レジスタ３１から５１２バイトのデータブロックを読み出す。
【００４５】
具他的には、コマンド（ＣＭＤ４８）の引数で、拡張レジスタのページと、ページ内の読み出すべきデータの位置が、“ＲＳ”と“ＯＦＳ”で指定され、データ長が“ＬＥＮ”で指定される。このようにして指定された拡張レジスタ内のデータが、５１２バイトのデータブロックの先頭にセットされ、読み出される。５１２バイトのデータブロックのうち、“ＬＥＮ”で指定されたデータ長を超えるデータは、無効データとなる。データブロックの最後にはＣＲＣコードが付加され、正しくデータが受け取れたかをチェックすることが可能とされている(無効データを含めてチェックを行う)。有効データが先頭から配置されているため、ホスト２０は、有効データを探すために、データシフトなどの操作を行う必要がない。
【００４６】
（拡張レジスタのリードコマンド、第２の動作モード）
図５は、第２の動作モードによるデータポートリードの動作の例を示している。
【００４７】
メモリデバイス１１は、このコマンド(ＣＭＤ４８)を受け取ると、レスポンス（Ｒ１）を返し、その後に５１２バイトのデータブロックを返す。
【００４８】
コマンドの引数“ＲＳ”，“ＯＦＳ”により、拡張レジスタの選択されたページ内の位
置が指定される。図５ではレングスが１の場合のデータポート例が示されている。すなわち、データポートは、拡張レジスタマップ上において、１バイトのアドレスを占有するだけで良い。データポートであるかどうかをアドレスのデコードによって識別できれば良く、実際に１バイト幅のポートを通してデータが伝送される必要はないので、データ伝送性能には影響しない。このデータポートに割り当てられたデバイスから１ブロック（５１２バイト単位）のデータをリードすることができる。すなわち、１回当たり、１ブロック（５１２バイト単位）のデータをリードすることができる。この読み出されたデータは、例えばバッファ１６に保持され、ホスト２０によって読み出される。
【００４９】
続いて同じデータポートをリードすると、続きの５１２バイトのデータを読み出すことができる。データポートから読み出すデータを何処から取ってくるかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。５１２バイトのデータブロックの最後にＣＲＣコードが付加され、正しくデータが受け取れたか否かがチェック可能とされている。
【００５０】
（拡張レジスタのライトコマンド（ＣＭＤ４９））
図６は、拡張レジスタのライトコマンドの一例を示している。ライトコマンド（ＣＭＤ４９）において、リードコマンド（ＣＭＤ４８）と同一部分には同一符号を付している。ライトコマンドとリードコマンドは、“ｉｎｄｅｘ”により区別される。３ビットの“ＲＳ”と、９ビットの“ＯＦＳ”により、拡張レジスタのページと選択されたページ内のデータの位置が指定される。９ビットの“ＬＥＮ”フィールドにより、５１２バイトの拡張レジスタに書き込むデータ長が指定される。したがって、５１２バイト内の任意のデータ長(バイト単位)のデータを拡張レジスタの任意のページと場所に書き込むことが可能である。
【００５１】
ライトコマンド（ＣＭＤ４９）は、コマンドの引数の中にマスクレジスタが設けられている。すなわち、“Ｍａｓｋ”は、８ビット長のマスクレジスタを示している。このマスクレジスタにより、１バイトのデータのライトにおいて、ビット単位のオペレーションが可能となり、特定のビットにのみデータを書き込むことが可能となる。このため、１バイト内のビットオペレーションであれば、リード・モディファイ・ライトを行う必要がない。マスクレジスタは、データ長が１バイトのとき、すなわち、“ＬＥＮ＝０”(レングス１)のとき有効となる。マスクレジスタ“Ｍａｓｋ”のデータが“１”のビットは、データが書き込まれ、マスクレジスタ“Ｍａｓｋ”のデータが“０”のビットは、既にセットされた値が保存される。
【００５２】
すなわち、図７（ａ）に示すようなデータを保持している拡張レジスタを仮定した場合において、マスクレジスタのデータが、図７（ｂ）に示すようである場合、ライトコマンドが実行されることにより、図７（c）に示すように、マスクレジスタのデータが“１”のビットはデータが書き込まれ、データが“０”のビットは、元のデータが保持される。このため、リード・モディファイ・ライトを行うことなく、所要のビットのみデータを書き換えることが可能となる。“ｘ”で示す部分が、新しいデータが書き込まれたビットを示す。
【００５３】
また、より長いマスクデータを別の手段によって供給できる場合、ＬＥＮ＞１でもマスクライトが可能であるが、図７に示す例では、コマンド引数にマスクデータを割り当てているため、８ビットマストとしている。
【００５４】
（拡張レジスタのライトコマンド、第１の動作モード）
図８は、第１の動作モードによる拡張レジスタのライト動作の例を示している。
【００５５】
メモリデバイス１１は、このコマンド（ＣＭＤ４９）を受け取ると、レスポンス（Ｒ１）を返し、その後、５１２バイトのデータブロックを受け取る。
【００５６】
メモリデバイス１１は、データブロックが正しく受け取れたかどうかを示すＣＲＣコードをホスト２０に返す。その後、このコマンドの処理が終了するまでビジーを返し、ホスト２０が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ１６に保持されている。
【００５７】
コマンド処理において、コマンドの引数“ＲＳ”、“ＯＦＳ”により、拡張レジスタ内のページと位置が指定され、“ＬＥＮ”によりデータ長が指定される。バッファ１６に保持されたデータブロックのうち、先頭から“ＬＥＮ”で指定した長さのデータが拡張レジスタに書き込まれる。“ＬＥＮ”で指定されたデータ長を超えるデータブロック中のデータは無効データとして破棄される。
【００５８】
有効データをデータブロックの先頭から配置することにより、ホストシステムは有効データをデータブロックの途中に配置する操作が不要となる。
【００５９】
（拡張レジスタのライトコマンド、第２の動作モード）
図９は、第２の動作モードによるライトデータポートの動作の例を示している。
【００６０】
メモリデバイス１１は、このコマンド（ＣＭＤ４９）を受け取ると、レスポンス（Ｒ１）を返し、その後、５１２バイトのデータブロックを受け取る。
【００６１】
メモリデバイス１１は、データブロックが正しく受け取れたかどうかを示すＣＲＣコードをホストに返す。その後、このコマンド処理が終わるまでビジーを返し、ホスト２０が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ１６に保持されている。
【００６２】
コマンド処理において、コマンドの引数“ＲＳ”、“ＯＦＳ”により、拡張レジスタ内のページと位置が指定され、データポートが指定される。データポートは、拡張レジスタマップ上において、１バイトのアドレスを占有するだけでよい。このデータポートに、バッファ１６に保持された１ブロック（５１２バイト単位）のデータをある割り当てたデバイスにライトすることができる。すなわち、１回当たり、１ブロックのデータをライトすることができる。
【００６３】
続いて同じデータポートをライトすると、続く５１２バイトのデータを割り当てたデバイスに書き込むことができる。データポートのデータを何処に渡すかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。
【００６４】
（汎用情報フィールドの使用例）
図１０は、拡張レジスタ３１のページ０に示された汎用情報フィールドの例を示している。この汎用情報フィールドにより、ホスト２０が拡張機能を制御するドライバを特定できるようにすることにより、拡張機能を追加した場合において、ホストシステムが容易に拡張機能を使えることができ、プラグ・アンド・プレイを実現することができる。
【００６５】
図１０を参照して、標準のホストドライバが処理すべきシーケンス例を説明する。
【００６６】
（ストラクチャレビジョン）
ストラクチャレビジョンは、拡張レジスタ３１のページ０のフォーマットを定義するレビジョンである。汎用情報フィールドに新しい情報を追加した場合、ストラクチャレビジョンを更新することにより、どのバージョンの汎用情報フィールドを保持しているかを示す。以前のバージョンの機能ホストドライバは、新しいフィールドを無視する。
【００６７】
（データ長）
データ長は、ページ０に記録されている有効データ長を示している。
【００６８】
（拡張機能数（＝Ｎ））
拡張機能数は、デバイスが何個の拡張機能をサポートしているかを示している。ホストドライバは、起動時に、サポートしている機能数だけ繰り返し、各拡張機能用のドライバがインストールされているかどうかを調べる。
【００６９】
（デバイス１機能識別コード）
デバイス１機能識別コードに、コードが設定してある場合、標準ドライバを用いることができることを示す。ＯＳが標準ドライバをサポートしている場合、専用ドイバをインストールすることなく、このデバイスが使用できる。専用ドライバがインストールされている場合は、そちらの使用を優先する。非標準の機能の場合、このフィールドに“０”が設定される。この場合は、専用ドライバによってのみこの機能は制御される。
【００７０】
（デバイス１製造者識別情報、デバイス１機能識別情報）
デバイス１製造者識別情報、デバイス１機能識別情報は、それぞれ専用ドライバを特定するための情報であり、これらのフィールドには、例えばＡＳＣＩＩ文字列により製造者名や販売者名、又は拡張機能の識別情報が記載される。ホストドライバは、これらの情報をもとにデバイス１の専用ドライバがインストールされているかどうかを探す。
【００７１】
機能識別情報には、例えばＡＳＣＩＩ文字列によりデバイスの型番、レビジョンなどが記載される。
【００７２】
（次デバイスの先頭アドレス）
次デバイスの先頭アドレスは、次のデバイス情報が記載されているページ０内のアドレスを示している。ホストシステムがこのデバイスをサポートしていない場合、このデバイスは使用できないため、次のデバイスがチェックされる。これ以降のフィールドは可変長のため、この位置に定義している。
【００７３】
（デバイス１アドレスポインタ１〜Ｘ、レングスフィールド１〜Ｘ）
デバイス１アドレスポインタ１〜Ｘ、レングスフィールド１〜Ｘは、ひとつの機能に複数の拡張レジスタ領域を定義できることを示している。それぞれのアドレスとレングスを下記に列挙する。
【００７４】
（デバイス１アドレスポインタ１（開始アドレス）、レングス１）
デバイス１が使用する拡張レジスタの第１領域。拡張レジスタのページ１〜７の空間内の先頭アドレスと、使用する拡張レジスタ領域の大きさを示している。
【００７５】
すなわち、１つのデバイスに、１つ又は複数の拡張レジスタ領域を割り付けることができ、アドレスポインタは、ページ０以外の任意の拡張領域の場所（開始アドレス）を示している。レングスは、ポインタを先頭アドレスとした拡張レジスタを占有する大きさを示している。
【００７６】
（デバイス１アドレスポインタ２（開始アドレス）、レングス２）
デバイス１に割り当てられた拡張レジスタ内の第２領域の位置と領域の大きさを示している。これにより、例えば標準ドライバは、第１領域のみで制御するが、専用ドライバは、第１領域と第２領域を用いて効率良く制御することを可能にするなどの応用が可能となる。
【００７７】
（デバイス１アドレスポインタＸ（開始アドレス）、レングスＸ）
デバイス１に割り当てられた第Ｘ領域の位置と領域の大きさを示している。
【００７８】
このように、拡張レジスタ内に複数の領域を定義できる。各領域はオーバーラップしないように配置される。レングス情報によりオーバーラップがあるかどうかをチェックすることができる。
【００７９】
追加フィールドが必要になった場合、これ以降に追加定義していく。新しいフィールドが認識できないホストは、認識可能なフィールドまで読み出し、追加フィールドは無視する。上記の（次デバイスの先頭アドレス）フィールドによりスキップすることができる。
【００８０】
（リードコマンド（ＣＭＤ４８）の動作）
図１１は、上記リードコマンド（ＣＭＤ４８）に対応するメモリデバイス１１内のコントローラ１１ａの動作を示している。
【００８１】
リードコマンドを受けると、ＣＰＵ１３により、コマンドの引数“ＲＳ”、“ＯＦＳ”が解析され、リードコマンドがデータポートかどうか判別される（ＳＴ１１）。すなわち、拡張レジスタ内のページ“ＲＳ”と、ページ内におけるデータの位置が判別される。この結果、コマンドが拡張レジスタのリードであると判別された場合、第１の動作モードにより、拡張レジスタ３１の選択されたページの“ＯＦＳ”で示された位置からデータ長“ＬＥＮ”のデータが取得される（ＳＴ１２）。この取得されたデータは、バッファ１６にセットされる（ＳＴ１３）。
【００８２】
一方、ステップＳＴ１１において、リードコマンドがデータポートであると判別された場合、第２の動作モードにより、拡張レジスタ３１の選択されたページの“ＯＦＳ”で示された位置のデータポートを介して、例えばＳＤＩＯ１９の特定のファンクションから５１２バイトのデータが取得される（ＳＴ１４）。この取得されたデータは、バッファ１６にセットされる（ＳＴ１５）。
【００８３】
（ライトコマンド（ＣＭＤ４９）の動作）
図１２は、上記ライトコマンド（ＣＭＤ４９）に対応するメモリデバイス１１内のコントローラ１１ａの動作を示している。
【００８４】
ライトコマンドを受けると、ＣＰＵ１３（コマンド処理部１４ａ）により、コマンドの引数“ＲＳ”、“ＯＦＳ”が解析され、ライトコマンドがデータポートかどうか判別される（ＳＴ２１）。すなわち、拡張レジスタ内のページ“ＲＳ”と、ページ内におけるデータの位置が判別される。この結果、ライトコマンドがデータポート以外と判別された場合、コマンドの引数“ＬＥＮ＝０”（レングス１）であるかどうか、すなわち、マスクが有効かどうか判別される（ＳＴ２２）。この判別の結果、“ＬＥＮ＝０”ではないと判別された場合(レングスが１より大きい)、拡張レジスタ処理部１４ｃにより拡張レジスタのライト処理が行われる。すなわち、バッファ１６から“ＬＥＮ”により指定された長さのデータが取得される（ＳＴ２３）。この取得されたデータは、拡張レジスタの“ＲＳ”で選択されたページの“ＯＦＳ”で指定された位置にセットされる。
【００８５】
一方、上記ステップＳＴ２２において、“ＬＥＮ＝０”であり(レングスが１)、マスクが有効であると判別された場合、拡張レジスタ処理部１４ｃによりバッファ１６から１バイトのデータと、１バイトのマスクが取得される（ＳＴ２５）。この１バイトのデータと、１バイトのマスクにより、図７（ａ）（ｂ）（ｃ）に示すマスク動作が実行され、拡張レジスタの“ＲＳ”で選択されたページの“ＯＦＳ”で指定された位置のデータの一部が書き換えられる（ＳＴ２６）。
【００８６】
また、上記ステップ２１において、データポートであると判別された場合、バッファ１６から５１２バイトのデータが取得される（ＳＴ２７）。この取得されたデータは、拡張レジスタ３１の選択されたページの“ＯＦＳ”で示された位置のデータポートを介して、例えばＳＤＩＯ１９の特定のファンクションに転送される（ＳＴ２８）。
【００８７】
（ホストドライバ処理）
図１３は、ホスト２０の処理を示している。ホスト２０に、メモリデバイス１１が接続されると、メモリデバイス１１が起動され、メモリデバイス１１のＲＡＭ１５に拡張レジスタ３１が展開される。ホストデバイス１１は、ホストドライバによって先ず、リードコマンド（ＣＭ４８）を発行して、拡張レジスタ３１のページ０のデータを取得する（ＳＴ３１）。次に、取得したページ０のストラクチャレビジョンが確認され、どのバージョンの汎用情報フィールドを保持しているかが確認される（ＳＴ３２）。この後、サポート機能数Ｎと、デバイス情報の先頭アドレスが取得される（ＳＴ３３、ＳＴ３４）。
【００８８】
次いで、ホスト２０内に、取得した拡張機能に対応する専用機能ドライバがインストールされているかどうか検索される（ＳＴ３５、ＳＴ３６）。この結果、専用機能ドライバが無い場合、拡張レジスタのページ０に記載された機能識別コードが“０”であるかどかが判別される（ＳＴ３７）。この結果、機能識別コードが“０”である場合、この拡張機能はサポートされていないため、このデバイスは使用できないと認識され、次のデバイスに対するドライバの検索に移る（ＳＴ３４）。
【００８９】
また、ステップＳＴ３７の判別の結果、機能識別コードが“０”でない場合、ホスト２０にインストールされている標準機能ドライバが検索される（ＳＴ３８、ＳＴ３９）。この結果、標準機能ドライバが無い場合、この拡張機能はサポートされていないため、デバイスは使用できないと認識され、次のデバイスに対するドライバの検索に移る（ＳＴ３４）。
【００９０】
また、ステップＳＴ３５、ＳＴ３６の検索の結果、標準機能ドライバが有った場合、及びステップＳＴ３５、ＳＴ３６の検索の結果、専用機能ドライバが有った場合、ページ０に記載されたデバイスのアドレス及びレングス数が取得される（ＳＴ４０）。この動作がアドレス及びレングス数だけ実行される（ＳＴ４１）。
【００９１】
この後、検索された専用機能ドライバ、又は標準機能ドライバがホスト２０の例えばハードディスク２５からＲＡＭ２４にロードされ、ページ０に記載された１つ又は複数の拡張領域のアドレスポインタ（開始アドレス）が機能ドライバに渡され、その拡張機能が初期化される（ＳＴ４２）。上記アドレス、レングス情報は、前記ＲＡＭ２４にロードした機能ドライバを実行するときに渡される。標準機能ドライバと専用機能ドライバでは、受け渡しできるアドレス、レングス情報の数が異なる可能性があるが、ページ０に登録された順番に受け渡しできる数だけ受け渡される。したがって、最初に登録されたアドレス、レングス領域は、共通的な機能レジスタとして働き、後ろに登録されているアドレス、レングス領域は、オプション的な役割を果たすことができる。
【００９２】
初期化は機能ドライバが行う。すなわち、機能ドライバは、ホストドライバから渡された開始アドレスを基に、その機能に割り当てられた拡張レジスタをアクセスしてデバイスを初期化する。初期化においては、デバイスの消費電力を考慮する必要がある。ホストが供給可能な電力の範囲でデバイスを使う必要があるためである。デバイスが複数のパワーモードを持っている場合、ホストが供給可能なデバイスパワー以下のパワーモードを選択する必要がある。ホストシステムは、別な手段によってホストシステムが供給可能な電力を機能ドライバに伝えることで、パワーモードの選択が可能となる。
【００９３】
上記ステップＳＴ３４〜ＳＴ４３の動作が、サポート機能数Ｎに達するまで繰り返される（ＳＴ４３）。
【００９４】
尚、ページ０に例えば新たなフィールドが追加された場合、新しいフィールドの処理がステップＳＴ４０、ＳＴ４１の間に追加される。新しいフィールドを識別できないホストドライバは、そのフィールドをスキップするように構成される。
【００９５】
上記のように、ホスト２０は、拡張レジスタ３１のページ０の情報を取得し、この情報に基づき、ドライバを検索することにより、プラグ・アンド・プレイを実現することができる。また、従来のように拡張レジスタの固定位置を決める必要がなく、デバイスベンダーは任意の拡張レジスタ位置に機能を定義することができるため、機能拡張を容易に実装することができる。
【００９６】
図１４は、図１３の変形例を示すものであり、図１３と同一部分には同一符号を付し、異なる部分についてのみ説明する。
【００９７】
図１４は、専用機能ドラバと、標準機能ドライバの検索処理が異なっている。すなわち、ステップＳＴ３４において、デバイス情報の先頭アドレスが取得された後、先ず、機能識別コードが“０”であるか否かが判別される（ＳＴ５１）。この結果、“０”でない場合、すなわち、標準機能である場合、専用ドライバを使用するかどうかが判別される（ＳＴ５３）。この結果、専用ドライバを使用しない場合、標準機能ドライバが検索される（ＳＴ５４、ＳＴ５５）。この検索の結果、標準機能ドライバが無い場合、及びステップＳＴ５３において、専用機能ドライバを使用すると判別された場合、専用機能ドライバが検索される（ＳＴ５２、ＳＴ５６）。この検索の結果、専用機能ドライバがあった場合、及びステップＳＴ５５において、標準機能ドライバが有った場合、前述したように、アドレス、レングス数が取得される（ＳＴ４０）。
【００９８】
上記動作によっても、図１３と同様に、プラグ・アンド・プレイを実現することができる。
【００９９】
尚、上記説明において、拡張機能用のドライバは、ホスト２０内にインストールされ、ホスト２０内を検索すると説明した。しかし、これに限定されるものではなく、拡張機能用のドライバは、メモリカード１１に格納されていてもよい。この場合、メモリカード１１も拡張機能用のドライバの検索対象とされる。
【０１００】
（ＳＤＩＯにおける拡張レジスタアクセス）
図１５は、ＳＤＩＯにおける拡張レジスタアクセスを示している。
【０１０１】
ＳＤメモリカードに対応するホストコントローラは、コマンドＣＭＤ４８、ＣＭＤ４９を用いて拡張レジスタをアクセスして、拡張機能を制御することができる。すなわち、固定長ブロック、シングルブロック転送をサポートしている。
【０１０２】
これに対して、ＳＤＩＯカードに対応するホストコントローラでもコマンドＣＭＤ４８、ＣＭＤ４９を用いて拡張レジスタをアクセスできるようにするとともに、拡張レジスタをＳＤＩＯの各ファンクション領域にマッピングすることで、ＳＤＩＯコマンドＣＭＤ５２（ライトコマンド）、ＣＭＤ５３（データ転送コマンド）からもアクセスすることが可能となる。ＳＤＩＯコマンドを用いると、可変ブロック長、マルチブロック転送をサポートでき、ドライバの最適化を図ることができる。コマンドＣＭＤ４８、ＣＭＤ４９でアクセスする場合、上記ＳＤＩＯ空間上のマッピングに関係なく、拡張レジスタをアクセスすることができる。
【０１０３】
具体的には、拡張レジスタをＳＤＩＯで使用する場合、拡張レジスタの各ページは、各ファンクション領域にマッピングされる。図１５に示す例の場合、拡張レジスタのページ０は、ファンクション領域６１のファンクション０にマッピングされ、ページ１、ページ２はファンクション１にマッピングされ、ページ３はファンクション２にマッピングされている。ファンクション０は、各ページの機能レジスタがＳＤＩＯマップのどこに配置されているかを示すアドレス情報を保持している。このため、このアドレス情報を用いることにより、コマンドＣＭＤ４８、ＣＭＤ４９を用いたドライバだけでなく、コマンドＣＭＤ５２、ＣＭＤ５３を用いたドライバにより、拡張レジスタの各ページをアクセスすることが可能である。
【０１０４】
尚、ホスト２０は、拡張レジスタの第１ページに記載された汎用情報フィールドから、拡張機能に割り当てられた拡張レジスタの位置情報をドライバに渡す。これにより、拡張機能が任意の位置に配置されていても制御可能となる。
【０１０５】
また、ホスト２０は、前述したプラグ・アンド・プレイにより、メモリデバイス１１とデータ転送が可能となった状態において、前記コマンドＣＭＤ４８、ＣＭＤ４９、ＣＭＤ５２、ＣＭＤ５３を用いて、拡張機能部としてのＳＤＩＯとデータ伝送が可能となる。
【０１０６】
上記実施形態によれば、メモリデバイス１１のＲＡＭ１５内に複数ページの拡張レジスタ３１を設け、これら拡張レジスタ３１のページ０に、特定のドライバを認識するための標準的な汎用情報フィールドを設定している。このため、ホスト２０は、拡張レジスタ３１のページ０の汎用情報フィールドを参照してドライバを設定することにより、プラグ・アンド・プレイを実現することができる。
【０１０７】
また、拡張レジスタをアクセスするための専用のコマンドＣＭＤ４８、ＣＭＤ４９を定義することにより、メモリ用のホストコントローラにおいても、追加機能を効率良く制御することができる。
【０１０８】
しかも、データの転送は、５１２バイトの固定ブロック長の転送としているため、従来のメモリ用ホストコントローラから拡張レジスタをアクセスするための専用コマンドを発行できる。
【０１０９】
さらに、コマンドの引数として有効データ長の情報や、ライト時のマスク機能を設定しているため、データの一部を書き換える際に、リード・モディファイ・ライトが不要であり、容易にデータの一部を書き換えることができる。
【０１１０】
また、ＳＤＩＯカード対応のホストコントローラにおいては、データポートをサポートしているため、ある特定デバイスに対するデータ転送が行え、かつ拡張レジスタ空間の消費量を低減できる実装が可能となる。
【０１１１】
また、データポートを用いることにより、ＳＤＩＯにおいて複数ブロックによるバースト転送コマンドをサポートすることができ、メモリ以外のデバイスのデータ転送を効率良く行うことができる。(本実施形態では記載されていなが、メモリにおいても複数ブロックによるバースト転送コマンドを定義すれば複数ブロック転送は可能になる。)
さらに、ＳＤＩＯカード対応のホストコントローラにおいては、ＳＤＩＯのアクセスコマンドを用いて、拡張レジスタをアクセスすることにより、小さいブロック長転送とマルチブロック転送とに対応可能となる。このため、さらに最適化したドライバを作ることが可能となる。
【０１１２】
また、カードベンダーにより、拡張レジスタ上の任意の位置に追加機能を制御するレジスタを割り当てることを可能とし、実装したレジスタのアドレス情報をページ０の汎用情報フィールドから提供している。このため、定義された機能レジスタをリロケータブルに配置することが可能である。このため、従来標準化が必要であったアドレス割り当てを決める作業が不要であり、デバイスの製造を容易化できる。
【０１１３】
尚、拡張レジスタは、複数ページに限定されるものではなく、１ページとし、１ページ内で、上記ページ０とページ１〜７に対応する領域を設定することも可能である。
【０１１４】
（レビジョン確認による使用可能な機能の決定）
上記各機能は、その機能で定義した拡張レジスタ・セットにレビジョンを示すレジスタを具備する。また、機能ドライバは対応するレビジョンをドライバ自身が知っている。ある機能をレビジョンアップで拡張する場合、従来の機能と互換性を維持しつつ機能を拡張することにより互換性を維持することができる。リムーバブルカードを用いる場合、カードの機能レビジョンと、ホストシステムにインストールされている機能ドライバのレビジョンの組み合わせによって使用可能な機能が決定される。
【０１１５】
図１６は、レビジョン管理の例を示している。図１６は、カードと機能ドライバのレビジョンに応じて、利用可能な機能の例を示している。例えば３つのレビジョン（Ａ＜Ｂ＜Ｃ）がある場合を説明する。この場合、ＣはＢの機能を包含し、ＢはＡの機能を包含するような拡張が行われている。レビジョン管理は、機能ドライバによって行われる。機能ドライバ自身は自分のレビジョンを知っている。利用可能な機能は、図１６に示すような組み合わせで決定される。全ての機能ドライバレビジョンで、レビジョンＡの機能は使用可能であり、レビジョンＢの機能を使うためには、機能ドライバレビジョンがＢ以上である必要がある。
【０１１６】
（第２の実施形態）
図１７、図１８は、第２の実施形態に係るリードコマンドＣＭＤ４８、及びライトコマンドＣＭＤ４９のフィールド構成の一例を示している。尚、図１７、図１８において、図３、図６と同一部分には同一符号を付し、説明は省略する。
【０１１７】
図１７、図１８に示すＣＭＤ４８、ＣＭＤ４９は、図３、図６に示すＣＭＤ４８、ＣＭＤ４９において、“ＲＳ”と“ＯＦＳ”の１２ビットで構成していたアドレスフィールドを “ＦＮＯ”、“Ａｄｄｒ”により構成される２０ビットに拡張し、ＳＤＩＯとの親和性・互換性を考慮している。
【０１１８】
“ＭＩＯ”フィールドは、メモリ空間と、ＳＤＩＯ空間を分離するビットであり、相互に独立して拡張レジスタを定義できる。このため、拡張レジスタを定義するときに双方の干渉を防ぐことができる。“ＭＩＯ”＝０のとき、メモリ用の拡張レジスタをアクセスでき、“ＭＩＯ”＝１のとき、ＳＤＩＯ用の拡張レジスタをアクセスできる。
【０１１９】
“ＦＮＯ／ＦＩＤ”フィールドは、“ＭＩＯ”フィールドの値により、“ＦＮＯ”と“ＦＩＤ”の一方に設定される。“ＭＩＯ”＝１の場合“ＦＮＯ”は、機能番号を示す３ビットのフィールドであり、“ＭＩＯ”＝０の場合“ＦＩＤ”は、機能識別情報を示す４ビットのフィールドである。ビット数が異なるため別なシンボルで表記している。前記汎用情報フィールを読む場合は、“ＦＮＯ／ＦＩＤ”＝０を設定する。ホストドライバは、このフィールドを０にセットしておけば良い。“ＦＩＤ”は、メモリ空間では使用しないが、“ＦＮＯ”はＳＤＩＯ空間において８個の機能空間を区別するために使用される。
【０１２０】
すなわち、“ＦＮＯ／ＦＩＤ”（４ビット）は、“ＭＩＯ”＝１のとき、ビット３８〜３６は、“ＦＮＯ”を示し、ビット３５は、常に“０”とされる。
【０１２１】
また、“ＦＮＯ／ＦＩＤ”は、“ＭＩＯ”＝０のとき、ビット３８〜３６は、“ＦＩＤ”を示す。“ＦＩＤ”は、メモリ空間を増加せず、機能を識別するために使用される。
【０１２２】
（メモリ空間を“ＦＩＤ”によって増やしても良く、これは制約ではない。）
カードに機能を実装するとき、“ＦＩＤ/ＦＮＯ”にユニークな値が割り当てられ、後述するように、汎用情報のフィールド定義に表示される。このため、機能ドライバがデータポートへのコマンド発行時、引数に“ＦＩＤ/ＦＮＯ”を設定することにより、カードは、コマンドが指定した機能に対するコマンドであることが確認できる。したがって、間違ったデータポートの指定により、誤書き込みによるデータ破壊、誤動作などを防止でき、安全性が担保される。
【０１２３】
また、ホストはアドレス情報から機能を特定しようとするとアドレス情報をデコードをしなければならないが、“ＦＩＤ/ＦＮＯ”だけでも機能識別が可能となり、ホストドライバの制御を簡素化できる。すなわち、同じコマンドが複数の機能により混在して使用されるため、ホストおよびカードにおいて、各機能を識別することが可能なように、“ＦＩＤ/ＦＮＯ”が設定されている。
【０１２４】
“Ａｄｄｒ”フィールド（１７ビット）は、アドレスであり、１２８ＫＢの空間をアクセスできる。“Ａｄｄｒ”の上位８ビットは、ページ番号として用いられ、８ビットにより０〜７ページのうちの１ページが選択される。下位９ビットで選択されたページ内の５１２バイトのブロックがアクセスされる。すなわち、“ＭＩＯ”、“ＦＮＯ”（“ＭＩＯ”＝１）、“Ａｄｄｒ”を用いることにより、拡張レジスタの位置が指定される。
【０１２５】
図１７に示す“Ｌｅｎ”フィールド（８ビット）は、有効データ長を示している。
【０１２６】
また、図１８に示すライトコマンド（ＣＭＤ４９）において、“ＭＷ”は、マスクライトモードを指定するビットである。“ＭＷ”＝０のとき、マスクがディスエーブルとされ、“ＭＷ”＝１のとき、マスクがイネーブルとされる。
【０１２７】
また、“Ｌｅｎ／Ｍａｓｋ”フィールドは、マスクがディスエーブル（“ＭＷ”＝０）のとき、データ長が１６−０８ビットの９ビットに設定される。また、マスクがイネーブル（“ＭＷ”＝１）のとき、データ長は１に設定され、１６−０８ビットのうちの下位８ビットにより書き込み動作が上述したように制御される。すなわち、８ビットの各ビットは、“１”のとき、レジスタのデータが書き込まれ、“０”のとき、レジスタのビットは変化されず、既にセットされた値が保存される。
【０１２８】
第２の実施形態では、ＳＤＩＯコマンドＣＭＤ５２、ＣＭＤ５３がアクセス可能な空間と、ＣＭＤ４８、ＣＭＤ４９がアクセス可能なＳＤＩＯ空間を一致させることができる。すなわち、どちらのコマンドを用いても同じ拡張レジスタ・セットをアクセスすることが可能になる。
【０１２９】
（拡張レジスタのリードコマンド、第１の動作モード）
図１９は、拡張レジスタのリードコマンド（ＣＭＤ４８）の第１の動作モードによる拡張レジスタのリード動作の例を示している。
【０１３０】
図１９に示すように、メモリデバイス１１は、ホスト２０からコマンド（ＣＭＤ４８）を受け取ると、レスポンス（Ｒ１）をホスト２０に返し、その後、拡張レジスタ３１から５１２バイトのデータブロックを読み出す。
【０１３１】
具体的には、コマンド（ＣＭＤ４８）の引数としての“ＦＮＯ”（ＭＩＯ＝１）、“Ａｄｄｒ”により、ページ内の読み出すべきデータの位置が指定され、読み出すべき有効データ長が“Ｌｅｎ”で指定される。このようにして指定された拡張レジスタ内のデータが、５１２バイトのデータブロックの先頭にセットされ、読み出される。５１２バイトのデータブロックのうち、“Ｌｅｎ”で指定されたデータ長を超えるデータは、無効データとなる。データブロックの最後にはＣＲＣコードが付加され、正しくデータが受け取れたかをチェックすることが可能とされている(無効データを含めてチェックを行う)。
【０１３２】
図２０は、第２の動作モードによるデータポートリードの動作の例を示している。
【０１３３】
メモリデバイス１１は、このコマンド(ＣＭＤ４８)を受け取ると、レスポンス（Ｒ１）を返し、その後に５１２バイトのデータブロックを返す。
【０１３４】
メモリデバイス１１は、コマンドの引数の“ＦＩＤ／ＦＮＯ”が割り当てられた拡張レジスタ・セットに一致するかどうかを検証する。拡張レジスタ・セットは、“ＦＮＯ”（“ＭＩＯ”＝１）と“Ａｄｄｒ”によって特定される。これらが一致している場合、コマンドの引数“Ａｄｄｒ”により、拡張レジスタの選択されたページ内の位置が指定される。データポートは、拡張レジスタマップ上において、１バイトのアドレスを占有するだけで良い。データポートであるかどうかはアドレスのデコードによって識別すれば良く、実際に１バイト幅のポートを通してデータが伝送される必要はないので、データ伝送性能には影響しない。このデータポートに割り当てられたデバイスから１ブロック（５１２バイト単位）のデータをリードすることができる。すなわち、１回当たり、１ブロック（５１２バイト単位）のデータをリードすることができる。この読み出されたデータは、例えばバッファ１６に保持され、ホスト２０によって読み出される。
【０１３５】
続いて同じデータポートをリードすると、続きの５１２バイトのデータを読み出すことができる。データポートから読み出すデータを何処から取ってくるかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。５１２バイトのデータブロックの最後にＣＲＣコードが付加され、正しくデータが受け取れたか否かがチェック可能とされている。
【０１３６】
また、上記検証の結果、“ＦＩＤ／ＦＮＯ”が機能に割り当てられた値と不一致である場合、データ転送動作は実行されず、データブロックは転送されない。
【０１３７】
（拡張レジスタのライトコマンド、第１の動作モード）
図２１は、拡張レジスタのライトコマンドの一例を示している。
【０１３８】
メモリデバイス１１は、このコマンド（ＣＭＤ４９）を受け取ると、レスポンス（Ｒ１）を返し、その後、５１２バイトのデータブロックを受け取る。
【０１３９】
メモリデバイス１１は、データブロックが正しく受け取れたかどうかを示すＣＲＣコードをホスト２０に返す。その後、このコマンドの処理が終了するまでビジーを返し、ホスト２０が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ１６に保持されている。
【０１４０】
ライトコマンド（ＣＭＤ４９）において、リードコマンド（ＣＭＤ４８）と同一部分には同一符号を付している。ライトコマンドとリードコマンドは、“ｉｎｄｅｘ”により区別される。“ＦＮＯ”（“ＭＩＯ”＝１）と１７ビットの“Ａｄｄｒ”により、拡張レジスタのページと選択されたページ内のデータの位置が指定される。さらに、９ビットの“Ｌｅｎ”フィールドにより、５１２バイトの拡張レジスタに書き込むデータ長が指定される。したがって、５１２バイト内の任意のデータ長(バイト単位)のデータを拡張レジスタの任意のページと場所に書き込むことが可能である。
【０１４１】
ライトコマンド（ＣＭＤ４９）は、上記のように、コマンドの引数の中にマスクレジスタが設けられている。すなわち、“Ｍａｓｋ”は、８ビット長のマスクレジスタを示している。このマスクレジスタにより、１バイトのデータのライトにおいて、ビット単位のオペレーションが可能となり、特定のビットにのみデータを書き込むことが可能となる。このため、１バイト内のビットオペレーションであれば、リード・モディファイ・ライトを行う必要がない。マスクレジスタは、データ長が１バイトのとき、すなわち、“Ｍａｓｋ”の上位１ビットが“１”のとき有効となる。
【０１４２】
（拡張レジスタのライトコマンド、第２の動作モード）
図２２は、第２の動作モードによるライトデータポートの動作の例を示している。
【０１４３】
メモリデバイス１１は、このコマンド（ＣＭＤ４９）を受け取ると、レスポンス（Ｒ１）を返す。その後、メモリデバイス１１は、コマンドの引数の“ＦＩＤ／ＦＮＯ”が拡張レジスタ・セットに一致するかどうかを検証する。拡張レジスタ・セットは、“ＦＮＯ”（“ＭＩＯ”＝１）と“Ａｄｄｒ”によって特定される。これらが一致している場合、コマンドの引数“Ａｄｄｒ”により、拡張レジスタの選択されたページ内の位置を指定し、５１２バイトのデータブロックを受け取る。
【０１４４】
次いで、メモリデバイス１１は、データブロックが正しく受け取れたかどうかを示すＣＲＣコードをホストに返す。その後、このコマンド処理が終わるまでビジーを返し、ホスト２０が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ１６に保持されている。
【０１４５】
コマンド処理において、コマンドの引数“Ａｄｄｒ”により、拡張レジスタ内のページと位置が指定され、データポートが指定される。データポートは、拡張レジスタマップ上において、１バイトのアドレスを占有するだけでよい。このデータポートに、バッファ１６に保持された１ブロック（５１２バイト単位）のデータをある割り当てたデバイスにライトすることができる。すなわち、１回当たり、１ブロックのデータをライトすることができる。
【０１４６】
続いて同じデータポートをライトすると、続く５１２バイトのデータを割り当てたデバイスに書き込むことができる。データポートのデータを何処に渡すかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。
【０１４７】
また、上記検証の結果、“ＦＩＤ／ＦＮＯ”が機能に割り当てられた値と不一致である場合、データ転送動作は実行されず、データブロックは破棄される。
【０１４８】
（汎用情報フィールドの使用例）
図２３は、第２の実施形態に係るＦＩＤの指定に関する例を示した図である。汎用情報フィールドの意味は、図１０と同じである。異なる点は、拡張アドレス、長さフィールドのフォーマットで、“ＦＩＤ／ＦＮＯ”の値を設定するために４ビットフィールドが確保されていることにある。各機能毎にユニークな“ＦＩＤ／ＦＮＯ”が設定される。カードに実装された各機能は自分の“ＦＩＤ／ＦＮＯ”を認識している。
【０１４９】
（リードコマンド（ＣＭＤ４８）の動作）
図２４は、図１９、図２０に示すリードコマンド（ＣＭＤ４８）に対応するメモリデバイス１１内のコントローラ１１ａの動作を示している。
【０１５０】
リードコマンドを受けると、ＣＰＵ１３により、コマンドの引数“ＦＩＤ／ＦＮＯ”が割り当てられた拡張レジスタ・セットに一致するかどうかが検証される（ＳＴ５１）。拡張レジスタ・セットは、“ＦＮＯ”（“ＭＩＯ”＝１）と“Ａｄｄｒ”によって特定される。検証の結果、両者が一致している場合、コマンドの引数の“Ａｄｄｒ”が解析され、リードコマンドがデータポートかどうか判別される（ＳＴ５２）。すなわち、“ＦＮＯ”（“ＭＩＯ”＝１）と“Ａｄｄｒ”でデータポートとして定義されたアドレスであるかどうかが判別される。
【０１５１】
この結果、アドレスがデータポートとしてのアドレスではなく、コマンドが拡張レジスタのリードであると判別された場合、第１の動作モードにより、位置“Ａｄｄｒ”に基づき、拡張レジスタ３１の選択されたページからデータ長“Ｌｅｎ”のデータが取得される（ＳＴ５３）。この取得されたデータ長“Ｌｅｎ”のデータは、バッファ１６の５１２バイトのデータブロックにセットされる（ＳＴ５４）。
【０１５２】
一方、ステップＳＴ５２において、リードコマンドがデータポートであると判別された場合、第２の動作モードにより、拡張レジスタ３１の選択されたページの予め設定された位置のデータポートを介して、例えばＳＤＩＯ１９の特定の機能（ファンクション）から５１２バイトのデータが取得される（ＳＴ５５）。この取得されたデータは、バッファ１６の５１２バイトのデータブロックにセットされる（ＳＴ５６）。
【０１５３】
上記ステップＳＴ５１の判別の結果、データポートのコマンドでは無い場合、処理が終了される。
【０１５４】
（ライトコマンド（ＣＭＤ４９）の動作）
図２５は、上記ライトコマンド（ＣＭＤ４９）に対応するメモリデバイス１１内のコントローラ１１ａの動作を示している。
【０１５５】
ライトコマンドを受けると、ＣＰＵ１３（コマンド処理部１４ａ）により、コマンドの引数“ＦＩＤ／ＦＮＯ”が割り当てられた拡張レジスタ・セットに一致するかどうか検証する（ＳＴ６１）。拡張レジスタ・セットは、“ＦＮＯ”（“ＭＩＯ”＝１）と“Ａｄｄｒ”によって特定される。検証の結果、両者が一致している場合、コマンドの引数“Ａｄｄｒ”が解析され、ライトコマンドがデータポートかどうか判別される（ＳＴ６２）。すなわち、“ＦＮＯ”（“ＭＩＯ”＝１）と“Ａｄｄｒ”で予め設定されたデータポートの位置かどうかが判別される。
【０１５６】
この結果、ライトコマンドがデータポート以外と判別された場合、コマンドの引数“ＭＷ”が“１”かどうか、すなわち、マスクライトかどうかが判別される（ＳＴ６３）。
【０１５７】
この判別の結果、マスクライトではないと判別された場合、拡張レジスタ処理部１４ｃにより拡張レジスタのライト処理が行われる。すなわち、バッファ１６のデータブロックから“Ｌｅｎ”により指定された長さのデータが取得される（ＳＴ６４）。この取得されたデータは、“Ａｄｄｒ”に基づき、拡張レジスタの選択されたページの指定された位置にセットされる（ＳＴ６５）。
【０１５８】
一方、上記ステップＳＴ６３において、“ＭＷ”＝“１”であり、マスクライトであると判別された場合、拡張レジスタ処理部１４ｃによりバッファ１６のデータブロックから１バイトのデータが取得されるとともに、引数から１バイトのマスクが取得される（ＳＴ６６）。
【０１５９】
次いで、１バイトのデータと、１バイトのマスクにより、図７（ａ）（ｂ）（ｃ）に示すマスク動作が実行され、“Ａｄｄｒ”で指定された拡張レジスタの所定のページ、所定の位置に１バイトのマスク動作が実行されたデータがセットされる（ＳＴ６７）。
【０１６０】
また、上記ステップＳＴ６２において、ライトコマンドがデータポートであると判別された場合、バッファ１６のデータブロックから５１２バイトのデータが取得される（ＳＴ６８）。この取得されたデータは、拡張レジスタ３１の指定されたページの位置のデータポートを介して、例えばＳＤＩＯ１９の特定の機能に送られる（ＳＴ６９）。
【０１６１】
上記ステップＳＴ６１の判別の結果、データポートのコマンドでは無い場合、処理が終了される。
【０１６２】
（ＣＭＤ５８、ＣＭＤ５９）
図２６、図２７は、データの転送効率を良くするためのマルチブロック転送コマンドを示すものであり、図２６は、ＣＭＤ５８（Multi-Block Read）、図２７は、ＣＭＤ５９（Multi-Block Write）を示している。
【０１６３】
ＣＭＤ５８、ＣＭＤ５９の引数は、ＣＭＤ４８、ＣＭＤ４９と類似しているが一部定義が異なる。また、ＣＭＤ５８には、ＣＭＤ４８の引数“Ｌｅｎ”がなく、ＣＭＤ５９には、ＣＭＤ４９の引数“ＭＷ”及び“Ｌｅｎ／Ｍａｓｋ”がない。これは、マルチブロック転送がデータポートに対する転送を想定しているためである。ＣＭＤ５８、ＣＭＤ５９はオプションコマンドであり、データポートは、複数のシングルブロック転送コマンドＣＭＤ４８、ＣＭＤ４９で代替できるようになっている。
【０１６４】
マルチブロック転送は、データポートを経由したデータ転送を想定している。したがって、このコマンドのアドレスが、拡張レジスタ空間の中のデータポートとして定義されたアドレスと一致した場合のみ、このコマンドが有効になる。このため、このコマンドが通常の拡張レジスタに対して実行された場合、エラーとなりデータ転送は実行されない。
【０１６５】
“ＦＩＤ／ＦＮＯ”フィールド（４ビット）には、発行されたコマンドがどの機能で用いるコマンドであるかを識別するためのコードが設定される。このため、“ＦＩＤ”フィールドを用いることにより、この値で機能を識別することができ、実装が容易になる。アドレス“Ａｄｄｒ”フィールドでもファンクションは識別可能である。しかし、カードによって割り当てられるアドレスが異なるため、ホストドライバがアドレスから機能を特定することは管理がし難いという問題がある。
【０１６６】
ホストドライバは、“ＦＩＤ”フィールドの値に基づき、機能毎にホストシステムに実装されているデータバッファなどを切り替え制御に用いることができる。
【０１６７】
ＣＭＤ５８／５９の引数には、データ長を指定する“Ｌｅｎ”フィールドがない。この理由は、長いデータ伝送は、長いブロック数を指定する必要があり、この情報はリード／ライトコマンドの引数には指定しきれないためである。したがって、ＣＭＤ５８／５９を発行する前にデータ転送に必要なブロック数を指定しておく必要がある。このため、例えば拡張レジスタにブロック数を設定するレジスタ定義し、ＣＭＤ４９で設定する方法や、ブロック数を設定するコマンド（ＣＭＤ２３）を、ＣＭＤ５８／５９を発行する直前に発行する、などの方法が用いられる。
【０１６８】
拡張レジスタにデータを設定する場合、各機能で独立して設定することができ、他の機能から影響されない。共通のブロック数コマンド（ＣＭＤ２３）を用いる場合、メモリマルチブロックコマンドに対するブロック数の設定と区別が必要である。このため、各ＣＭＤ５８／５９の直前に発行する必要があり、ホストドライバは、ＣＭＤ２３の直後に他のコマンドが発行されないように順番を管理する必要がある。
【０１６９】
ホストは、複数機能カード／デバイスのひとつの機能を特定するためには、初期化で得られるカード固有アドレス（ＲＣＡ:Relative Card Address）やデバイスＩＤ、前記“ＭＩＯ”と前記“ＦＩＤ／ＦＮＯ”情報が必要である。
【０１７０】
図２８は、第２の実施形態に係る汎用情報フィールドの表示位置を示している。図２８（ａ）に示すメモリ空間では、拡張レジスタのページ０に配置され、図２８（ｂ）に示すＳＤＩＯ空間では、従来のレジスタとコンフリクトしない特定の位置に配置される。例えば図２８（ｂ）において、汎用情報ＳＤＩＯ用汎用情報は、機能（ファンクション）０の“００８ＦＦｈ”−“００８００ｈ”（５１２バイト）（“ｈ”は１６進数を示す）０に配置されている。
【０１７１】
図２９は、第２の実施形態に係るメモリ空間とＳＤＩＯ空間の対応関係の一例を示している。図２９において、図１５と同一部分には同一符号を付している。
【０１７２】
メモリ拡張レジスタは、ＣＭＤ４８／４９によりアクセスが可能である。具体的には、５１２バイトの固定ブロック長で、シングルブロック転送が行われる。さらにデータポートの場合、ＣＭＤ５８／５９でマルチブロック転送を行うことができる。ＳＤＩＯ拡張レジスタは、ＣＭＤ４８／４９だけでなく、ＣＭＤ５２／５３によってもアクセスが可能である。ＣＭＤ５３は可変長コマンドのため、データポートでなくてもＳＤＩＯ拡張レジスタのアクセスに用いることができる。
【０１７３】
（機能ドライバインストール）
ＳＤＩＯ機能（ＣＭＤ５２／５３）が使用可能かどうかは、ホストシステムがサポートする機能によって決まる。ＳＤＩＯをサポートしないホストは、ＣＭＤ４８／４９、ＣＭＤ５８／５９を用いた機能ドライバをインストールする。ＳＤＩＯをサポートするホストシステムは、さらにＣＭＤ５２／５３を用いた機能ドライバもインストールすることが可能となる。
【０１７４】
尚、ＣＭＤ５３は、例えば可変ブロック長、及び複数ブロック転送をサポートするリード又はライトが可能なコマンドであり、ＣＭＤ５２は、例えばデータを持たず、引数とレスポンスで１バイトのデータのリード、ライトを可能とするコマンドである。
【０１７５】
ＣＭＤ４８／４９のＳＤＩＯ拡張レジスタ空間は、ＣＭＤ５２／５３の空間と等価である。ＣＭＤ５３が可変ブロック長とマルチブロック転送をサポートするため、データ転送は最適化されたＳＤＩＯドライバを使用することにより一層効率的に実行される。
【０１７６】
ＣＩＳ（Card Information Structure）を参照することなく、ＣＭＤ４８／４９がサポートされたホストが、その情報を参照するように、ＳＤＩＯの汎用情報は、前記した機能０の特定の位置から見られる。
【０１７７】
（機能ドライバの選択）
ＳＤＩＯ対応カードに関して、ＣＭＤ５２／５３を用いた機能ドライバがインストールされている場合、その機能ドライバが使用され、インストールされていない場合、ＣＭＤ４８／４９、ＣＭＤ５８／５９を用いた機能ドライバが使用される。
【０１７８】
ＳＤＩＯ非対応カードに関して、ＣＭＤ４８／４９、ＣＭＤ５８／５９を用いた機能ドライバが使用される。
【０１７９】
（ＳＤＩＯの初期化動作）
図３０は、コンボカードにおけるＳＤＩＯの初期化動作を概略的に示している。
【０１８０】
従来、ＳＤＩＯの初期化シーケンスは、最初にＳＤＩＯ初期化コマンド（ＣＭＤ５）を実行しないとＳＤＩＯ機能が有効にならないという定義になっている。このため、コンボカードでメモリを使用している場合でも、ＳＤＩＯを使用する時点で再初期化が必要になるため、ホストにとって使いにくい仕様となっていた。
【０１８１】
通常、Ｉ／Ｏ機能は、その機能を使う直前に初期化するのがシステムリソースを無駄にしないためや、消費電力を無駄に消費しないために好ましい。機能が初期化されるタイミングとしては、機能を用いるアプリケーションが起動したタイミングで行うのが良い。
【０１８２】
また、再初期化では、カード固有アドレス（ＲＣＡ）の変更が行われるため、メモリのアクセス方法にも影響を与えてしまう。メモリ制御に影響を与えず、ＳＤＩＯ機能を有効にするため、メモリ初期化シーケンスを基本として、ＳＤＩＯ機能は後で追加できることが望ましい。
【０１８３】
そのため、図３０に示すように、メモリデバイス１１が起動され、初期化されると（ＳＴ７１）、コマンド（ＣＭＤ３）が発行され、カード固有アドレス（ＲＣＡ）が取得される（ＳＴ７２）。この後、コマンド（ＣＭＤ７）が発行され（ＳＴ７３）、メモリデバイス１１が転送状態、すなわち、メモリが使用可能な状態に設定される（ＳＴ７４）。この状態にいて、ＳＤＩＯの初期化コマンド（ＣＭＤ５）が発行される（ＳＴ７５）。これにより、ＳＤＩＯが初期化され、ＣＭＤ５２とＣＭＤ５３の受付が可能とされる（ＳＴ７６）。
【０１８４】
尚、カード固有アドレス（ＲＣＡ）はメモリの初期化で取得した値を維持する。これは初期化方法の追加であり、従来のＳＤＩＯ初期化シーケンスでも初期化は可能であり互換性がある。
【０１８５】
上記構成によれば、機能を用いるアプリケーションが起動したタイミングにおいて、機能が初期化されるため、メモリ制御に影響を与えることなく、各機能を初期化することができる。
【０１８６】
（機能ドライバインターフェース）
従来、ＳＤＩＯは、共通レジスタに必要な制御ビットを割り当てて制御していた。これを行うためハードウェアを実装する必要がある。専用の機能ドライバで機能を制御する場合、実装は自由に行うことができる。このため、必ずしも共通レジスタで制御を行う必要はない。従来共通レジスタで行っていた制御を機能ドライバのＡＰＩ（Application Program Interface）として定義すれば、制御をソフトウエア化することができる。ＡＰＩレベルを標準化することにより、ハードウェアによる標準化は不要であり、実装を容易化することができる。
【０１８７】
ＡＰＩの例を以下に示す。
【０１８８】
(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はこの制御に用いられるＡＰＩである。
【０１９７】
図３１は、メモリデバイス１１としてのＳＤカードとホスト２０の機能インターフェースの関係を概略的に示している。
【０１９８】
ホスト２０は、ホストコントローラ２１、ホストドライバ７１、ファイルシステム７２、メモリアプリケーション７３、機能ドライバ７４、機能アプリケーション７５により構成されている。また、メモリデバイス１１としてのＳＤカードは、拡張レジスタ３１、例えばＳＤＩＯからなる機能ハードウェア１９を含んでいる。
【０１９９】
ホスト２０において、ホストドライバ７１は、機能ドライバ７４を見つけ、ロードする機能がサポートしている。すなわち、ホストドライバ７１は、拡張レジスタの汎用情報フィールドを参照して、機能ドライバ７４を検出し、その機能ドライバを実行することにより、拡張機能を使用することができる。また、拡張機能レジスタ３１を制御する機能ドライバ７４と機能アプリケーション７４との間は、機能仕様により定義されたＡＰＩによりコミュニケートされる。
【０２００】
ＳＤカードは、標準化のため、機能仕様により定義された拡張機能レジスタ３１と、ホストドライバ７１が機能ドライバ７４を見つけてロードすることができるように、上述した汎用情報フィールドを有している。
【０２０１】
ホストコントローラ２１とメモリデバイス１１は、上述したコマンドＣＭＤ４８／４９等を用いてコミュニケートされる。
【０２０２】
上記構成によれば、従来共通レジスタで行っていた制御を機能ドライバのＡＰＩとして定義することにより、制御をソフトウエア化することができる。また、ＡＰＩレベルを標準化することにより、ハードウェアによる標準化が不要であり、実装を容易化することができる。
【０２０３】
また、ホストドライバ７１は、拡張レジスタの汎用情報フィールドを参照して、機能ドライバ７４を検出し、その機能ドライバを実行することにより、拡張機能を使用することができる。したがって、ホスト２０は、容易に拡張機能を使用することが可能である。
【０２０４】
（“ＦＩＤ”によるデータバッファの制御）
メモリデバイス１１は、アドレス情報を識別することにより、どの機能に対するコマンドであるかを判別することが可能ではある。しかし、アドレス範囲は機能によって異なるため、ホスト２０はアドレスから機能を識別するのが難しい。
【０２０５】
このため、上述したように、“ＦＩＤ／ＦＮＯ”を用いることにより、ホスト２０は簡単に機能を識別することが可能である。
【０２０６】
また、“ＦＩＤ／ＦＮＯ”を用いることにより、例えばホスト２０の複数のバッファを制御することが可能である。
【０２０７】
図３２に示すように、ホスト２０は、メモリデバイス１１としてのＳＤカードの複数の機能に対してデータ転送を行う場合、各機能に対応して独立したバッファ８１、８２を持っている。これらバッファ８１、８２は、マルチプレクサ（ＭＵＸ）８３を介してホストコントローラ２１に接続されている。このマルチプレクサ８３を“ＦＩＤ／ＦＮＯ”により制御することにより、各機能に対応したバッファ８１、８２を選択することができる。
【０２０８】
すなわち、ホスト２０は、ＣＭＤ５８／５９に設定した“ＦＩＤ／ＦＮＯ”に応じて、対応するバッファ８１、８２をマルチプレクサ８３により選択することができる。
【０２０９】
ホストコントローラ２１から例えばリードコマンドＣＭＤ５８が発行された場合、メモリデバイス１１の対応する機能の拡張レジスタから読み出されたデータは、ホストコントローラ２１を介してマルチプレクサ８３に供給される。マルチプレクサ８３は、“ＦＩＤ／ＦＮＯ”に基づき、受け取ったデータをバッファ８１、８２のうちの一方に供給する。
【０２１０】
また、ホストコントローラ２１から例えばライトデータコマンドＣＭＤ５９が発行された場合、マルチプレクサ８３は、“ＦＩＤ／ＦＮＯ”に基づき、バッファ８１、８２のうちの一方から選択されたデータをホストコントローラ２１に供給し、ホストコントローラ２１は、メモリデバイス１１にデータを転送する。メモリデバイス１１は、“ＦＩＤ／ＦＮＯ”に基づき、対応する機能の拡張レジスタにデータを供給する。
【０２１１】
このように、“ＦＩＤ／ＦＮＯ”を用いて、マルチプレクサ８３を制御することにより、各機能に対応したバッファ８２、８３を確実に選択することが可能である。
【０２１２】
その他、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【０２１３】
１１…メモリデバイス、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…バッファ、１８…ＮＡＮＤ型フラッシュメモリ、１９…ＳＤＩＯ、２０…ホスト、２１…ホストコントローラ、２２…ＣＰＵ。
【図１】
0005728292.tif 000002
【図２】
0005728292.tif 000003
【図３】
0005728292.tif 000004
【図４】
0005728292.tif 000005
【図５】
0005728292.tif 000006
【図６】
0005728292.tif 000007
【図７】
0005728292.tif 000008
【図８】
0005728292.tif 000009
【図９】
0005728292.tif 000010
【図１０】
0005728292.tif 000011
【図１１】
0005728292.tif 000012
【図１２】
0005728292.tif 000013
【図１３】
0005728292.tif 000014
【図１４】
0005728292.tif 000015
【図１５】
0005728292.tif 000016
【図１６】
0005728292.tif 000017
【図１７】
0005728292.tif 000018
【図１８】
0005728292.tif 000019
【図１９】
0005728292.tif 000020
【図２０】
0005728292.tif 000021
【図２１】
0005728292.tif 000022
【図２２】
0005728292.tif 000023
【図２３】
0005728292.tif 000024
【図２４】
0005728292.tif 000025
【図２５】
0005728292.tif 000026
【図２６】
0005728292.tif 000027
【図２７】
0005728292.tif 000028
【図２８】
0005728292.tif 000029
【図２９】
0005728292.tif 000030
【図３０】
0005728292.tif 000031
【図３１】
0005728292.tif 000032
【図３２】
0005728292.tif 000033