(57)【特許請求の範囲】
【請求項１】
電子装置のエラーを取り扱う方法において、該電子装置が、
ＮＡＮＤフラッシュメモリである不揮発性メモリ（ＮＶＭ）から電子装置をブーティングし、
データがＮＶＭのメモリ位置からローディングされている間にＮＶＭにエラーが発生したかどうか決定し、
前記メモリ位置にエラーが発生したという決定に応答して、少なくとも１つのエラー通知を揮発性メモリの一部分に記憶し、
電子装置がブーティングを終了したときに少なくとも１つのエラー通知を使用してエラーを修正する、
ことを含み、
前記修正するステップが、
エラーが致命的エラーであるか非致命的エラーであるかを決定することを含み、
前記修正するステップが、
エラーが非致命的エラーであることを決定した時に、
エラーに関連したＮＶＭの少なくとも１つのブロックを識別し、
その少なくとも１つのブロックに記憶されたデータをＮＶＭの別のブロックに書き込み、
エラーが致命的エラーであることを決定した時に、
エラーに関連したＮＶＭの少なくとも１つのブロックを識別し、
その少なくとも１つのブロックを撤退させ、
電子装置の回復を強制し、
電子装置が工場にある間に、或いは電子装置が使用されるときのソフトウェアーダウンロード中に、電子装置のファームウェアを更新することを含む、方法。
【請求項２】
ＮＶＭにエラーが発生しなかったという決定に応答して、ＮＶＭからの電子装置のブーティングを継続することを更に含む、請求項１に記載の方法。
【請求項３】
前記揮発性メモリの一部分は、メモリバッファである、請求項１に記載の方法。
【請求項４】
前記揮発性メモリの一部分は、予約されたランダムアクセスメモリエリアである、請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリからの装置ブートアップ中にエラーを取り扱うシステム及び方法に係る。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリや他の形式の不揮発性メモリ（ＮＶＭ）は、通常、大量記憶のために電子装置に使用されている。例えば、ポータブルメディアプレーヤのような消費者向け電子装置は、多くの場合、音楽、ビデオ、及び他のメディア番組を記憶するためにＮＡＮＤフラッシュメモリを備えている。
【０００３】
電子装置がパワーアップ又は再ブートされるときに、電子装置のＮＶＭからオペレーティングシステムをブートアップすることができる。オペレーティングシステムのブートアップは、多数の段階で処理することができる。例えば、電子装置は、ＮＶＭ又はマスクリードオンリメモリ（ＲＯＭ）から揮発性メモリへブートローダーを最初にロードするように構成できる。次いで、電子装置は、そのブートローダーを使用して、オペレーティングシステム及びそれに関連したファームウェアをＮＶＭから揮発性メモリへロードすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ある状況において、装置がブートアップされている間にＮＶＭにエラーが生じることがある。このようなエラーは、それが修正されないままであると、データロスを引き起こしたり装置を不作動にしたりする。
【課題を解決するための手段】
【０００５】
ＮＡＮＤフラッシュメモリのような不揮発性メモリ（ＮＶＭ）からの装置ブートアップ中にエラーを取り扱うためのシステム及び方法が提供される。電子装置は、装置ブートアップ中に装置がＮＶＭからのデータを読み取ることしかできないときに不揮発性メモリのエラーログを使用してエラー通知を追跡することができる。例えば、電子装置がＮＶＭからブートアップされている間に、装置のＮＶＭインターフェイスがエラーを検出し、１つ以上のエラー通知をエラーログに記憶することができる。次いで、装置がブーティングを終了し、装置への書き込みが可能な状態に到達すると、装置のＮＶＭドライバは、エラーログを使用して、以前に検出されたエラーを修正するように構成することができる。
【０００６】
本発明の前記及び他の態様及び効果は、全体を通じて同じ部分が同じ参照文字で示された添付図面を参照して以下の詳細な説明を考察したときに明らかとなろう。
【図面の簡単な説明】
【０００７】
【図１】本発明の種々の実施形態により構成される電子装置を例示するブロック図である。
【図２】本発明の種々の実施形態による電子装置ブートアップを示す図である。
【図３】本発明の種々の実施形態により装置ブートアップ中にエラーを取り扱うためのプロセスを例示するフローチャートである。
【発明を実施するための形態】
【０００８】
不揮発性メモリ（ＮＶＭ）からの装置ブートアップ中にエラーを取り扱うシステム及び方法が提供される。ファームウェアの故障を防止しそしてデータロスを回避するために、電子装置のＮＶＭインターフェイスは、装置がブートアップされている間にエラーを検出してエラーログを不揮発性メモリに維持するよう構成することができる。この段階中に、電子装置は、リードオンリコンテクストで動作する。ここで使用する「リードオンリコンテクスト(read-only context)」とは、電子装置がＮＶＭへの書き込みを遂行することができず、従って、ＮＶＭにおいて検出されたエラーを修正もできない動作状態を指す。
【０００９】
次いで、電子装置が書き込み可能なコンテクストに入ると（例えば、装置ブートアップが終了すると）、電子装置のＮＶＭドライバは、エラーログを使用して、その検出されたエラーを修正するように構成することができる。ここで使用する「書き込み可能なコンテクスト(writeable context)」とは、電子装置の１つ以上のコンポーネントがＮＶＭへの書き込み動作を遂行できる動作状態を指す。
【００１０】
従って、装置が書き込み可能なコンテクストに入ると、ＮＶＭドライバは、より信頼性の高いブロックへデータを移動し、及び／又は欠陥に近いブロックを撤退させることができる。従って、装置に記憶されたファームウェアは、長期間にわたり更新を必要とせずに使用することができると共に、致命的エラーの発生を減少することもできる。
【００１１】
図１は、電子装置１００のブロック図である。ある実施形態において、電子装置１００は、ポータブルメディアプレーヤ（例えば、カリフォルニア州クパチーノのアップル社から入手できるｉＰｏｄTM）、セルラー電話（例えば、アップル社から入手できるｉＰｈｏｎｅTM）、ポケットサイズパーソナルコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、デスクトップコンピュータ、ラップトップコンピュータ、及び他の適当な形式の電子装置であり、又はそれらを含む。
【００１２】
電子装置１００は、システム・オン・ア・チップ（ＳｏＣ）１１０と、不揮発性メモリ（ＮＶＭ）１２０とを備えている。ＮＶＭ１２０は、フローティングゲート又は電荷捕獲技術に基づくＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、消去可能なプログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、強誘電体ＲＡＭ（ＦＲＡＭ）、磁気抵抗ＲＡＭ（ＭＲＡＭ）、又はその組み合わせを含む。
【００１３】
ＮＶＭ１２０は、消去可能な最小単位である「ブロック」へ編成でき、更に、プログラム又は読み取り可能な最小単位である「ページ」へ編成することもできる。ある実施形態では、ＮＶＭ１２０は、複数の集積回路を含むことができ、各集積回路は、複数のブロックを有する。対応する集積回路からのブロック（例えば、同じ位置又はブロック番号を有するブロック）は、「スーパーブロック」を形成する。ＮＶＭ１２０の各メモリ位置（例えば、ページ又はブロック）は、物理的アドレス（例えば、物理的ページアドレス又は物理的ブロックアドレス）を使用して参照することができる。
【００１４】
システム・オン・ア・チップ１１０は、ＳｏＣ制御回路１１２と、メモリ１１４と、ＮＶＭインターフェイス１１６とを備えている。ＳｏＣ制御回路１１２は、ＳｏＣ１１０の一般的動作及び機能を制御すると共に、ＳｏＣ１１０又は装置１００の他のコンポーネントを制御する。例えば、ユーザ入力、及び／又はアプリケーション又はオペレーティングシステムのインストラクションに応答して、ＳｏＣ制御回路１１２は、ＮＶＭ１２０からデータを得るか又はそこにデータを記憶するためにＮＶＭインターフェイス１１６に読み取り又は書き込みコマンドを発生することができる。明瞭化のため、ＳｏＣ制御回路１１２が記憶又は検索のために要求するデータは、「ユーザデータ」と称されるが、データは、ユーザ又はユーザアプリケーションに直接関連したものでなくてもよい。むしろ、ユーザデータは、（例えば、アプリケーション又はオペレーティングシステムを経て）ＳｏＣ制御回路１１２により発生され又は得られるデジタル情報の適当なシーケンスでよい。
【００１５】
ＳｏＣ制御回路１１２は、ハードウェア、ソフトウェア及びファームウェアの組み合わせ、並びに電子装置１００の機能を駆動するように働くコンポーネント、回路又はロジックを含む。例えば、ＳｏＣ制御回路１１２は、ＮＶＭ１２０又はメモリ１１４に記憶されたソフトウェア／ファームウェアの制御のもとで動作する１つ以上のプロセッサを備えている。ＳｏＣ制御回路１１２は、アプリケーション、オペレーティングシステム、ＮＶＭドライバ１１７、又はメモリ１１４にロードされたブートローダーのようなプログラムの制御のもとで動作することができる。
【００１６】
メモリ１１４は、適当な形式の揮発性メモリ、例えば、ランダムアクセスメモリ（ＲＡＭ）（例えば、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ）ＲＡＭ）、キャッシュメモリ、リードオンリメモリ（ＲＯＭ）、又はその組み合わせを含む。又、メモリ１１４は、不揮発性メモリ１２０へプログラムするか又はそこから読み出すためにユーザデータを一時的に記憶することのできるデータソースを含む。ある実施形態では、メモリ１１４は、ＳｏＣ制御回路１１２の一部分として具現化されるプロセッサのためのメインメモリとして働いてもよい。更に、メモリ１１４の１つ以上の部分を使用して、装置のブートアップ中に使用されるエラーログ、オペレーティングシステム、並びに関連ファームウェア及びカーネルを記憶することもできる。
【００１７】
ＮＶＭインターフェイス１１６は、ＮＶＭ１２０と、ＳｏＣ制御回路１１２により実行されるオペレーティングシステム、アプリケーション、ブートローダー、或いは他の非メモリ特有又は非ベンダー特有プログラムとの間のインターフェイス又はドライバとして働くように構成されたハードウェア、ソフトウェア及び／又はファームウェアの適当な組み合わせを含むことができる。ＮＶＭインターフェイス１１６に含まれるソフトウェアモジュールについては、それに対応するプログラムコードがＮＶＭ１２０又はメモリ１１４に記憶される。
【００１８】
ＮＶＭインターフェイス１１６は、ＳｏＣ制御回路１１２がＮＶＭ１２０にアクセスして、ＮＶＭ１２０のメモリ位置（例えば、ページ、ブロック、スーパーブロック、集積回路）及びそこに記憶されたデータ（例えば、ユーザデータ）を管理できるようにする種々の機能を遂行することができる。例えば、ＮＶＭインターフェイス１１６は、ＳｏＣ制御回路１１２からの読み取り又は書き込みコマンドを解釈し、ウェアレベリングを遂行し、そしてＮＶＭ１２０のバスプロトコルに適合する読み取り及びプログラムインストラクションを発生することができる。
【００１９】
ＮＶＭインターフェイス１１６は、ＮＶＭドライバ１１７及びバスコントローラ１１８を備えている。ＮＶＭドライバ１１７は、プログラムからのメモリアクセスコマンドを解釈するためのＮＶＭ特有の又はベンダー特有のソフトウェア及び／又はファームウェアを含む。ある実施形態では、ＮＶＭドライバ１１７は、ＮＶＭ１２０の異なる部分へのアクセスを与える複数のソフトウェアモジュール又はドライバを含む。例えば、ＮＶＭドライバ１１７は、ファイルシステムを通してＮＶＭ１２０のメモリ位置の少なくとも幾つかへのアクセスを与えるためのブロック装置ドライバを含む。更に、ＮＶＭドライバ１１７は、ＮＶＭ１２０内の他のメモリ位置に記憶された不揮発性プレブート情報（例えば、ブートアップ中に電子装置１００により使用される情報）へのアクセスを与えるために個別の不揮発性プレブート記憶ドライバ（例えば、マスクＲＯＭ）を含むこともできる。
【００２０】
ＮＶＭドライバ１１７は、更に、例えば、オペレーティングシステムとＮＶＭ１２０との間に積層ソフトウェアインターフェイスを与えるための種々のソフトウェアモジュール又はドライバを含むこともできる。ＮＶＭドライバ１１７は、ＮＶＭ１２０とインターフェイスして、ＮＶＭドライバ１１７、オペレーティングシステム、及びアプリケーションの上位レベルソフトウェアモジュールからＮＶＭ１２０の細部を取り去る下位レベルソフトウェアモジュールを備えている。この下位レベルソフトウェアモジュールは、例えば、ＮＶＭ１２０のブロックを、上位レベルソフトウェアモジュールにより使用するためのスーパーブロックへとグループ化するドライバを含むことができる。下位レベルソフトウェアモジュールは、不揮発性プレブート記憶ドライバも含む。
【００２１】
ある実施形態では、ＮＶＭドライバ１１７は、それがＮＶＭ１２０へリードオンリアクセスを与えることのできるリードオンリコンテクストで構成される。リードオンリコンテクストは、より小さなソフトウェアモジュール及びより速い速度を許す。従って、このコンテクストは、ＮＶＭ１２０への書き込みが一般的に不要な装置ブートアップ中に使用される。他の実施形態では、ＮＶＭドライバ１１７は、それがＮＶＭ１２０への１つ以上の書き込みを遂行するようにバスコントローラ１１８に指令することのできる書き込み可能なコンテクストで構成される。特に、書き込み可能なコンテクストで動作する間に、ＮＶＭドライバ１１７は、電子装置１００の書き込み可能なコンテクストについてコンパイルされたソフトウェアモジュールを実行することができる。
【００２２】
バスコントローラ１１８は、ＮＶＭドライバ１１７が、ＮＶＭ１２０のバス仕様（例えば、データレート）を使用してＮＶＭ１２０にアクセスできるようにする適当なハードウェアコンポーネントを含む。図１に示されていないある実施形態では、ＮＶＭドライバ１１７及び／又はバスコントローラ１１８は、フラッシュメモリドライバのように、ＮＶＭ１２０のための個別のメモリコントローラ（例えば、フラッシュコントローラ）で具現化されてもよい。これらの実施形態では、ＳｏＣ１１０又はＳｏＣ制御回路１１２は、ホストコントローラとして動作することができる。例えば、ホストコントローラとして、ＳｏＣ１１０は、ＮＶＭ１２０へ読み取り及び書き込み要求を発生することができる。
【００２３】
ＮＶＭインターフェイス１１６及びＳｏＣ制御回路１１２は、個別のモジュールとして示されているが、これは、本発明の実施形態の説明を簡単化するためのものに過ぎない。これらのモジュールは、ハードウェアコンポーネント、ソフトウェアコンポーネント、又はその両方を共有する。例えば、ＳｏＣ制御回路１１２は、ＮＶＭインターフェイス１１６のためのソフトウェアベースのメモリドライバを実行することができる。
【００２４】
電子装置１００のパワーアップ又は再ブート時に、ＮＶＭ１２０からメモリ１１４へブートローダーがロードされる。次いで、電子装置１００は、ブートローダーを使用して、ＮＶＭ１２０からメモリ１１４へデータ（例えば、オペレーティングシステム並びに関連ファームウェア及びカーネル）をロードすることができる。
【００２５】
ブートローダーが、ＮＶＭ１２０の１つ以上のブロックに記憶されたデータを読み取ってメモリ１１４へロードする間に、これらブロックの幾つかにおいてエラーが検出されることがある。例えば、あるエラーは、非致命的エラーであり（例えば、１つ以上のリフレッシュ通知の発生により指示される）、一方、他のエラーは、致命的エラーである（例えば、１つ以上の修正不能なエラー修正コード（ｕＥＣＣ）通知により指示される）。
【００２６】
これらエラーが装置１００により修正されることが、多くの要因によって妨げられる。その１つの要因は、データがブートローダーにより読み取られるときに、エラーを修正できないリードオンリコンテクストで装置１００が動作することである。上述したように、「リードオンリコンテクスト」とは、電子装置がＮＶＭへの書き込みを遂行することができず、従って、ＮＶＭにおいて検出されたエラーを修正できない動作状態を指す。
【００２７】
別の要因は、検出されるエラーの幾つかが過渡的なことである。例えば、装置ブートアップ中に、電子装置１００は、特定のページ又はブロックにおいてリフレッシュ動作を行う必要があることを示す１つ以上のリフレッシュ通知を受け取る。しかしながら、そのページ又はブロックのその後の読み取り時に、装置１００は、付加的なリフレッシュ通知を受け取らないことがある。それでも、そのページ又はブロックにおいてリフレッシュ動作を遂行しなければならない。
【００２８】
更に、ロードされるデータは、ブートローダーでしか読み取られないので、装置１００は、それがブートアップを終了すると、それらエラーを再検出することができない。従って、それらエラーは、装置のブートアップが完了した後に、修正されないままとなる。
【００２９】
その結果、それらエラーをできるだけ早急に（例えば、１つ以上のブロックを撤退させるか又は記憶されたデータをＮＶＭ１２０の異なるブロックへ移動することにより）修正するのが好ましいが、装置１００は、ファームウェアが（例えば、１つ以上の致命的エラーのために）欠陥となるまで動作を続けることになる。従って、装置１００において強制的回復を遂行することが必要になる。
【００３０】
強制的回復が終了した後にも、元のエラーは、依然、修正されないままである。特に、強制的回復中に、新たなファームウェアがＮＶＭ１２０に書き込まれることがある。ある場合には、古いファームウェアが記憶されていた同じブロックに新たなファームウェアが書き込まれることがある。一般的に、装置１００が元のエラーを再検出することはない。というのは、装置１００が、新たなファームウェアをＮＶＭ１２０に書き込む前に、古いファームウェアを読み出して検査するプロトコルがないからである。
【００３１】
１つの考えられる解決策は、ブートアッププロセスが完了した後に電子装置１００がメモリ１１４に記憶されたファームウェアを再検証することである。このような解決策を使用しても、装置１００は、過渡的な非致命的エラーを再検出することができない。更に、この解決策は、装置１００が完全に機能するときでもデータの読み取りに時間がかかるので装置の性能に否定的に影響する。
【００３２】
従って、ファームウェアの欠陥を防止し、データのロスを回避するために、ＮＶＭインターフェイス１１６は、装置のブートアップ中にエラーを検出しそしてエラーログを維持するように構成することができる。装置１００が書き込み可能なコンテクストに入ると（例えば、装置ブートアップが完了すると）、ＮＶＭドライバ１１７は、エラーログを使用して検出されたエラーを修正するように構成することができる。例えば、ＮＶＭドライバ１１７は、データを、より信頼性のあるブロックへ移動させ、及び／又は欠陥に接近したブロックを撤退させ、それにより、装置全体の信頼性を改善することができる。上述したように、「書き込み可能なコンテクスト」とは、電子装置の１つ以上のコンポーネントがＮＶＭへの書き込み動作を遂行できる動作状態を指す。
【００３３】
図２は、電子装置ブートアップを示す図２００である。メモリ２１４は、メモリ１１４（図１）と同じ又は同様である。又、同様に、ＮＶＭ２２０は、ＮＶＭ１２０（図１）と同じであるか又は同様である。
【００３４】
図２に示すメモリ２１４の部分２３０−２３４は、単なる例示に過ぎないことを理解されたい。例えば、各部分のここに示すサイズは、例示であり、実施形態をその示されたサイズに限定するものと考えてはならない。又、これら部分の順序は、適当な順序に再配置してもよいことを理解されたい。
【００３５】
ある実施形態では、電子装置（例えば、図１の電子装置１００）のオペレーティングシステムは、その電子装置のパワーアップ又は再ブート中にＮＶＭ２２０からブートアップされる。例えば、図２に示すように、期間Ｔ１中の装置のパワーアップ又は再ブート時に、ブートローダー２３０がＮＶＭ２２０からＮＶＭインターフェイス（例えば、図１のＮＶＭインターフェイス１１６）を経て揮発性メモリ２１４へロードされる。
【００３６】
期間Ｔ２中に、ブートローダー２３０は、オペレーティングシステム及びその関連データをメモリ２１４へロードするように構成される。例えば、オペレーティングシステムに加えて、ＮＶＭインターフェイスは、カーネル及びファームウェアもロードし、これは、オペレーティングシステムを構成するのに使用でき、及び／又はオペレーティングシステムにより始動のために使用できる。特に、ＮＶＭインターフェイスは、ＮＶＭの１つ以上のメモリ位置（例えば、１つ以上のブロック）からオペレーティングシステム、カーネル及びファームウェアを読み取ることができる。ある実施形態では、ＮＶＭインターフェイスは、リードオンリコンテクストで読み取りを遂行することができる。従って、図２に示すように、オペレーティングシステム及びその関連データは、ＮＶＭ２２０からＮＶＭインターフェイスを通してメモリ２１４へロードできるデータ２３２により指示される。
【００３７】
データ２３２がメモリ２１４へロードされる間に、ＮＶＭインターフェイスは、ＮＶＭ２２０における１つ以上のエラー２５０（例えば、ＮＶＭ２２０から読み取られているファームウェアにおける１つ以上のエラー）を検出することができる。このようなエラーを検出すると、ＮＶＭインターフェイスは、１つ以上のエラー通知（例えば、リフレッシュ通知又はｕＥＣＣ通知）をメモリ２１４の一部分に記憶することができる。例えば、期間Ｔ３中に、ＮＶＭインターフェイスは、１つ以上のエラー通知をエラーログ２３４に記憶することができ、エラーログは、メモリ２１４におけるスクラッチメモリバッファ及び／又は予約されたランダムアクセスメモリエリアとして具現化することができる。
【００３８】
電子装置がブートを行うと（例えば、オペレーティングシステムがメモリ２１４にロードされて、始動すると）、ＮＶＭドライバ（例えば、図１のＮＶＭドライバ１１７）は、エラーログ２３４を検査し、そして１つ以上の修正アクションを遂行することができる。特に、ＮＶＭドライバは、書き込み可能なコンテクストで動作し、１つ以上の修正アクションを遂行するようにバスコントローラ（例えば、図１のバスコントローラ）に指令することができる。
【００３９】
従って、図２の期間Ｔ４の間に、ＮＶＭドライバは、エラーログ２３４を検査することができる。例えば、ＮＶＭドライバは、エラーログ２３４を処理して、１つ以上のエラー通知を読み取ることができる。
【００４０】
次いで、期間Ｔ５中に、ＮＶＭドライバは、エラー通知を使用してエラー２５０を修正することができる。例えば、エラーログ２３４からの１つ以上のリフレッシュ通知を読み取るのに応答して、ＮＶＭドライバは、（例えば、ガベージコレクションを遂行することにより）ＮＶＭ２２０のページ又はブロックに記憶されたデータをリフレッシュすることができる。別の例として、エラーログ２３４からの１つ以上のｕＥＣＣ通知を読み取るのに応答して、ＮＶＭドライバは、装置を回復させる必要があることを指示する通知を送信することができる。
【００４１】
図３は、ＮＶＭ（例えば、図１のＮＶＭ１２０、又は図２のＮＶＭ２２０）からの装置ブートアップ中にエラーを取り扱うためのプロセス３００を例示するフローチャートである。プロセス３００のステップは、ＮＶＭとインターフェイスできるＮＶＭインターフェイス（例えば、図１のＮＶＭインターフェイス１１６）、ＮＶＭにデータを書き込むことのできるＮＶＭドライバ（例えば、図１のＮＶＭドライバ１１７）、或いは電子装置（例えば、図１の電子装置１００）のコンポーネント又はコンポーネントの組み合わせ）により実行することができる。
【００４２】
プロセス３００は、ステップ３０２において開始する。ステップ３０４において、ＮＶＭインターフェイスがファームウェアを更新する。例えば、ファームウェアは、電子装置が工場にある間に、或いは装置が使用されるときのソフトウェアダウンロード中に、更新される。
【００４３】
次いで、ステップ３０６において、ファームウェアの更新が成功であったかどうか決定することができる。ステップ３０６において、ファームウェアの更新が不成功であったと決定されると、プロセス３００は、ステップ３０４へ戻り、ファームウェアを再び更新することができる。
【００４４】
ステップ３０６において、ファームウェアの更新が成功であったと決定されると、プロセス３００は、ステップ３０８へ進む。ステップ３０８において、電子装置をＮＶＭからブートすることができる。例えば、ＮＶＭインターフェイスは、ＮＶＭから揮発性メモリ（例えば、図１のメモリ１１４又は図２のメモリ２１４）へブートローダーをロードすることができる。次いで、ブートローダーを使用して、ＮＶＭインターフェイスは、オペレーティングシステム、カーネル及びファームウェアを揮発性メモリにロードするように試みることができる。例えば、図２に示すように、ＮＶＭインターフェイスは、ブートローダー２３０をＮＶＭ２２０からメモリ２１４へロードし、そしてブートローダー２３０は、データ２３２をメモリ２１４へロードするように試みることができる。
【００４５】
ステップ３１０へと続いて、致命的エラー（例えば、致命的ブートローディングエラー）が生じたかどうか決定することができる。このような致命的エラーは、電子装置が首尾良くブートアップされるのを妨げることがある。ステップ３１０において、致命的エラーが生じたと決定されると、プロセスは、ステップ３０４へ戻り、ＮＶＭインターフェイスは、ファームウェアを再び更新するように試みることができる。
【００４６】
ステップ３１０において、致命的エラーが生じなかったと決定されると、プロセスは、ステップ３１２へ進む。ステップ３１２において、ＮＶＭに少なくとも１つのエラー（例えば、ファームウェアロード中の１つ以上のエラー）が発生したかどうか決定される。
【００４７】
ステップ３１２において、ＮＶＭに少なくとも１つのエラーが発生しなかったと決定されると、プロセス３００は、ＮＶＭインターフェイスがオペレーティングシステム、カーネル及びファームウェアを揮発性メモリへロードし終え、そしてオペレーティングシステムが始動すると（例えば、装置が書き込み可能なコンテクストに到達すると）、ステップ３１４へ進む。
【００４８】
しかしながら、ステップ３１２において、ＮＶＭに少なくとも１つのエラーが生じたと決定されると、プロセス３００は、ステップ３１６へ進む。ある実施形態では、ＮＶＭインターフェイスは、１つ以上のエラー通知（例えば、リフレッシュ通知及び／又はｕＥＣＣ通知）を受け取るのに応答して少なくとも１つのエラーが発生したことを決定できる。例えば、図２に示すように、ＮＶＭインターフェイスは、ＮＶＭインターフェイスは、ＮＶＭ２２０において１つ以上のエラー２５０を検出することができる。
【００４９】
ステップ３１６において、揮発性メモリの一部分に１つ以上のエラー通知を記憶することができる。例えば、図２に示すように、ＮＶＭインターフェイスは、メモリ２１４のエラーログ２３４にエラー通知を記憶することができる。１つ以上のエラー通知を記憶した後に、プロセス３００は、ステップ３１４へ進む。
【００５０】
ステップ３１４において、ＮＶＭの１つ以上のエラーが装置のブートアップ中に検出されたかどうか決定することができる。例えば、ＮＶＭドライバ（例えば、図１のＮＶＭドライバ１１７）は、エラーログを処理し、そして１つ以上のエラー通知がエラーログに記憶されたかどうか決定することができる。
【００５１】
ステップ３１４において、装置のブートアップ中にエラーが検出されないと決定された場合には、プロセス３００は、ステップ３１８で終了となる。ある実施形態において、その後の時点で、電子装置がパワーダウンされ、再ブートされる。次いで、サブプロセス３３０が開始され、ステップ３０８において、電子装置をＮＶＭからブートすることができる。
【００５２】
ステップ３１４において、装置ブートアップ中に１つ以上のエラーが検出されたと決定された場合には、ＮＶＭドライバは、記憶されたエラー通知を使用して１つ以上のエラーを修正するように試みることができる。従って、プロセス３００は、ステップ３２０へ進む。
【００５３】
ステップ３２０において、装置のブートアップ中に１つ以上の致命的エラーが検出されたかどうか決定することができる。例えば、ＮＶＭドライバは、エラーログが１つ以上のｕＥＣＣ通知を含むかどうか決定することができる。
【００５４】
ステップ３２０において、装置のブートアップ中に検出されたエラーが致命的なエラーであると決定された場合には、プロセス３００は、ステップ３２２へ進む。ステップ３２２において、ＮＶＭドライバは、致命的なエラーに関連した１つ以上のブロックを撤退させることができる。例えば、ＮＶＭドライバは、その関連ブロックを最初に識別することができる。次いで、ＮＶＭドライバは、その関連ブロックに記憶されたデータをＮＶＭの他のブロックへコピーすることによりブロックを撤退させることができる。データをコピーした後、その関連ブロックを、利用可能なプログラム可能なブロックのプールから撤退させることができる。ブロックを撤退させた後、プロセス３００は、ステップ３０４へ戻り、ＮＶＭインターフェイスは、電子装置の回復を強制することができる。例えば、ＮＶＭインターフェイスは、ファームウェアを再び更新するように試みることができる。
【００５５】
ステップ３２０において、装置のブートアップ中に検出されたエラーが致命的エラーでないと決定された場合には、プロセス３００は、ステップ３２４へ進む。例えば、ＮＶＭドライバは、１つ以上のエラーが、ブーティングにとって重要でない非致命的エラーであると決定する。
【００５６】
ステップ３２４において、ＮＶＭドライバは、非致命的エラーに関連した１つ以上のブロックに記憶されたデータを移動することができる。この先制移動は、非致命的エラーが後で致命的エラーへと発展するのを防止する。例えば、ＮＶＭドライバは、その関連ブロックを最初に識別することができる。ブロックを識別した後に、ＮＶＭドライバは、その関連ブロックに記憶されたデータをＮＶＭの他のブロックに書き込むことができる。プロセス３００は、次いで、ステップ３１８で終了となる。
【００５７】
電子装置（例えば、図２の電子装置１００）のブートアッププロセス中にエラーログを維持し及び処理できることが理解される。従って、ステップ３０８ないし３２２（図３に破線で輪郭を描かれ、サブプロセス３３０として示された）は、装置ブートアッププロセス中にＮＶＭインターフェイス及び／又はＮＶＭドライバにより行われるステップを表すことができる。例えば、サブプロセス３３０は、通常の装置ブートアップ中にステップ３０８で（例えば、動作中の電子装置がパワーダウンされて再ブートされるときに）開始されてもよい。
【００５８】
図３のプロセスは、単なる例示に過ぎないことを理解されたい。本発明の範囲から逸脱せずに、プロセス３００及びサブプロセス３３０のいずれかのステップを除去し、変更し又は結合してもよいし、付加的なステップを追加してもよい。
【００５９】
本発明の前記実施形態は、例示のためのものであって、それに限定されない。
【符号の説明】
【００６０】
１００：電子装置
１１０：システム・オン・ア・チップ（ＳｏＣ）
１１２：ＳｏＣ制御回路
１１４：メモリ
１１６：ＮＶＭインターフェイス
１１７：ＮＶＭドライバ
１１８：バスコントローラ
１２０：不揮発性メモリ（ＮＶＭ）
２１４：メモリ
２２０：ＮＶＭ
２３０：ブートローダー
２３２：データ
２３４：エラーログ
【図１】
0005608139.tif 000002
【図２】
0005608139.tif 000003
【図３】
0005608139.tif 000004