(57)【要約】  【解決手段】  コンピューティングホストから見たデバイスファームウェア更新の影響の管理は、可視性の遅延なしではオペレーティングシステムが回復不能の誤りおよび「クラッシュ」を発生させることになるはずのコンテキストなどにおいて、例えばデバイスファームウェア更新の影響の少なくとも一部分の可視性を遅延させることによって、ファームウェア更新をまたいでホスト上で連続してオペレーティングシステムを走らせることを可能にする。例えば、デバイス（ＳＳＤなど）が、Ｗｉｎｄｏｗｓ（登録商標）の未修正バージョンを走らせているコンピューティングホストに接続されている。デバイス上のファームウェアが、例えば起動されることによって更新／アクティブ化される。通常は（更新されたファームウェアがアクティブ化されると）オペレーティングシステムから即座に見えるようになるはずの情報の一部分の可視性が、デバイスの電源サイクルまで遅延される。その部分が、例えばファームウェア改訂識別子などを含む場合には、可視性の遅延は、オペレーティングシステムを再起動せずにファームウェア更新／アクティブ化をまたいで連続してオペレーティングシステムを走らせることを可能にする。  【選択図】      図２
2014519662.tif 000002
【特許請求の範囲】
【請求項１】
デバイスであって、
不揮発性メモリと、
コンピューティングホストに接続する手段と、
前記不揮発性メモリを、第１のファームウェア、第１のファームウェア改訂識別子、第２のファームウェア、および第２のファームウェア改訂識別子を記憶するように管理する手段と、
前記コンピューティングホストから前記第１のファームウェアを受け取る手段であって、前記第１のファームウェアは前記第１のファームウェア改訂識別子と関連付けられているものである、前記第１のファームウェアを受け取る手段と、
前記コンピューティングホストから前記第２のファームウェアを受け取る手段であって、当該受け取る手段は前記第１のファームウェアを受け取る手段の後で動作するものであり、前記第２のファームウェアは前記第２のファームウェア改訂識別子と関連付けられているものである、前記第２のファームウェアを受け取る手段と、
前記コンピューティングホストに前記第１のファームウェア改訂識別子を返す手段であって、当該返す手段は、前記コンピューティングホストからの特定のタイプのコマンドに応答するものであり、当該デバイスが前記第２のファームウェアを実行している間であって、且つ特定のイベントが発生する前に動作するものである、前記返す手段と
を有し、
前記返す手段の動作により、前記コンピューティングホスト上で実行されているオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：ＯＳ）は、当該デバイスが前記第１のファームウェアを実行している間中、および前記特定のイベントが発生するまで前記第２のファームウェアを実行している間に、返されたファームウェア改訂識別子の値の変更に応答して誤りを検出することなく実行を継続することが可能になるものである、
デバイス。
【請求項２】
請求項１記載のデバイスにおいて、前記特定のイベントはデバイスの電源サイクルであるデバイス。
【請求項３】
請求項１記載のデバイスにおいて、さらに、
前記コンピューティングホストに前記第２のファームウェア改訂識別子を返す手段であって、当該デバイスが前記第２のファームウェアを実行している間であって、且つ前記特定のイベントが発生した後で動作するものであり、前記コンピューティングホストからの前記特定のタイプのコマンドに応答するものである、前記第２のファームウェア改訂識別子を返す前記手段を有するデバイス。
【請求項４】
請求項１記載のデバイスにおいて、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有するデバイス。
【請求項５】
請求項１記載のデバイスにおいて、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有するデバイス。
【請求項６】
請求項１記載のデバイスにおいて、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有するデバイス。
【請求項７】
デバイスであって、
不揮発性メモリと、
前記不揮発性メモリを、第１のファームウェア、第１のファームウェア改訂識別子、第２のファームウェア、および第２のファームウェア改訂識別子を記憶するように管理する手段であって、当該デバイスはコンピューティングホストに接続可能である、前記管理する手段と、
前記コンピューティングホストから前記第１のファームウェアを受け取る手段であって、前記第１のファームウェアは前記第１のファームウェア改訂識別子と関連付けられているものである、前記第１のファームウェアを受け取る手段と、
前記コンピューティングホストから前記第２のファームウェアを受け取る手段であって、当該受け取る手段は、前記第１のファームウェアを受け取る前記手段の後で動作するものであり、前記第２のファームウェアは前記第２のファームウェア改訂識別子と関連付けられているものである、前記第２のファームウェアを受け取る手段と、
前記コンピューティングホストに前記第１のファームウェア改訂識別子を返す手段であって、当該返す手段は、前記コンピューティングホストからの第１のタイプのコマンドに応答するものであり、当該デバイスが前記第２のファームウェアを実行している間に動作するものである、前記第１のファームウェア改訂識別子を返す前記手段と、
前記コンピューティングホストに前記第２のファームウェア改訂識別子を返す手段であって、当該返す手段は、前記コンピューティングホストからの第２のタイプのコマンドに応答するものであり、当該デバイスが前記第２のファームウェアを実行している間に動作するものである、前記第２のファームウェア改訂識別子を返す前記手段と
を有し、
前記第１のタイプのコマンドは識別読み取りタイプのコマンドであり、
前記第２のタイプのコマンドはベンダ特有のタイプのコマンドである、デバイス。
【請求項８】
請求項７記載のデバイスにおいて、前記ベンダ特有のタイプのコマンドはベンダ特有のファームウェア識別情報読み取りタイプのコマンドを有するデバイス。
【請求項９】
請求項７記載のデバイスにおいて、前記識別読み取りタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有するデバイス。
【請求項１０】
請求項７記載のデバイスにおいて、前記識別読み取りタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有するデバイス。
【請求項１１】
請求項７記載のデバイスにおいて、前記識別読み取りタイプのコマンドは、前記第２のファームウェア改訂識別子が前記第１のファームウェア改訂識別子の代わりに返されるように処理されるときに、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）が回復不能の誤りを発生させるタイプのコマンドを有するデバイス。
【請求項１２】
請求項１１記載のデバイスにおいて、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有するデバイス。
【請求項１３】
記憶デバイスであって、
現在のファームウェア改訂識別子と関連付けられた現在のファームウェアに従って記憶デバイスを動作させる第１の手段であって、前記現在のファームウェア改訂識別子を、記憶デバイスと通信するコンピューティングホストに返す第２の手段を有するものである、前記第１の手段と、
前記第１の手段の後で動作する、前記現在のファームウェア改訂識別子とは異なる新しいファームウェア改訂識別子と関連付けられた新しいファームウェアを受け取る第３の手段と、
前記第３の手段の後で動作する、前記新しいファームウェアに従って記憶デバイスを動作させる第４の手段であって、前記現在のファームウェア改訂識別子を前記コンピューティングホストに返す第５の手段を有するものである、前記第４の手段と、
前記第３の手段の後で電源サイクルに応答して動作する、前記新しいファームウェアに従って記憶デバイスを動作させる第６の手段であって、前記新しいファームウェア改訂識別子を前記コンピューティングホストに返す第７の手段を有するものである、前記第６の手段と、
前記新しいファームウェアの少なくとも一部分を記憶することができるようにした不揮発性メモリと
を有し、
前記３つの返す手段は、各々、前記コンピューティングホストからの複数のタイプのコマンドのうちの特定の１つのそれぞれのインスタンスに応答し、前記特定のタイプのコマンドは、
（ａ）第１のそれぞれのファームウェア改訂識別子が前記それぞれのインスタンスの第１のものに応答して前記コンピューティングホストに返され、
（ｂ）第２のそれぞれのファームウェア改訂識別子が前記それぞれのインスタンスの第２のものに応答して前記コンピューティングホストに返され、
（ｃ）前記第１のそれぞれのファームウェア改訂識別子が返されるのと前記第２のそれぞれのファームウェア改訂識別子が返されるのとの間に前記電源サイクルが行われない
ときには、
前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）が、前記第２のそれぞれのファームウェア改訂識別子の返しに応答して回復不能の誤りを発生させるようなものである、記憶デバイス。
【請求項１４】
請求項１３記載のシステムにおいて、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）ＯＳの１バージョンを有するシステム。
【請求項１５】
請求項１３記載のシステムにおいて、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有するシステム。
【請求項１６】
請求項１３記載のシステムにおいて、前記特定のタイプのコマンドは、小型コンピュータ・システム・インターフェース（ＳＣＳＩ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有するシステム。
【請求項１７】
請求項１３記載のシステムにおいて、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有するシステム。
【請求項１８】
請求項１３記載のシステムにおいて、前記受け取る手段は、前記電源サイクルまで前記現在のファームウェア改訂識別子を保存する手段を有するシステム。
【請求項１９】
請求項１３記載のシステムにおいて、前記受け取る手段は、前記電源サイクルまで前記現在のファームウェア改訂識別子を変更されないよう保護する手段を有するシステム。
【請求項２０】
請求項１３記載のシステムにおいて、前記受け取る手段は、前記現在のファームウェア改訂識別子を前記コンピューティングホストに提供する手段と、前記コンピューティングホストから前記現在のファームウェア改訂識別子を復元する手段とを有するシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願の優先権利益の主張を、（それがある場合には、適宜）添付の出願データシート、請求、または送達状において行う。本出願の種類によって許容される範囲内で、本出願はこの参照によりあらゆる目的で以下の出願を組み込むものであり、以下の出願はすべて、発明がなされた時点において本出願と所有者を同じくするものである。
【０００２】
２０１１年７月６日付で出願された、Ｒｏｓｓ  Ｊｏｈｎ  Ｓｔｅｎｆｏｒｔを筆頭発明者とする、「Ｍａｎａｇｅｍｅｎｔ  Ｏｆ  Ｄｅｖｉｃｅ  Ｆｉｒｍｗａｒｅ  Ｕｐｄａｔｅ  Ｅｆｆｅｃｔｓ  Ａｓ  Ｓｅｅｎ  Ｂｙ  Ａ  Ｈｏｓｔ」という名称の、米国仮出願（整理番号第ＳＦ−１１−１２号および出願番号第６１／４９４２６２号）。
【背景技術】
【０００３】
分野：格納技術の進歩が、使用の性能、効率、及び有用性の改善を提供するために必要とされる。
【０００４】
関連技術：公知である、または周知であるものとして明記されない限り、コンテキスト、定義、または比較を目的とするものを含む本明細書における技法および概念の言及は、そのような技法または概念が以前から公知であり、あるいは先行技術の一部であることの容認と解釈すべきではない。特許、特許出願、および出版物を含む、本明細書で引用されるあらゆる参照文献は（それがある場合には）、具体的に組み込まれているか否かを問わず、あらゆる目的で、この参照によりその全体が本明細書に組み込まれるものである。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明は多くの方法で実施されてよく、例えば、プロセス、製造品、装置、システム、組成物、ならびに、コンピュータ可読記憶媒体（ディスクといった光学的大容量記憶装置および／または磁気的大容量記憶装置、フラッシュストレージといった不揮発性記憶を有する集積回路など）や、プログラム命令が光通信リンクまたは電子通信リンク上で送られるコンピュータネットワークといったコンピュータ可読媒体として実施されてよい。詳細な説明では、上記の分野における使用のコスト、収益性、性能、効率、および有用性の改善を可能にする本発明の１つ若しくはそれ以上の実施形態の説明を行う。詳細な説明は、詳細な説明の残りの部分の理解を容易にするための概説を含む。概説は、本明細書で説明する概念に従うシステム、方法、製造品、およびコンピュータ可読媒体の１つ若しくはそれ以上の例示的実施形態を含む。結論の項でより詳細に論じるように、本発明は、発行される特許請求の範囲内のあらゆる可能な改変形態および変形形態を包含するものである。
【図面の簡単な説明】
【０００６】
【図１Ａ】図１Ａは、ホストから見たデバイスファームウェア更新の影響の管理を提供するソリッドステートディスク（Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｄｉｓｋ：ＳＳＤ）を含むＳＳＤの実施形態の選択された詳細を示す図である。
【図１Ｂ】図１Ｂは、図１ＡのＳＳＤを含むシステムの実施形態の選択された詳細を示す図である。
【図１Ｃ】図１Ｃは、図１ＡのＳＳＤを含むシステムの別の実施形態の選択された詳細を示す図である。
【図２】図２は、ホストから見たデバイスファームウェア更新の影響の管理の実施形態の選択された詳細を示す流れ図である。
【図３】図３は、ホストから見たデバイスファームウェア更新の影響の管理の別の実施形態の選択された詳細を示す流れ図である。
【０００７】
【表１】
2014519662.tif 000003
2014519662.tif 000004
【発明を実施するための形態】
【０００８】
本発明の１つ若しくはそれ以上の実施形態の詳細な説明を、以下で、本発明の選択された詳細を図示する添付の図を併用して行う。本発明を実施形態との関連で説明する。実施形態は、本明細書では、単なる例示であると理解されるものであり、本発明は、明確に、本明細書中の実施形態のいずれか若しくは全部に、またはいずれか若しくは全部によって限定されるものではなく、本発明は、多数の代替形態、改変形態、および均等物を包含するものである。説明が単調にならないように、様々な言葉によるラベル（これに限定されるものではないが、最初の、最後の、ある一定の、様々な、別の、他の、特定の、選択の、いくつかの、目立ったなど）が実施形態のセットを区別するために適用される場合がある。本明細書で使用する場合、そのようなラベルは、明確に、質を伝えるためのものでも、いかなる形の好みや先入観を伝えるためのものでもなく、単に、別々のセットを都合よく区別するためのものにすぎない。開示するプロセスのいくつかの動作の順序は本発明の範囲内で変更可能である。多様な実施形態がプロセス、方法、および／またはプログラム命令の各特徴の差異を説明するのに使用される場合は常に、所定の、または動的に決定される基準に従って、複数の多様な実施形態にそれぞれ対応する複数の動作モードの１つの静的選択および／または動的選択を行う他の実施形態が企図されている。以下の説明では、本発明の十分な理解を提供するために、多数の具体的詳細を示す。それらの詳細は例として示すものであり、本発明は、それらの詳細の一部または全部がなくても、特許請求の範囲に従って実施されうる。わかりやすくするために、本発明に関連した技術分野で公知の技術資料は、本発明が不必要に曖昧になることのないように詳細に説明していない。
【０００９】
概説
この概説は、詳細な説明のより迅速な理解を助けるために含まれるにすぎず、本発明は、（それがある場合には、明示的な例を含む）この概説で提示される概念だけに限定されるものではなく、どんな概説の段落も、必然的に、主題全体の縮約された見方であり、網羅的な、または限定的な記述であることを意味するものではない。例えば、以下の概説は、スペースおよび編成によりある一定の実施形態だけに限定される概要情報を提供するものである。特許請求の範囲が究極的にそこに導かれることになる実施形態を含む多くの他の実施形態があり、それらを本明細書の残りの部分にわたって論じる。
【００１０】
頭字語
ここで定義される様々な縮めた表現の略語（例えば、頭字語）の少なくとも一部が本明細書において使用される特定の要素を指す。
【００１１】
【表２】
2014519662.tif 000005
2014519662.tif 000006
コンピューティングホストから見たデバイスファームウェア更新の影響の管理は、可視性の遅延なしではオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：ＯＳ）が回復不能の誤りおよび「クラッシュ」を発生させることになるはずのコンテキストなどにおいて、例えばデバイスファームウェア更新の影響の少なくとも一部分の可視性を遅延させることによって、ファームウェア更新をまたいでホスト上で連続してＯＳを走らせることを可能にする。例えば、デバイス（ＳＡＴＡ互換ＳＳＤなど）が、Ｗｉｎｄｏｗｓ（登録商標）の未修正バージョンを走らせているコンピューティングホストに接続されているとする。デバイス上のファームウェアが更新され、例えば、起動されることによって、および／またはファームウェアの実行に利用できる１若しくはそれ以上のライブラリおよび／若しくは表によってアクティブ化される。通常は（更新されたファームウェアがアクティブ化されると）ＯＳから即座に見えるようになるはずの情報の一部分の可視性が、デバイスの電源サイクルまで遅延される。その部分が、例えばファームウェア改訂識別子などを含む場合には、可視性の遅延は、ＯＳを再起動せずにファームウェア更新／アクティブ化をまたいで連続してＯＳを走らせることを可能にする。
【００１２】
デバイスのファームウェアが更新され、コンピューティングホストから見たファームウェア更新の１若しくはそれ以上の影響が、任意選択で、例えば、ホスト上で走っており、デバイスにアクセスするＯＳへの更新の影響の少なくとも一部分の可視性を遅延させることによって管理される。遅延は、可視性遅延を終了させる特定のイベントまで続く。特定のイベントの例は、デバイスが電源サイクルされる（例えば、電源の切断およびその後の再印加など）、デバイスの全部または任意の部分がある電力モードから別の電力モードへ遷移する（例えば、休眠モードまたはＰＨＹ電力管理モードを終了するなど）、デバイスがベンダ特有のコマンドを受け取る、デバイスがファームウェア更新の一部として特定のパラメータおよび／またはコードを受け取る、デバイスをホストに接続するリンクのリセットなどである。（例えばデバイスへのコマンドを介してホストによりアクセス可能な）デバイスのモード情報は、任意で、前述のイベント例のうちのどれが可視性の遅延を終了させるイベントに対応するか選択的に決定する。
【００１３】
例えば、デバイスは更新されるファームウェアを備えるコントローラを有するＳＡＴＡ互換ＳＳＤである。ファームウェア改訂識別子を提供する更新の部分の可視性は、ＳＳＤが電源サイクルされるまで遅延される。よって、デバイスが電源サイクルされるまで、ＯＳには、ＳＳＤは、少なくともファームウェア改訂識別子に関しては、更新前のファームウェアで動作しているように見える。ＯＳがＷｉｎｄｏｗｓ（登録商標）のある特定のバージョンのうちの１つ（例えば、９５、９８、ＭＥ、ＮＴ、ＸＰ、２０００、Ｓｅｒｖｅｒ、Ｖｉｓｔａ、７など）である場合には、更新されたファームウェア改訂識別子の可視性の遅延は、ある実施形態および／または使用シナリオでは、ＯＳが、再起動および／または電源サイクルを行わなければ走り続ける（ユーザアプリケーションなどの実行を継続する）ことができなくなる回復不能の誤りを発生させるのを防ぐ。ファームウェア改訂識別子は、例えば、デバイスのＶＰＤデータを返すＳＡＴＡ'ＩＤＥＮＴＩＦＹ'コマンドに応答して、あるいはＳＣＳＩ／ＳＡＳ  ＶＰＤ読み取りコマンドに応答して、ＯＳから見ることができる。例えば、ＳＡＴＡコンテキストでは、ファームウェア改訂識別子は「Ｉｄｅｎｔｉｆｙ  Ｄｅｖｉｃｅ  Ｄａｔａ  Ｗｏｒｄｓ  ２３−２６（デバイス識別データワード２３〜２６）」に含まれる。別の例として、ＳＣＳＩコンテキストでは、ファームウェア改訂識別子は、「Ｄｅｖｉｃｅ  Ｃｏｎｓｔｉｔｕｅｎｔｓ  ＶＰＤ  ｐａｇｅ（デバイス構成要素ＶＰＤページ）」、例えば製品改訂レベルエントリなどに含まれる。
【００１４】
ファームウェア更新の影響の少なくとも一部分の可視性の遅延は、例えば、ｉｄｅｎｔｉｆｙおよび／または識別情報の１若しくはそれ以上の変更の可視性の遅延に対応する。デバイス（記憶デバイスなど）のファームウェアが更新され、（例えば、記憶デバイスのコントローラが更新されたファームウェアを起動させることによって）アクティブ化され、コンピューティングホスト（例えば、Ｗｉｎｄｏｗｓ（登録商標）といったＯＳを走らせているコンピュータなど）にｉｄｅｎｔｉｆｙおよび／または識別情報を返すために参照される（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造の全部または任意の部分が、ファームウェア更新前のファームウェアに対応する状態で保存される。コントローラは、可視性の遅延を終了させるイベントがコントローラによって検出されるまで（またはコントローラにその通知が提供されるまで）保存された（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造内の値を保存された状態に保持する。イベントの後、コントローラは更新されたファームウェアを起動するが、もう（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造を保存せず、代わりに、更新されたファームウェアに従って新しく（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造を構築する。
【００１５】
ｉｄｅｎｔｉｆｙおよび／または識別情報は、識別する情報、動作パラメータ、およびファームウェアのバージョン間、製品間、製品ライン間、およびそれらの特定のインスタンス間で異なる他の情報の全部または任意の部分の任意の組み合わせを含む。識別する情報の例は、ファームウェア改訂識別子、ファームウェア改訂番号、および特定のＳＳＤまたは特定のＳＳＤを用いた製品の識別などである。識別する情報のさらに別の例は、特定のインスタンスに特有の参照（通し番号など）、特定のインスタンスクラスに特有の参照（改訂識別子／レベルまたは製品ＩＤなど）、および特定の製造者／企業に特有の参照（ベンダＩＤなど）である。動作パラメータの例には、ＳＳＰの対象となる１若しくはそれ以上のパラメータ、例えば、通常は、ＣＯＭＩＮＩＴ／ＣＯＭＲＥＳＥＴコマンド、ファームウェア更新、リンクリセット、ＰＨＹ電力管理モード遷移、および／または電源サイクルをまたいで保存されないＳＳＰパラメータなどを含む。
【００１６】
（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造は、複数の技法のうちの１つ若しくは任意の組み合わせによって保存される。第１の技法例として、コントローラは、例えば、可視性の遅延を終了させるイベントが発生するまで起動中に（１若しくはそれ以上の）データ構造に割り振られる（１若しくはそれ以上の）記憶場所の変更を妨げることによって、あるいは、可視性の遅延を終了させるイベントと関連付けられる起動についてのみ（１若しくはそれ以上の）記憶場所の変更を可能にすることによって、（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造を変更されないよう保護する。任意選択で、通常は（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造に記憶されたはずの情報は、例えば、（ＶＰＤ領域内の１若しくはそれ以上のベンダ特有のフィールドといった）ベンダ特有のデータ構造に対応する他の（１若しくはそれ以上の）データ構造に記憶される。
【００１７】
第２の技法例として、コントローラは、ホスト上のドライバと連携して動作し、新しいファームウェアがダウンロードされ、アクティブ化され、および／または起動される前に、（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造からドライバに情報を提供する。（可視性の遅延を終了させるイベントなしでの）新しいファームウェアのダウンロード、アクティブ化、および／または起動の一部として、ドライバは、前に提供された（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造情報をコントローラに供給し、コントローラは、（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造に割り振られた（１若しくはそれ以上の）記憶場所に供給された情報を読み込む。
【００１８】
第３の技法例として、ホスト上のドライバはデバイスに、デバイスが（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造に読み込むための情報を提供する。ドライバは、ファームウェア更新の後で、デバイスが、読み込まれた（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造に依存するホストからの任意のコマンドに応答する前に、情報を供給する。例えば情報は、ＳＳＰの対象となる１若しくはそれ以上のパラメータに対応する。
【００１９】
任意選択で、前述の技法のいずれかと組み合わせて、デバイスを、ホストに、通常は、可視性の遅延を終了させるイベントの後でようやく（１若しくはそれ以上の）Ｉｄｅｎｔｉｆｙ／識別データ構造において可視になるべき情報を提供することができるようにする。具体例としては、記憶デバイスのファームウェアがホストの指図の下で更新され、ファームウェア改訂識別子が保存される。よって、ホスト上で実行中のＯＳ（Ｗｉｎｄｏｗｓ（登録商標）の１バージョンなど）によって認識されるＩｄｅｎｔｉｆｙ  Ｆｒａｍｅに関して、ファームウェア改訂識別子はファームウェア更新をまたいで不変のままであり、ＯＳが、新しいファームウェア改訂識別子が再起動および／または電源サイクルなしで可視になることに起因する回復不能の誤り（「クラッシュ」など）が発生させるのを防ぐ。ファームウェア更新の後で、ホスト上で実行されているエージェント（アプリケーションプログラムやドライバなど）は検査を行って、記憶デバイス上のファームウェアが最新バージョンであるかどうか判定する。エージェントは記憶デバイスに特定のコマンド（例えば、ベンダ特有のｉｄｅｎｔｉｆｙ／識別情報の読み取りであり、Ｉｄｅｎｔｉｆｙ  Ｆｒａｍｅを返すはずの読み取りとは異なる読み取りなど）を送り、これに応答して記憶デバイスは新しいファームウェア改訂識別子を提供する。次いでエージェントは、新しいファームウェア改訂識別子を最新のファームウェア改訂識別子と比較して、記憶デバイスが最新のファームウェアを有しているかどうか判定する。
【００２０】
記憶デバイスがどのファームウェアバージョンを走らせているか判定するためにエージェントが送る特定のコマンドに応答して、新しいファームウェア改訂識別子は、ファームウェアが「新しい」か、それとも「古い」かにかかわらず、また、起動が、可視性の遅延を終了させるイベントと関連付けられるか否かにかかわらず、例えば、ファームウェアが起動する際にファームウェアのバージョンに対応するファームウェア改訂識別子で更新される「影」ＶＰＤ領域から提供される。あるいは、新しいファームウェア改訂識別子は、ファームウェアが起動する際にファームウェアの起動バージョンに対応するファームウェア改訂識別子が書き込まれた「ログ」から提供される。
【００２１】
任意選択で、前のファームウェア改訂識別子が影ＶＰＤ領域に記憶される。さらに任意選択で、デバイス内の（例えば、デバイスへのコマンドによってホストからアクセスすることのできる）モード情報が、影ＶＰＤ領域が可視性の遅延を終了させるイベント時に更新されるか否か選択的に判定する。例えば、モード情報は、電源サイクル時の影ＶＰＤ領域への更新を妨げるように設定され、さもなければそのような変更が誤りを発生させることになるはずの場合に、ファームウェア改訂識別子がシステムにおいて不変のままであることを可能にする。影ＶＰＤ領域には任意選択で、ＳＭＡＲＴ  Ｌｏｇによって、および／またはベンダ特有のコマンドといったベンダ特有の機構によってアクセスできる。
【００２２】
前述の具体例はファームウェア改訂識別子に関するものであるが、他の実施形態は、同様のやり方で、ＳＳＰの対象となるパラメータ、ならびに保存されたＩｄｅｎｔｉｆｙ／識別情報、より一般的には、ＯＳからの可視性遅延の対象となるファームウェア更新の任意の部分を扱う。
【００２３】
任意選択で、単独で、または前述の技法のいずれかと組み合わせて、デバイスを、最近のファームウェア更新および／または１若しくはそれ以上の前のファームウェア更新の結果を記憶し、続いてホストに提供することができるようにする。記憶および提供は、例えば、ファームウェアの１若しくはそれ以上の前のバージョンへの「ロールバック」、ファームウェアの１若しくはそれ以上の前のバージョンの実行からのｉｄｅｎｔｉｆｙ／識別情報へのアクセス、ファームウェアの現在のバージョンの実行からのｉｄｅｎｔｉｆｙ／識別情報（ファームウェア識別子および／または、通常は可視性の遅延の対象となるＳＳＰの対象となる１若しくはそれ以上のパラメータなど）へのアクセスなどを可能にする。
【００２４】
ファームウェア更新の一例は、デバイスによって（例えば、デバイスのプロセッサがファームウェアを実行することによって）使用されるファームウェアの全部または任意の部分が新しいファームウェアで置き換えられるときであり、デバイスは次いで、新しいファームウェアを使用して（例えば、新しいファームウェアを起動し、次いで実行することによって、および／またはファームウェアの実行に利用できる１若しくはそれ以上のライブラリおよび／若しくは表によって）機能する。置き換えは、任意選択で、例えば、ファームウェアの保持に割り振られた（例えばファームウェアを記憶するのに使用される）不揮発性（フラッシュメモリなど）に書き込む（上書きする）ことを含む。
【００２５】
一部の実施形態では、ＮＶＭ内の様々なサイズの量の圧縮データにアクセスすることにより、ある使用シナリオでは記憶効率が改善される。例えば、ＳＳＤコントローラは、コンピューティングホストから（例えばディスク書き込みコマンドに関連した）（圧縮されていない）データを受け取り、データを圧縮し、データをフラッシュメモリへ記憶する。コンピューティングホストからの（例えばディスク読み出しコマンドに関連した）その後の要求に応答して、ＳＳＤコントローラはフラッシュメモリから圧縮データを読み出し、圧縮データを解凍し、解凍されたデータをコンピューティングホストに提供する。圧縮データは、様々なサイズの量に従ってフラッシュメモリに記憶され、各量のサイズは、例えば、圧縮アルゴリズム、動作モード、様々なデータに関する圧縮有効性により変動する。ＳＳＤコントローラは、一部は、含まれるマップ表を調べて（１つまたは複数の）ヘッダがフラッシュメモリのどこに記憶されているか確認することによってデータを解凍する。ＳＳＤコントローラは、適切な（圧縮）データがフラッシュメモリのどこに記憶されているか確認するためにフラッシュメモリから得た（１つまたは複数の）ヘッダをパースする。ＳＳＤコントローラは、コンピューティングホストに提供すべき解凍データを生成するために、フラッシュメモリからの適切なデータを解凍する。本出願では、「解凍する（ｕｎｃｏｍｐｒｅｓｓ）」（およびその変形）は、「伸張する（ｄｅｃｏｍｐｒｅｓｓ）」（およびその変形）と同義である。
【００２６】
様々な実施形態では、ＳＳＤコントローラは、コンピューティングホストとインターフェースするためのホストインターフェースと、フラッシュメモリといったＮＶＭとインターフェースするためのインターフェースと、各インターフェースを制御し、圧縮および解凍と共に、低レベル誤り訂正、高レベル誤り訂正、ならびに独立シリコン素子を用いた動的高レベル冗長性モード管理を行う（および／または行うことの様々な態様を制御する）ための回路とを含む。
【００２７】
様々な実施形態によれば、あるホストインターフェースは、ＵＳＢインターフェース規格、ＣＦインターフェース規格、ＭＭＣインターフェース規格、ＳＤインターフェース規格、メモリ・スティック・インターフェース規格、ｘＤピクチャ・カード・インターフェース規格、ＩＤＥインターフェース規格、ＳＡＴＡインターフェース規格、ＳＣＳＩインターフェース規格、ＳＡＳインターフェース規格、およびＰＣＩｅインターフェース規格のうちの１つ若しくはそれ以上と適合する。様々な実施形態によれば、コンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、ＰＤＡ、メディアプレーヤ、メディアレコーダ、デジタルカメラ、セルラハンドセット、コードレス電話機ハンドセット、および電子ゲームのうちの全部または任意の部分である。一部の実施形態では、インターフェースホスト（ＳＡＳ／ＳＡＴＡブリッジなど）は、コンピューティングホストおよび／またはコンピューティングホストへのブリッジとして動作する。
【００２８】
様々な実施形態によれば、あるＳＳＤは、ＨＤＤ、ＣＤドライブ、ＤＶＤドライブといった磁気的不揮発性記憶および／または光学的不揮発性記憶によって使用されるフォームファクタ、電気的インターフェース、および／またはプロトコルと適合する。様々な実施形態では、ＳＳＤは、０以上のパリティ符号、０以上のＲＳ符号、０以上のＢＣＨ符号、０以上のビタビ符号または他のトレリス符号、および０以上のＬＤＰＣ符号の様々な組み合わせを使用する。
【００２９】
例示的な実施形態
詳細な記載に対する導入を締めくくる際に続くものは、「ＥＣｓ」（例示的な組み合わせ）として明示的に列挙される少なくとも一部の例示的な実施形態を含む例示的な実施形態を集めたものであり、本明細書において記載される概念に従った様々な実施形態の種類の追加的な記載を提供する。これらの例は、互いに排他的、網羅的、又は制限的であることを意味せず、本発明はこれらの例示的な実施形態には限定されず、刊行された特許請求の範囲及びその均等物の範囲内の全ての可能な改変及び変化形を含む
ＥＣ１）方法であって、
（ａ）現在の選択識別情報と関連付けられた現在のファームウェアに従ってデバイスを動作させる工程であって、デバイスと通信するコンピューティングホストに当該現在の選択識別情報を返す工程を有するものである、前記（ａ）の動作させる工程と、
（ｂ）前記（ａ）の工程の後、前記デバイスにおいて、新しい選択識別情報と関連付けられた新しいファームウェアを受け取る工程であって、当該新しい選択識別情報は現在の選択識別情報のそれぞれの要素に対応する１若しくはそれ以上の要素を有し、新しい選択識別情報の要素のうちの少なくとも１つは、現在の選択識別情報の対応する要素とは異なる値を有するものである、前記受け取る工程と、
（ｃ）前記（ｂ）の工程の後、前記新しいファームウェアに従ってデバイスを動作させる工程であって、前記現在の選択識別情報をコンピューティングホストに返す工程を有するものである、前記（ｃ）の動作させる工程と、
（ｄ）（ｂ）の工程の後、前記新しい選択識別情報の可視性の遅延を終了させるイベントに応答して、前記新しいファームウェアに従って前記デバイスを動作させる工程であって、前記新しい選択識別情報をコンピューティングホストに返す工程を有するものである（ｄ）の動作させる工程と
を有する方法。
【００３０】
ＥＣ２）ＥＣ１記載の方法において、前記３つの返す工程は、各々、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドのそれぞれのインスタンスに応答したものである方法。
【００３１】
ＥＣ３）ＥＣ１記載の方法において、前記３つの返す工程は、各々、小型コンピュータ・システム・インターフェース（ＳＣＳＩ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドのそれぞれのインスタンスに応答したものである方法。
【００３２】
ＥＣ４）ＥＣ１記載の方法において、前記３つの返す工程は、各々、前記コンピューティングホストからの１若しくはそれ以上のタイプのコマンドのうちの特定の１つのインスタンスに応答したものであり、当該特定のタイプのコマンドは、前記（ｃ）の返す工程で新しい選択識別情報が返された場合、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）に回復不能の誤りが発生するタイプのコマンドである方法。
【００３３】
ＥＣ５）ＥＣ４記載の方法において、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【００３４】
ＥＣ６）ＥＣ４記載の方法において、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【００３５】
ＥＣ７）ＥＣ４記載の方法において、前記特定のタイプのコマンドは、小型コンピュータ・システム・インターフェース（ＳＣＳＩ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【００３６】
ＥＣ８）ＥＣ４記載の方法において、特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【００３７】
ＥＣ９）ＥＣ１記載の方法において、
前記新しいファームウェアは第１の新しいファームウェアであり、前記新しい選択識別情報は第１の新しい選択識別情報であり、さらに、
（ｅ）前記（ｃ）の工程の後、第２の新しい選択識別情報と関連付けられた第２の新しいファームウェアを受け取る工程と、
（ｆ）前記（ｅ）の工程の後、第２の新しいファームウェアに従ってデバイスを動作させる工程であって、前記現在の選択識別情報をコンピューティングホストに返す工程を有するものである、前記（ｆ）の動作させる工程と
を有するものである方法。
【００３８】
ＥＣ１０）ＥＣ９記載の方法において、前記４つの返す工程は、各々、前記コンピューティングホストからの１若しくはそれ以上タイプのコマンドのうちの特定の１つのインスタンスに応答したものであり、当該特定のタイプのコマンドは、前記（ｆ）の返す工程で新しい選択識別情報が返された場合、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）に回復不能の誤りが発生するタイプのコマンドである方法。
【００３９】
ＥＣ１１）ＥＣ１０記載の方法において、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【００４０】
ＥＣ１２）ＥＣ１０記載の方法において、前記特定のタイプのコマンドは、小型コンピュータ・システム・インターフェース（ＳＣＳＩ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【００４１】
ＥＣ１３）ＥＣ１０記載の方法において、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【００４２】
ＥＣ１４）ＥＣ１記載の方法において、前記現在の選択識別情報は現在の他の識別情報と組み合わさった現在の選択識別情報であり、前記（ａ）の返す工程は、現在の他の識別情報と組み合わさった現在の選択識別情報を返すものである方法。
【００４３】
ＥＣ１５）ＥＣ１記載の方法において、新しい識別情報は新しい他の識別情報と組み合わさった新しい選択識別情報であり、前記（ｃ）の返す工程は、現在の他の識別情報と組み合わさった新しい選択識別情報を返すことによって現在の選択識別情報を返す方法。
【００４４】
ＥＣ１６）ＥＣ１記載の方法において、
現在の選択識別情報は現在の他の識別情報と組み合わさった現在の選択識別情報であり、前記（ａ）の返す工程は、現在の他の識別情報と組み合わさった現在の選択識別情報を返し、
新しい識別情報は新しい他の識別情報と組み合わさった新しい選択識別情報であり、新しい識別情報は現在の識別情報のそれぞれの要素に対応する１若しくはそれ以上の要素を有し、新しい他の識別情報は現在の他の識別情報のそれぞれの要素に対応する１若しくはそれ以上の要素を有し、前記（ｃ）の返す工程は、現在の他の識別情報と組み合わさった新しい選択識別情報を返すことによって現在の選択識別情報を返す方法。
【００４５】
ＥＣ１７）ＥＣ１記載の方法において、さらに、
現在のファームウェアの少なくとも一部分を実行し、および／またはダウンロードして現在のファームウェアと現在の選択識別情報との間の関連付けを形成する工程と、
新しいファームウェアの少なくとも一部分を実行し、および／またはダウンロードして新しいファームウェアと新しい選択識別情報との間の関連付けを形成する工程と
を有するものである方法。
【００４６】
ＥＣ１８）ＥＣ１記載の方法において、新しい選択識別情報の可視性の遅延を終了させるイベントは、
デバイスが電源サイクルされること、
デバイスの全部または任意の部分がある電力モードから別の電力モードに遷移すること、
デバイスがベンダ特有のコマンドを受け取ること、
デバイスがファームウェア更新の一部として特定のパラメータおよび／またはコードを受け取ること、ならびに
デバイスをホストに接続するリンクがリセットされること
のうちの任意の１若しくはそれ以上を有する方法。
【００４７】
ＥＣ１９）ＥＣ１記載の方法において、
現在の選択識別情報は現在のファームウェア改訂識別子であり、
新しい選択識別情報は新しいファームウェア改訂識別子であり、
前記３つの返す工程は、各々、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹコマンドのインスタンスに応答したものである方法。
【００４８】
ＥＣ２０）ＥＣ１記載の方法において、
現在の選択識別情報は現在のファームウェア改訂識別子であり、
新しい選択識別情報は新しいファームウェア改訂識別子であり、
前記３つの返す工程は、各々、重要製品データ（ＶＰＤ）読み取りコマンドのインスタンスに応答したものである方法。
【００４９】
ＥＣ２１）ＥＣ２０記載の方法において、読み取りは小型コンピュータ・システム・インターフェース（ＳＣＳＩ）読み取りを有する方法。
【００５０】
ＥＣ２２）ＥＣ２０記載の方法において、読み取りはシリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）読み取りを有する方法。
【００５１】
ＥＣ２３）ＥＣ１記載の方法において、
現在の選択識別情報はプロトコル互換性レベルであり、
新しい選択識別情報はプロトコル互換性レベルである方法。
【００５２】
ＥＣ２４）ＥＣ１記載の方法において、さらに、
コンピューティングホストを、デバイスから現在の選択識別情報を受け取り、および／または受け取った現在の選択識別情報をデバイスに提供するように動作させる工程を有するものである方法。
【００５３】
ＥＣ２５）ＥＣ１記載の方法において、さらに、
現在の選択識別情報の少なくとも一部分を１若しくはそれ以上の不揮発性メモリに記憶する工程を有するものである方法。
【００５４】
ＥＣ２６）ＥＣ２５記載の方法において、ＳＳＤコントローラはストレージインターフェース規格と適合したストレージインターフェースを有し、コンピューティングホストとデバイスとの間の通信はストレージインターフェースを介したものである方法。
【００５５】
ＥＣ２７）ＥＣ１記載の方法において、選択識別情報はファームウェア改訂識別子を有する方法。
【００５６】
ＥＣ２８）ＥＣ１記載の方法において、選択識別情報はソフトウェア設定保存（ＳＳＰ）の対象となる１若しくはそれ以上のパラメータを有する方法。
【００５７】
ＥＣ２９）ＥＣ１記載の方法において、受け取る工程は、新しい選択識別情報の可視性の遅延を終了させるイベントまで現在の選択識別情報を保存する工程を有する方法。
【００５８】
ＥＣ３０）ＥＣ１記載の方法において、受け取る工程は、新しい選択識別情報の可視性の遅延を終了させるイベントまで現在の選択識別情報を変更されないよう保護する工程を有する方法。
【００５９】
ＥＣ３１）ＥＣ１記載の方法において、さらに、
新しい選択識別情報の可視性の遅延を終了させるイベントに応答して、現在の選択識別情報の変更からの保護を解除する工程を有するものである方法。
【００６０】
ＥＣ３２）ＥＣ１記載の方法において、受け取る工程は、現在の選択識別情報をコンピューティングホストに提供し、コンピューティングホストから現在の選択識別情報を復元する工程を有する方法。
【００６１】
ＥＣ３３）ＥＣ１記載の方法において、受け取る工程は新しいファームウェアをアクティブ化する工程を有する方法。
【００６２】
ＥＣ３４）ＥＣ１記載の方法において、デバイスは記憶デバイスを有する方法。
【００６３】
ＥＣ３５）ＥＣ１記載の方法において、デバイスはコントローラを有し、３つの動作させる動作および受け取る動作は、少なくとも一部はコントローラによって実行される方法。
【００６４】
ＥＣ３６）ＥＣ１記載の方法において、コンピューティグホストとデバイスとの間の通信は、ストレージインターフェース規格と適合したストレージインターフェースを介したものである方法。
【００６５】
ＥＣ３７）ＥＣ１記載の方法において、デバイスはソリッドステートディスク（ＳＳＤ）を有する方法。
【００６６】
ＥＣ３８）ＥＣ３７記載の方法において、ＳＳＤはＳＳＤコントローラを有し、３つの動作させる動作および受け取る動作は、少なくとも一部はＳＳＤコントローラによって行われる方法。
【００６７】
ＥＣ３９）ＥＣ３８記載の方法において、ＳＳＤコントローラは不揮発性メモリインターフェースを有し、記憶される部分の記憶は、少なくとも一部は不揮発性メモリインターフェースを介したものである方法。
【００６８】
ＥＣ４０）ＥＣ３８記載の方法において、ＳＳＤは１若しくはそれ以上の不揮発性メモリをさらに有するものである方法。
【００６９】
ＥＣ４１）ＥＣ４０記載の方法において、ＳＳＤコントローラは不揮発性メモリとインターフェースする不揮発性メモリインターフェースを有する方法。
【００７０】
ＥＣ４２）方法であって、
デバイスにおいて、コンピューティングホストから第１のファームウェアを受け取る工程と、
前記デバイスにおいて、前記コンピューティングホストから第２のファームウェアを受け取る工程であって、当該第２のファームウェアを受け取る工程は前記第１のファームウェアを受け取る工程の後で行われるものである、前記第２のファームウェアを受け取る工程と、
前記第２のファームウェアを実行している間に、前記コンピューティングホストからの特定のタイプのコマンドに応答して、前記コンピューティングホストに、前記第１のファームウェアおよび前記第２のファームウェアの任意の組み合わせに対するアクセスを提供する工程と
を有する方法。
【００７１】
ＥＣ４３）ＥＣ４２記載の方法において、前記アクセスは、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）に識別情報を返す工程を有し、当該識別情報は、前記第１のファームウェアの実行によって決定される任意の情報と、前記第２のファームウェアの実行によって決定される任意の情報とを有し、前記第１のファームウェアの実行によって決定される情報は、前記第２のファームウェアの実行によって決定される対応する情報が代わりに返された場合、前記オペレーティングシステムに回復不能の誤りが発生するタイプの情報である方法。
【００７２】
ＥＣ４４）ＥＣ４３記載の方法において、オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【００７３】
ＥＣ４５）ＥＣ４４記載の方法において、特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンド、または小型コンピュータ・システム・インターフェース（ＳＣＳＩ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【００７４】
ＥＣ４６）ＥＣ４２記載の方法において、前記アクセスは、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）に識別情報を返す工程を有し、当該識別情報は、前記第１のファームウェアの実行によって決定される任意の情報と第２のファームウェアの実行によって決定される任意の情報とを有し、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンド、または小型コンピュータ・システム・インターフェース（ＳＣＳＩ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【００７５】
ＥＣ４７）ＥＣ４６記載の方法において、前記第１のファームウェアの実行によって決定される情報は、前記第２のファームウェアの実行によって決定される、対応情報が代わりに返された場合、前記オペレーティングシステムに回復不能の誤りが発生するタイプの情報である方法。
【００７６】
ＥＣ４８）ＥＣ４７記載の方法において、オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【００７７】
ＥＣ４９）ＥＣ４２記載の方法において、前記アクセスを提供する工程は、前記アクセスされたファームウェアに従って、前記デバイスを起動させる工程を有する方法。
【００７８】
ＥＣ５０）ＥＣ４２記載の方法において、前記アクセスを提供する工程は、前記アクセスされたファームウェアのファームウェアイメージの全部または任意の部分を読み取り、および／または書き込む工程を有する方法。
【００７９】
ＥＣ５１）ＥＣ４２記載の方法において、アクセスを提供する工程は、アクセスされたファームウェアの全部または任意の部分の１若しくはそれ以上の実行結果の全部または任意の部分を読み取り、および／または書き込む工程を有する方法。
【００８０】
ＥＣ５２）ＥＣ５１記載の方法において、結果は重要製品データ（ＶＰＤ）の全部または任意の部分のイメージを含む方法。
【００８１】
ＥＣ５３）ＥＣ５１記載の方法において、結果はファームウェア改訂識別子を含む方法。
【００８２】
ＥＣ５４）ＥＣ５１記載の方法において、結果はソフトウェア設定保存（ＳＳＰ）の対象となる１若しくはそれ以上のパラメータを含む方法。
【００８３】
ＥＣ５５）ＥＣ４２記載の方法において、アクセスを提供する工程は、１若しくはそれ以上の不揮発性メモリ内の１若しくはそれ以上のデータ構造を管理する工程を有する方法。
【００８４】
ＥＣ５６）方法であって、
デバイスにおいて、コンピューティングホストから第１のファームウェアを受け取る工程であって、当該第１のファームウェアは第１のファームウェア識別情報と関連付けられているものである、前記第１のファームウェアを受け取る工程と、
前記デバイスにおいて、前記コンピューティングホストから第２のファームウェアを受け取る工程であって、当該第２のファームウェアを受け取る工程は前記第１のファームウェアを受け取る工程の後で行われるものであり、前記第２のファームウェアは第２のファームウェア識別情報と関連付けられているものである、前記第２のファームウェアを受け取る工程と、
前記デバイスが前記コンピューティングホストに前記第１のファームウェア識別情報を返す工程であって、当該返す工程は、前記コンピューティングホストからの特定のタイプのコマンドに応答して実行されるものであり、前記デバイスが前記第２のファームウェアを実行している間であって、且つ特定のイベントが発生する前に実行されるものである、前記第１のファームウェア識別情報を返す工程と
を有する方法。
【００８５】
ＥＣ５７）ＥＣ５６記載の方法において、第１のファームウェア識別情報を返す工程により、コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）は、デバイスが第１のファームウェアを実行している間中、および特定のイベントまでの第２のファームウェアを実行している間に、再起動せずに実行を継続することが可能になるものである方法。
【００８６】
ＥＣ５８）ＥＣ５７記載の方法において、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【００８７】
ＥＣ５９）ＥＣ５７記載の方法において、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【００８８】
ＥＣ６０）ＥＣ５７記載の方法において、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【００８９】
ＥＣ６１）ＥＣ５６記載の方法において、第１のファームウェア識別情報を返す工程により、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）は、デバイスが第１のファームウェアを実行している間中、および特定のイベントまでの第２のファームウェアを実行している間に、返されたファームウェア改訂識別子の値の変更に応答して誤りを検出することなく実行を継続することが可能になるものである方法。
【００９０】
ＥＣ６２）ＥＣ６１記載の方法において、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【００９１】
ＥＣ６３）ＥＣ６１記載の方法において、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【００９２】
ＥＣ６４）ＥＣ６１記載の方法において、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【００９３】
ＥＣ６５）ＥＣ５６記載の方法において、前記デバイスはソリッドステートディスク（ＳＳＤ）を有し、当該ソリッドステートディスクは、前記第１のファームウェア、前記第１のファームウェア識別情報、前記第２のファームウェア、および前記第２のファームウェア識別情報の全部または任意の組み合わせの全部または任意の部分を記憶するように当該ソリッドステートディスクの１若しくはそれ以上の不揮発性メモリを管理することが可能なコントローラを有する方法。
【００９４】
ＥＣ６６）ＥＣ５６記載の方法において、前記特定のイベントは、
デバイスが電源サイクルされること、
デバイスの全部または任意の部分がある電力モードから別の電力モードに遷移すること、
デバイスがベンダ特有のコマンドを受け取ること、
デバイスがファームウェア更新の一部として特定のパラメータおよび／またはコードを受け取ること、ならびに
デバイスをホストに接続するリンクがリセットされること
のうちの任意の１若しくはそれ以上を有する方法。
【００９５】
ＥＣ６７）ＥＣ５６記載の方法において、
前記第１のファームウェア識別情報は第１のファームウェア改訂識別子を有し、
前記第２のファームウェア識別情報は第２のファームウェア改訂識別子を有する方法。
【００９６】
ＥＣ６８）ＥＣ５６記載の方法において、
前記第１のファームウェア識別情報は第１のプロトコル互換性レベル識別子を有し、
前記第２のファームウェア識別情報は第２のプロトコル互換性レベル識別子を有する方法。
【００９７】
ＥＣ６９）ＥＣ５６記載の方法において、
前記第１のファームウェア識別情報は、ソフトウェア設定保存（ＳＳＰ）の対象となる１若しくはそれ以上のパラメータに対応する第１の値セットを有し、
前記第２のファームウェア識別情報は該パラメータに対応する第２の値セットを有する方法。
【００９８】
ＥＣ７０）方法であって、
デバイスにおいて、コンピューティングホストから第１のファームウェアを受け取る工程であって、当該第１のファームウェアは第１のファームウェア識別情報と関連付けられているものである、前記第１のファームウェアを受け取る工程と、
前記デバイスにおいて、前記コンピューティングホストから第２のファームウェアを受け取る工程であって、当該第２のファームウェアを受け取る工程は、前記第１のファームウェアを受け取る工程の後で行われるものであり、前記第２のファームウェアは第２のファームウェア識別情報と関連付けられているものである、前記第２のファームウェアを受け取る工程と、
前記デバイスが前記コンピューティングホストに前記第１のファームウェア識別情報を返す工程であって、当該返す工程は、前記コンピューティングホストからの第１のタイプのコマンドに応答して実行されるものであり、前記デバイスが前記第２のファームウェアを実行している間に実行されるものである、前記第１のファームウェア識別情報を返す工程と、
前記デバイスが前記コンピューティングホストに前記第２のファームウェア識別情報を返す工程であって、当該返す工程は、前記コンピューティングホストからの第２のタイプのコマンドに応答して実行されるものであり、前記デバイスが第２のファームウェアを実行している間に実行されるものである、前記第２のファームウェア識別情報を返す工程と
を有する方法。
【００９９】
ＥＣ７１）ＥＣ７０記載の方法において、
第１のタイプのコマンドは識別読み取りタイプのコマンドであり、
第２のタイプのコマンドはベンダ特有のタイプのコマンドである方法。
【０１００】
ＥＣ７２）ＥＣ７１記載の方法において、前記ベンダ特有のタイプのコマンドはベンダ特有のファームウェア識別情報読み取りタイプのコマンドを有する方法。
【０１０１】
ＥＣ７３）ＥＣ７１記載の方法において、前記識別読み取りタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【０１０２】
ＥＣ７４）ＥＣ７１記載の方法において、前記識別読み取りタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【０１０３】
ＥＣ７５）ＥＣ７１記載の方法において、前記識別読み取りタイプのコマンドは、前記第２のファームウェア識別情報が前記第１のファームウェア識別情報の代わりに返されるように処理されるときに、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）に回復不能の誤りを発生させるタイプのコマンドを有する方法。
【０１０４】
ＥＣ７６）ＥＣ７５記載の方法において、オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【０１０５】
ＥＣ７７）ＥＣ７０記載の方法において、前記第１のファームウェア識別情報を返す工程により、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）は、前記デバイスが前記第１のファームウェアを実行し、前記第２のファームウェアを実行している間中、再起動せずに実行を継続することが可能になるものである方法。
【０１０６】
ＥＣ７８）ＥＣ７７記載の方法において、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【０１０７】
ＥＣ７９）ＥＣ７７記載の方法において、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【０１０８】
ＥＣ８０）ＥＣ７７記載の方法において、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【０１０９】
ＥＣ８１）ＥＣ７０記載の方法において、前記第１のファームウェア識別情報を返す工程により、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）は、前記デバイスが前記第１のファームウェアを実行し、前記第２のファームウェアを実行している間中、返されたファームウェア改訂識別子の値の変更に応答して誤りを検出することなく実行を継続することが可能になるものである方法。
【０１１０】
ＥＣ８２）ＥＣ８１記載の方法において、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【０１１１】
ＥＣ８３）ＥＣ８１記載の方法において、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【０１１２】
ＥＣ８４）ＥＣ８１記載の方法において、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【０１１３】
ＥＣ８５）ＥＣ７０記載の方法において、前記デバイスはソリッドステートディスク（ＳＳＤ）を有し、当該ソリッドステートディスクは、前記第１のファームウェア、前記第１のファームウェア識別情報、前記第２のファームウェア、および前記第２のファームウェア識別情報の全部または任意の組み合わせの全部または任意の部分を記憶するように当該ソリッドステートディスクの１若しくはそれ以上の不揮発性メモリを管理することが可能なコントローラを有する方法。
【０１１４】
ＥＣ８６）ＥＣ７０記載の方法において、
前記第１のファームウェア識別情報は第１のファームウェア改訂識別子を有し、
前記第２のファームウェア識別情報は第２のファームウェア改訂識別子を有する方法。
【０１１５】
ＥＣ８７）ＥＣ７０記載の方法において、
前記第１のファームウェア識別情報は第１のプロトコル互換性レベル識別子を有し、
前記第２のファームウェア識別情報は第２のプロトコル互換性レベル識別子を有する方法。
【０１１６】
ＥＣ８８）ＥＣ７０記載の方法において、
前記第１のファームウェア識別情報は、ソフトウェア設定保存（ＳＳＰ）の対象となる１若しくはそれ以上のパラメータに対応する第１の値セットを有し、
前記第２のファームウェア識別情報は当該パラメータに対応する第２の値セットを有する方法。
【０１１７】
ＥＣ８９）方法であって、
（ａ）現在のファームウェア改訂識別子と関連付けられた現在のファームウェアに従って記憶デバイスコントローラを動作させる工程であって、当該記憶デバイスコントローラを有する記憶デバイスと通信するコンピューティングホストに当該現在のファームウェア改訂識別子を返す工程を有するものである、前記（ａ）の動作させる工程と、
（ｂ）前記（ａ）の工程の後、少なくとも部分的に記憶デバイスコントローラを介して、現在のファームウェア改訂識別子とは異なる新しいファームウェア改訂識別子と関連付けられた新しいファームウェアを受け取る工程と、
（ｃ）前記（ｂ）の工程の後、前記新しいファームウェアに従って前記記憶デバイスコントローラを動作させる工程であって、前記現在のファームウェア改訂識別子をコンピューティングホストに返す工程を有するものである、前記（ｃ）の動作させる工程と、
（ｄ）前記（ｂ）の工程の後、電源サイクルに応答して、前記新しいファームウェアに従って前記記憶デバイスコントローラを動作させる工程であって、前記新しいファームウェア改訂識別子をコンピューティングホストに返す工程を有するものである、前記（ｄ）の動作させる工程と
を有し、
（ｆ）前記記憶デバイスは、前記新しいファームウェアの少なくとも一部を記憶することが可能な不揮発性メモリ（ＮＶＭ）を有し、
（ｇ）前記３つの返す工程は、各々、前記コンピューティングホストからの複数のタイプのコマンドのうちの特定の１つのインスタンスに応答したものであり、当該特定のタイプのコマンドにより、前記（ｃ）の返す工程で前記新しいファームウェア改訂識別子が返された場合、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）に回復不能の誤りが発生するものである方法。
【０１１８】
ＥＣ９０）ＥＣ８９記載の方法において、前記不揮発性メモリはフラッシュメモリを有する方法。
【０１１９】
ＥＣ９１）ＥＣ８９記載の方法において、前記記憶デバイスは不揮発性メモリを有するソリッドステートディスク（ＳＳＤ）を有する方法。
【０１２０】
ＥＣ９２）ＥＣ９１記載の方法において、前記不揮発性メモリはフラッシュメモリを有する方法。
【０１２１】
ＥＣ９３）ＥＣ８９記載の方法において、前記記憶デバイスは不揮発性メモリを有するハード・ディスク・ドライブ（ＨＤＤ）を有する方法。
【０１２２】
ＥＣ９４）ＥＣ８９記載の方法において、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【０１２３】
前記
ＥＣ９５）ＥＣ８９記載の方法において、特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【０１２４】
ＥＣ９６）ＥＣ８９記載の方法において、前記特定のタイプのコマンドは、小型コンピュータ・システム・インターフェース（ＳＣＳＩ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【０１２５】
ＥＣ９７）ＥＣ８９記載の方法において、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【０１２６】
ＥＣ９８）ＥＣ８９記載の方法において、前記受け取る工程は、電源サイクルまで現在のファームウェア改訂識別子を保存する工程を有する方法。
【０１２７】
ＥＣ９９）ＥＣ８９記載の方法において、前記受け取る工程は、電源サイクルまで現在のファームウェア改訂識別子を変更されないよう保護する工程を有する方法。
【０１２８】
ＥＣ１００）ＥＣ８９記載の方法において、前記受け取る工程は、前記現在のファームウェア改訂識別子を前記コンピューティングホストに提供し、前記コンピューティングホストから前記現在のファームウェア改訂識別子を復元する工程を有する方法。
【０１２９】
ＥＣ１０１）方法であって、
コンピューティングホストに接続可能な記憶デバイスにおいて、記憶デバイスの不揮発性メモリ（ＮＶＭ）を、第１のファームウェア、第１のファームウェア改訂識別子、第２のファームウェア、および第２のファームウェア改訂識別子を記憶するように管理する工程と、
前記記憶デバイスにおいて、前記コンピューティングホストから前記第１のファームウェアを受け取る工程であって、前記第１のファームウェアは前記第１のファームウェア改訂識別子と関連付けられているものである、前記第１のファームウェアを受け取る工程と、
前記記憶デバイスにおいて、前記コンピューティングホストから前記第２のファームウェアを受け取る工程であって、当該受け取る工程は、前記第１のファームウェアを受け取る工程の後で実行されるものであり、前記第２のファームウェアは前記第２のファームウェア改訂識別子と関連付けられているものである、前記第２のファームウェアを受け取る工程と、
前記記憶デバイスが前記コンピューティングホストに前記第１のファームウェア改訂識別子を返す工程であって、当該返す工程は、前記コンピューティングホストからの特定のタイプのコマンドに応答するものであり、前記記憶デバイスが前記第２のファームウェアを実行している間であって、且つ特定のイベントが発生する前に実行されるものである、前記第１のファームウェア改訂識別子を返す工程と
を有し、
前記第１のファームウェア改訂識別子を返す工程により、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）は、前記記憶デバイスが前記第１のファームウェアを実行している間中、および特定のイベントが発生するまで前記第２のファームウェアを実行している間に、返されたファームウェア改訂識別子の値の変更に応答して誤りを検出することなく実行を継続することが可能になるものである方法。
【０１３０】
ＥＣ１０２）ＥＣ１０１記載の方法において、前記不揮発性メモリはフラッシュメモリを有する方法。
【０１３１】
ＥＣ１０３）ＥＣ１０１記載の方法において、前記記憶デバイスは不揮発性メモリを有するソリッドステートディスク（ＳＳＤ）を有する方法。
【０１３２】
ＥＣ１０４）ＥＣ１０３記載の方法において、前記不揮発性メモリはフラッシュメモリを有する方法。
【０１３３】
ＥＣ１０５）ＥＣ１０１記載の方法において、前記記憶デバイスは不揮発性メモリを有するハード・ディスク・ドライブ（ＨＤＤ）を有する方法。
【０１３４】
ＥＣ１０６）ＥＣ１０１記載の方法において、前記特定のイベントは記憶デバイスの電源サイクルである方法。
【０１３５】
ＥＣ１０７）ＥＣ１０１記載の方法において、さらに、
前記第２のファームウェアを実行している間であって、且つ特定のイベントが発生した後で、前記コンピューティングホストからの特定のタイプのコマンドに応答して、前記コンピューティングホストに前記第２のファームウェア改訂識別子を返す工程を有するものである方法。
【０１３６】
ＥＣ１０８）ＥＣ１０１記載の方法において、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【０１３７】
ＥＣ１０９）ＥＣ１０１記載の方法において、前記特定のタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【０１３８】
ＥＣ１１０）ＥＣ１０１記載の方法において、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【０１３９】
ＥＣ１１１）方法であって、
記憶デバイスの不揮発性メモリ（ＮＶＭ）を、第１のファームウェア、第１のファームウェア改訂識別子、第２のファームウェア、および第２のファームウェア改訂識別子を記憶するように管理する工程であって、当該記憶デバイスはコンピューティングホストに接続可能なものである、前記管理する工程と、
前記記憶デバイスにおいて、前記コンピューティングホストから前記第１のファームウェアを受け取る工程であって、前記第１のファームウェアは前記第１のファームウェア改訂識別子と関連付けられているものである、前記第１のファームウェアを受け取る工程と、
前記記憶デバイスにおいて、前記コンピューティングホストから前記第２のファームウェアを受け取る工程であって、当該受け取る工程は、前記第１のファームウェアを受け取る工程の後で実行されるものであり、前記第２のファームウェアは前記第２のファームウェア改訂識別子と関連付けられているものである、前記第２のファームウェアを受け取る工程と、
前記記憶デバイスが前記コンピューティングホストに前記第１のファームウェア改訂識別子を返す工程であって、当該返す工程は、前記コンピューティングホストからの第１のタイプのコマンドに応答するものであり、前記記憶デバイスが前記第２のファームウェアを実行している間に行われるものである、前記第１のファームウェア改訂識別子を返す工程と、
前記記憶デバイスが前記コンピューティングホストに、前記第２のファームウェア改訂識別子を返す工程であって、前記第１のファームウェア改訂識別子を返す工程は、前記コンピューティングホストからの第２のタイプのコマンドに応答するものであり、前記記憶デバイスが第２のファームウェアを実行している間に行われるものである、前記第２のファームウェア改訂識別子を返す工程と
を有し、
前記第１タイプのコマンドは識別読み取りタイプのコマンドであり、
前記第２タイプのコマンドはベンダ特有のタイプのコマンドである
方法。
【０１４０】
ＥＣ１１２）ＥＣ１１１記載の方法において、前記不揮発性メモリはフラッシュメモリを有する方法。
【０１４１】
ＥＣ１１３）ＥＣ１１１記載の方法において、前記記憶デバイスは不揮発性メモリを有するソリッドステートディスク（ＳＳＤ）を有する方法。
【０１４２】
ＥＣ１１４）ＥＣ１１３記載の方法において、前記不揮発性メモリはフラッシュメモリを有する方法。
【０１４３】
ＥＣ１１５）ＥＣ１１１記載の方法において、前記記憶デバイスは不揮発性メモリを有するハード・ディスク・ドライブ（ＨＤＤ）を有する方法。
【０１４４】
ＥＣ１１６）ＥＣ１１１記載の方法において、前記ベンダ特有のタイプのコマンドはベンダ特有のファームウェア識別情報読み取りタイプのコマンドを有する方法。
【０１４５】
ＥＣ１１７）ＥＣ１１１記載の方法において、前記識別読み取りタイプのコマンドは、シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有する方法。
【０１４６】
ＥＣ１１８）ＥＣ１１１記載の方法において、前記識別読み取りタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有する方法。
【０１４７】
ＥＣ１１９）ＥＣ１１１記載の方法において、前記識別読み取りタイプのコマンドは、前記第２のファームウェア改訂識別子が前記第１のファームウェア改訂識別子の代わりに返されるように処理されるときに、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）に回復不能の誤りを発生させるタイプのコマンドを有する方法。
【０１４８】
ＥＣ１２０）ＥＣ１１９記載の方法において、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有する方法。
【０１４９】
ＥＣ１２１）システムであって、
（ａ）複数のファームウェアイメージのうちの選択された１つに従って実行する手段であって、当該複数のファームウェアイメージの各々は対応する識別子を有し、当該複数のファームウェアイメージは、それぞれのイメージに対応する現在のファームウェアイメージと新しいファームウェアイメージとを有するものであり、当該現在および新しいファームウェアイメージはそれぞれ対応する現在の識別子および新しい識別子を有するものである、前記実行する手段と、
（ｂ）前記実行する手段を現在のファームウェアイメージである選択されたファームウェアイメージと共に使用し、当該使用中に、コンピューティングホストからの複数のタイプのコマンドのうちの特定の１つの第１のインスタンスに応答して、前記現在の識別子を返す手段と、
（ｃ）前記（ｂ）の手段の後に動作して、前記新しい識別子を有する前記新しいファームウェアイメージを受け取る手段と、
（ｄ）前記（ｃ）の手段の後に動作して、前記実行する手段を前記新しいファームウェアイメージである選択されたファームウェアイメージと共に使用し、当該使用中に、特定のタイプのコマンドの第２のインスタンスに応答して、前記現在の識別子を返す手段と、
（ｅ）前記（ｂ）の手段の後に電源サイクルに応答して動作する手段であって、前記実行する手段を前記新しいファームウェアイメージである選択されたファームウェアイメージと共に使用し、当該使用中に、特定のタイプのコマンドの第３のインスタンスに応答して、前記新しい識別子を返す手段と、
前記新しいファームウェアの少なくとも一部を記憶可能なフラッシュメモリと
を有し、
前記特定のタイプのコマンドは、
（ｉ）第１の識別子の各々が前記特定のタイプのコマンドの第１のインスタンスの各々に応答して前記コンピューティングホストに返され、
（ｉｉ）第２の識別子の各々が特定のタイプのコマンドの第２のインスタンスの各々に応答して前記コンピューティングホストに返され、
（ｉｉｉ）前記第１の識別子の各々が返されるときと前記第２の識別子の各々が返されるときとの間に電源サイクルが行われない
場合、
前記第２の識別子の返しに応答して、前記コンピューティングホスト上で実行されているオペレーティングシステム（ＯＳ）に回復不能の誤りが発生するタイプのコマンドであるシステム。
【０１５０】
ＥＣ１２２）ＥＣ１２１記載のシステムにおいて、ソリッドステートディスク（ＳＳＤ）の全部または任意の部分を有するシステム。
【０１５１】
ＥＣ１２３）ＥＣ１２１記載のシステムにおいて、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有し、前記特定のタイプのコマンドはシリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）ＩＤＥＮＴＩＦＹタイプのコマンドを有するシステム。
【０１５２】
ＥＣ１２４）ＥＣ１２１記載のシステムにおいて、前記オペレーティングシステムはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムの１バージョンを有し、前記特定のタイプのコマンドは、シリアル小型コンピュータ・システム・インターフェース（シリアルＳＣＳＩ）（ＳＡＳ）重要製品データ（ＶＰＤ）読み取りタイプのコマンドを有するシステム。
【０１５３】
ＳＳＤコントローラを有し、またはこれに言及している前述のＥＣのいずれかにおいて、ＳＳＤコントローラは単一の集積回路（ＩＣ）において実装されるＥＣ。
【０１５４】
ＳＳＤコントローラおよび１若しくはそれ以上の不揮発性メモリを有し、またはこれらに言及している前述のＥＣのいずれかにおいて、ＳＳＤコントローラおよび不揮発性メモリはＳＳＤに具備されているＥＣ。
【０１５５】
１若しくはそれ以上の不揮発性メモリを有し、またはこれに言及している前述のＥＣのいずれかにおいて、１若しくはそれ以上の不揮発性メモリのうちの少なくとも１つは１若しくはそれ以上のフラッシュメモリを有するＥＣ。
【０１５６】
ＳＳＤコントローラおよびコンピューティングホストを有し、またはこれらに言及している前述のＥＣのいずれかにおいて、ＳＳＤコントローラは、ストレージインターフェース規格と適合し、コンピューティングホストに接続することができるようにしたストレージインターフェースを有するＥＣ。
【０１５７】
ＳＳＤコントローラを有し、またはこれに言及している前述のＥＣのいずれかにおいて、ＳＳＤコントローラは不揮発性メモリインターフェースを有するＥＣ。
【０１５８】
不揮発性メモリインターフェースを有し、またはこれに言及している前述のＥＣのいずれかにおいて、不揮発性メモリインターフェースはフラッシュ・メモリ・インターフェースを有するＥＣ。
【０１５９】
ＳＳＤコントローラを有し、またはこれに言及している前述のＥＣのいずれかにおいて、ＳＳＤコントローラはフラッシュ・メモリ・インターフェースを有するＥＣ。
【０１６０】
１若しくはそれ以上のフラッシュメモリを有し、またはこれに言及している前述のＥＣのいずれかにおいて、フラッシュメモリのうちの少なくとも１つは、
ＮＡＮＤフラッシュ技術記憶セル、および
ＮＯＲフラッシュ技術記憶セル
のうちの１若しくはそれ以上を有するＥＣ。
【０１６１】
１若しくはそれ以上のフラッシュメモリを有し、またはこれに言及している前述のＥＣのいずれかにおいて、フラッシュメモリのうちの少なくとも１つは、
シングルレベルセル（ＳＬＣ）フラッシュ技術記憶セル、および
マルチレベルセル（ＭＬＣ）フラッシュ技術記憶セル
のうちの１若しくはそれ以上を有するＥＣ。
【０１６２】
フラッシュ・メモリ・インターフェースを有し、またはこれに言及している前述のＥＣのいずれかにおいて、フラッシュ・メモリ・インターフェースは、
オープンＮＡＮＤフラッシュインターフェース（ＯＮＦＩ）、
トグルモードインターフェース、
デュアル・データ・レート（ＤＤＲ）同期インターフェース、
同期インターフェース、および
非同期インターフェース
のうちの１若しくはそれ以上と適合するＥＣ。
【０１６３】
ストレージインターフェース規格を有するか、又は参照する上記ＥＣのうちのいずれかのＥＣであって、前記ストレージインターフェース規格は、
ユニバーサル・シリアル・バス（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ：ＵＳＢ）インターフェース規格と、
コンパクトフラッシュ（登録商標）（Ｃｏｍｐａｃｔ  Ｆｌａｓｈ：ＣＦ）インターフェース規格と、
マルチメディアカード（ＭｕｌｔｉＭｅｄｉａＣａｒｄ：ＭＭＣ）インターフェース規格と、
セキュアデジタル（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ：ＳＤ）インターフェース規格と、
メモリ・スティック・インターフェース規格と、
ｘＤピクチャ・カード・インターフェース規格と、
内蔵ドライブエレクトロニクス（Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ：ＩＤＥ）インターフェース規格と、
シリアル・アドバンスト・テクノロジー・アタッチメント（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ：ＳＡＴＡ）インターフェース規格と、
エクスターナルＳＡＴＡ（ｅＳＡＴＡ）インターフェース規格と、
スモール・コンピュータ・システム・インターフェース（ＳＣＳＩ）インターフェース規格と、
シリアル接続スモール・コンピュータ・システム・インターフェース（ＳＡＳ）インターフェース規格と、
ファイバー・チャンネル・インターフェース規格と、
イーサネット（登録商標）インターフェース規格と、
ペリフェラル・コンポーネント・インターコネクト・エキスプレス（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ：ＰＣＩｅ）インターフェース規格と
のうちの１若しくはそれ以上を有するものであるストレージインターフェース規格を有するか、又は参照する上記ＥＣのうちのいずれかのＥＣ。
【０１６４】
ＥＣ１４６）計算ホストを有するか、又は参照する上記のＥＣのうちのいずれかのＥＣであって、前記計算ホストは、
コンピュータと、
ワークステーションコンピュータと、
サーバコンピュータと、
ストレージサーバと、
パーソナルコンピュータ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ：ＰＣ）と、
ラップトップコンピュータと、
ノートブックコンピュータと、
ネットブックコンピュータと、
携帯端末（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ：ＰＤＡ）と、
メディアプレーヤと、
メディアレコーダと、
デジタルカメラと、
セル方式送受話器と、
コードレス電話の送受話器と、
電子ゲームと
のうちの１若しくはそれ以上を有するものである計算ホストを有するか、又は参照する上記ＥＣのうちのいずれかのＥＣ。
【０１６５】
さらに別のＥＣも企図されており、これらには、前述のＥＣの全部または任意の部分の装置、システム、方法、手段プラス機能、およびコンピュータ可読媒体の類似物および／または変形が含まれる。
【０１６６】
システム
図１Ａは、ホストから見たデバイスファームウェア更新の影響の管理を提供するＳＳＤコントローラ１００を含むＳＳＤ１０１の実施形態の選択された詳細を図示する。ＳＳＤコントローラはＮＶＭ要素（例えば、フラッシュメモリ）を介して実装される不揮発性ストレージなどの不揮発性ストレージを管理するためのものである。ＳＳＤコントローラ１００は１若しくはそれ以上の外部インターフェース１１０を介してホスト（図示せず）に通信するように接続される。様々な実施形態に従って、外部インターフェース１１０は、ＳＡＴＡインターフェース、ＳＡＳインターフェース、ＰＩＣｅインターフェース、ファイバー・チャンネル・インターフェース、イーサネット（登録商標）インターフェース（例えば、１０ギガビットのイーサネット（登録商標））、上記のインターフェースのうちのいずれかの規格外版、若しくは特注のインターフェース、又はストレージ及び／又は通信機器及び／又は計算デバイスを相互接続するために使用されるその他任意の種類のインターフェースのうちの１若しくはそれ以上である。例えば、一部の実施形態において、ＳＳＤコントローラ１００はＳＡＴＡインターフェースとＰＣＩｅインターフェースとを含む。
【０１６７】
ＳＳＤコントローラ１００は、さらに、１つ若しくはそれ以上のデバイスインターフェース１９０を介して、１つ若しくはそれ以上のフラッシュデバイス１９２といった、１つ若しくはそれ以上の記憶デバイスを含むＮＶＭ１９９に通信可能に接続されている。様々な実施形態によれば、デバイスインターフェース１９０は、非同期インターフェース、同期インターフェース、ＤＤＲ同期インターフェース、ＯＮＦＩ２．２やＯＮＦＩ３．０互換インターフェースといったＯＮＦＩ互換インターフェース、トグルモード互換フラッシュインターフェース、上記のインターフェースのいずれかの非標準バージョン、カスタムインターフェース、または記憶デバイスに接続するのに使用される任意の他の種類のインターフェースのうちの１つ若しくはそれ以上である。
【０１６８】
各フラッシュデバイス１９２は、一部の実施形態では、１つ若しくはそれ以上の個々のフラッシュダイ１９４を有する。フラッシュデバイス１９２のうちの特定のフラッシュデバイスの種類に従って、特定のフラッシュデバイス１９２内の複数のフラッシュダイ１９４に、並列に、任意選択で、および／または選択的にアクセスすることができる。フラッシュデバイス１９２は、単に、ＳＳＤコントローラ１００に通信可能に接続することができるようにした記憶デバイスの一種を表しているにすぎない。様々な実施形態では、ＳＬＣ  ＮＡＮＤフラッシュメモリ、ＭＬＣ  ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、多結晶シリコン若しくはシリコン窒化膜技術ベースの電荷蓄積セルを使用したフラッシュメモリ、２次元若しくは３次元技術ベースのフラッシュメモリ、読み出し専用メモリ、スタティック・ランダム・アクセス・メモリ、ダイナミック・ランダム・アクセス・メモリ、強磁性メモリ、相変化メモリ、レーストラックメモリ、ＲｅＲＡＭ、または任意の他の種類のメモリデバイス若しくは記憶媒体といった、任意の種類の記憶デバイスを使用することができる。
【０１６９】
様々な実施形態によれば、デバイスインターフェース１９０は、１つのバスにつき１つ若しくはそれ以上のフラッシュデバイス１９２を有する１つ若しくはそれ以上のバス；グループ内のバスにおおむね並列にアクセスさせる、１つのバスにつき１つ若しくはそれ以上のフラッシュデバイス１９２を有する１つ若しくはそれ以上のバスグループ；またはデバイスインターフェース１９０上へのフラッシュデバイス１９２の１つ若しくはそれ以上のインスタンスの任意の他の編成として編成される。
【０１７０】
引き続き図１Ａにおいて、ＳＳＤコントローラ１００は、ホストインターフェース１１１、データ処理１２１、バッファ１３１、マップ１４１、リサイクラ１５１、ＥＣＣ１６１、デバイスインターフェース論理１９１、ＣＰＵ１７１といった１つ若しくはそれ以上のモジュールを有する。図１Ａに図示する具体的なモジュールおよび相互接続は、単に、一実施形態を表すにすぎず、これらのモジュールの一部または全部、および図示されていないさらに別のモジュールの多くの配置および相互接続が考えられる。第１の例として、一部の実施形態では、デュアルポーティングを提供するための２つ以上のホストインターフェース１１１がある。第２の例として、一部の実施形態では、データ処理１２１および／またはＥＣＣ１６１がバッファ１３１と組み合わされている。第３の例として、一部の実施形態では、ホストインターフェース１１１がバッファ１３１に直接接続されており、データ処理１２１が、バッファ１３１に記憶されたデータに任意選択で、および／または選択的に作用する。第４の例として、一部の実施形態では、デバイスインターフェース論理１９１がバッファ１３１に直接接続されており、ＥＣＣ１６１が、バッファ１３１に記憶されたデータに任意選択で、および／または選択的に作用する。
【０１７１】
ホストインターフェース１１１は、外部インターフェース１１０を介してコマンドおよび／またはデータを送受信し、一部の実施形態では、タグ追跡１１３によって個々のコマンドの進捗を追跡する。例えば、コマンドは、読み出すべきアドレス（ＬＢＡなど）およびデータの量（ＬＢＡ量、例えばセクタの数など）を指定する読み出しコマンドを含み、これに応答してＳＳＤは、読み出し状況および／または読み出しデータを提供する。別の例として、コマンドは、書き込むべきアドレス（ＬＢＡなど）およびデータの量（ＬＢＡ量、例えばセクタの数など）を指定する書き込みコマンドを含み、これに応答してＳＳＤは、書き込み状況を提供し、および／または書き込みデータを要求し、任意選択でその後に書き込み状況を提供する。さらに別の例として、コマンドは、もはや割り振られる必要のなくなった１つ若しくはそれ以上のアドレス（１つ若しくはそれ以上のＬＢＡなど）を指定する割り振り解除コマンド（ｔｒｉｍコマンドなど）を含み、これに応答してＳＳＤは、マップをしかるべく変更し、任意選択で割り振り解除状況を提供する。あるコンテキストでは、ＡＴＡ互換ＴＲＩＭコマンドが割り振り解除コマンドの例である。さらに別の例として、コマンドは、超コンデンサ・テスト・コマンドまたはデータハーデニング成功問い合わせを含み、これに応答してＳＳＤは、適切な状況を提供する。一部の実施形態では、ホストインターフェース１１１は、ＳＡＴＡプロトコルと適合し、ＮＣＱコマンドを使用して、最高３２までの未処理のコマンドを有することができるようになっており、各コマンドは０から３１までの数として表された一意のタグを有する。一部の実施形態では、タグ追跡１１３は、外部インターフェース１１０を介して受け取ったコマンドのための外部タグを、ＳＳＤコントローラ１００による処理の間にコマンドを追跡するのに使用される内部タグと関連付けることができるようになっている。
【０１７２】
様々な実施形態によれば、データ処理１２１は、任意選択で、および／または選択的に、バッファ１３１と外部インターフェース１１０との間で送られる一部または全部のデータを処理する、およびデータ処理１２１は、任意選択で、および／または選択的に、バッファ１３１に記憶されたデータを処理する、以下のうちの１つ若しくはそれ以上が行われる。一部の実施形態では、データ処理１２１は、１つ若しくはそれ以上のエンジン１２３を使用して、書式設定、書式設定の変更、符号変換、ならびに他のデータ処理および／または操作タスクのうちの１つ若しくはそれ以上を行う。
【０１７３】
バッファ１３１は、外部インターフェース１１０からデバイスインターフェース１９０へ／デバイスインターフェース１９０から外部インターフェース１１０へ送られたデータを記憶する。一部の実施形態では、バッファ１３１は、さらに、ＳＳＤコントローラ１００によって１つ若しくはそれ以上のフラッシュデバイス１９２を管理するのに使用される、一部または全部のマップ表といったシステムデータも記憶する。様々な実施形態では、バッファ１３１は、データの一時記憶に使用されるメモリ１３７、バッファ１３１への、および／またはバッファ１３１からのデータの移動を制御するのに使用されるＤＭＡ１３３、ならびに高レベル誤り訂正および／または冗長性機能と、他のデータ移動および／または操作機能とを提供するのに使用されるＥＣＣ−Ｘ１３５のうちの１つ若しくはそれ以上を有する。高レベル冗長性機能の一例がＲＡＩＤ様の能力であり、ディスクレベルではなく、フラッシュ・デバイス（フラッシュデバイス１９２のうちの複数のものなど）レベルおよび／またはフラッシュダイ（フラッシュダイ１９４など）レベルの冗長性を備える。
【０１７４】
様々な実施形態によれば、以下のうちの１つ若しくはそれ以上である。ＥＣＣ１６１は、任意選択で、および／または選択的に、バッファ１３１とデバイスインターフェース１９０との間で送られる一部または全部のデータを処理する；およびＥＣＣ１６１は、任意選択で、および／または選択的に、バッファ１３１に記憶されたデータを処理する。一部の実施形態では、ＥＣＣ１６１は、例えば１つ若しくはそれ以上のＥＣＣ技法に従った低レベル誤り訂正および／または冗長性機能を提供するのに使用される。一部の実施形態では、ＥＣＣ１６１は、ＣＲＣ符号、ハミング符号、ＲＳ符号、ＢＣＨ符号、ＬＤＰＣ符号、ビタビ符号、トレリス符号、硬判定符号、軟判定符号、消去ベースの符号、任意の誤り検出および／または訂正符号、ならびに上記の任意の組み合わせのうちの１つ若しくはそれ以上を実施する。一部の実施形態では、ＥＣＣ１６１は、１つ若しくはそれ以上の復号器（ＬＤＰＣ復号器など）を含む。
【０１７５】
デバイスインターフェース論理１９１は、デバイスインターフェース１９０を介してフラッシュデバイス１９２のインスタンスを制御する。デバイスインターフェース論理１９１は、フラッシュデバイス１９２のプロトコルに従ってフラッシュデバイス１９２のインスタンスへ／からデータを送ることができるようになっている。デバイスインターフェース論理１９１は、デバイスインターフェース１９０を介したフラッシュデバイス１９２のインスタンスの制御を選択的に配列するスケジューリング１９３を含む。例えば、一部の実施形態では、スケジューリング１９３は、フラッシュデバイス１９２のインスタンスへの操作を待ち行列に入れ、フラッシュデバイス１９２（またはフラッシュダイ１９４）のインスタンスの個々のインスタンスへの操作を、フラッシュデバイス１９２（またはフラッシュダイ１９４）のインスタンスの個々のインスタンスが利用可能になるに従って選択的に送ることができるようになっている。
【０１７６】
マップ１４１は、外部インターフェース１１０上で使用されるデータアドレス指定と、デバイスインターフェース１９０上で使用されるデータアドレス指定との間の変換を行い、表１４３を使用して外部データアドレスからＮＶＭ１９９内の位置へマップする。例えば、一部の実施形態では、マップ１４１は、外部インターフェース１１０上で使用されるＬＢＡを、表１４３によって提供されるマッピングにより、１つ若しくはそれ以上のフラッシュダイ１９４を対象とするブロックおよび／またはページアドレスに変換する。ドライブ製造または割り振り解除以来一度も書き込まれていないＬＢＡでは、マップは、ＬＢＡが読み取出された場合に返すべきデフォルト値を指し示す。例えば、割り振り解除コマンドを処理するときに、マップは、割り振り解除されたＬＢＡに対応するエントリがデフォルト値のうちの１つを指し示すように変更される。様々な実施形態では、様々なデフォルト値があり、各々が対応するポインタを有する。複数のデフォルト値は、ある（例えば第１の範囲内の）割り振り解除されたＬＢＡを１つのデフォルト値として読み出し、ある（例えば第２の範囲内の）割り振り解除されたＬＢＡを別のデフォルト値として読み出すことを可能にする。デフォルト値は、様々な実施形態では、フラッシュメモリ、ハードウェア、ファームウェア、コマンドおよび／若しくはプリミティブ引数および／若しくはパラメータ、プログラマブルレジスタ、またはそれらの様々な組み合わせによって定義される。
【０１７７】
一部の実施形態では、リサイクラ１５１は、不要部分の整理を行う。例えば、一部の実施形態では、フラッシュデバイス１９２のインスタンスは、ブロックが書き換え可能になる前に消去されなければならないブロックを含む。リサイクラ１５１は、例えば、マップ１４１によって維持されるマップをスキャンすることによって、フラッシュデバイス１９２のインスタンスのどの部分が実際に使用されているか（例えば、割り振り解除されているのではなく割り振られていること）を判定し、フラッシュデバイス１９２のインスタンスの未使用の（例えば割り振り解除された）部分を消去することによって書き込みに利用できるようにすることができるようになっている。別の実施形態では、リサイクラ１５１は、フラッシュデバイス１９２のインスタンスのより大きい連続した部分を書き込みに利用できるようにするために、フラッシュデバイス１９２のインスタンス内に記憶されたデータを移動することができるようになっている。
【０１７８】
ＣＰＵ１７１は、ＳＳＤコントローラ１００の様々な部分を制御する。ＣＰＵ１７１は、ＣＰＵコア１７２を含む。ＣＰＵコア１７２は、様々な実施形態によれば、１つ若しくはそれ以上のシングルコアプロセッサまたはマルチコアプロセッサである。ＣＰＵコア１７２内の個々のプロセッサコアは、一部の実施形態では、マルチスレッド化されている。ＣＰＵコア１７２は、命令および／またはデータのキャッシュおよび／またはメモリを含む。例えば、命令メモリは、ＣＰＵコア１７２が、ＳＳＤコントローラ１００を制御するためのプログラム（ファームウェアとも呼ばれるソフトウェアなど）を実行することを可能にする命令を含む。一部の実施形態では、ＣＰＵコア１７２によって実行されるファームウェアの一部または全部が、（例えば、図１Ｂおよび図１ＣのＮＶＭ１９９のファームウェア１０６として図示されている）フラッシュデバイス１９２のインスタンス上に記憶される。
【０１７９】
様々な実施形態では、ＣＰＵ１７１は、外部インターフェース１１０を介して受け取られるコマンドを、コマンドが進行している間に追跡し、制御するコマンド管理１７３、バッファ１３１の割り振りおよび使用を制御するバッファ管理１７５、マップ１４１を制御する変換管理１７７、データアドレス指定の整合性を制御し、例えば、外部データアクセスと再利用データアクセスとの間の矛盾を回避するコヒーレンシ管理１７９、デバイスインターフェース論理１９１を制御するデバイス管理１８１、識別情報の変更および通信を制御する識別情報管理１８２、ならびに、任意選択で、他の管理部をさらに含む。ＣＰＵ１７１によって果たされる管理機能は、そのいずれか、若しくは全部が、ハードウェア、ソフトウェア（ＣＰＵコア１７２上や、外部インターフェース１１０を介して接続されたホスト上で実行されるファームウェアなど）、またはそれらの任意の実施形態によって制御され、および／または管理され、あるいは、そのどれも、制御も管理もされないものである。
【０１８０】
一部の実施形態では、ＣＰＵ１７１は、性能統計の収集および／または報告、ＳＭＡＲＴの実施、電源逐次開閉機構の制御、電力消費の制御および／または調整、電源障害への応答、クロック速度の制御および／またはモニタリングおよび／または調整、ならびに他の管理タスクのうちの１つ若しくはそれ以上といった、他の管理タスクを行うことができるようになっている。
【０１８１】
様々な実施形態は、ＳＳＤコントローラ１００と同様の、例えば、ホストインターフェース１１１および／または外部インターフェース１１０の適応による、様々なコンピューティングホストを用いた動作と適合するコンピューティングホスト・フラッシュ・メモリ・コントローラを含む。様々なコンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、ＰＤＡ、メディアプレーヤ、メディアレコーダ、デジタルカメラ、セルラハンドセット、コードレス電話機ハンドセット、および電子ゲームのうちの１つまたはそれらの任意の組み合わせを含む。
【０１８２】
様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部または任意の部分が、単一のＩＣ、マルチダイＩＣの単一のダイ、マルチダイＩＣの複数のダイ、または複数のＩＣ上で実施される。例えば、バッファ１３１は、ＳＳＤコントローラ１００の他の要素と同じダイ上に実施される。別の例では、バッファ１３１は、ＳＳＤコントローラ１００の他の要素と異なるダイ上に実施される。
【０１８３】
図１Ｂに、図１ＡのＳＳＤを含むシステムの実施形態の選択された詳細を図示する。ＳＳＤ１０１は、デバイスインターフェース１９０を介してＮＶＭ１９９に接続されたＳＳＤコントローラ１００を含む。ＳＳＤは、外部インターフェース１１０を介してホスト１０２に接続されている。一部の実施形態では、ＳＳＤ１０１（またはその変形）は、ホスト１０２として動作するイニシエータ（開始プログラム）に接続されたＳＡＳドライブまたはＳＡＴＡドライブに対応する。
【０１８４】
ホスト１０２はＯＳ１０５を実行することが可能であり、ＯＳはＳＳＤとインターフェースするための（図示せず）ドライバを含み、および／またはそのようなドライバを用いて動作することができるようになっている。Ｗｉｎｄｏｗｓ（登録商標）の様々なバージョン（９５、９８、ＭＥ、ＮＴ、ＸＰ、２０００、サーバ、Ｖｉｓｔａ、および７など）、Ｌｉｎｕｘ（登録商標）の様々なバージョン（Ｒｅｄ  Ｈａｔ、Ｄｅｂｉａｎ、およびＵｂｕｎｔｕなど）、ならびにＭａｃＯＳの様々なバージョン（８、９およびＸなど）がＯＳ１０５の例である。
【０１８５】
ＮＶＭ１９９の１つ若しくはそれ以上の部分が、一部の実施形態では、ファームウェア記憶１０６および／または選択ＩＤ情報記憶１０７に使用される。ファームウェア記憶は、１つ若しくはそれ以上のファームウェアイメージ（またはその部分）を含む。ファームウェアイメージは、例えばＳＳＤコントローラ１００のＣＰＵコア１７２によって実行される、例えばソフトウェアの１つ若しくはそれ以上のイメージを有する。ファームウェアイメージは、別の例では、例えばファームウェア実行時にＣＰＵコアによって参照される、定数、パラメータ値、ＮＶＭデバイス情報の１つ若しくはそれ以上のイメージを有する。ソフトウェアの１つ若しくはそれ以上のイメージは、例えば、現在のファームウェアイメージおよび０以上の（ファームウェア更新に対して）前のファームウェアイメージに対応する。
【０１８６】
選択ＩＤ情報記憶１０７は、ＳＳＤ１０１、ＳＳＤコントローラ１００、ＣＰＵコアによって現在実行されている（または次の電源サイクルの後で実行されるべき）ソフトウェアの全部または任意の部分、およびＳＳＤを具現化している特定の製品のいずれか１若しくはそれ以上と関連付けられた識別／識別情報の全部または任意の部分の１若しくはそれ以上のイメージを含む。１若しくはそれ以上の識別／識別情報イメージは、例えば、現在のファームウェアイメージ実行の結果および０若しくはそれ以上の前のファームウェアイメージ実行の結果に対応する。
【０１８７】
様々な実施形態において、選択ＩＤ情報記憶１０７は、ファームウェア改訂識別子の全部若しくは任意の部分、ならびに／またはＳＳＰの対象となる状態および／若しくはパラメータの全部または任意の部分を含む。より一般的には、選択ＩＤ情報記憶は、本明細書の別の箇所に記載したｉｄｅｎｔｉｆｙおよび／または識別情報の全部または任意の部分の１若しくはそれ以上のバージョンを含む。各バージョンは、ファームウェアのそれぞれのバージョンおよび／またはファームウェアの起動に対応する。
【０１８８】
図１Ｃに、図１ＡのＳＳＤを含むシステムの別の実施形態の選択された詳細を示す。図１Ｂと同様に、ＳＳＤ１０１は、デバイスインターフェース１９０を介してＮＶＭ１９９に接続されたＳＳＤコントローラ１００を含む。ＳＳＤは外部インターフェース１１０を介してホスト１０２に接続されており、外部インターフェース１１０はさらに中間コントローラ１０３に、次いで中間インターフェース１０４を介してホスト１０２に接続されている。様々な実施形態において、ＳＳＤコントローラ１００は、ＲＡＩＤコントローラといった１若しくはそれ以上の中間レベルの他のコントローラを介してホストに接続されている。ある実施形態では、ＳＳＤ１０１（またはその変形）はＳＡＳドライブまたはＳＡＴＡドライブに対応し、中間コントローラ１０３は、イニシエータにさらに接続されているエキスパンダに対応し、あるいは中間コントローラ１０３は、エキスパンダを介してイニシエータに間接的に接続されているブリッジに対応する。
【０１８９】
様々な実施形態では、１つ若しくはそれ以上のＮＶＭと組み合わされたＳＳＤコントローラおよび／またはコンピューティングホスト・フラッシュ・メモリ・コントローラが、ＵＳＢ記憶コンポーネント、ＣＦ記憶コンポーネント、ＭＭＣ記憶コンポーネント、ＳＤ記憶コンポーネント、メモリスティック記憶コンポーネント、ｘＤピクチャカード記憶コンポーネントといった不揮発性記憶コンポーネントとして実施される。
【０１９０】
様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部またはいずれかの部分、またはその機能が、コントローラが接続されるべきホスト（図１Ｃのホスト１０２など）において実施される。様々な実施形態では、ＳＳＤコントローラ（若しくはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部またはいずれかの部分、またはその機能が、ハードウェア（論理回路など）、ソフトウェアおよび／若しくはファームウェア（ドライバソフトウェアおよび／またはＳＳＤ制御ファームウェアなど）、またはそれらの任意の組み合わせによって実施される。例えば、（例えば図１ＡのＥＣＣ１６１および／またはＥＣＣ−Ｘ１３５と同様の）ＥＣＣ部の、またはＥＣＣ部と関連付けられた機能が、一部はホスト上のソフトウェアによって、一部はＳＳＤコントローラ内のファームウェアとハードウェアとの組み合わせによって実施される。別の例として、（例えば図１Ａのリサイクラ１５１と同様の）リサイクラ部の、またはリサイクラ部と関連付けられた機能が、一部はホスト上のソフトウェアによって、一部はコンピューティングホスト・フラッシュ・メモリ・コントローラ内のハードウェアによって実施される。
【０１９１】
動作
図２に、ホストから見たデバイスファームウェア更新の影響の管理の実施形態の選択された詳細の流れ図２００を示す。図の実施形態の動作についてのシステムコンテキストの例は、ＯＳがホスト上で走っているホストに接続されたデバイスを含む。デバイスはホストからのコマンドに応答し、可視性の遅延を終了させるイベント（電源サイクルなど）を検出し、これに応答することができるようになっている。デバイスはファームウェア（ファームウェアを実行しているコントローラなど）に従って動作する。またデバイスは、ファームウェアを介して（例えば、ファームウェアの一部分を変更するコントローラを介して）読み取り可能であり、書き込み可能である選択ｉｄｅｎｔｉｆｙ／識別情報に従って動作する。選択ｉｄｅｎｔｉｆｙ／識別情報（「ＩＤ情報」ともいう）は、本明細書の別の箇所に記載したｉｄｅｎｔｉｆｙおよび／または識別情報の１若しくはそれ以上のサブセットであり、それらのサブセットは、デバイスの実施形態、使用シナリオ、および／または動作モードによって異なる。図に示す流れは、ファームウェア更新の影響の少なくとも一部分の可視性の遅延を提供し、よって、ホストから見たデバイスファームウェア更新の影響の管理を可能にする。
【０１９２】
ＩＤ情報は１若しくはそれ以上の要素（パラメータ、値、および／またはフィールドなど）を含む。デバイスがファームウェアによって起動し、および／または少なくとも一部はファームウェアによって選択された機能を果たすときに、ＩＤ情報が参照される（例えば、読み取られ、書き込まれ、またはその両方が行われる）。ファームウェアの特定のバージョンはＩＤ情報の特定のバージョンと対応する。例えば、ファームウェアの特定のバージョンの起動時に、ファームウェアの特定のバージョンはＩＤ情報の１若しくはそれ以上の要素を読み込み、よって、読み込みＩＤ情報はファームウェアの特定のバージョンに対応する。別の例としては、ファームウェアの特定のバージョンの特定の機能を果たしている間に、ＩＤ情報の１若しくはそれ以上の要素が書き込まれ、結果としてファームウェアの特定のバージョンと書き込まれたＩＤ情報との間の対応が生じる。
【０１９３】
具体的に図に示すように、流れは、デバイスが、ファームウェアの「古い」バージョンに従い、古いファームウェアに対応する「古い」ＩＤ情報に従って動作すること（（古い）ファームウェア（古い）ＩＤ情報で動作する、２０１）から開始する。流れが２０１に留まっている間に、デバイスがＩＤ情報に依存するホストからの選択コマンドに応答するときに、デバイスは、古いＩＤ情報に従ったものである読み込みＩＤ情報を参照する。例えば、デバイスがＳＡＴＡ互換ＳＳＤである場合には、ＳＡＴＡ  ＩＤＥＮＴＩＦＹコマンドに応答して、デバイスは古いＩＤ情報から決定されたＶＰＤを返し、ＶＰＤは、例えば、ファームウェア改訂識別子および／またはＳＳＰの対象となるパラメータを含む。
【０１９４】
外部エージェント（ユーザやファームウェアバージョン検査ツールなど）が、例えば、新しいファームウェアをダウンロードし、アクティブ化／起動することによって、デバイスのファームウェア更新が行われるべきであると決定する。ファームウェア更新は、ホストがデバイスに、ファームウェアを更新／ダウンロードするよう求めるコマンド（ダウンロードコマンド、２０１Ｄ）を発行することから開始し、これに応答してデバイスは、任意選択でホストと連携して、新しいファームウェアを獲得する（（新しい）ファームウェアをダウンロードする、２０２）。次いでデバイスは、内部状態および／または機能を変更して、電源サイクルまで読み込みＩＤ情報の変更を妨げる（選択ＩＤ情報を保護する、２０３）。
【０１９５】
ファームウェア更新は続いて、ホストがデバイスに、新しいファームウェアで動作するよう求めるコマンド（アクティブ化コマンド、２０３Ａ）を発行し、これに応答してデバイスは新しいファームウェアをアクティブ化し（（新しい）ファームウェアをアクティブ化する、２０４）、新しいファームウェアを使用して起動する（デバイスが起動する、２０５）。起動後の読み込みＩＤ情報は（古いファームウェアに対応する）古いＩＤ情報に従ったものである。というのは、読み込みＩＤ情報は変更されないよう保護されている（２０３）からである。起動後、デバイスは、新しいファームウェアのバージョンに従い、古いファームウェアに対応する古いＩＤ情報に従って動作する（（新しい）ファームウェア（古い）ＩＤ情報で動作する、２０６）。流れが２０６に留まっている間に、デバイスが（ＩＤ情報に依存する）ホストからの選択コマンドに応答するときに、デバイスは、２０１にある間と同様に、古いＩＤ情報に従って読み込まれたＩＤ情報を参照する。
【０１９６】
したがって、デバイスが（ＩＤ情報に依存する）選択コマンドに応答するときに、デバイスは、古いＩＤ情報に従って読み込まれたＩＤ情報を参照し、よって、ファームウェア更新の影響の少なくとも一部分の可視性を遅延させる。実際上、選択コマンドに関して、ファームウェア更新の前後で同一のＩＤ情報が参照される。
【０１９７】
例えば、デバイスがＳＡＴＡ互換ＳＳＤである場合には、ＳＡＴＡ  ＩＤＥＮＴＩＦＹコマンドに応答して、実際上デバイスは古いＩＤ情報を参照し、古いＩＤ情報からファームウェア改訂識別子を決定し（決定されるファームウェア改訂識別子は古いファームウェアに対応する）、古いファームウェア改訂識別子を含むＶＰＤを返す。よって、ファームウェア更新の前後で同じファームウェア改訂識別子が提供される。ファームウェア更新の前後で同じファームウェア改訂識別子を提供することは、ホスト上で走っているＷｉｎｄｏｗｓ（登録商標）ＯＳのある特定のバージョンが、例えば、更新の前後に提供されたファームウェア改訂識別子が異なっていた場合には、ＯＳが回復不能の誤りおよび「クラッシュ」を発生させることになるはずの状況などにおいて、ＯＳを再起動せずにファームウェア更新をまたいで走り続けることを可能にする。
【０１９８】
別の例として、デバイスがＳＡＴＡ互換ＳＳＤである場合には、ＳＡＴＡ  ＩＤＥＮＴＩＦＹコマンドに応答して、実際上デバイスは古いＩＤ情報を参照し、古いＩＤ情報からＳＳＰの対象となるパラメータを決定し（決定されるパラメータは古いファームウェアに対応するＳＳＰの対象となる）、ＳＳＰの対象となる古いパラメータを含むＶＰＤを返す。よって、ファームウェア更新の前後で同じＳＳＰの対象となるパラメータが提供される。
【０１９９】
流れは、新しいファームウェアに対応する情報を有するＩＤ情報の読み込みを可能にする電源サイクルまで完了しない。電源サイクルは、デバイスおよびホストを電源サイクルすることに対応し、したがって、ホスト上のＯＳは電源サイクルの一部として再起動される（ＯＳは、特に２０１〜２０６と関連付けられたいかなる処理に関しても再起動されていないことに留意されたい）。よって、流れは、電源サイクルが行われるときに、電源が切断され、再印加された（電源サイクル、２０６Ｐ）ことに応答して進み、デバイスは内部状態および／または機能を変更して、読み込みＩＤ情報の変更を可能にする（選択ＩＤ情報の保護を解除する、２０７）。次いでデバイスは新しいファームウェアを使用して起動する（デバイスが起動する、２０８）。起動後の読み込みＩＤ情報は（新しいファームウェアに対応する）新しいＩＤ情報である。というのは、読み込みＩＤ情報は変更可能になっている（２０７）からである。起動後、デバイスは、新しいファームウェアのバージョンに従い、新しいファームウェアに対応する新しいＩＤ情報に従って動作する（（新しい）ファームウェア（新しい）ＩＤ情報で動作する、２０９）。流れが２０９に留まっている間に、デバイスが（ＩＤ情報に依存する）ホストからの選択コマンドに応答するときに、デバイスは、新しいＩＤ情報に従って読み込まれたＩＤ情報を参照する。流れはここで完了し、ファームウェア更新の影響の少なくとも一部分の可視性の遅延は終了する。
【０２００】
概念的には、２０９の動作は２０１の動作と等価である（動作は相互に対応し合うファームウェアおよびＩＤ情報に従ったものである）。よって、さらに別のファームウェア更新が、任意選択で、あたかも２０９が２０１であったかのように行われ、逆もまた同様である。
【０２０１】
ある実施形態および／または使用シナリオでは、第１のファームウェア更新に続いて可視性の遅延を終了させるイベントが発生する前に第２のファームウェア更新がダウンロードされる。ファームウェア更新の影響の少なくとも一部分の可視性の遅延は、第２のファームウェア更新をまたいで延長される。概念的には、ＩＤ情報は、第２のファームウェア更新のダウンロードをまたいで、電源サイクルまでさらに保存される。
【０２０２】
より具体的に、図２に関して説明した一実施形態において、第１のファームウェア更新（第１の新しいファームウェア）を受け取っているが、まだ電源サイクルされておらず、よって、２０６と同様に動作しているデバイスを考える。次いでホストがデバイスに、（第２の新しい）ファームウェアを更新／ダウンロードするよう求めるコマンドを発行し、これに応答してデバイスは、２０２と同様に（第２の新しい）ファームウェアを獲得する。次いでデバイスは、内部状態および／または機能を変更して、２０３と同様に電源サイクルまで読み込みＩＤ情報の変更を妨げる。保護される読み込みＩＤ情報は、第１のファームウェア更新のダウンロードの前の読み込みＩＤ情報と同一である。アクティブ化および起動の後、デバイスは、２０６の動作と同様に、第２の新しいファームウェアに従い、（第１のファームウェア更新前の古いファームウェアに対応する）古いＩＤ情報に従って動作する。ある使用シナリオでは、１若しくはそれ以上のさらに別のファームウェア更新が電源サイクルの前に行われ、各々のファームウェア更新は、読み込みＩＤ情報がそれぞれのファームウェア更新をまたいで保存されるように処理される。
【０２０３】
ある実施形態および／または使用シナリオでは、動作２０２〜２０５の１若しくはそれ以上が組み合わされ、および／または図に示すのと異なる順序で行われる。例えば、２０２および２０３は組み合わされて、ファームウェアをダウンロードするよう求めるコマンドが、デバイスによって、電源サイクルまで読み込みＩＤ情報の変更を妨げることと共にファームウェアを更新／ダウンロードすることも含むよう解釈される。別の例として、２０３は、２０２の前に、ファームウェアをダウンロードするよう求めるコマンドに応答して行われる。ある実施形態では、２０４は、２０３に続いて、新しいファームウェアで動作するよう求めるコマンドを受け取らずに行われる。他の変形も企図されている。
【０２０４】
図３に、ホストから見たデバイスファームウェア更新の影響の管理の別の実施形態の選択された詳細の流れ図３００を示す。図３の実施形態はいくつかの点で図２と同様に動作する。図２の実施形態の動作についてのシステムコンテキストの例は、図３の実施形態に適用できる。図に示す流れは、ファームウェア更新の影響の少なくとも一部分の可視性の遅延を提供し、よって、ホストから見たデバイスファームウェア更新の影響の管理を可能にする。
【０２０５】
図に示すように、流れは、デバイスが、ファームウェアの「古い」バージョンに従い、古いファームウェアに対応する「古い」ＩＤ情報に従って動作すること（（古い）ファームウェア（古い）ＩＤ情報で動作する、３０１）から開始する。流れが３０１に留まっている間、動作は図２の２０１と同様であり、よって、デバイスが（ＩＤ情報に依存する）ホストからの選択コマンドに応答するときに、デバイスは、古いＩＤ情報に従って読み込まれたＩＤ情報を参照する。
【０２０６】
さらに図２と同様に、外部エージェントが、デバイスにファームウェア更新が行われるべきであると決定する。しかし、図２の実施形態とは異なり、図３の実施形態では、ファームウェア更新は、ホストがデバイスに、デバイスからホストにＩＤ情報を提供するよう求めるコマンド（ＩＤ読み取りコマンド、３０１Ｒ）を発行することから開始する。これに応答して、デバイスはホストに読み込みＩＤ情報を送る（選択ＩＤ情報を提供する、３０２）。ファームウェア更新は続いて、ホストがデバイスに、ファームウェアを更新／ダウンロードするよう求めるコマンド（ダウンロードコマンド、３０２Ｄ）を発行し、これに応答してデバイスは、任意選択でホストと連携して、新しいファームウェアを獲得する（（新しい）ファームウェアをダウンロードする、３０３）。
【０２０７】
ファームウェア更新は続いて、ホストがデバイスに、新しいファームウェアで動作するよう求めるコマンド（アクティブ化コマンド、３０３Ａ）を発行する。これに応答してデバイスは新しいファームウェアをアクティブ化し（（新しい）ファームウェアをアクティブ化する、３０４）、新しいファームウェアを使用して起動する（デバイスが起動する、３０５）。しかし、デバイスが完全に新しいファームウェアでの動作を開始する前に、ホストはデバイスに、ホストからＩＤ情報を受け取るよう求めるコマンド（ＩＤ書き込みコマンド、３０５Ｗ）を送る。これに応答してデバイスは、ホストからＩＤ情報を受け取り、受け取ったＩＤ情報を読み込みＩＤ情報として保存する（選択ＩＤ情報を受け取る、３０６）。ホストは、３０６で使用するために、デバイスが３０２で提供したのと同一のＩＤ情報を提供し、したがって、読み込みＩＤ情報は古いＩＤ情報に従ったものである。次いでデバイスは、完全に新しいファームウェアおよび古いＩＤ情報に従った動作を開始する（（新しい）ファームウェア（古い）ＩＤ情報で動作する、３０７）。流れが３０７に留まっている間に、デバイスが（ＩＤ情報に依存する）ホストからの選択コマンドに応答するときに、デバイスは、３０１にある間と同様に、古いＩＤ情報に従って読み込まれたＩＤ情報を参照する。
【０２０８】
したがって、図２と同様に、デバイスが（ＩＤ情報に依存する）選択コマンドに応答するときに、デバイスは実際上古いＩＤ情報を参照し、よって、ファームウェア更新の影響の少なくとも一部分の可視性を遅延させ、実際上、ファームウェア更新の前後で同一のＩＤ情報を参照する。例えば、ファームウェア更新の前後で同じファームウェア改訂識別子が提供され、（ホスト上で走っている）Ｗｉｎｄｏｗｓ（登録商標）ＯＳのある特定のバージョンが、例えば、更新の前後に提供されたファームウェア改訂識別子が異なっていた場合には、ＯＳが回復不能の誤りおよび「クラッシュ」を発生させることになるはずの状況などにおいて、ＯＳを再起動せずにファームウェア更新をまたいで走り続けることを可能にする。別の例としては、ファームウェア更新の前後で同じＳＳＰの対象となるパラメータが提供される。
【０２０９】
図２と同様に、流れは、新しいファームウェアに対応する情報を有するＩＤ情報の読み込みを可能にする電源サイクルまで完了しない。電源サイクルは、デバイスおよびホストを電源サイクルすることに対応し、したがって、ホスト上のＯＳは電源サイクルの一部として再起動される（ＯＳは、特に３０１〜３０７と関連付けられたいかなる処理に関しても再起動されていないことに留意されたい）。よって、流れは、電源サイクルが行われるときに、電源が切断され、再印加された（電源サイクル、３０７Ｐ）ことに応答して進み、デバイスは、３０６によって書き込まれた読み込みＩＤ情報のあらゆる影響を排除する（選択ＩＤ情報を廃棄する、３０８）。次いでデバイスは新しいファームウェアを使用して起動する（デバイスが起動する、３０９）。起動後の読み込みＩＤ情報は（新しいファームウェアに対応する）新しいＩＤ情報である。というのは、古いＩＤ情報を提供するよう求めるホストからのＩＤ書き込みコマンドが発行されず、読み込みＩＤ情報は起動時に新しいＩＤ情報と共に書き込まれるからである。起動後、デバイスは、新しいファームウェアのバージョンに従い、新しいファームウェアに対応する新しいＩＤ情報に従って動作する（（新しい）ファームウェア（新しい）ＩＤ情報で動作する、３１０）。流れが３１０に留まっている間に、デバイスが（ＩＤ情報に依存する）ホストからの選択コマンドに応答するときに、デバイスは、新しいＩＤ情報に従って読み込まれたＩＤ情報を参照する。流れはここで完了し、ファームウェア更新の影響の少なくとも一部分の可視性の遅延は終了する。
【０２１０】
概念的には、３１０の動作は３０１の動作と等価である（動作は相互に対応し合うファームウェアおよびＩＤ情報に従ったものである）。よって、さらに別のファームウェア更新が、任意選択で、あたかも３１０が３０１であったかのように行われ、以下同様である。
【０２１１】
図２と同様に、図３に関連したある実施形態および／または使用シナリオでは、第１のファームウェア更新に続いて可視性の遅延を終了させるイベントが発生する前に第２のファームウェア更新がダウンロードされる。ファームウェア更新の影響の少なくとも一部分の可視性の遅延は、第２のファームウェア更新をまたいで延長される。概念的には、ＩＤ情報には、第２のファームウェア更新後に、古いＩＤ情報が再度読み込まれる。
【０２１２】
より具体的に、図３に関して説明した一実施形態において、第１のファームウェア更新（第１の新しいファームウェア）を受け取っているが、まだ電源サイクルされておらず、よって、３０７と同様に動作しているデバイスを考える。次いでホストが、３０２と同様に、デバイスに読み込みＩＤ情報を提供するよう求めるコマンドを発行することによって（第２の新しい）ファームウェア更新を開始し、これに応答してデバイスは読み込みＩＤ情報を提供する。ファームウェア更新は続いて、（第２の新しい）ファームウェアのダウンロード、アクティブ化、および起動を行う。しかし、デバイスが完全に（第２の新しい）ファームウェアでの動作を開始する前に、ホストはデバイスに、（３０５Ｗと同様の）ＩＤ情報を受け取るよう求めるコマンドを送る。ホストは使用するために、デバイスが先に、読み込みＩＤ情報を提供するよう求めるホストからのコマンドに応答して提供したのと同一のＩＤ情報を提供する。デバイスは提供されたＩＤ情報を読み込みＩＤ情報として書き込み、したがって、読み込みＩＤ情報は古いＩＤ情報に従ったものである。次いでデバイスは、３０７の動作と同様に、完全に第２の新しいファームウェアおよび（第１のファームウェア更新の前の古いファームウェアに対応する）古いＩＤ情報に従った動作を開始する。ある使用シナリオでは、１若しくはそれ以上のさらに別のファームウェア更新が電源サイクルの前に行われ、各々のファームウェア更新は、読み込みＩＤ情報にそれぞれのファームウェア更新の後で古いＩＤ情報が再度読み込まれるように処理される。
【０２１３】
概念的には図３に示した実施形態の変形である一実施形態では、ＩＤ情報が、例えば、ＳＳＰの対象となる１若しくはそれ以上のパラメータなどに対応する。デバイスが完全に新しいファームウェアで動作する前に、デバイスから読み込みＩＤ情報を読み取らずに、ホストがデバイスに明示的にＩＤ情報を提供する。これに応答してデバイスは、提供されたＩＤ情報を読み込みＩＤ情報に書き込む。より具体的に、図３に関して説明した一実施形態において、３０１と同様に動作しているデバイスを考える。流れは、ホストがデバイスにダウンロードコマンドを提供したことに応答して３０１から３０３に直接進む。次いで流れは、３０４、３０５、および３０６に沿って進む。３０６に関しては、ホストは、３０２が省かれているため、デバイスからホストに提供されたＩＤ情報とは無関係のＩＤ情報を提供する。
【０２１４】
図２および図３に関して説明した前述の実施形態では、可視性の遅延を終了させるイベントは、デバイスが電源サイクルされることである（例えば、図２の２０６Ｐや図３の３０７Ｐなど）。他の実施形態も企図されており、例えばイベントは、デバイスがある電力モードから別の電力モードに遷移する（例えば、休眠モードまたはＰＨＹ電力管理モードを終了するなど）、デバイスがベンダ特有のコマンドを受け取る、デバイスがファームウェア更新の一部として特定のパラメータおよび／またはコードを受け取る、ならびにデバイスをホストに接続リンクのリセットの全部または任意の部分のいずれか１若しくはそれ以上である場合などである。
【０２１５】
ある実施形態および／または使用シナリオでは、動作３０２〜３０６の１若しくはそれ以上が組み合わされ、および／または図に示すのと異なる順序で行われる。例えば、３０２および３０３は組み合わされ、および／または図示と異なる順序で行われて、ファームウェアをダウンロードするよう求めるコマンドが、デバイスによって、デバイスが読み込みＩＤ情報をホストに送ることと共にファームウェアを更新／ダウンロードすることも含むように解釈され、デバイスからホストに読み込みＩＤ情報を提供するよう求めるコマンドは使用されない。別の例として、３０４は３０５と組み合わされ、例えばデバイスは、新しいファームウェアで動作するよう求めるコマンドに応答して（明示的なアクティブ化なしで）起動する。ある実施形態および／または使用シナリオでは、３０４は、３０３に続いて、新しいファームウェアで動作するよう求めるコマンドを受け取らずに行われる。ある実施形態および／または使用シナリオでは、３０８は省かれ、３０９は、例えば、前に記憶されたＩＤ情報を上書きすることによってＩＤ情報を読み込む。他の変形も企図されている。
【０２１６】
図２および／または図３に関連した様々な実施形態において、デバイスは任意選択で（例えば、１若しくはそれ以上のモードビット、ベンダ特有のコマンド、ＳＳＤコントローラによって検出されたファームウェアイベント、またはこれらの任意の組み合わせの関数として）ファームウェアのダウンロード、アクティブ化、および／または電源サイクルに応答した起動のうちのいずれか１若しくはそれ以上を行う。例えば、第１のベンダ特有のコマンドの受け取りの関数として、デバイスは、現在はまだ実行していない新しくダウンロードされたファームウェアをアクティブ化し、起動するのではなく、現在の実行中のファームウェアを使用して起動する。さらに、第２のベンダ特有のコマンドの受け取りの関数として、デバイスは、新しくダウンロードされたファームウェアを使用して起動する。
【０２１７】
図２および／または図３に関連した様々な実施形態において、デバイスは、ファームウェア更新の後、電源サイクルの前に、ホストに新しいＩＤ情報（新しいファームウェアに対応するＩＤ情報など）を選択的に提供することができるようになっている。（ＩＤ情報に依存する）ホストからの選択コマンドは、２つのコマンドグループを含む。選択コマンドの第１のグループは、デバイスにより、読み込みＩＤ情報に従って、よって、ファームウェア更新の後で、電源サイクルの前に処理され、第１のコマンドグループは、古いＩＤ情報に従ったＩＤ情報を受け取る。選択コマンドの第１のグループは、デバイスが新しいＩＤ情報で応答することになった場合に、ある使用シナリオでは、ＯＳが回復不能の誤りを発生させることになるはずのホストからのコマンド、例えば、これに応答してＩｄｅｎｔｉｆｙ  Ｆｒａｍｅを受け取るコマンドなどに対応する。選択コマンドの第２のグループは、デバイスにより、ファームウェア更新後に電源サイクルが行われたかどうかにかかわらず、現在実行中のファームウェアに対応するＩＤ情報に従って処理される。例えば、２０６（図２）または３０７（図３）で動作している間に、第２のグループのコマンドに応答して、デバイスはホストに（新しいファームウェアに対応する）新しいＩＤ情報を提供する。新しい識別情報は、新しいファームウェアのダウンロードと起動との間に電源サイクルが行われたかどうかにかかわらず、例えば、デバイスが新しいファームウェアで起動するときに新しい識別情報が書き込まれた、例えば、影ＶＰＤ領域および／またはログから提供される。
【０２１８】
図２および／または図３に関連した様々な実施形態において、ファームウェア更新の影響の少なくとも一部分の可視性の遅延は、１若しくはそれ以上のモードによって有効化（無効化）される。例えば、「遅延」モードでは、第１のモード有効化実施形態の動作は図２に従ったものである。「非遅延」モードでは、第１のモード有効化実施形態の動作は、読み込みＩＤ情報の変更が妨げられない（例えば、２０３がスキップされ、流れが、新しいファームウェアで動作するよう求めるコマンドに応答して２０２から２０４に進む）ことを除いては、図２に従ったものである。その場合２０６の動作は新しいファームウェア、および新しいファームウェアに対応する読み込みＩＤ情報に従ったものである。別の例として、「遅延」モードでは、第２のモード有効化実施形態の動作は図３に従ったものである。「非遅延」モードでは、第２のモード有効化実施形態の動作は、ＩＤ情報を受け取るよう求めるホストからのコマンドが発行されず（例えば、３０６がスキップされ、流れが３０５から３０７に進み）、読み込みＩＤ情報が起動によって書き込まれたままになることを除いて、図３に従ったものである。その場合３０７の動作は新しいファームウェア、および新しいファームウェアに対応する読み込みＩＤ情報に従ったものである。
【０２１９】
図２および／または図３に関連した様々な実施形態においては、最新のファームウェア更新および／または１若しくはそれ以上の前のファームウェア更新の結果（例えば、更新されたファームウェアの起動／実行によって生成された（１若しくはそれ以上の）ファームウェアイメージおよび／またはＩＤ情報など）が記憶される。前のファームウェア更新の結果を記憶することは、例えば、前のファームウェアイメージから起動することなどによる、ファームウェア更新からの「ロールバック」を可能にする。前のファームウェア更新の結果を記憶することは、デバイスが（ベンダ特有の）ホストコマンドに応答して（例えば前のファームウェア更新に関連した）前のＩＤ情報を提供することを可能にする。最新のファームウェア更新の結果を記憶することは、デバイスが（ベンダ特有の）ホストコマンドに応答して、通常は可視性の遅延の対象となるＩＤ情報を提供することを可能にする。
【０２２０】
図２および図３に関連したデバイスおよびホストの例は、それぞれ、図１Ｂおよび図１Ｃの、ＳＳＤ１０１およびホスト１０２である。図２および図３に関連したファームウェアについての記憶の例は、図１Ｂおよび図１Ｃのファームウェア記憶１０６である。図２および図３に関連したＩＤ情報の全部または任意の部分についての記憶の例は、図１Ｂおよび図１Ｃの選択ＩＤ情報記憶１０７の全部または任意の部分である。「古い」ファームウェアの例には、工場出荷時インストール済みファームウェア、ＯＥＭインストール済みファームウェア、および（例えば前回のダウンロードからの）ユーザインストール済みファームウェアが含まれる。
【０２２１】
様々な実施形態において、図２および／または図３で説明した動作および／または機能の全部または任意の部分は、例えば、１若しくはそれ以上の状態機械によって実装される。状態機械の実装例には、ハードウェア（例えば、論理ゲートおよび／または回路、専用状態機械回路、配線式制御回路など）、ソフトウェア（例えばファームウェアやマイクロコードなど）、あるいはハードウェアとソフトウェアの組み合わせが含まれる。ある実施形態では、状態機械の１若しくはそれ以上は、少なくとも一部は、更新の対象となるファームウェアによって実装される。様々な実施形態において、状態機械の１若しくはそれ以上は、一部が図１ＡのＳＳＤコントローラ１００によって、一部がＣＰＵコア１７２によって実行されるファームウェアによって、および／または一部が図１Ｂおよび図１Ｃのファームウェア記憶１０６に記憶されたファームウェアによって実装される。
【０２２２】
様々な実施形態において、図２および／または図３で説明した動作および／または機能の全部または任意の部分は、例えば、図１Ａの識別管理１８２によって、またはこれに従って実装される。ある実施形態では、（図２の２０６Ｐおよび図３の３０７Ｐに関連したような）電源の切断および印加は、デバイスのコントローラの回路に含まれる電源オンリセット回路、例えば、図１ＡのＳＳＤコントローラ１００に含まれる回路などによって決定される。
【０２２３】
様々な実施形態において、図２のおよび／または図３で説明したＩＤ情報に関連して行われる１若しくはそれ以上の動作（例えば、保護する、保護を解除する、提供する、受け取る、読み取る、書き込むなど）は、ファームウェア記憶１０６の全部または任意の部分にアクセスすることを含む。例えば、ある実施形態では、図２の２０３および２０７は、ファームウェア記憶１０６の少なくとも一部分に書き込むこと（例えば、ＩＤ情報が変更されないよう保護されていることを指示するフラグを設定し、クリアすることなど）を含む。別の例として、ある実施形態では、図３の３０２および３０６は、それぞれ、ファームウェア記憶１０６の少なくとも一部分を読み取ることおよび書き込むことを含む。
【０２２４】
様々な実施形態において、ＨＢＡはホストの要素（１若しくはそれ以上のプロセッサおよび１若しくはそれ以上のメモリなど）を、デバイス、例えばＳＡＴＡドライブといった記憶デバイスなどに接続する。ＨＢＡのプロセッサおよび／またはメモリへの接続は、少なくとも一部は、１若しくはそれ以上のデバイス通信インターフェース、バス、および／またはチャネル（ＰＣＩｅインターフェースなど）を介したものである。プロセッサのうちのあるものは、デバイスと通信するＯＳおよび／またはドライバソフトウェアを実行する。ある実施形態では、ホストの要素とＨＢＡとの間のトランスポートはＡＨＣＩに準拠し、Ｔ１３準拠ＡＴＡコマンドがＨＢＡを介してデバイスのＳＳＤのＳＡＴＡまたはＰＣＩｅインターフェースに渡される。別の実施形態では、ホストの要素とＨＢＡとの間のトランスポートはＮＶＭエクスプレスに準拠し、Ｔ１３準拠ＡＴＡコマンドと類似した少なくとも一部の属性を有するコマンドがＨＢＡを介してデバイスのＳＳＤのＰＣＩｅインターフェースに渡される。ある実施形態ではＨＢＡはホストに含まれ、別の実施形態ではＨＢＡはデバイスに含まれる。ある実施形態ではＨＢＡは省かれ、デバイスは（明示的なＨＢＡなしで）１若しくはそれ以上のデバイス通信インターフェース、バス、および／またはチャネル（ＰＣＩｅインターフェースなど）に接続される。
【０２２５】
例えば、図１Ｂのコンテキストでは、ホスト１０２は、ホスト上で走っているソフトウェア（例えばＯＳ１０５および／または関連付けられたドライバなど）と（ホストインターフェース１１１に含まれるＳＡＴＡ互換ホストインターフェースを有する）ＳＳＤ１０１との間の通信を可能にするＨＢＡを含む。通信は、ソフトウェアからＳＳＤへのコマンドの受け渡しを含む。コマンドのトランスポートはＡＨＣＩを介したものであり、Ｔ１３準拠ＡＴＡコマンドがＳＳＤのＳＡＴＡインターフェースに提供される。よって、図２の２０１Ｄおよび２０３Ａ、ならびに図３の３０１Ｒ、３０２Ｄ、３０３Ａ、および３０５Ｗは、ＡＨＣＩトランスポートによって受け渡される。
【０２２６】
別の例として、図１Ｃのコンテキストでは、ホスト１０２は、中間コントローラ１０３との通信を可能にするチップセットを含み、中間インターフェース１０４および外部インターフェース１１０はＰＣＩｅ互換である（例えば、ＳＳＤ１０１はホストインターフェース１１１に含まれるＰＣＩｅインターフェースを有する）。チップセットおよび中間コントローラ１０３は、ホストのＯＳおよび／またはドライバソフトウェアとＳＳＤ１０１との間の、コマンドの受け渡しを含む通信を可能にする。コマンドのトランスポートはＮＶＭエクスプレスを介したものであり、Ｔ１３準拠ＡＴＡコマンドに類似した少なくともいくつかの属性を有するコマンドがＳＳＤのＰＣＩｅインターフェースに提供される。よって、図２の２０１Ｄおよび２０３Ａ、ならびに図３の３０１Ｒ、３０２Ｄ、３０３Ａ、および３０５Ｗは、ＮＶＭエクスプレストランスポートによって受け渡される。
【０２２７】
以上、コンピューティングホストから見たファームウェア更新の影響を管理することができるようにした、コンピューティングホストに接続された記憶デバイスの実施形態など、様々な実施形態を説明した。記憶デバイスおよびコンピューティングホストに適用可能な技法は、一般に、コンピューティングホストから見たファームウェア更新の影響を管理することができるようになっている、ホストに接続されたデバイスの様々な実施形態に適用可能である。様々な実施形態は、記憶デバイスの例としてＳＳＤを用いて説明されている。ＳＳＤベースの記憶デバイスに適用可能な技法は、ＨＤＤベースの記憶デバイス、ならびに他の不揮発性記憶技術に基づく記憶デバイスの様々な実施形態にも適用可能である。
【０２２８】
実施技法の例
一部の実施形態では、フラッシュメモリ、コンピューティングホスト・フラッシュ・メモリ・コントローラなどを有するＳＳＤコントローラ（例えばホストから見たデバイスファームウェア更新の影響の管理を提供するＳＳＤ）、および／またはＳＳＤコントローラ（例えば図１ＡのＳＳＤコントローラ１００）、ならびにプロセッサ、マイクロプロセッサ、システム・オン・チップ、特定用途向け集積回路、ハードウェアアクセラレータ、または前述の動作の全部または部分を提供する他の回路を実装するシステムによって行われる動作の全部またはいずれかの部分の様々な組み合わせが、コンピュータシステムによる処理と適合する仕様によって指定される。仕様は、様々な記述、例えば、ハードウェア記述言語、回路記述、ネットリスト記述、マスク記述、またはレイアウト記述に従ったものである。記述の例には、Ｖｅｒｉｌｏｇ、ＶＨＤＬ、ＳＰＩＣＥ、ＳＰＩＣＥの変形、例えば、ＰＳｐｉｃｅ、ＩＢＩＳ、ＬＥＦ、ＤＥＦ、ＧＤＳ−ＩＩ、ＯＡＳＩＳ、または他の記述が含まれる。様々な実施形態では、処理は、１つ若しくはそれ以上の集積回路上に含めるのに適する論理および／または回路を生成し、検証し、または指定するための解釈、コンパイル、シミュレーション、および合成の任意の組み合わせを含む。各集積回路は、様々な実施形態によれば、様々な技法に従って設計することができ、および／または製造することができる。技法には、プログラマブルな技法（例えば、フィールド若しくはマスク・プログラマブル・ゲート・アレイ集積回路）、セミカスタムの技法（例えば、全部若しくは一部がセルベースの集積回路）、およびフルカスタムの技法（例えば、実質的に専門化された集積回路）、それらの任意の組み合わせ、または集積回路の設計および／若しくは製造と適合する任意の他の技法が含まれる。
【０２２９】
一部の実施形態では、命令のセットを記憶しているコンピュータ可読媒体によって記述される動作の全部または部分の様々な組み合わせが、１つ若しくはそれ以上のプログラム命令の実行および／若しくは解釈によって、１つ若しくはそれ以上のソースおよび／若しくはスクリプト言語命令文の解釈および／若しくはコンパイルによって、または、プログラミングおよび／若しくはスクリプティング言語命令文で表現された情報をコンパイルし、変換し、および／または解釈することによって生成されるバイナリ命令の実行によって実行される。命令文は任意の標準のプログラミングまたはスクリプティング言語（例えば、Ｃ、Ｃ＋＋、Ｆｏｒｔｒａｎ、Ｐａｓｃａｌ、Ａｄａ、Ｊａｖａ（登録商標）、ＶＢｓｃｒｉｐｔ、Ｓｈｅｌｌ）と適合する。プログラム命令、言語命令文、またはバイナリ命令のうちの１つ若しくはそれ以上が、任意選択で、１つ若しくはそれ以上のコンピュータ可読記憶媒体要素上に記憶される。様々な実施形態では、プログラム命令の一部、全部、または様々な部分が、１つ若しくはそれ以上の関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはそれらの部分として実現される。
【０２３０】
結論
ある特定の選択が、説明において、テキストおよび図面を作成するに際の単なる便宜のためになされており、別の指示がない限り、それらの選択は、それ自体で、前述の実施形態の構造または動作に関する追加情報を伝えるものと解釈すべきではない。選択の例には、図の符番に使用される呼称の特定の編成または割り当て、および実施形態の特徴および要素を識別し、参照するのに使用される要素識別子（コールアウトや数値識別子など）の特定の編成または割り当てが含まれる。
【０２３１】
「ｉｎｃｌｕｄｅｓ」または「ｉｎｃｌｕｄｉｎｇ」という語は、開放型範囲の論理集合を記述する抽象概念として解釈されるべきことが明確に意図されており、後に続けて「ｗｉｔｈｉｎ」という語が明示されない限り物理的包含を伝えるためのものではない。
【０２３２】
前述の実施形態は、説明および理解の明確さのためにある程度詳細に説明されているが、本発明は提示した詳細だけに限定されるものではない。本発明の多くの実施形態がある。開示の実施形態は例示であり、限定ではない。
【０２３３】
説明と整合性を有する、構成、配置、および使用における多くの変形が可能であり、それらの変形は、発行される特許の特許請求の範囲内にあることが理解されるであろう。例えば、相互接続および機能ユニットのビット幅、クロック速度、および使用される技術の種類は、各構成要素ブロックにおける様々な実施形態に従って変わりうる。相互接続および論理に与えられた名称は、単なる例であり、説明した概念を限定するものと解釈すべきではない。フローチャートおよび流れ図のプロセス、動作、および機能要素の順序および配置は、様々な実施形態に従って変わりうる。また、特に別に指定しない限り、指定される値範囲、使用される最大値および最小値、または他の特定の仕様（例えば、フラッシュメモリ技術の種類、レジスタおよびバッファ内のエントリまたは段の数）は、単に前述の実施形態のものにすぎず、実施技術の改善および変更を追跡することが見込まれるものであり、限定として解釈すべきではない。
【０２３４】
当分野で公知の機能的に等価の技法を、様々なコンポーネント、サブシステム、動作、関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはそれらの部分を実施するのに、前述の技法の代わりに用いることができる。また、実施形態の多くの機能的態様を、より高速な処理（以前にハードウェアにあった機能のソフトウェアへの移行を円滑化する）およびより高い集積密度（以前にソフトウェアにあった機能のハードウェアへの移行を円滑化する）の実施形態に依存する設計制約条件および技術傾向に応じて、選択的に、ハードウェア（専用の回路など）で、またはソフトウェアで（例えば、プログラムされたコントローラ若しくはプロセッサのある方式によって）実現できることも理解される。様々な実施形態の具体的な変形は、これに限定されるものではないが、分割の違い、フォームファクタおよび構成の違い、異なるオペレーティングシステムおよび他のシステムソフトウェアの使用、異なるインターフェース規格、ネットワークプロトコル、または通信リンクの使用、本明細書で説明した概念を、特定の用途の固有の技術的業務的制約条件に従って実施するときに予期されるべき他の変形を含む。
【０２３５】
各実施形態は、前述の各実施形態の多くの態様の最小限の実施に必要とされるものを大きく超えた詳細および環境的コンテキストと共に説明されている。一部の実施形態は、残りの要素間での基本的協働を変更せずに開示の構成要素または機能を割愛することを当業者は理解するであろう。よって、開示の詳細の多くが前述の実施形態の様々な態様を実施するのに必要ではないことが理解される。残りの要素が先行技術と区別できる範囲内で、割愛される構成要素および特徴は本明細書で説明した概念を限定するものではない。
【０２３６】
設計におけるすべてのそのような変形は、前述の実施形態によって伝えられる教示に対する実質的な変更ではない。また、本明細書で説明した実施形態は、他のコンピューティング用途およびネットワーキング用途に幅広い適用性を有し、前述の実施形態の特定の用途または産業だけに限定されるものではないことも理解される。よって本発明は、発行される特許の特許請求の範囲内に包含されるあらゆる可能な改変形態および変形形態を含むものと解釈すべきである。
【図１Ａ】
2014519662.tif 000007
【図１Ｂ】
2014519662.tif 000008
【図１Ｃ】
2014519662.tif 000009
【図２】
2014519662.tif 000010
【図３】
2014519662.tif 000011
【国際調査報告】
2014519662.tif 000012
2014519662.tif 000013