説明

メモリシステム

【課題】 拡張機能を容易に設定することが可能なメモリシステムを提供する。
【解決手段】 メモリ15は、制御部13に接続された作業エリアである。拡張機能部19は、制御部13により制御される。拡張レジスタ31は、メモリ15に設けられ、拡張機能部19の拡張機能を定義可能な一定のブロック長を有する。第1のコマンドは、拡張レジスタを前記一定のデータ長単位でリードする。第2のコマンドは、拡張レジスタを前記一定のデータ長単位でライトする。前記拡張レジスタは、第1の領域に前記拡張機能の種別及び制御可能なドライバを特定するための情報と、前記拡張機能が割り当てられる拡張レジスタ上の場所を示すアドレス情報が記録され、第1の領域と異なる第2の領域に拡張機能を含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
近時、メモリカードは、単なるメモリデバイスとしてだけでなく、付加価値を持たせるため様々な機能の追加が要望されている。また、追加機能をプラグ・アンド・プレイで使用可能にするために、汎用的な初期化手段が望まれている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2004−46498号公報
【非特許文献】
【0004】
【非特許文献1】Part 1 Physical Layer Simplified Specification Ver3.01 May 18, 2010(URL:http://www.sdcard.org/home/)
【非特許文献2】Part E1 SDIO Simplified Specification Ver2.00 Feb. 8, 2007(URL:http://www.sdcard.org/home/)
【発明の概要】
【発明が解決しようとする課題】
【0005】
本実施形態は、拡張機能を容易に設定することが可能なメモリシステムを提供しようとするものである。
【課題を解決するための手段】
【0006】
実施形態によれば、メモリシステムは、不揮発性半導体記憶装置と、制御部と、メモリと、拡張機能部と、拡張レジスタとを含んでいる。制御部は、不揮発性半導体記憶装置を制御する。メモリは、制御部に接続された作業エリアである。拡張機能部は、制御部により制御される。拡張レジスタは、メモリ上に設けられ、前記拡張機能部の拡張機能を定義可能な一定のブロック長を有する。前記制御部は、前記拡張レジスタを前記一定のデータ長単位でリードする第1のコマンドと、前記拡張レジスタを前記一定のデータ長単位でライトする第2のコマンドとを処理し、前記拡張レジスタは、第1の領域に前記拡張機能の種別及び制御可能なドライバを特定するための情報と、前記拡張機能が割り当てられる拡張レジスタ上の場所を示すアドレス情報が記録され、前記第1の領域と異なる第2の領域に拡張機能を含むことを特徴とする。
【図面の簡単な説明】
【0007】
【図1】実施形態に適用されるメモリシステムを概略的に示す構成図。
【図2】図1に示すメモリシステムのファームウェの一例を示す構成図。
【図3】拡張レジスタのリードコマンドの一例を示す構成図。
【図4】リードコマンドによる拡張レジスタのリード動作を示すタイミング図。
【図5】リードコマンドによるデータポートのリード動作を示すタイミング図。
【図6】拡張レジスタのライトコマンドの一例を示す構成図。
【図7】図7(a)(b)(c)はマスクレジスタの動作を示す図。
【図8】ライトコマンドによる拡張レジスタのライト動作を示すタイミング図。
【図9】ライトコマンドによるデータポートのライト動作を示すタイミング図。
【図10】拡張レジスタの先頭ページに設定される汎用情報(General Information)フィールドの一例を示す図。
【図11】リードコマンドに従ったメモリシステムの動作の一例を示すフローチャート。
【図12】ライトコマンドに従ったメモリシステムの動作の一例を示すフローチャート。
【図13】ホストドライバの動作の一例を示すフローチャート。
【図14】ホストドライバの動作の他の例を示すフローチャート。
【図15】SDIOにおける拡張レジスタのアクセス動作を概略的に示す図。
【図16】レビジョン管理の一例を示す図。
【図17】第2の実施形態に係る拡張レジスタのリードコマンドの一例を示す図。
【図18】第2の実施形態に係る拡張レジスタのライトコマンドの一例を示す図。
【図19】リードコマンドによる拡張レジスタのリード動作を示すタイミング図。
【図20】リードコマンドによるデータポートのリード動作を示すタイミング図。
【図21】ライトコマンドによる拡張レジスタのライト動作を示すタイミング図。
【図22】ライトコマンドによるデータポートのライト動作を示すタイミング図。
【図23】拡張レジスタの先頭ページに設定される汎用情報フィールドの一例を示す図。
【図24】第2の実施形態に係るリードコマンドに従ったメモリシステムの動作の一例を示すフローチャート。
【図25】第2の実施形態に係るライトコマンドに従ったメモリシステムの動作の一例を示すフローチャート。
【図26】第2の実施形態に係る拡張レジスタのマルチブロックリードコマンドの一例を示す図。
【図27】第2の実施形態に係る拡張レジスタのマルチブロックライトコマンドの一例を示す図。
【図28】第2の実施形態に係る汎用情報の表示位置の一例を示す図。
【図29】第2の実施形態に係るメモリ空間とSDIO空間の関係の一例を示す図。
【図30】第2の実施形態に係るSDIOの初期化の簡素化を説明するために示すフローチャート。
【図31】第2の実施形態に係るメモリデバイスとホストの機能インターフェースの関係を概略的に示す図。
【図32】第2の実施形態に係り、バッファの制御を説明するために示す概略構成図。
【発明を実施するための形態】
【0008】
例えばSDカードのようなメモリデバイスは、機能を拡張する場合、新たな規格が定められ、その規格に従って、機能が拡張されていた。このため、規格が定まらないと、機能を拡張することが難しかった。
【0009】
例えばSDカードのようなメモリデバイスやホスト機器には、標準的な機能の拡張方法が定義されていなかった。このため、特殊なホストデバイス以外は、メモリデバイスに追加された機能を簡単に使用できるようにすることができなかった。これはメモリデバイスに新しい機能を追加した場合における普及の妨げとなっていた。
【0010】
また、ホストコントローラの機能に制限があるため、メモリデバイスに追加された機能が使用できない場合があった。具体的には、メモリ用のホストコントローラは、割り込みをサポートしていない場合や、512バイトより小さなデータのリード/ライトに対応していない場合が多い。特にSDIO規格では、可変ブロック長のマルチブロック転送が定義されているが、メモリ専用ホストでは、このようなデータ転送が行えない場合が多い。このため、例えばデジタルカメラやPHSなどの周辺機器やインターフェースとしての機能を有するSDIOカードや、SDカードにSDIOカードが組み込まれたコンボ(combo)カードの機能を拡張した場合、拡張された機能に対応する機能ドライバをホストシステムにインストールする必要があり、またホストドライバを改変しないと機能ドライバを認識することができなかった。
【0011】
また、ホストはカード/デバイスを特定するカードアドレス(RCA)やDevice IDを使用している。単機能カード/デバイスの場合はこれらの情報で機能が特定できるが、カードアドレスだけでは複数機能デバイスの機能のひとつを特定することができないという問題があった。そのためホストシステムを管理するソフトウエアをマルチファンションカード/デバイス対応ができるように改変しないと複数機能デバイス使用することができなかった。
【0012】
また、多くのメモリ内のコントローラは、512バイト単位にメモリをアクセスする。このため、512バイト単位のデータの一部のデータを書き換える場合、リード・モディファイ・ライトが必要となっていた。すなわち、例えば、512バイトのデータのうち、1バイトのデータを書き換える場合、512バイトのデータがバッファに読み込まれ、バッファ上で1バイトのデータが更新され、この更新された512バイトのデータを書き込むという動作が必要である。このため、制御効率が悪かった。
【0013】
また、一般に、レジスタを用いてカードの機能を拡張する場合、制御レジスタが特定アドレスに割り当てられていた。このため、カードベンダーは、自由に機能拡張に用いるアドレス位置を決めることができなかった。拡張機能を標準化する場合、複数の機能が重複しないようにレジスタアドレスを割り当てする必要があり、機能のサポート状況によっては、アドレス空間が飛び飛びになってしまうという問題があった。ベンダー独自機能を実装する場合においても、自由に追加ができないという問題があった。
【0014】
そこで、本実施形態は、仮想的な拡張レジスタを用いることにより、機能拡張を可能とし、対応する機能ドライバを探しだすことができる情報を標準化することでフレキシブルな機能拡張手段を提供する。
【0015】
本実施形態を概略的に説明すると、次のようである。
【0016】
(機能拡張方法)
ホストドライバが、追加機能を制御する機能ドライバを探して、対応する機能ドライバがホストにインストールされていた場合、その機能ドライバに制御を渡す仕組みを取り入れることにより、機能拡張が容易に行えるようになる。機能固有の制御は、機能ドライバの中に隠蔽されるため、ホストドライバは最小限の情報のみで追加機能を実装可能となる。例えばファームウェアが管理する複数ページの拡張レジスタを有し、これら拡張レジスタのページ0に、特定のドライバを認識するための標準的な汎用情報(general information)フィールドを提供する。これによりホストシステムは、プラグ・アンド・プレイの実装が可能となる。また、マルチ機能カード/デバイスをサポートするために、個々の機能を指し示すことができるようにホストシステムが管理しておくことで、ホストソフトウエアの改変なしにマルチ機能カード/デバイスを使用可能にする。
【0017】
(SDメモリ又はSDIOホストコントローラの対応)
SDメモリ用のホストコントローラにおいても、追加機能の制御を効率良く行える拡張レジスタをアクセスするための専用コマンドを定義する。512バイトの固定ブロック長の転送とすることにより、従来のSDメモリ用ホストコントローラからこの専用コマンドを発行できる。さらに、コマンドの引数として有効データ長の情報や、ライト時のマスク機能を持つことにより、リード・モディファイ・ライトを不要にすることが可能となる。
【0018】
SDIOカード対応のホストコントローラにおいては、SDIOのアクセスコマンドからも、拡張レジスタをアクセスできるようにすることにより、小さいブロック長転送とマルチブロック転送に対応可能となるため、さらに最適化したドライバを作ることが可能になる。
【0019】
データの転送用ポートとしてのデータポートをサポートすることで、拡張レジスタ空間の消費量が少ない実装が可能となる。また、データポートを用いることにより、拡張レジスタ以外のデバイスへのデータ転送も効率良く行うことが可能となる。複数ブロックによるバースト転送コマンドをサポートすることができる。データポートは、機能の実装時に拡張レジスタの任意のアドレスをデータポートとして定義できる。カードはアドレスを解読してデータポートか拡張レジスタかを判断する。
【0020】
(リロケータブルアドレスによる拡張レジスタ定義)
カードベンダーにより、拡張レジスタ上の任意の位置に追加機能を制御するレジスタを割り当てることを可能とし、実装したレジスタのアドレス情報を汎用情報フィールドから提供することにより、レジスタ配置をリロケータブルとすることを可能としている。このため、従来標準化が必要であったアドレス配置は不要となり、メモリデバイスを製造し易くなる。再配置が可能であるため、レジスタを拡張しても容易に対応ができる。
【0021】
以下、実施の形態について、図面を参照して説明する。
【0022】
図1は、本実施形態に係るメモリシステムを概略的に示している。
【0023】
メモリシステムは、例えばSDカードのようなメモリデバイス11と、ホスト20により構成される。
【0024】
メモリデバイス11は、ホスト20に接続されたときに電源供給を受けて動作し、ホスト20からのアクセスに応じた処理を行う。このメモリデバイス11は、コントローラ11aを有している。
【0025】
コントローラ11aは、例えばホストインタフェース(I/F)12、CPU13、ROM(Read only Memory)14、RAM(Random Access Memory)15、バッファ16、メモリインターフェース(I/F)17により構成されている。これらは、バスにより接続されている。メモリインターフェース17には、例えばNAND型フラッシュメモリ18と、拡張機能部としてのSDIO19が接続されている。拡張機能部は、例えば無線LAN装置などを適用することが可能である。
【0026】
ホストインタフェース12は、コントローラ11aとホスト20との間のインターフェース処理を行う。
【0027】
メモリインターフェース17は、コントローラ11aとNAND型フラッシュメモリ18、又はSDIO19との間のインターフェース処理を行う。
【0028】
CPU13は、メモリデバイス11全体の動作を司るものである。このCPU13を正制御するプログラムは、ROM14の中に格納されているファームウェア(制御プログラム等)を用いるかあるいは、RAM115上にロードして所定の処理を実行する。すなわち、CPU13は、各種のテーブルや後述する拡張レジスタをRAM18上に作成したり、ホスト20からライト(書き込み)コマンド、リード(読み出し)コマンド、イレース(消去)コマンドを受けてNAND型フラッシュメモリ18上の領域をアクセスしたり、バッファ16を介してデータ転送処理を制御したりする。
【0029】
ROM14は、CPU13により使用される制御プログラムなどのファームウェアを格納する。RAM15は、CPU13の作業エリアとして使用され、制御プログラムや各種のテーブルや後述する拡張レジスタを記憶する。
【0030】
バッファ16は、ホスト20から送られてくるデータを、例えばNAND型フラッシュメモリ18へ書き込む際、一定量のデータ(例えば1ページ分)を一時的に記憶したり、NAND型フラッシュメモリ18から読み出されたデータをホスト20へ送り出す際、一定量のデータを一時的に記憶したりする。またバッファを介することにより、SDバスインターフェースとバックエンドを非同期に制御することができる。
【0031】
NAND型フラッシュメモリ18は、例えば積層ゲート構造のメモリセル、又はMONOS構造のメモリセルにより構成されている。
【0032】
SDIO19は、例えばデジタルカメラやPHSなどの周辺機器やインターフェースとしての機能を有している。例えば、SDIO19として無線LAN装置を適用することで、無線通信機能を有さないデジタルカメラでも外部サーバ、外部PC等との間で無線によるデータ通信を行うことが可能となる。
【0033】
ホスト20は、例えばデジタルカメラやPHSなどが適用可能である。ホスト20は、ホストコントローラ21、CPU22、ROM23、RAM24、例えばハードディスク25(SSDを含む)により構成されている。これらはバスにより接続されている。
【0034】
CPU22は、ホスト全体を制御する。ROM23は、CPU22の動作に必要なファームウェアを記憶している。RAM24は、例えばCPU22の作業領域として使用されるが、CPU22が実行可能なプログラムもここにロードされ実行される。ハードディスク25は、各種データを保持する。ホストコントローラ21は、メモリデバイス11が接続された状態において、メモリデバイス11とのインターフェース処理を行う。さらに、CPU22の指示に従って、後述する各種コマンドを発行する。
【0035】
(ファームウェアの構成)
図2は、メモリデバイス11のROM14に記憶されたファームウェアの機能構成の一例を示している。これらの機能はコントローラ11aを構成するCPU13等の各ハードウェアとの組み合わせにより実現されるものである。ファームウェアは、例えばコマンド処理部14a、フラッシュメモリ制御部14b、拡張レジスタ処理部14c、機能処理プログラム14dにより構成されている。拡張レジスタ処理部14cは、メモリデバイス11が起動された際、RAM15内に拡張レジスタ31を生成する。この拡張レジスタ31は、仮想レジスタであり、拡張機能を定義可能とされている。
【0036】
(拡張レジスタの構成)
図2に示すように、拡張レジスタ31は、例えば8ページにより構成されている、1ページは、512バイトにより構成されている。512バイトの拡張レジスタをバイト単位にアクセスするため、最低9ビットのアドレスが必要となり、8ページアクセスするために、最低3ビットのアドレスが必要となる。合計12ビットのアドレスにより、拡張レジスタの全空間がアクセス可能となる。512バイトは殆どのホストがサポート可能なアクセス単位であるが、512バイトに限定されず大きくしても良い。長いビット長のアドレスフィールドで構成される場合は、下位何ビットかがアクセス単位として使用され、残りの上位のビットは、複数ページのひとつを選択するために使用される。
【0037】
512バイト単位とする理由は、多数のメモリカードホストコントローラが、1ブロック=512バイトを単位としてリード/ライト転送を行う構成になっているためである。SDIO対応のホストコントローラであれば、1バイト単位のリード/ライトが可能であるが、全てのホストコントローラがこれをサポートしているわけではない。大多数のホストコントローラで拡張機能を制御できるようにするためには、512バイト単位のアクセスが行えると都合が良い。
【0038】
8ページ(ページ0〜ページ7)の内、ページ0は、拡張機能のプラグ・アンド・プレイを行うために汎用情報フィールドを記録しておくための領域である。汎用情報フィールドの詳細については後述する。ページ1〜ページ7は、拡張機能を制御するためのレジスタが定義される。ページ0は位置が特定し易いために、汎用情報フィールドを記録しておく場所としては適切であるが、必ずしもページ0である必要はなく、特定のページ位置を汎用情報フィールドの記載する場所として定義することもできる。
【0039】
拡張レジスタのリード/ライトは、以下に定義される専用のリード/ライトコマンドが用いられる。これらのコマンドは、拡張レジスタをリード/ライトする第1の動作モードと、データポートを構成する第2の動作モードを有している。
【0040】
(拡張レジスタのリードコマンド(CMD48))
図3は、拡張レジスタのリードコマンド(CMD48)のフィールド構成の一例を示している。“S”は、コマンドのスタートビットを示し、“T”は転送方向を示すビットであり、“index”は、コマンド番号を示している。“RS”(レジスタセレクト)は拡張レジスタ31内のページを示し、“OFS”は選択されたページ内におけるデータの位置(ページの先頭からのオフセット)を示している。3ビットの“RS”と、9ビットの“OFS”で、512バイトの拡張レジスタ8ページ分の空間をバイト単位に指定することができる。具体的には、選択された拡張レジスタ内のリード開始位置が“RS”と“OFS”により指定される。
【0041】
“LEN”はデータ長を示している。9ビットのLENフィールドにより、512バイトの拡張レジスタ内の読み出しに必要な有効なデータ長が指定される。
【0042】
“CRC7”は、巡回冗長検査(cyclic redundancy check)コードを示し、“E”は、コマンドのエンドビットを示している。“rsv”は、予備のビットを示している。
【0043】
(拡張レジスタのリードコマンド、第1の動作モード)
図4は、第1の動作モードによる拡張レジスタのリード動作の例を示している。
【0044】
図4に示すように、メモリデバイス11は、ホスト20からコマンド(CMD48)を受け取ると、レスポンス(R1)をホスト20に返し、その後、拡張レジスタ31から512バイトのデータブロックを読み出す。
【0045】
具他的には、コマンド(CMD48)の引数で、拡張レジスタのページと、ページ内の読み出すべきデータの位置が、“RS”と“OFS”で指定され、データ長が“LEN”で指定される。このようにして指定された拡張レジスタ内のデータが、512バイトのデータブロックの先頭にセットされ、読み出される。512バイトのデータブロックのうち、“LEN”で指定されたデータ長を超えるデータは、無効データとなる。データブロックの最後にはCRCコードが付加され、正しくデータが受け取れたかをチェックすることが可能とされている(無効データを含めてチェックを行う)。有効データが先頭から配置されているため、ホスト20は、有効データを探すために、データシフトなどの操作を行う必要がない。
【0046】
(拡張レジスタのリードコマンド、第2の動作モード)
図5は、第2の動作モードによるデータポートリードの動作の例を示している。
【0047】
メモリデバイス11は、このコマンド(CMD48)を受け取ると、レスポンス(R1)を返し、その後に512バイトのデータブロックを返す。
【0048】
コマンドの引数“RS”,“OFS”により、拡張レジスタの選択されたページ内の位
置が指定される。図5ではレングスが1の場合のデータポート例が示されている。すなわち、データポートは、拡張レジスタマップ上において、1バイトのアドレスを占有するだけで良い。データポートであるかどうかをアドレスのデコードによって識別できれば良く、実際に1バイト幅のポートを通してデータが伝送される必要はないので、データ伝送性能には影響しない。このデータポートに割り当てられたデバイスから1ブロック(512バイト単位)のデータをリードすることができる。すなわち、1回当たり、1ブロック(512バイト単位)のデータをリードすることができる。この読み出されたデータは、例えばバッファ16に保持され、ホスト20によって読み出される。
【0049】
続いて同じデータポートをリードすると、続きの512バイトのデータを読み出すことができる。データポートから読み出すデータを何処から取ってくるかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。512バイトのデータブロックの最後にCRCコードが付加され、正しくデータが受け取れたか否かがチェック可能とされている。
【0050】
(拡張レジスタのライトコマンド(CMD49))
図6は、拡張レジスタのライトコマンドの一例を示している。ライトコマンド(CMD49)において、リードコマンド(CMD48)と同一部分には同一符号を付している。ライトコマンドとリードコマンドは、“index”により区別される。3ビットの“RS”と、9ビットの“OFS”により、拡張レジスタのページと選択されたページ内のデータの位置が指定される。9ビットの“LEN”フィールドにより、512バイトの拡張レジスタに書き込むデータ長が指定される。したがって、512バイト内の任意のデータ長(バイト単位)のデータを拡張レジスタの任意のページと場所に書き込むことが可能である。
【0051】
ライトコマンド(CMD49)は、コマンドの引数の中にマスクレジスタが設けられている。すなわち、“Mask”は、8ビット長のマスクレジスタを示している。このマスクレジスタにより、1バイトのデータのライトにおいて、ビット単位のオペレーションが可能となり、特定のビットにのみデータを書き込むことが可能となる。このため、1バイト内のビットオペレーションであれば、リード・モディファイ・ライトを行う必要がない。マスクレジスタは、データ長が1バイトのとき、すなわち、“LEN=0”(レングス1)のとき有効となる。マスクレジスタ“Mask”のデータが“1”のビットは、データが書き込まれ、マスクレジスタ“Mask”のデータが“0”のビットは、既にセットされた値が保存される。
【0052】
すなわち、図7(a)に示すようなデータを保持している拡張レジスタを仮定した場合において、マスクレジスタのデータが、図7(b)に示すようである場合、ライトコマンドが実行されることにより、図7(c)に示すように、マスクレジスタのデータが“1”のビットはデータが書き込まれ、データが“0”のビットは、元のデータが保持される。このため、リード・モディファイ・ライトを行うことなく、所要のビットのみデータを書き換えることが可能となる。“x”で示す部分が、新しいデータが書き込まれたビットを示す。
【0053】
また、より長いマスクデータを別の手段によって供給できる場合、LEN>1でもマスクライトが可能であるが、図7に示す例では、コマンド引数にマスクデータを割り当てているため、8ビットマストとしている。
【0054】
(拡張レジスタのライトコマンド、第1の動作モード)
図8は、第1の動作モードによる拡張レジスタのライト動作の例を示している。
【0055】
メモリデバイス11は、このコマンド(CMD49)を受け取ると、レスポンス(R1)を返し、その後、512バイトのデータブロックを受け取る。
【0056】
メモリデバイス11は、データブロックが正しく受け取れたかどうかを示すCRCコードをホスト20に返す。その後、このコマンドの処理が終了するまでビジーを返し、ホスト20が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ16に保持されている。
【0057】
コマンド処理において、コマンドの引数“RS”、“OFS”により、拡張レジスタ内のページと位置が指定され、“LEN”によりデータ長が指定される。バッファ16に保持されたデータブロックのうち、先頭から“LEN”で指定した長さのデータが拡張レジスタに書き込まれる。“LEN”で指定されたデータ長を超えるデータブロック中のデータは無効データとして破棄される。
【0058】
有効データをデータブロックの先頭から配置することにより、ホストシステムは有効データをデータブロックの途中に配置する操作が不要となる。
【0059】
(拡張レジスタのライトコマンド、第2の動作モード)
図9は、第2の動作モードによるライトデータポートの動作の例を示している。
【0060】
メモリデバイス11は、このコマンド(CMD49)を受け取ると、レスポンス(R1)を返し、その後、512バイトのデータブロックを受け取る。
【0061】
メモリデバイス11は、データブロックが正しく受け取れたかどうかを示すCRCコードをホストに返す。その後、このコマンド処理が終わるまでビジーを返し、ホスト20が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ16に保持されている。
【0062】
コマンド処理において、コマンドの引数“RS”、“OFS”により、拡張レジスタ内のページと位置が指定され、データポートが指定される。データポートは、拡張レジスタマップ上において、1バイトのアドレスを占有するだけでよい。このデータポートに、バッファ16に保持された1ブロック(512バイト単位)のデータをある割り当てたデバイスにライトすることができる。すなわち、1回当たり、1ブロックのデータをライトすることができる。
【0063】
続いて同じデータポートをライトすると、続く512バイトのデータを割り当てたデバイスに書き込むことができる。データポートのデータを何処に渡すかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。
【0064】
(汎用情報フィールドの使用例)
図10は、拡張レジスタ31のページ0に示された汎用情報フィールドの例を示している。この汎用情報フィールドにより、ホスト20が拡張機能を制御するドライバを特定できるようにすることにより、拡張機能を追加した場合において、ホストシステムが容易に拡張機能を使えることができ、プラグ・アンド・プレイを実現することができる。
【0065】
図10を参照して、標準のホストドライバが処理すべきシーケンス例を説明する。
【0066】
(ストラクチャレビジョン)
ストラクチャレビジョンは、拡張レジスタ31のページ0のフォーマットを定義するレビジョンである。汎用情報フィールドに新しい情報を追加した場合、ストラクチャレビジョンを更新することにより、どのバージョンの汎用情報フィールドを保持しているかを示す。以前のバージョンの機能ホストドライバは、新しいフィールドを無視する。
【0067】
(データ長)
データ長は、ページ0に記録されている有効データ長を示している。
【0068】
(拡張機能数(=N))
拡張機能数は、デバイスが何個の拡張機能をサポートしているかを示している。ホストドライバは、起動時に、サポートしている機能数だけ繰り返し、各拡張機能用のドライバがインストールされているかどうかを調べる。
【0069】
(デバイス1機能識別コード)
デバイス1機能識別コードに、コードが設定してある場合、標準ドライバを用いることができることを示す。OSが標準ドライバをサポートしている場合、専用ドイバをインストールすることなく、このデバイスが使用できる。専用ドライバがインストールされている場合は、そちらの使用を優先する。非標準の機能の場合、このフィールドに“0”が設定される。この場合は、専用ドライバによってのみこの機能は制御される。
【0070】
(デバイス1製造者識別情報、デバイス1機能識別情報)
デバイス1製造者識別情報、デバイス1機能識別情報は、それぞれ専用ドライバを特定するための情報であり、これらのフィールドには、例えばASCII文字列により製造者名や販売者名、又は拡張機能の識別情報が記載される。ホストドライバは、これらの情報をもとにデバイス1の専用ドライバがインストールされているかどうかを探す。
【0071】
機能識別情報には、例えばASCII文字列によりデバイスの型番、レビジョンなどが記載される。
【0072】
(次デバイスの先頭アドレス)
次デバイスの先頭アドレスは、次のデバイス情報が記載されているページ0内のアドレスを示している。ホストシステムがこのデバイスをサポートしていない場合、このデバイスは使用できないため、次のデバイスがチェックされる。これ以降のフィールドは可変長のため、この位置に定義している。
【0073】
(デバイス1アドレスポインタ1〜X、レングスフィールド1〜X)
デバイス1アドレスポインタ1〜X、レングスフィールド1〜Xは、ひとつの機能に複数の拡張レジスタ領域を定義できることを示している。それぞれのアドレスとレングスを下記に列挙する。
【0074】
(デバイス1アドレスポインタ1(開始アドレス)、レングス1)
デバイス1が使用する拡張レジスタの第1領域。拡張レジスタのページ1〜7の空間内の先頭アドレスと、使用する拡張レジスタ領域の大きさを示している。
【0075】
すなわち、1つのデバイスに、1つ又は複数の拡張レジスタ領域を割り付けることができ、アドレスポインタは、ページ0以外の任意の拡張領域の場所(開始アドレス)を示している。レングスは、ポインタを先頭アドレスとした拡張レジスタを占有する大きさを示している。
【0076】
(デバイス1アドレスポインタ2(開始アドレス)、レングス2)
デバイス1に割り当てられた拡張レジスタ内の第2領域の位置と領域の大きさを示している。これにより、例えば標準ドライバは、第1領域のみで制御するが、専用ドライバは、第1領域と第2領域を用いて効率良く制御することを可能にするなどの応用が可能となる。
【0077】
(デバイス1アドレスポインタX(開始アドレス)、レングスX)
デバイス1に割り当てられた第X領域の位置と領域の大きさを示している。
【0078】
このように、拡張レジスタ内に複数の領域を定義できる。各領域はオーバーラップしないように配置される。レングス情報によりオーバーラップがあるかどうかをチェックすることができる。
【0079】
追加フィールドが必要になった場合、これ以降に追加定義していく。新しいフィールドが認識できないホストは、認識可能なフィールドまで読み出し、追加フィールドは無視する。上記の(次デバイスの先頭アドレス)フィールドによりスキップすることができる。
【0080】
(リードコマンド(CMD48)の動作)
図11は、上記リードコマンド(CMD48)に対応するメモリデバイス11内のコントローラ11aの動作を示している。
【0081】
リードコマンドを受けると、CPU13により、コマンドの引数“RS”、“OFS”が解析され、リードコマンドがデータポートかどうか判別される(ST11)。すなわち、拡張レジスタ内のページ“RS”と、ページ内におけるデータの位置が判別される。この結果、コマンドが拡張レジスタのリードであると判別された場合、第1の動作モードにより、拡張レジスタ31の選択されたページの“OFS”で示された位置からデータ長“LEN”のデータが取得される(ST12)。この取得されたデータは、バッファ16にセットされる(ST13)。
【0082】
一方、ステップST11において、リードコマンドがデータポートであると判別された場合、第2の動作モードにより、拡張レジスタ31の選択されたページの“OFS”で示された位置のデータポートを介して、例えばSDIO19の特定のファンクションから512バイトのデータが取得される(ST14)。この取得されたデータは、バッファ16にセットされる(ST15)。
【0083】
(ライトコマンド(CMD49)の動作)
図12は、上記ライトコマンド(CMD49)に対応するメモリデバイス11内のコントローラ11aの動作を示している。
【0084】
ライトコマンドを受けると、CPU13(コマンド処理部14a)により、コマンドの引数“RS”、“OFS”が解析され、ライトコマンドがデータポートかどうか判別される(ST21)。すなわち、拡張レジスタ内のページ“RS”と、ページ内におけるデータの位置が判別される。この結果、ライトコマンドがデータポート以外と判別された場合、コマンドの引数“LEN=0”(レングス1)であるかどうか、すなわち、マスクが有効かどうか判別される(ST22)。この判別の結果、“LEN=0”ではないと判別された場合(レングスが1より大きい)、拡張レジスタ処理部14cにより拡張レジスタのライト処理が行われる。すなわち、バッファ16から“LEN”により指定された長さのデータが取得される(ST23)。この取得されたデータは、拡張レジスタの“RS”で選択されたページの“OFS”で指定された位置にセットされる。
【0085】
一方、上記ステップST22において、“LEN=0”であり(レングスが1)、マスクが有効であると判別された場合、拡張レジスタ処理部14cによりバッファ16から1バイトのデータと、1バイトのマスクが取得される(ST25)。この1バイトのデータと、1バイトのマスクにより、図7(a)(b)(c)に示すマスク動作が実行され、拡張レジスタの“RS”で選択されたページの“OFS”で指定された位置のデータの一部が書き換えられる(ST26)。
【0086】
また、上記ステップ21において、データポートであると判別された場合、バッファ16から512バイトのデータが取得される(ST27)。この取得されたデータは、拡張レジスタ31の選択されたページの“OFS”で示された位置のデータポートを介して、例えばSDIO19の特定のファンクションに転送される(ST28)。
【0087】
(ホストドライバ処理)
図13は、ホスト20の処理を示している。ホスト20に、メモリデバイス11が接続されると、メモリデバイス11が起動され、メモリデバイス11のRAM15に拡張レジスタ31が展開される。ホストデバイス11は、ホストドライバによって先ず、リードコマンド(CM48)を発行して、拡張レジスタ31のページ0のデータを取得する(ST31)。次に、取得したページ0のストラクチャレビジョンが確認され、どのバージョンの汎用情報フィールドを保持しているかが確認される(ST32)。この後、サポート機能数Nと、デバイス情報の先頭アドレスが取得される(ST33、ST34)。
【0088】
次いで、ホスト20内に、取得した拡張機能に対応する専用機能ドライバがインストールされているかどうか検索される(ST35、ST36)。この結果、専用機能ドライバが無い場合、拡張レジスタのページ0に記載された機能識別コードが“0”であるかどかが判別される(ST37)。この結果、機能識別コードが“0”である場合、この拡張機能はサポートされていないため、このデバイスは使用できないと認識され、次のデバイスに対するドライバの検索に移る(ST34)。
【0089】
また、ステップST37の判別の結果、機能識別コードが“0”でない場合、ホスト20にインストールされている標準機能ドライバが検索される(ST38、ST39)。この結果、標準機能ドライバが無い場合、この拡張機能はサポートされていないため、デバイスは使用できないと認識され、次のデバイスに対するドライバの検索に移る(ST34)。
【0090】
また、ステップST35、ST36の検索の結果、標準機能ドライバが有った場合、及びステップST35、ST36の検索の結果、専用機能ドライバが有った場合、ページ0に記載されたデバイスのアドレス及びレングス数が取得される(ST40)。この動作がアドレス及びレングス数だけ実行される(ST41)。
【0091】
この後、検索された専用機能ドライバ、又は標準機能ドライバがホスト20の例えばハードディスク25からRAM24にロードされ、ページ0に記載された1つ又は複数の拡張領域のアドレスポインタ(開始アドレス)が機能ドライバに渡され、その拡張機能が初期化される(ST42)。上記アドレス、レングス情報は、前記RAM24にロードした機能ドライバを実行するときに渡される。標準機能ドライバと専用機能ドライバでは、受け渡しできるアドレス、レングス情報の数が異なる可能性があるが、ページ0に登録された順番に受け渡しできる数だけ受け渡される。したがって、最初に登録されたアドレス、レングス領域は、共通的な機能レジスタとして働き、後ろに登録されているアドレス、レングス領域は、オプション的な役割を果たすことができる。
【0092】
初期化は機能ドライバが行う。すなわち、機能ドライバは、ホストドライバから渡された開始アドレスを基に、その機能に割り当てられた拡張レジスタをアクセスしてデバイスを初期化する。初期化においては、デバイスの消費電力を考慮する必要がある。ホストが供給可能な電力の範囲でデバイスを使う必要があるためである。デバイスが複数のパワーモードを持っている場合、ホストが供給可能なデバイスパワー以下のパワーモードを選択する必要がある。ホストシステムは、別な手段によってホストシステムが供給可能な電力を機能ドライバに伝えることで、パワーモードの選択が可能となる。
【0093】
上記ステップST34〜ST43の動作が、サポート機能数Nに達するまで繰り返される(ST43)。
【0094】
尚、ページ0に例えば新たなフィールドが追加された場合、新しいフィールドの処理がステップST40、ST41の間に追加される。新しいフィールドを識別できないホストドライバは、そのフィールドをスキップするように構成される。
【0095】
上記のように、ホスト20は、拡張レジスタ31のページ0の情報を取得し、この情報に基づき、ドライバを検索することにより、プラグ・アンド・プレイを実現することができる。また、従来のように拡張レジスタの固定位置を決める必要がなく、デバイスベンダーは任意の拡張レジスタ位置に機能を定義することができるため、機能拡張を容易に実装することができる。
【0096】
図14は、図13の変形例を示すものであり、図13と同一部分には同一符号を付し、異なる部分についてのみ説明する。
【0097】
図14は、専用機能ドラバと、標準機能ドライバの検索処理が異なっている。すなわち、ステップST34において、デバイス情報の先頭アドレスが取得された後、先ず、機能識別コードが“0”であるか否かが判別される(ST51)。この結果、“0”でない場合、すなわち、標準機能である場合、専用ドライバを使用するかどうかが判別される(ST53)。この結果、専用ドライバを使用しない場合、標準機能ドライバが検索される(ST54、ST55)。この検索の結果、標準機能ドライバが無い場合、及びステップST53において、専用機能ドライバを使用すると判別された場合、専用機能ドライバが検索される(ST52、ST56)。この検索の結果、専用機能ドライバがあった場合、及びステップST55において、標準機能ドライバが有った場合、前述したように、アドレス、レングス数が取得される(ST40)。
【0098】
上記動作によっても、図13と同様に、プラグ・アンド・プレイを実現することができる。
【0099】
尚、上記説明において、拡張機能用のドライバは、ホスト20内にインストールされ、ホスト20内を検索すると説明した。しかし、これに限定されるものではなく、拡張機能用のドライバは、メモリカード11に格納されていてもよい。この場合、メモリカード11も拡張機能用のドライバの検索対象とされる。
【0100】
(SDIOにおける拡張レジスタアクセス)
図15は、SDIOにおける拡張レジスタアクセスを示している。
【0101】
SDメモリカードに対応するホストコントローラは、コマンドCMD48、CMD49を用いて拡張レジスタをアクセスして、拡張機能を制御することができる。すなわち、固定長ブロック、シングルブロック転送をサポートしている。
【0102】
これに対して、SDIOカードに対応するホストコントローラでもコマンドCMD48、CMD49を用いて拡張レジスタをアクセスできるようにするとともに、拡張レジスタをSDIOの各ファンクション領域にマッピングすることで、SDIOコマンドCMD52(ライトコマンド)、CMD53(データ転送コマンド)からもアクセスすることが可能となる。SDIOコマンドを用いると、可変ブロック長、マルチブロック転送をサポートでき、ドライバの最適化を図ることができる。コマンドCMD48、CMD49でアクセスする場合、上記SDIO空間上のマッピングに関係なく、拡張レジスタをアクセスすることができる。
【0103】
具体的には、拡張レジスタをSDIOで使用する場合、拡張レジスタの各ページは、各ファンクション領域にマッピングされる。図15に示す例の場合、拡張レジスタのページ0は、ファンクション領域61のファンクション0にマッピングされ、ページ1、ページ2はファンクション1にマッピングされ、ページ3はファンクション2にマッピングされている。ファンクション0は、各ページの機能レジスタがSDIOマップのどこに配置されているかを示すアドレス情報を保持している。このため、このアドレス情報を用いることにより、コマンドCMD48、CMD49を用いたドライバだけでなく、コマンドCMD52、CMD53を用いたドライバにより、拡張レジスタの各ページをアクセスすることが可能である。
【0104】
尚、ホスト20は、拡張レジスタの第1ページに記載された汎用情報フィールドから、拡張機能に割り当てられた拡張レジスタの位置情報をドライバに渡す。これにより、拡張機能が任意の位置に配置されていても制御可能となる。
【0105】
また、ホスト20は、前述したプラグ・アンド・プレイにより、メモリデバイス11とデータ転送が可能となった状態において、前記コマンドCMD48、CMD49、CMD52、CMD53を用いて、拡張機能部としてのSDIOとデータ伝送が可能となる。
【0106】
上記実施形態によれば、メモリデバイス11のRAM15内に複数ページの拡張レジスタ31を設け、これら拡張レジスタ31のページ0に、特定のドライバを認識するための標準的な汎用情報フィールドを設定している。このため、ホスト20は、拡張レジスタ31のページ0の汎用情報フィールドを参照してドライバを設定することにより、プラグ・アンド・プレイを実現することができる。
【0107】
また、拡張レジスタをアクセスするための専用のコマンドCMD48、CMD49を定義することにより、メモリ用のホストコントローラにおいても、追加機能を効率良く制御することができる。
【0108】
しかも、データの転送は、512バイトの固定ブロック長の転送としているため、従来のメモリ用ホストコントローラから拡張レジスタをアクセスするための専用コマンドを発行できる。
【0109】
さらに、コマンドの引数として有効データ長の情報や、ライト時のマスク機能を設定しているため、データの一部を書き換える際に、リード・モディファイ・ライトが不要であり、容易にデータの一部を書き換えることができる。
【0110】
また、SDIOカード対応のホストコントローラにおいては、データポートをサポートしているため、ある特定デバイスに対するデータ転送が行え、かつ拡張レジスタ空間の消費量を低減できる実装が可能となる。
【0111】
また、データポートを用いることにより、SDIOにおいて複数ブロックによるバースト転送コマンドをサポートすることができ、メモリ以外のデバイスのデータ転送を効率良く行うことができる。(本実施形態では記載されていなが、メモリにおいても複数ブロックによるバースト転送コマンドを定義すれば複数ブロック転送は可能になる。)
さらに、SDIOカード対応のホストコントローラにおいては、SDIOのアクセスコマンドを用いて、拡張レジスタをアクセスすることにより、小さいブロック長転送とマルチブロック転送とに対応可能となる。このため、さらに最適化したドライバを作ることが可能となる。
【0112】
また、カードベンダーにより、拡張レジスタ上の任意の位置に追加機能を制御するレジスタを割り当てることを可能とし、実装したレジスタのアドレス情報をページ0の汎用情報フィールドから提供している。このため、定義された機能レジスタをリロケータブルに配置することが可能である。このため、従来標準化が必要であったアドレス割り当てを決める作業が不要であり、デバイスの製造を容易化できる。
【0113】
尚、拡張レジスタは、複数ページに限定されるものではなく、1ページとし、1ページ内で、上記ページ0とページ1〜7に対応する領域を設定することも可能である。
【0114】
(レビジョン確認による使用可能な機能の決定)
上記各機能は、その機能で定義した拡張レジスタ・セットにレビジョンを示すレジスタを具備する。また、機能ドライバは対応するレビジョンをドライバ自身が知っている。ある機能をレビジョンアップで拡張する場合、従来の機能と互換性を維持しつつ機能を拡張することにより互換性を維持することができる。リムーバブルカードを用いる場合、カードの機能レビジョンと、ホストシステムにインストールされている機能ドライバのレビジョンの組み合わせによって使用可能な機能が決定される。
【0115】
図16は、レビジョン管理の例を示している。図16は、カードと機能ドライバのレビジョンに応じて、利用可能な機能の例を示している。例えば3つのレビジョン(A<B<C)がある場合を説明する。この場合、CはBの機能を包含し、BはAの機能を包含するような拡張が行われている。レビジョン管理は、機能ドライバによって行われる。機能ドライバ自身は自分のレビジョンを知っている。利用可能な機能は、図16に示すような組み合わせで決定される。全ての機能ドライバレビジョンで、レビジョンAの機能は使用可能であり、レビジョンBの機能を使うためには、機能ドライバレビジョンがB以上である必要がある。
【0116】
(第2の実施形態)
図17、図18は、第2の実施形態に係るリードコマンドCMD48、及びライトコマンドCMD49のフィールド構成の一例を示している。尚、図17、図18において、図3、図6と同一部分には同一符号を付し、説明は省略する。
【0117】
図17、図18に示すCMD48、CMD49は、図3、図6に示すCMD48、CMD49において、“RS”と“OFS”の12ビットで構成していたアドレスフィールドを “FNO”、“Addr”により構成される20ビットに拡張し、SDIOとの親和性・互換性を考慮している。
【0118】
“MIO”フィールドは、メモリ空間と、SDIO空間を分離するビットであり、相互に独立して拡張レジスタを定義できる。このため、拡張レジスタを定義するときに双方の干渉を防ぐことができる。“MIO”=0のとき、メモリ用の拡張レジスタをアクセスでき、“MIO”=1のとき、SDIO用の拡張レジスタをアクセスできる。
【0119】
“FNO/FID”フィールドは、“MIO”フィールドの値により、“FNO”と“FID”の一方に設定される。“MIO”=1の場合“FNO”は、機能番号を示す3ビットのフィールドであり、“MIO”=0の場合“FID”は、機能識別情報を示す4ビットのフィールドである。ビット数が異なるため別なシンボルで表記している。前記汎用情報フィールを読む場合は、“FNO/FID”=0を設定する。ホストドライバは、このフィールドを0にセットしておけば良い。“FID”は、メモリ空間では使用しないが、“FNO”はSDIO空間において8個の機能空間を区別するために使用される。
【0120】
すなわち、“FNO/FID”(4ビット)は、“MIO”=1のとき、ビット38〜36は、“FNO”を示し、ビット35は、常に“0”とされる。
【0121】
また、“FNO/FID”は、“MIO”=0のとき、ビット38〜36は、“FID”を示す。“FID”は、メモリ空間を増加せず、機能を識別するために使用される。
【0122】
(メモリ空間を“FID”によって増やしても良く、これは制約ではない。)
カードに機能を実装するとき、“FID/FNO”にユニークな値が割り当てられ、後述するように、汎用情報のフィールド定義に表示される。このため、機能ドライバがデータポートへのコマンド発行時、引数に“FID/FNO”を設定することにより、カードは、コマンドが指定した機能に対するコマンドであることが確認できる。したがって、間違ったデータポートの指定により、誤書き込みによるデータ破壊、誤動作などを防止でき、安全性が担保される。
【0123】
また、ホストはアドレス情報から機能を特定しようとするとアドレス情報をデコードをしなければならないが、“FID/FNO”だけでも機能識別が可能となり、ホストドライバの制御を簡素化できる。すなわち、同じコマンドが複数の機能により混在して使用されるため、ホストおよびカードにおいて、各機能を識別することが可能なように、“FID/FNO”が設定されている。
【0124】
“Addr”フィールド(17ビット)は、アドレスであり、128KBの空間をアクセスできる。“Addr”の上位8ビットは、ページ番号として用いられ、8ビットにより0〜7ページのうちの1ページが選択される。下位9ビットで選択されたページ内の512バイトのブロックがアクセスされる。すなわち、“MIO”、“FNO”(“MIO”=1)、“Addr”を用いることにより、拡張レジスタの位置が指定される。
【0125】
図17に示す“Len”フィールド(8ビット)は、有効データ長を示している。
【0126】
また、図18に示すライトコマンド(CMD49)において、“MW”は、マスクライトモードを指定するビットである。“MW”=0のとき、マスクがディスエーブルとされ、“MW”=1のとき、マスクがイネーブルとされる。
【0127】
また、“Len/Mask”フィールドは、マスクがディスエーブル(“MW”=0)のとき、データ長が16−08ビットの9ビットに設定される。また、マスクがイネーブル(“MW”=1)のとき、データ長は1に設定され、16−08ビットのうちの下位8ビットにより書き込み動作が上述したように制御される。すなわち、8ビットの各ビットは、“1”のとき、レジスタのデータが書き込まれ、“0”のとき、レジスタのビットは変化されず、既にセットされた値が保存される。
【0128】
第2の実施形態では、SDIOコマンドCMD52、CMD53がアクセス可能な空間と、CMD48、CMD49がアクセス可能なSDIO空間を一致させることができる。すなわち、どちらのコマンドを用いても同じ拡張レジスタ・セットをアクセスすることが可能になる。
【0129】
(拡張レジスタのリードコマンド、第1の動作モード)
図19は、拡張レジスタのリードコマンド(CMD48)の第1の動作モードによる拡張レジスタのリード動作の例を示している。
【0130】
図19に示すように、メモリデバイス11は、ホスト20からコマンド(CMD48)を受け取ると、レスポンス(R1)をホスト20に返し、その後、拡張レジスタ31から512バイトのデータブロックを読み出す。
【0131】
具体的には、コマンド(CMD48)の引数としての“FNO”(MIO=1)、“Addr”により、ページ内の読み出すべきデータの位置が指定され、読み出すべき有効データ長が“Len”で指定される。このようにして指定された拡張レジスタ内のデータが、512バイトのデータブロックの先頭にセットされ、読み出される。512バイトのデータブロックのうち、“Len”で指定されたデータ長を超えるデータは、無効データとなる。データブロックの最後にはCRCコードが付加され、正しくデータが受け取れたかをチェックすることが可能とされている(無効データを含めてチェックを行う)。
【0132】
図20は、第2の動作モードによるデータポートリードの動作の例を示している。
【0133】
メモリデバイス11は、このコマンド(CMD48)を受け取ると、レスポンス(R1)を返し、その後に512バイトのデータブロックを返す。
【0134】
メモリデバイス11は、コマンドの引数の“FID/FNO”が割り当てられた拡張レジスタ・セットに一致するかどうかを検証する。拡張レジスタ・セットは、“FNO”(“MIO”=1)と“Addr”によって特定される。これらが一致している場合、コマンドの引数“Addr”により、拡張レジスタの選択されたページ内の位置が指定される。データポートは、拡張レジスタマップ上において、1バイトのアドレスを占有するだけで良い。データポートであるかどうかはアドレスのデコードによって識別すれば良く、実際に1バイト幅のポートを通してデータが伝送される必要はないので、データ伝送性能には影響しない。このデータポートに割り当てられたデバイスから1ブロック(512バイト単位)のデータをリードすることができる。すなわち、1回当たり、1ブロック(512バイト単位)のデータをリードすることができる。この読み出されたデータは、例えばバッファ16に保持され、ホスト20によって読み出される。
【0135】
続いて同じデータポートをリードすると、続きの512バイトのデータを読み出すことができる。データポートから読み出すデータを何処から取ってくるかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。512バイトのデータブロックの最後にCRCコードが付加され、正しくデータが受け取れたか否かがチェック可能とされている。
【0136】
また、上記検証の結果、“FID/FNO”が機能に割り当てられた値と不一致である場合、データ転送動作は実行されず、データブロックは転送されない。
【0137】
(拡張レジスタのライトコマンド、第1の動作モード)
図21は、拡張レジスタのライトコマンドの一例を示している。
【0138】
メモリデバイス11は、このコマンド(CMD49)を受け取ると、レスポンス(R1)を返し、その後、512バイトのデータブロックを受け取る。
【0139】
メモリデバイス11は、データブロックが正しく受け取れたかどうかを示すCRCコードをホスト20に返す。その後、このコマンドの処理が終了するまでビジーを返し、ホスト20が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ16に保持されている。
【0140】
ライトコマンド(CMD49)において、リードコマンド(CMD48)と同一部分には同一符号を付している。ライトコマンドとリードコマンドは、“index”により区別される。“FNO”(“MIO”=1)と17ビットの“Addr”により、拡張レジスタのページと選択されたページ内のデータの位置が指定される。さらに、9ビットの“Len”フィールドにより、512バイトの拡張レジスタに書き込むデータ長が指定される。したがって、512バイト内の任意のデータ長(バイト単位)のデータを拡張レジスタの任意のページと場所に書き込むことが可能である。
【0141】
ライトコマンド(CMD49)は、上記のように、コマンドの引数の中にマスクレジスタが設けられている。すなわち、“Mask”は、8ビット長のマスクレジスタを示している。このマスクレジスタにより、1バイトのデータのライトにおいて、ビット単位のオペレーションが可能となり、特定のビットにのみデータを書き込むことが可能となる。このため、1バイト内のビットオペレーションであれば、リード・モディファイ・ライトを行う必要がない。マスクレジスタは、データ長が1バイトのとき、すなわち、“Mask”の上位1ビットが“1”のとき有効となる。
【0142】
(拡張レジスタのライトコマンド、第2の動作モード)
図22は、第2の動作モードによるライトデータポートの動作の例を示している。
【0143】
メモリデバイス11は、このコマンド(CMD49)を受け取ると、レスポンス(R1)を返す。その後、メモリデバイス11は、コマンドの引数の“FID/FNO”が拡張レジスタ・セットに一致するかどうかを検証する。拡張レジスタ・セットは、“FNO”(“MIO”=1)と“Addr”によって特定される。これらが一致している場合、コマンドの引数“Addr”により、拡張レジスタの選択されたページ内の位置を指定し、512バイトのデータブロックを受け取る。
【0144】
次いで、メモリデバイス11は、データブロックが正しく受け取れたかどうかを示すCRCコードをホストに返す。その後、このコマンド処理が終わるまでビジーを返し、ホスト20が次のコマンドを発行できるタイミングを知らせる。データブロックは、バッファ16に保持されている。
【0145】
コマンド処理において、コマンドの引数“Addr”により、拡張レジスタ内のページと位置が指定され、データポートが指定される。データポートは、拡張レジスタマップ上において、1バイトのアドレスを占有するだけでよい。このデータポートに、バッファ16に保持された1ブロック(512バイト単位)のデータをある割り当てたデバイスにライトすることができる。すなわち、1回当たり、1ブロックのデータをライトすることができる。
【0146】
続いて同じデータポートをライトすると、続く512バイトのデータを割り当てたデバイスに書き込むことができる。データポートのデータを何処に渡すかは、拡張機能の仕様によって自由に定義ができる。データポート制御は、例えば、拡張レジスタ上に制御レジスタを定義して制御することができる。
【0147】
また、上記検証の結果、“FID/FNO”が機能に割り当てられた値と不一致である場合、データ転送動作は実行されず、データブロックは破棄される。
【0148】
(汎用情報フィールドの使用例)
図23は、第2の実施形態に係るFIDの指定に関する例を示した図である。汎用情報フィールドの意味は、図10と同じである。異なる点は、拡張アドレス、長さフィールドのフォーマットで、“FID/FNO”の値を設定するために4ビットフィールドが確保されていることにある。各機能毎にユニークな“FID/FNO”が設定される。カードに実装された各機能は自分の“FID/FNO”を認識している。
【0149】
(リードコマンド(CMD48)の動作)
図24は、図19、図20に示すリードコマンド(CMD48)に対応するメモリデバイス11内のコントローラ11aの動作を示している。
【0150】
リードコマンドを受けると、CPU13により、コマンドの引数“FID/FNO”が割り当てられた拡張レジスタ・セットに一致するかどうかが検証される(ST51)。拡張レジスタ・セットは、“FNO”(“MIO”=1)と“Addr”によって特定される。検証の結果、両者が一致している場合、コマンドの引数の“Addr”が解析され、リードコマンドがデータポートかどうか判別される(ST52)。すなわち、“FNO”(“MIO”=1)と“Addr”でデータポートとして定義されたアドレスであるかどうかが判別される。
【0151】
この結果、アドレスがデータポートとしてのアドレスではなく、コマンドが拡張レジスタのリードであると判別された場合、第1の動作モードにより、位置“Addr”に基づき、拡張レジスタ31の選択されたページからデータ長“Len”のデータが取得される(ST53)。この取得されたデータ長“Len”のデータは、バッファ16の512バイトのデータブロックにセットされる(ST54)。
【0152】
一方、ステップST52において、リードコマンドがデータポートであると判別された場合、第2の動作モードにより、拡張レジスタ31の選択されたページの予め設定された位置のデータポートを介して、例えばSDIO19の特定の機能(ファンクション)から512バイトのデータが取得される(ST55)。この取得されたデータは、バッファ16の512バイトのデータブロックにセットされる(ST56)。
【0153】
上記ステップST51の判別の結果、データポートのコマンドでは無い場合、処理が終了される。
【0154】
(ライトコマンド(CMD49)の動作)
図25は、上記ライトコマンド(CMD49)に対応するメモリデバイス11内のコントローラ11aの動作を示している。
【0155】
ライトコマンドを受けると、CPU13(コマンド処理部14a)により、コマンドの引数“FID/FNO”が割り当てられた拡張レジスタ・セットに一致するかどうか検証する(ST61)。拡張レジスタ・セットは、“FNO”(“MIO”=1)と“Addr”によって特定される。検証の結果、両者が一致している場合、コマンドの引数“Addr”が解析され、ライトコマンドがデータポートかどうか判別される(ST62)。すなわち、“FNO”(“MIO”=1)と“Addr”で予め設定されたデータポートの位置かどうかが判別される。
【0156】
この結果、ライトコマンドがデータポート以外と判別された場合、コマンドの引数“MW”が“1”かどうか、すなわち、マスクライトかどうかが判別される(ST63)。
【0157】
この判別の結果、マスクライトではないと判別された場合、拡張レジスタ処理部14cにより拡張レジスタのライト処理が行われる。すなわち、バッファ16のデータブロックから“Len”により指定された長さのデータが取得される(ST64)。この取得されたデータは、“Addr”に基づき、拡張レジスタの選択されたページの指定された位置にセットされる(ST65)。
【0158】
一方、上記ステップST63において、“MW”=“1”であり、マスクライトであると判別された場合、拡張レジスタ処理部14cによりバッファ16のデータブロックから1バイトのデータが取得されるとともに、引数から1バイトのマスクが取得される(ST66)。
【0159】
次いで、1バイトのデータと、1バイトのマスクにより、図7(a)(b)(c)に示すマスク動作が実行され、“Addr”で指定された拡張レジスタの所定のページ、所定の位置に1バイトのマスク動作が実行されたデータがセットされる(ST67)。
【0160】
また、上記ステップST62において、ライトコマンドがデータポートであると判別された場合、バッファ16のデータブロックから512バイトのデータが取得される(ST68)。この取得されたデータは、拡張レジスタ31の指定されたページの位置のデータポートを介して、例えばSDIO19の特定の機能に送られる(ST69)。
【0161】
上記ステップST61の判別の結果、データポートのコマンドでは無い場合、処理が終了される。
【0162】
(CMD58、CMD59)
図26、図27は、データの転送効率を良くするためのマルチブロック転送コマンドを示すものであり、図26は、CMD58(Multi-Block Read)、図27は、CMD59(Multi-Block Write)を示している。
【0163】
CMD58、CMD59の引数は、CMD48、CMD49と類似しているが一部定義が異なる。また、CMD58には、CMD48の引数“Len”がなく、CMD59には、CMD49の引数“MW”及び“Len/Mask”がない。これは、マルチブロック転送がデータポートに対する転送を想定しているためである。CMD58、CMD59はオプションコマンドであり、データポートは、複数のシングルブロック転送コマンドCMD48、CMD49で代替できるようになっている。
【0164】
マルチブロック転送は、データポートを経由したデータ転送を想定している。したがって、このコマンドのアドレスが、拡張レジスタ空間の中のデータポートとして定義されたアドレスと一致した場合のみ、このコマンドが有効になる。このため、このコマンドが通常の拡張レジスタに対して実行された場合、エラーとなりデータ転送は実行されない。
【0165】
“FID/FNO”フィールド(4ビット)には、発行されたコマンドがどの機能で用いるコマンドであるかを識別するためのコードが設定される。このため、“FID”フィールドを用いることにより、この値で機能を識別することができ、実装が容易になる。アドレス“Addr”フィールドでもファンクションは識別可能である。しかし、カードによって割り当てられるアドレスが異なるため、ホストドライバがアドレスから機能を特定することは管理がし難いという問題がある。
【0166】
ホストドライバは、“FID”フィールドの値に基づき、機能毎にホストシステムに実装されているデータバッファなどを切り替え制御に用いることができる。
【0167】
CMD58/59の引数には、データ長を指定する“Len”フィールドがない。この理由は、長いデータ伝送は、長いブロック数を指定する必要があり、この情報はリード/ライトコマンドの引数には指定しきれないためである。したがって、CMD58/59を発行する前にデータ転送に必要なブロック数を指定しておく必要がある。このため、例えば拡張レジスタにブロック数を設定するレジスタ定義し、CMD49で設定する方法や、ブロック数を設定するコマンド(CMD23)を、CMD58/59を発行する直前に発行する、などの方法が用いられる。
【0168】
拡張レジスタにデータを設定する場合、各機能で独立して設定することができ、他の機能から影響されない。共通のブロック数コマンド(CMD23)を用いる場合、メモリマルチブロックコマンドに対するブロック数の設定と区別が必要である。このため、各CMD58/59の直前に発行する必要があり、ホストドライバは、CMD23の直後に他のコマンドが発行されないように順番を管理する必要がある。
【0169】
ホストは、複数機能カード/デバイスのひとつの機能を特定するためには、初期化で得られるカード固有アドレス(RCA:Relative Card Address)やデバイスID、前記“MIO”と前記“FID/FNO”情報が必要である。
【0170】
図28は、第2の実施形態に係る汎用情報フィールドの表示位置を示している。図28(a)に示すメモリ空間では、拡張レジスタのページ0に配置され、図28(b)に示すSDIO空間では、従来のレジスタとコンフリクトしない特定の位置に配置される。例えば図28(b)において、汎用情報SDIO用汎用情報は、機能(ファンクション)0の“008FFh”−“00800h”(512バイト)(“h”は16進数を示す)0に配置されている。
【0171】
図29は、第2の実施形態に係るメモリ空間とSDIO空間の対応関係の一例を示している。図29において、図15と同一部分には同一符号を付している。
【0172】
メモリ拡張レジスタは、CMD48/49によりアクセスが可能である。具体的には、512バイトの固定ブロック長で、シングルブロック転送が行われる。さらにデータポートの場合、CMD58/59でマルチブロック転送を行うことができる。SDIO拡張レジスタは、CMD48/49だけでなく、CMD52/53によってもアクセスが可能である。CMD53は可変長コマンドのため、データポートでなくてもSDIO拡張レジスタのアクセスに用いることができる。
【0173】
(機能ドライバインストール)
SDIO機能(CMD52/53)が使用可能かどうかは、ホストシステムがサポートする機能によって決まる。SDIOをサポートしないホストは、CMD48/49、CMD58/59を用いた機能ドライバをインストールする。SDIOをサポートするホストシステムは、さらにCMD52/53を用いた機能ドライバもインストールすることが可能となる。
【0174】
尚、CMD53は、例えば可変ブロック長、及び複数ブロック転送をサポートするリード又はライトが可能なコマンドであり、CMD52は、例えばデータを持たず、引数とレスポンスで1バイトのデータのリード、ライトを可能とするコマンドである。
【0175】
CMD48/49のSDIO拡張レジスタ空間は、CMD52/53の空間と等価である。CMD53が可変ブロック長とマルチブロック転送をサポートするため、データ転送は最適化されたSDIOドライバを使用することにより一層効率的に実行される。
【0176】
CIS(Card Information Structure)を参照することなく、CMD48/49がサポートされたホストが、その情報を参照するように、SDIOの汎用情報は、前記した機能0の特定の位置から見られる。
【0177】
(機能ドライバの選択)
SDIO対応カードに関して、CMD52/53を用いた機能ドライバがインストールされている場合、その機能ドライバが使用され、インストールされていない場合、CMD48/49、CMD58/59を用いた機能ドライバが使用される。
【0178】
SDIO非対応カードに関して、CMD48/49、CMD58/59を用いた機能ドライバが使用される。
【0179】
(SDIOの初期化動作)
図30は、コンボカードにおけるSDIOの初期化動作を概略的に示している。
【0180】
従来、SDIOの初期化シーケンスは、最初にSDIO初期化コマンド(CMD5)を実行しないとSDIO機能が有効にならないという定義になっている。このため、コンボカードでメモリを使用している場合でも、SDIOを使用する時点で再初期化が必要になるため、ホストにとって使いにくい仕様となっていた。
【0181】
通常、I/O機能は、その機能を使う直前に初期化するのがシステムリソースを無駄にしないためや、消費電力を無駄に消費しないために好ましい。機能が初期化されるタイミングとしては、機能を用いるアプリケーションが起動したタイミングで行うのが良い。
【0182】
また、再初期化では、カード固有アドレス(RCA)の変更が行われるため、メモリのアクセス方法にも影響を与えてしまう。メモリ制御に影響を与えず、SDIO機能を有効にするため、メモリ初期化シーケンスを基本として、SDIO機能は後で追加できることが望ましい。
【0183】
そのため、図30に示すように、メモリデバイス11が起動され、初期化されると(ST71)、コマンド(CMD3)が発行され、カード固有アドレス(RCA)が取得される(ST72)。この後、コマンド(CMD7)が発行され(ST73)、メモリデバイス11が転送状態、すなわち、メモリが使用可能な状態に設定される(ST74)。この状態にいて、SDIOの初期化コマンド(CMD5)が発行される(ST75)。これにより、SDIOが初期化され、CMD52とCMD53の受付が可能とされる(ST76)。
【0184】
尚、カード固有アドレス(RCA)はメモリの初期化で取得した値を維持する。これは初期化方法の追加であり、従来のSDIO初期化シーケンスでも初期化は可能であり互換性がある。
【0185】
上記構成によれば、機能を用いるアプリケーションが起動したタイミングにおいて、機能が初期化されるため、メモリ制御に影響を与えることなく、各機能を初期化することができる。
【0186】
(機能ドライバインターフェース)
従来、SDIOは、共通レジスタに必要な制御ビットを割り当てて制御していた。これを行うためハードウェアを実装する必要がある。専用の機能ドライバで機能を制御する場合、実装は自由に行うことができる。このため、必ずしも共通レジスタで制御を行う必要はない。従来共通レジスタで行っていた制御を機能ドライバのAPI(Application Program Interface)として定義すれば、制御をソフトウエア化することができる。APIレベルを標準化することにより、ハードウェアによる標準化は不要であり、実装を容易化することができる。
【0187】
APIの例を以下に示す。
【0188】
(1) Initialize Function
機能を初期化するために、ホストドライバから呼び出す。
【0189】
(2) Abort/Reset Function
機能のアボート、又はリセット。
【0190】
(3) Get Function Information
機能レビジョンの読み出し。
【0191】
機能情報の読み出し(サポート情報など)。
【0192】
割り込み情報の読み出し (ポーリング)。
【0193】
(4) Power Consumption Control
機能が実装しているパワーモード情報。
【0194】
(5) Power Off Notification
電源を切っても良いタイミングを通知する。
【0195】
(6) Application Interface
アプリケーションとの間の制御インターフェース。
【0196】
特に、複数機能が実装されているカードにおいて、カードの電源を切る場合、各機能が電源を停止できる状態としてから、ホストはカード電源を切る必要がある。Power Off Notificationはこの制御に用いられるAPIである。
【0197】
図31は、メモリデバイス11としてのSDカードとホスト20の機能インターフェースの関係を概略的に示している。
【0198】
ホスト20は、ホストコントローラ21、ホストドライバ71、ファイルシステム72、メモリアプリケーション73、機能ドライバ74、機能アプリケーション75により構成されている。また、メモリデバイス11としてのSDカードは、拡張レジスタ31、例えばSDIOからなる機能ハードウェア19を含んでいる。
【0199】
ホスト20において、ホストドライバ71は、機能ドライバ74を見つけ、ロードする機能がサポートしている。すなわち、ホストドライバ71は、拡張レジスタの汎用情報フィールドを参照して、機能ドライバ74を検出し、その機能ドライバを実行することにより、拡張機能を使用することができる。また、拡張機能レジスタ31を制御する機能ドライバ74と機能アプリケーション74との間は、機能仕様により定義されたAPIによりコミュニケートされる。
【0200】
SDカードは、標準化のため、機能仕様により定義された拡張機能レジスタ31と、ホストドライバ71が機能ドライバ74を見つけてロードすることができるように、上述した汎用情報フィールドを有している。
【0201】
ホストコントローラ21とメモリデバイス11は、上述したコマンドCMD48/49等を用いてコミュニケートされる。
【0202】
上記構成によれば、従来共通レジスタで行っていた制御を機能ドライバのAPIとして定義することにより、制御をソフトウエア化することができる。また、APIレベルを標準化することにより、ハードウェアによる標準化が不要であり、実装を容易化することができる。
【0203】
また、ホストドライバ71は、拡張レジスタの汎用情報フィールドを参照して、機能ドライバ74を検出し、その機能ドライバを実行することにより、拡張機能を使用することができる。したがって、ホスト20は、容易に拡張機能を使用することが可能である。
【0204】
(“FID”によるデータバッファの制御)
メモリデバイス11は、アドレス情報を識別することにより、どの機能に対するコマンドであるかを判別することが可能ではある。しかし、アドレス範囲は機能によって異なるため、ホスト20はアドレスから機能を識別するのが難しい。
【0205】
このため、上述したように、“FID/FNO”を用いることにより、ホスト20は簡単に機能を識別することが可能である。
【0206】
また、“FID/FNO”を用いることにより、例えばホスト20の複数のバッファを制御することが可能である。
【0207】
図32に示すように、ホスト20は、メモリデバイス11としてのSDカードの複数の機能に対してデータ転送を行う場合、各機能に対応して独立したバッファ81、82を持っている。これらバッファ81、82は、マルチプレクサ(MUX)83を介してホストコントローラ21に接続されている。このマルチプレクサ83を“FID/FNO”により制御することにより、各機能に対応したバッファ81、82を選択することができる。
【0208】
すなわち、ホスト20は、CMD58/59に設定した“FID/FNO”に応じて、対応するバッファ81、82をマルチプレクサ83により選択することができる。
【0209】
ホストコントローラ21から例えばリードコマンドCMD58が発行された場合、メモリデバイス11の対応する機能の拡張レジスタから読み出されたデータは、ホストコントローラ21を介してマルチプレクサ83に供給される。マルチプレクサ83は、“FID/FNO”に基づき、受け取ったデータをバッファ81、82のうちの一方に供給する。
【0210】
また、ホストコントローラ21から例えばライトデータコマンドCMD59が発行された場合、マルチプレクサ83は、“FID/FNO”に基づき、バッファ81、82のうちの一方から選択されたデータをホストコントローラ21に供給し、ホストコントローラ21は、メモリデバイス11にデータを転送する。メモリデバイス11は、“FID/FNO”に基づき、対応する機能の拡張レジスタにデータを供給する。
【0211】
このように、“FID/FNO”を用いて、マルチプレクサ83を制御することにより、各機能に対応したバッファ82、83を確実に選択することが可能である。
【0212】
その他、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【0213】
11…メモリデバイス、13…CPU、14…ROM、15…RAM、16…バッファ、18…NAND型フラッシュメモリ、19…SDIO、20…ホスト、21…ホストコントローラ、22…CPU。

【特許請求の範囲】
【請求項1】
不揮発性半導体記憶装置と、
前記不揮発性半導体記憶装置を制御する制御部と、
前記制御部に接続された作業エリアとしてのメモリと、
前記制御部により制御される拡張機能部と、
前記メモリ上に設けられ、前記拡張機能部の拡張機能を定義可能な一定のブロック長を有する拡張レジスタと、を具備し、
前記制御部は、前記拡張レジスタを前記一定のデータ長単位でリードする第1のコマンドと、前記拡張レジスタを前記一定のデータ長単位でライトする第2のコマンドとを処理し
前記拡張レジスタは、第1の領域に前記拡張機能の種別及び制御可能なドライバを特定するための情報と、前記拡張機能が割り当てられる拡張レジスタ上の場所を示すアドレス情報が記録され、前記第1の領域と異なる第2の領域に拡張機能を含むことを特徴とするメモリシステム。
【請求項2】
前記第1、第2のコマンドは、前記複数ページで構成される拡張レジスタの特定の1ページ内のデータをアクセスするために必要な長さのアドレスフィールドと、有効なデータ長を示すレングスフィールドを引数として有し、
前記第1、第2のコマンドの前記アドレスフィールドの値は、それぞれ第1、第2の動作モードを有し、
前記第1のコマンドの前記第1の動作モードは、前記アドレスフィールドが示す拡張レジスタの位置から、レングスフィールドで示されたデータ長のデータを読み出すリード動作であり、
前記第2のコマンドの前記第1の動作モードは、前記アドレスフィールドが示す拡張レジスタの位置に、レングスフィールドで示されたデータ長のデータを書き込むライト動作であり、前記第1、第2のコマンドの前記第2の動作モードは、前記アドレスフィールドが示す特定のアドレスを拡張レジスタのデータポートと解釈し、データポートと関係付けられた前記拡張機能部とのデータ転送を行うことを特徴とする請求項1記載のメモリシステム。
【請求項3】
前記第1のコマンドの前記第1の動作モードにおいて、前記拡張レジスタの指定されたページから読み出されたデータは、データブロックの先頭から配置され、
前記第2のコマンドの前記第1の動作モードにおいて、データブロックの先頭から配置されたデータを前記拡張レジスタの指定されたページの指定された位置と長さだけ書き込む
ことを特徴とする請求項2記載のメモリシステム。
【請求項4】
前記第2のコマンドは、引数にマスクライトを行うかどうかを選択するビットを持ち、マスクライトを行わない場合、前記レングスフィールドは有効なライトデータ長を示し、マスクライトを行う場合、ライトデータ長は固定値となり、前記レングスフィールドはビット単位に書き込むか元のデータを保持するかを選択するマスク情報を示し、マスク情報は前記固定データ長と同じ長さを持つことを特徴とする請求項2記載のメモリシステム。
【請求項5】
機能に割り当てられた拡張レジスタ・セットと、各機能に単一的に割り当てられ、その値が第1の領域に表示される機能識別情報と、前記第1、第2のコマンドの引数は、機能識別情報を含み、前記機能識別情報がアドレスフィールドによって特定される拡張レジスタ・セットと対応関係にある場合、コマンドの実行が行われることを特徴とする請求項2記載のメモリシステム。
【請求項6】
固定ブロック長、及び複数ブロック転送をサポートするリードコマンドとしての第3のコマンドと、ライトコマンドとしての第4のコマンドを具備し、
前記第3、第4のコマンドは、引数としてアドレスフィールドを含み、前記アドレスフィールドが拡張レジスタのデータポートを指定した場合のみデータ転送が実行され、データ転送量を指定するブロック数は拡張レジスタに事前に設定しておくか、ブロック数の設定コマンドで事前に設定することを特徴とする請求項2記載のメモリシステム。
【請求項7】
機能に割り当てられた拡張レジスタ・セットと、各機能に単一的に割り当てられ、その値が第1の領域に表示される機能識別情報と、前記第3、第4のコマンドの引数には、機能識別情報を含み、前記機能識別情報がアドレスフィールドによって特定される拡張レジスタ・セットと対応関係にある場合、コマンドの実行が行われることを特徴とする請求項6記載のメモリシステム。
【請求項8】
前記拡張レジスタの第1の領域である汎用情報フィールドは、標準の拡張機能を識別するための機能識別コード、製造者を識別するための製造者識別情報、拡張機能を制御する汎用ドライバ又は専用ドライバを識別する情報を含むことを特徴とする請求項1記載のメモリシステム。
【請求項9】
ホストドライバが、前記第1のコマンドを用いて、前記拡張レジスタの前記第1の領域に記載された前記機能識別コード、前記製造者識別情報、前記機能識別情報を読み出して使用可能な汎用機能ドライバ又は専用機能ドライバを特定し、ドライバが存在する場合、それをロードして機能ドライバが拡張機能の初期化するホストをさらに具備することを特徴とする請求項8記載のメモリシステム。
【請求項10】
前記ホストドライバは、前記汎用情報フィールドから、拡張機能に割り当てられた拡張レジスタの位置情報をロードした機能ドライバに渡すことにより、拡張機能が任意の位置に配置されていても制御可能とすることを特徴とする請求項7記載のメモリシステム。
【請求項11】
可変ブロック長、及び複数ブロック転送をサポートするリード、ライトが可能な第5のコマンドと、引数とレスポンスで1バイトデータのリード、ライトが可能な第6のコマンドと、
前記第5、第6のコマンドによってアクセス可能な複数のファンクション領域を持ち、先頭のファンクション領域のある一部に前記第1の領域を割り当て、それ以外のファンクション領域に前記第2の領域を割り当て、前記第5、第6のコマンドによってアクセス可能な拡張レジスタ領域を前記第1、第2のコマンドでも、アクセス可能にしたことを特徴とする請求項2記載のメモリシステム。
【請求項12】
前記ホストドライバは、前記第1、第2のコマンド、又は前記第3、第4のコマンドにより、前記第1の動作モードを用いて前記拡張レジスタをアクセスし、前記第2の動作モードを用いて前記拡張機能部とデータ転送を行うことを特徴とする請求項7記載のメモリシステム。
【請求項13】
前記ホストドライバは、メモリ/デバイスを特定するアドレス情報と、前記第1の領域から読み出される各機能単一値を持つ機能識別情報を用いて、複数の複数機能デバイスからあるひとつの機能を特定することを特徴とする請求項7記載のメモリシステム。
【請求項14】
前記ホストドライバは、前記第1の領域から読み出される各機能単一値を持つ機能識別情報と、複数の機能デバイスに対応して個々に配置された複数のバッファと、前記第1のコマンド、第2のコマンド、第3のコマンドまたは、第4のコマンドに設定された機能識別情報に基づき、前記複数のバッファの1つを選択することを特徴とする請求項7記載のメモリシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate


【公開番号】特開2012−178132(P2012−178132A)
【公開日】平成24年9月13日(2012.9.13)
【国際特許分類】
【出願番号】特願2011−110242(P2011−110242)
【出願日】平成23年5月17日(2011.5.17)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】