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