(57)【要約】      （修正有）【課題】メモリシステム内部でシステム管理処理とブロック管理処理との間で複雑な処理手順を生じさせずにファームウェアの更新を行うことができるメモリシステムを提供する。【解決手段】コントローラは、ファームウェア５１を更新する場合に、全てのファームウェアブロック１１１−１〜１１１−４の所定の位置に更新開始を示す開始ログを追加記録した後、ファームウェアブロック１１１−１〜１１１−４を消去した後に同じファームウェアブロック１１１−１〜１１１−４に新たなファームウェア５１を書き込み、新たなファームウェア５１の書き込み終了後に書き込み終了を示す完了ログ５２をファームウェアブロック１１１−１〜１１１−４の所定の位置に書き込む更新処理を、第１の順序でファームウェアブロック１１１−１〜１１１−４ごとに行う。【選択図】図２
2013174976.tif 000002
【特許請求の範囲】
【請求項１】
１つの管理単位としての所定のサイズのブロックを複数有し、当該メモリシステムの起動時に読み出される制御プログラムを記憶する前記ブロックである制御プログラムブロックを多重化して有する不揮発性記憶手段と、
起動時に前記不揮発性記憶手段に記憶された前記制御プログラムを読み出し、ホスト装置と前記不揮発性記憶手段との間のデータ転送を行うとともに、前記不揮発性記憶手段でのデータ管理を行う制御手段と、
を備え、
前記制御手段は、前記制御プログラムを更新する場合に、全ての前記制御プログラムブロックの所定の位置に更新開始を示す第１ログを追加記録した後、前記制御プログラムブロックを消去した後に同じ前記制御プログラムブロックに新たな制御プログラムを書き込み、前記新たな制御プログラムの書き込み終了後に書き込み終了を示す第２ログを前記制御プログラムブロックの所定の位置に書き込む更新処理を、第１の順序で前記制御プログラムブロックごとに行うことを特徴とするメモリシステム。
【請求項２】
前記制御手段は、
起動時に前記制御プログラムが読み出せなかった場合に規定された前記第１の順序とは逆順の第２の順序にしたがって、前記制御プログラムブロックから前記制御プログラムを読み出すことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記ブロックは、前記ブロックよりもサイズの小さな管理単位である複数のページからなり、
前記制御手段は、起動時に前記第２の順序の最初の前記制御プログラムブロックの先頭ページから前記制御プログラムを読み出し、前記制御プログラムが読み出せないページがある場合には、前記第２の順序で規定されたつぎの前記制御プログラムブロックの前記読み出せなかったページから前記制御プログラムの読み出しを行うことを特徴とする請求項２に記載のメモリシステム。
【請求項４】
前記制御手段は、起動時に前記最初の制御プログラムブロックから前記制御プログラムを読み出すことができ、前記第２の順序がつぎ以降で前記第１ログがなく、前記第２ログが記録されている制御プログラムブロックがある場合には、その制御プログラムブロックの前のブロックから前記最初の制御プログラムブロックまでの前記各制御プログラムブロックを、前記第１ログがない他の前記制御プログラムブロックの制御プログラムで書き直すリカバリ処理を行うことを特徴とする請求項２または３に記載のメモリシステム。
【請求項５】
前記制御手段は、起動時に前記最初の制御プログラムブロックから前記制御プログラムを読み出すことができ、前記第２の順序がつぎ以降で最後のプログラムブロックではない、前記第１ログと前記第２ログがない制御プログラムブロックがある場合には、その制御プログラムブロックから前記最初の制御プログラムブロックまでの前記各制御プログラムブロックを、前記第１ログがない他の制御プログラムブロックの制御プログラムで書き直すリカバリ処理を行うことを特徴とする請求項２または３に記載のメモリシステム。
【請求項６】
前記制御手段は、起動時に前記最初の制御プログラムブロックから前記制御プログラムを読み出すことができ、前記第２の順序が最後の制御プログラムブロックの前記第１ログと前記第２ログがない場合には、他の前記制御プログラムブロックの制御プログラムで前記最後の制御プログラムブロックを書き直すリカバリ処理を行うことを特徴とする請求項２または３に記載のメモリシステム。
【請求項７】
前記制御手段は、起動時に前記最初の制御プログラムブロックから前記制御プログラムを読み出すことができ、前記第２の順序が最後の制御プログラムブロックに前記第１ログがある場合には、すべての前記制御プログラムブロックを新たな制御プログラムでリカバリ処理することを特徴とする請求項２または３に記載のメモリシステム。
【請求項８】
前記制御手段は、起動時に前記最初の制御プログラムブロックと前記第２の順序でつぎの前記制御プログラムブロックとから読み出された場合には、前記最初の制御プログラムブロックを、他の前記制御プログラムブロックの制御プログラムで書き直すリカバリ処理を行うことを特徴とする請求項２または３に記載のメモリシステム。
【請求項９】
前記制御手段は、起動時に前記最初の制御プログラムブロックから前記制御プログラムを読み出すことができ、前記最初の制御プログラムブロックに前記第１ログがなく、前記第２ログが記憶されている場合には、多重化された前記制御プログラムブロック中の前記制御プログラムを書き直すリカバリ処理は不要と判断することを特徴とする請求項２または３に記載のメモリシステム。
【請求項１０】
前記制御手段は、起動時に前記制御プログラムブロックから前記制御プログラムを読み出し中に読み出しエラーが生じた場合に、前記第２の順序で規定されたつぎの前記制御プログラムブロックから前記制御プログラムを読み出すことを特徴とする請求項２または３に記載のメモリシステム。
【請求項１１】
前記制御手段は、前記制御プログラムブロックでの前記読み出しエラーの発生回数が所定値よりも小さい場合には、他の前記制御プログラムブロックの前記制御プログラムで前記読み出しエラーが生じた前記制御プログラムブロックを書き直すリカバリ処理を行うことを特徴とする請求項８に記載のメモリシステム。
【請求項１２】
前記制御手段は、前記制御プログラムブロックでの前記読み出しエラーの発生回数が所定値となった場合には、前記読み出しエラーが生じた前記制御プログラムブロックを次回以降の起動時に読み出さないバッドブロック処理を行うことを特徴とする請求項８に記載のメモリシステム。
【請求項１３】
１つの管理単位としての所定のサイズのブロックを複数有し、当該メモリシステムの起動時に読み出される制御プログラムを記憶した前記ブロックである制御プログラムブロックを多重化して有する不揮発性記憶手段と、
起動時に前記不揮発性記憶手段に記憶された前記制御プログラムを読み出し、ホスト装置と前記不揮発性記憶手段との間のデータ転送を行うとともに、前記不揮発性記憶手段でのデータ管理を行う制御手段と、
を備える制御プログラムの更新方法であって、
前記制御プログラムを更新する場合に、全ての前記制御プログラムブロックの所定の位置に更新開始を示す第１ログを追加記録する第１ログ追加記録工程と、
１つの前記制御プログラムブロックについて、前記制御プログラムブロックを消去した後に同じ前記制御プログラムブロックに新たな制御プログラムを書き込み、前記新たな制御プログラムの書き込み終了後に書き込み終了を示す第２ログを前記制御プログラムブロックの所定の位置に書き込む更新工程と、
を含み、
前記更新工程は、第１の順序で前記制御プログラムブロックごとに行うことを特徴とするメモリシステムの制御プログラム更新方法。
【請求項１４】
当該メモリシステムが再起動される再起動工程と、
起動時に前記制御プログラムが読み出せなかった場合に前記第１の順序とは逆順の第２の順序にしたがった前記制御プログラムブロックから前記制御プログラムを読み出す読み出し工程と、
前記読み出し工程の後に、読み出しに使用した前記制御プログラムブロックと、前記第１ログおよび前記第２ログと、を用いて前記制御プログラムブロックのリカバリ処理が必要かを判定する判定工程と、
前記判定工程でリカバリ処理が必要と判定された前記制御プログラムブロックをリカバリ処理する第１リカバリ工程と、
をさらに含むことを特徴とする請求項１１に記載の制御プログラムの更新方法。
【請求項１５】
前記判定工程では、起動時に前記第２の順序で最初の制御プログラムブロックから前記制御プログラムを読み出し、前記最初の制御プログラムブロックに前記第１ログがあり、前記第２の順序がつぎ以降で前記第１ログがなく、前記第２ログが記録されている制御プログラムブロックがある場合には、その制御プログラムブロックの前のブロックから前記最初の制御プログラムブロックまでの前記各制御プログラムブロックを、前記第１ログがない制御プログラムブロックの制御プログラムで書き直すリカバリ処理を行うと判定することを特徴とする請求項１２に記載の制御プログラムの更新方法。
【請求項１６】
前記判定工程では、起動時に前記第２の順序で最初の制御プログラムブロックから前記制御プログラムを読み出すことができ、前記最初の制御プログラムブロックに前記第１ログがあり、前記第２の順序がつぎ以降で最後のプログラムブロックではない、前記第１ログと前記第２ログがない制御プログラムブロックがある場合には、その制御プログラムブロックから前記最初の制御プログラムブロックまでの前記各制御プログラムブロックを、前記第１ログがない制御プログラムブロックの制御プログラムで書き直すリカバリ処理を行うと判定することを特徴とする請求項１２に記載の制御プログラムの更新方法。
【請求項１７】
前記判定工程では、起動時に前記第２の順序で最初の制御プログラムブロックから前記制御プログラムを読み出すことができ、前記最初の制御プログラムブロックに前記第１ログがあり、前記第２の順序が最後の制御プログラムブロックの前記第１ログと前記第２ログがない場合には、他の前記制御プログラムブロックの制御プログラムで前記最後の制御プログラムブロックを書き直すリカバリ処理を行うと判定することを特徴とする請求項１２に記載の制御プログラムの更新方法。
【請求項１８】
前記判定工程では、起動時に前記第２の順序で最初の制御プログラムブロックから前記制御プログラムを読み出すことができ、前記最初の制御プログラムブロックに前記第１ログがあり、前記第２の順序が最後の制御プログラムブロックに前記第１ログがある場合には、すべての前記制御プログラムブロックを新たな制御プログラムでリカバリ処理すると判定することを特徴とする請求項１２に記載の制御プログラムの更新方法。
【請求項１９】
前記判定工程では、起動時に前記第２の順序で最初とつぎの制御プログラムブロックから前記制御プログラムが読み出された場合には、前記最初の制御プログラムブロックを、他の前記制御プログラムブロックの制御プログラムで書き直すリカバリ処理を行うと判定することを特徴とする請求項１２に記載の制御プログラムの更新方法。
【請求項２０】
前記読み出し工程で、前記制御プログラムブロックから前記制御プログラムを読み出し中に読み出しエラーが生じた場合に、前記第２の順序で規定されたつぎの前記制御プログラムブロックから前記制御プログラムを読み出すことを特徴とする請求項１２に記載の制御プログラムの更新方法。
【請求項２１】
前記読み出し工程で、前記制御プログラムブロックでの前記読み出しエラーの発生回数が所定値よりも小さい場合には、他の前記制御プログラムブロックの前記制御プログラムで前記読み出しエラーが生じた前記制御プログラムブロックを書き直すリカバリ処理を行う第２リカバリ工程をさらに含むことを特徴とする請求項１８に記載の制御プログラムの更新方法。
【請求項２２】
前記読み出し工程で、前記制御プログラムブロックでの前記読み出しエラーの発生回数が所定値となった場合には、前記読み出しエラーが生じた前記制御プログラムブロックを次回以降の起動時に読み出さないバッドブロック処理を行うバッドブロック処理工程をさらに含むことを特徴とする請求項１８に記載の制御プログラムの更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムおよび制御プログラムの更新方法に関する。
【背景技術】
【０００２】
従来、ＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリという）を用いたメモリシステムにおけるコントローラの制御プログラム（以下、ファームウェアという）は、メモリシステムの起動時に固定的に参照される情報であるので、静的に割り当てたブロック（以下、ファームウェアブロックという）に格納される。ＮＡＮＤメモリの故障によってファームウェアの読み出しに失敗した場合には、システムが起動できなくなるため、複数のブロックに同一のファームウェアをコピーして保存しておき、１ブロックが故障した場合でも他ブロックからファームウェアを読み出せるように多重化されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−５３９８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、メモリシステム内部でシステム管理処理とブロック管理処理との間で複雑な処理手順を生じさせずにファームウェアの更新を行うことができるメモリシステムおよび制御プログラムの更新方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、不揮発性記憶手段と、制御手段と、を備えるメモリシステムが提供される。前記不揮発性記憶手段は、１つの管理単位としての所定のサイズのブロックを複数有し、当該メモリシステムの起動時に読み出される制御プログラムを記憶する前記ブロックである制御プログラムブロックを多重化して有する。前記制御手段は、起動時に前記不揮発性記憶手段に記憶された前記制御プログラムを読み出し、ホスト装置と前記不揮発性記憶手段との間のデータ転送を行うとともに、前記不揮発性記憶手段でのデータ管理を行う。また、前記制御手段は、前記制御プログラムを更新する場合に、全ての前記制御プログラムブロックの所定の位置に更新開始を示す第１ログを追加記録した後、前記制御プログラムブロックを消去した後に同じ前記制御プログラムブロックに新たな制御プログラムを書き込み、前記新たな制御プログラムの書き込み終了後に書き込み終了を示す第２ログを前記制御プログラムブロックの所定の位置に書き込む更新処理を、第１の順序で前記制御プログラムブロックごとに行う。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態によるメモリシステムの構成の一例を示すブロック図である。
【図２】図２は、ファームウェア保存領域の構成を模式的に示す図である。
【図３】図３は、第１の実施形態によるファームウェアの更新処理の手順の一例を示すフローチャートである。
【図４】図４は、ファームウェアの更新処理の様子を模式的に示す図である。
【図５】図５は、ファームウェアの更新処理の様子を模式的に示す図である。
【図６】図６は、ファームウェアの更新処理の様子を模式的に示す図である。
【図７】図７は、ファームウェアの更新処理の様子を模式的に示す図である。
【図８】図８は、第１の実施形態によるファームウェアの読み込み処理の手順の一例を示すフローチャートである。
【図９】図９は、第２の実施形態によるファームウェアの読み出しエラー発生時の処理の手順の一例を示すフローチャートである。
【図１０】図１０は、バッドブロック処理後のファームウェアブロックの状態の一例を示す図である。
【図１１】図１１は、ＳＳＤを搭載したパーソナルコンピュータの一例を示す斜視図である。
【図１２】図１２は、ＳＳＤを搭載したパーソナルコンピュータのシステム構成例を示すブロック図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリシステムおよび制御プログラムの更新方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。また、以下では、一般的なメモリシステムにおける問題点を説明した後、その問題点を解決する実施形態について説明する。
【０００８】
ＮＡＮＤメモリでは、その特性から、データの読み出し・書き込みについてはページと呼ばれる単位で行なわれる。また、書き込みについてはページに上書きはできず、１ページずつ追加記録しなければならない。一方、データの消去については複数ページで構成されるブロックと呼ばれる単位で行なわれる。
【０００９】
上記したようにファームウェアは、メモリシステムの起動時に固定的に参照される情報であるので、静的に割り当てたファームウェアブロックに格納され、このファームウェアブロックは多重化されている。このファームウェアは、コントローラの仕様変更やバグ修正を行う場合に更新される。更新の際は、上記したＮＡＮＤメモリの特性から、多重化されたファームウェアブロックのうちの１つのファームウェアブロックが選択され、このファームウェアブロックについて、消去を行ってから新たなファームウェアを書き込むことになる。そして、これを全てのファームウェアブロックについて順に行う。また、更新途中のシステム電源遮断やＮＡＮＤメモリのページ書き込み失敗によって更新処理が正常に完了しない場合が有り得るため、更新の際には同時にログ情報も記録し、更新処理が正常に行なわれたかどうかを後で判断できるようにしている。ファームウェアの更新処理が正しく行なわれていなかった場合には、ログ情報を参考に、多重化が行なわれていないブロックに再度書き込みを行い、多重化を維持するリカバリ処理を行う。
【００１０】
このログ情報は、一般的にＮＡＮＤメモリ内のファームウェアブロックとは別に用意され、動的に割り当てられたログブロックに保存される。ここで、動的に割り当てられたブロックとは、メモリシステムにおけるブロック管理部が、使用可能なブロックのリストから、ブロック消去回数等を平準化するよう考慮して（ウエアレベリング）、書き込み対象として選択したブロックのことをいう。
【００１１】
このように動的に割り当てられたログブロックにログ情報を保存することによって、同一ブロックへのログ情報の書き込みによるブロックの疲弊を軽減するメリットがある一方、ログ情報を保存するために別途ブロックが必要になるという問題点があった。また、メモリシステムを制御するコントローラには、ブロックを管理するブロック管理部と、ファームウェアの更新を行うシステム管理部が含まれるが、ブロック管理部が起動され、動的なブロック割り当てが行えるようになるまでの間、ログ情報の保存ができないため、メモリシステム内部でシステム管理部とブロック管理部の立ち上げの動作順に依存関係が発生し、コントローラのファームウェア内部の処理手順が複雑になってしまうという問題点もあった。そこで、以下の実施形態では、これらの問題点を解決することができるメモリシステムおよび制御プログラムの更新方法について説明する。
【００１２】
（第１の実施形態）
図１は、第１の実施形態によるメモリシステムの構成の一例を示すブロック図である。このメモリシステム１０は、不揮発性記憶手段であるＮＡＮＤメモリ１１と、一時記憶手段であるＲＡＭ（Random  Access  Memory）１２と、制御手段であるコントローラ１３と、を備える。
【００１３】
このメモリシステム１０は、不揮発性半導体記憶装置を含み、ＡＴＡ（Advanced  Technology  Attachment）インタフェース（ＡＴＡ  Ｉ／Ｆ）などのメモリ接続インタフェースである図示しないホストＩ／Ｆを介してパーソナルコンピュータまたはＣＰＵ（Central  Processing  Unit）コアなどのホスト装置（以下、ホストという）１と接続され、ホスト１の外部メモリとして機能する。メモリシステム１０は、ホストの２次記憶装置（Solid  State  Drive：ＳＳＤ）として使用され、ホスト１から書き込み要求が出されたデータを記憶し、またホスト１から読み出し要求のあったデータを読み出してホスト１に出力する機能を有する。
【００１４】
ＮＡＮＤメモリ１１は、データやプログラム保存用の記憶部として使用される。具体的には、ホスト１側によって指定されたデータを記憶したり、ＮＡＮＤメモリ１１でのデータ格納位置を管理する管理情報やファームウェアプログラムなどの不揮発に保存したい重要なデータを記憶したりする。ホスト１側によって指定されたデータは、ＮＡＮＤメモリ１１内のデータ格納領域に保存され、不揮発に保存したい重要なデータは、ＮＡＮＤメモリ１１内の管理情報保存領域に記憶され、不揮発に保存したい重要なプログラムは、ファームウェア保存領域に記憶される。
【００１５】
図２は、ファームウェア保存領域の構成を模式的に示す図である。図２に示されるように、ファームウェア５１は、ファームウェアブロック１１１−１〜１１１−４に格納される。ファームウェアブロック１１１−１〜１１１−４は、ＮＡＮＤメモリ１１内で静的に確保されたブロックで構成される固定領域１１０に割り当てられる。ファームウェアブロック１１１−１〜１１１−４の大きさは、たとえば消去単位である物理ブロックと同じ大きさとすることができる。
【００１６】
固定領域１１０は、書き換えや書き込みがほとんど発生しない更新頻度の低い、メモリシステム１０を稼働させるのに必要な情報が格納される領域である。固定領域１１０では、たとえば、ブロック内の情報を更新したい場合には、固定領域１１０内の他のブロックに情報（ファームウェア５１）を書き込むのではなく、現在使用しているブロックの情報を消去した後に同じブロックの先頭ページから情報を書き込むように設定された領域である。また、ＮＡＮＤメモリ１１が多値メモリで構成される場合には、記憶されている情報（ファームウェア５１）の信頼性を高めるために、２値モードで使用することが望ましい。
【００１７】
なお、ＮＡＮＤメモリ１１には、固定領域１１０のほかに図示しない可変領域を有する。可変領域では、現在書き込み中のブロックがすべて満たされた場合には、可変領域中の書き込み可能なフリーブロックとなっている他のブロックにつぎの情報を書き込むように設定される領域である。なお、この可変領域は、ＮＡＮＤメモリ１１中の固定領域１１０を除いた領域であり、管理情報保存領域やデータ格納領域を含むものである。
【００１８】
ファームウェア５１は、上記したようにコントローラ１３の制御プログラムであり、メモリシステム１０の起動時に最初に実行されるプログラムである。このファームウェア５１は、コントローラ１３の仕様変更やバグの修正を行う場合に更新される。
【００１９】
また、ファームウェア５１は、複数のブロックに同一のファームウェア５１を保持するように多重化されている。これは、ＮＡＮＤメモリ１１の故障やファームウェア５１の更新処理の失敗によってファームウェア５１の読み出しに失敗した場合に、システムが起動できなくなってしまうことを防ぐためである。多重化によって、１つのファームウェアブロック１１１−１〜１１１−４が故障した場合でも他のファームウェアブロック１１１−１〜１１１−４からファームウェア５１を読み出すことができ、システムの起動を行うことができる。この図２の例では、ファームウェア５１を４重化している場合を示しているが、２重化以上していればよい。
【００２０】
この第１の実施形態では、ファームウェア５１の更新が正常に終了したことを示す完了ログ５２が、ファームウェアブロック１１１−１〜１１１−４のファームウェア５１の最終ページのつぎのページに記録される。つまり、ファームウェア５１の更新処理に関する完了ログ５２は、可変領域に確保されたログブロックに記録されるのではなく、多重化されたそれぞれのファームウェアブロック１１１−１〜１１１−４に格納するようにしている。なお、完了ログ５２としては、所定の位置（たとえば上記したようにファームウェア５１の最終ページのつぎのページ）に特定のパターンが書き込まれたものとすることができる。
【００２１】
このような構成のＮＡＮＤメモリ１１は、一般的に複数のＮＡＮＤメモリチップを有する。個々のＮＡＮＤメモリチップは、複数のブロックを有する。また、各ＮＡＮＤメモリチップは、チャネルを介してそれぞれ並列にコントローラ１３に接続されている。１つのチャネルに接続されるＮＡＮＤメモリ１１の数は１個に限らず、複数のＮＡＮＤメモリ１１が入出力線を共有した状態で接続されていてもよい。また、ＮＡＮＤメモリ１１の各ＮＡＮＤメモリチップは、たとえば、複数のチャネルによる並列動作を可能とするように構成されていてもよいし、複数のバンク（Bank）によるインターリーブ動作を可能とするように構成されていてもよい。ＮＡＮＤメモリ１１は、消去はブロック単位で行い、書き込みと読み込みはページ単位で行われる。
【００２２】
ＲＡＭ１２は、ホスト１とＮＡＮＤメモリ１１との間でのデータ転送用キャッシュおよび作業領域用メモリなどの一時記憶用の記憶部として使用される。ＲＡＭ１２の作業領域用メモリに記憶されるものとしては、管理テーブルなどがある。管理テーブルは、ＮＡＮＤメモリ１１に記憶されている管理情報が起動時などに展開されたテーブルである。この管理テーブルは、ホスト１から指定された論理アドレスとＮＡＮＤメモリ１１内での物理的なデータの記憶位置とを対応付ける管理情報を管理する情報テーブルであり、最新の情報となるように維持される。ユーザデータの書き込みや、管理テーブルへのデータの読み書きを行う際には、ＲＡＭ１２上に管理テーブルが展開される。
【００２３】
なお、ＲＡＭ１２として、ＤＲＡＭ（Dynamic  ＲＡＭ）、ＳＲＡＭ（Static  ＲＡＭ）、ＦｅＲＡＭ（Ferroelectric  RAM）、ＭＲＡＭ（Magnetoresistive   RAM）、ＰＲＡＭ（Phase  change   RAM）などを用いることができる。
【００２４】
コントローラ１３は、ホスト１との間のコマンドインタフェースを行うＡＴＡコマンド処理部１３１と、ＲＡＭ１２を介してＮＡＮＤメモリ１１とホスト１との間のデータインタフェース（データ転送）を行うデータ転送部１３２と、ＮＡＮＤメモリ１１内の各ブロックを管理するブロック管理部１３３と、ファームウェア５１の読み込み処理、更新処理およびリカバリ処理を行うシステム管理部１３４と、を有する。
【００２５】
システム管理部１３４は、メモリシステム１０が起動されると、ファームウェアブロック１１１−１〜１１１−４からファームウェア５１を読み込み、システムを起動させる。また、ファームウェア５１の更新が指示された場合には、ファームウェア５１の更新処理を行う。このファームウェア５１の更新処理では、更新前に、各ファームウェアブロック１１１−１〜１１１−４の最終ページに開始ログを追加記録し、更新完了後にファームウェアブロック１１１−１〜１１１−４のファームウェア５１の最終ページのつぎのページに完了ログ５２を記録する。
【００２６】
システム管理部１３４は、起動時にファームウェア５１の更新処理が正しく行われたか開始ログと完了ログ５２とを用いて判定し、更新処理が正しく行われなかった場合に、あるいはファームウェア５１の読み出しエラーが発生した場合にリカバリ処理を行う機能を有する。さらに、システム管理部１３４は、ブロックを構成するメモリセル自体の劣化によってブロックを使用することができない場合に、そのファームウェアブロックのバッドブロック化処理を行う機能を有する。
【００２７】
以上のように、ファームウェアブロック１１１−１〜１１１−４の内容を更新した際に記録するログ情報を、それぞれのファームウェアブロック１１１−１〜１１１−４に格納するようにしたので、可変領域に専用のログブロックを設ける必要がない。また、専用のログブロックを必要としないので、ファームウェア５１の更新処理に際してシステム管理部１３４とブロック管理部１３３の立ち上げの動作順に依存関係が発生せず、コントローラ１３のファームウェア５１内部の処理手順を簡略化することができる。
【００２８】
ここで、システム管理部１３４によるファームウェア５１の更新処理と読み出し処理について説明する。なお、ここでは、ファームウェア５１の読み出し順序として、図２に示されるように、ファームウェアブロック１１１−１→ファームウェアブロック１１１−２→ファームウェアブロック１１１−３→ファームウェアブロック１１１−４となっているものとする。
【００２９】
＜ファームウェアの更新処理＞
図３は、第１の実施形態によるファームウェアの更新処理の手順の一例を示すフローチャートであり、図４〜図７は、ファームウェアの更新処理の様子を模式的に示す図である。まず、システム管理部１３４は、ファームウェアの更新処理の実行が開始されると、全てのファームウェアブロックの所定のページに開始ログを追加記録する（ステップＳ１１、図４（ａ））。開始ログは、ファームウェアの更新をこれから行うことを示すものであり、この開始ログがあるブロックはファームウェアの更新処理が行われていないことを示している。追加記録するページは、ファームウェアブロック中のファームウェアが格納されていない任意のページでよいが、たとえばファームウェアブロックの最終ページとすることができる。図４（ａ）の例では、更新前のファームウェア５１−１とそれに対応する完了ログ５２−１が書き込まれている各ファームウェアブロック１１１−１〜１１１−４の最終ページに開始ログ５３が追加記録された状態を示している。
【００３０】
ついで、メモリシステム１０の電源断などの障害が発生していない場合（ステップＳ１２でＮｏの場合）には、ファームウェアの読み出し順序とは逆の更新順序でファームウェアブロックを選択する（ステップＳ１３）。つまり、ファームウェアの更新順序は、ファームウェアブロック１１１−４→ファームウェアブロック１１１−３→ファームウェアブロック１１１−２→ファームウェアブロック１１１−１となるので、ここでは更新順序の最初のファームウェアブロック１１１−４が選択される。
【００３１】
その後、選択したファームウェアブロックを消去した後、新しいファームウェアの書き込みを行い（ステップＳ１４）、ファームウェアの更新処理を行う。そして、ファームウェアの更新処理が正常に終了したかを判定し（ステップＳ１５）、正常に終了した場合（ステップＳ１５でＹｅｓの場合）には、ファームウェアの最終ページのつぎのページに完了ログを書き込む（ステップＳ１６、図４（ｂ））。このとき、ステップＳ１３で選択したファームウェアブロックは、新しいファームウェアの書き込みの前に消去されるので、ステップＳ１１で追加記録された開始ログも消去される。その結果、更新された後のファームウェアブロックには、開始ログはなく、完了ログのみとなる。図４（ｂ）では、最初にファームウェアブロック１１１−４が選択され、ファームウェア５１−１と完了ログ５２−１と開始ログ５３とが格納されたブロックが消去された後、先頭ページから新たなファームウェア５１−２が書き込まれる。そして、新たなファームウェア５１−２の書き込みが完了すると、新たなファームウェア５１−２のつぎのページに完了ログ５２−２が書き込まれる。
【００３２】
ついで、メモリシステム１０に障害が発生していない場合（ステップＳ１７でＮｏの場合）には、上記更新順序でつぎのファームウェアブロックを選択する（ステップＳ１８）。その後、メモリシステム１０に障害が発生していない場合（ステップＳ１９でＮｏの場合）には、選択したファームウェアブロックを消去した後、新しいファームウェアの書き込みを行い（ステップＳ２０）、ファームウェアの更新処理を行う。そして、ファームウェアの更新処理が正常に終了したかを判定し（ステップＳ２１）、正常に終了した場合（ステップＳ２１でＹｅｓの場合）には、ファームウェアの最終ページの次のページに完了ログを書き込む（ステップＳ２２、図５（ａ））。図５（ａ）では、選択されたファームウェアブロック１１１−３への新たなファームウェア５１−２の書き込みが成功し、完了ログ５２−２が書き込まれた状態が示されている。
【００３３】
その後、更新処理を行ったファームウェアブロックが更新順序で最後のブロックであるかを判定し（ステップＳ２３）、最後のブロックでない場合（ステップＳ２３でＮｏの場合）には、ステップＳ１８へと戻り、更新順序で最後のブロックとなるまで上記した処理が繰り返される。また、最後のブロックである場合（ステップＳ２３でＹｅｓの場合）には、ファームウェアの更新処理が終了する。正常にファームウェアの更新処理が終了した状態が、図５（ｂ）に示されている。図５（ｂ）では、全てのファームウェアブロック１１１−１〜１１１−４で新たなファームウェア５１−２が正常に書き込まれ、完了ログ５２が書き込まれた状態となっている。
【００３４】
一方、ステップＳ１２，Ｓ１７，Ｓ１９でメモリシステム１０に障害が発生した場合（ステップＳ１２，Ｓ１７，Ｓ１９でＹｅｓの場合）には、更新処理の途中で異常終了する（ステップＳ２４）。これらの場合は、選択したファームウェアブロックへの新たなファームウェアの書き込み前、または選択したファームウェアブロックへの新たなファームウェアの書き込み後でつぎに選択されるファームウェアブロックへの新たなファームウェアの書き込み前に障害が発生した場合である。たとえば図６（ａ）に示されるように、ファームウェアブロック１１１−３の更新処理完了後でファームウェアブロック１１１−２の更新処理開始前に障害が発生した場合には、障害発生時よりも前に更新処理が完了したファームウェアブロック１１１−３，１１１−４には新たなファームウェア５１−２と完了ログ５２−２が格納され、障害発生時よりも後に更新処理がされるはずだったファームウェアブロック１１１−１，１１１−２には更新前のファームウェア５１−１と完了ログ５２−１と開始ログ５３とが格納されている。
【００３５】
また、ステップＳ１５でファームウェアの更新処理が正常に終了しなかった場合（ステップＳ１５でＮｏの場合）、すなわち更新順序で最初のファームウェアブロックへのファームウェアの更新処理中に、メモリシステム１０の電源断やＮＡＮＤフラッシュメモリのページ書き込み失敗などの障害発生によって、更新処理が正常に完了しなかった場合にも、更新処理の途中で異常終了する（ステップＳ２４）。たとえば図６（ｂ）に示されるように、ファームウェアブロック１１１−４で新たなファームウェア５１−２を書き込み中に障害が発生した場合には、更新処理の途中であったページは、次回起動時には読み出しは可能であるが消去データとなっており、正確なファームウェア５１−２を読み出すことはできない。また、更新処理の途中であったファームウェアブロック１１１−４には、開始ログ５３および完了ログ５２−１，５２−２がともに記録されていない状態となる。さらに、更新順序で、このファームウェアブロック１１１−４よりも後のファームウェアブロック１１１−１〜１１１−３には、更新処理前のファームウェア５１−１とそれに対応する完了ログ５２−１が格納されるとともに、開始ログ５３も格納されている。
【００３６】
また、ステップＳ２１でファームウェアの更新処理が正常に終了しなかった場合（ステップＳ２１でＮｏの場合）、すなわち更新順序で最初ではない他のファームウェアの更新処理中に、メモリシステム１０の電源断やＮＡＮＤフラッシュメモリのページ書き込み失敗などの障害発生によって、更新処理が正常に完了しなかった場合にも、更新処理の途中で異常終了する（ステップＳ２４）。これらの場合は、図７（ａ）、（ｂ）に示されている。
【００３７】
図７（ａ）は、ファームウェアブロック１１１−３で新たなファームウェア５１−２を書き込み中に障害が発生した場合であり、更新処理の途中であったページは、次回起動時には読み出しは可能であるが消去データとなっており、正確なファームウェア５１−２を読み出すことはできない。また、更新処理の途中であったファームウェアブロック１１１−３には、開始ログ５３および完了ログ５２−１，５２−２がともに記録されていない状態となる。さらに、更新順序で、このファームウェアブロック１１１−１よりも後のファームウェアブロック１１１−１〜１１１−２には、更新処理前のファームウェア５１−１とそれに対応する完了ログ５２−１が格納されるとともに、開始ログ５３も格納されている。
【００３８】
図７（ｂ）は、更新順序で最後のファームウェアブロック１１１−１で新たなファームウェア５１−２を書き込み中に障害が発生した場合であり、更新処理の途中であったページは、次回起動時には読み出しは可能であるが消去データとなっており、正確なファームウェア５１−２を読み出すことはできない。また、更新処理の途中であったファームウェアブロック１１１−１には、開始ログ５３および完了ログ５２−１，５２−２がともに記録されていない状態となる。
【００３９】
ステップＳ２４で更新処理の途中でメモリシステム１０が異常終了した場合には、ファームウェアの更新が失敗し、ファームウェアが確実に多重化されていない状態（最大多重度よりも低い多重度の状態）となっているので、後にメモリシステム１０が起動された場合にリカバリ処理が実行されることになる。
【００４０】
＜ファームウェアの読み出し処理＞
図８は、第１の実施形態によるファームウェアの読み込み処理の手順の一例を示すフローチャートである。
【００４１】
まず、メモリシステム１０が起動されると、システム管理部１３４は、予め定められた読み出し順序で規定される最初のファームウェアブロックからファームウェアを先頭ページから読み出す（ステップＳ５１）。ついで、システム管理部１３４は、先頭ページを正常に読み出せたか判定する（ステップＳ５２）。ここで、正常に読み出せない場合として、上述した更新処理の際に障害が発生し、先頭ページ自体は読み出すことができるが、消去データとなっているような場合を挙げることができる。
【００４２】
正常に読み出せた場合（ステップＳ５２でＹｅｓの場合）には、つぎのページを読み出し（ステップＳ５３）、同様に正常に読み出せたかを判定する（ステップＳ５４）。正常に読み出せた場合（ステップＳ５４でＹｅｓの場合）には、読み出したページは完了ログであるかを判定する（ステップＳ５５）。完了ログでない場合（ステップＳ５５でＮｏの場合）には、ステップＳ５３へと戻り、ファームウェアを構成するページの読み出しを続ける。そして、ファームウェアを構成するページを全て読み出し、完了ログを読み出した場合（ステップＳ５５でＹｅｓの場合）には、読み出したファームウェアを実行する（ステップＳ５６）。
【００４３】
その後、システム管理部１３４は、読み出しを行った最初のファームウェアブロックの所定のページ（たとえば最終ページ）に開始ログがあるかを判定する（ステップＳ５７）。最終ページに開始ログがない場合（ステップＳ５７でＮｏの場合）、ファームウェアの読み出し処理が終了する。この場合には、読み出し順序が最初のファームウェアブロックからファームウェアを読み出すことができたことを意味している。また、読み出し順序が最初、すなわち更新順序が最後のファームウェアブロックの開始ログがなく、完了ログがあるということは、ファームウェア保存領域中の全てのファームウェアブロックで正常にファームウェアの更新処理が終了していることを意味しているので、リカバリ処理を行わなくてよい。
【００４４】
一方、ステップＳ５７で開始ログがある場合（ステップＳ５７でＹｅｓの場合）には、読み出し順序でつぎのファームウェアブロックに開始ログがあるかを判定する（ステップＳ５８）。つぎのファームウェアブロックに開始ログがない場合（ステップＳ５８でＮｏの場合）には、そのファームウェアブロックに完了ログがあるかを判定する（ステップＳ５９）。
【００４５】
完了ログがある場合（ステップＳ５９でＹｅｓの場合）には、読み出し順序でこのブロックの２つ前のファームウェアブロックの更新処理が終了し、読み出し順序で１つ前のファームウェアブロックの更新処理を開始する前の段階でメモリシステム１０の電源断などの障害が発生したような場合であり、図６（ａ）に示されるような場合である。図６（ａ）の場合には、ファームウェアブロック１１１−３には、電源断が発生する直前に更新処理が終了しているので新たなファームウェア５１−２と完了ログ５２−２が格納されているが、更新順序がつぎのファームウェアブロック１１１−２には、更新処理を開始する前に電源断が発生しているので更新前のファームウェア５１−１と完了ログ５２−１と開始ログ５３とが格納されている。そのため、ファームウェアブロック１１１−２から更新順で最後のファームウェアブロック１１１−１までがリカバリ対象となる。つまり、読み出し順序で前のファームウェアブロック１１１−１−２までを新たなファームウェア５１−２でリカバリ処理する。そして、システム管理部１３４はファームウェアブロック１１１−３，１１１−４の新たなファームウェア５１−２を、開始ログ５３が格納されているファームウェアブロック１１１−１，１１１−２に更新順序に従って書き直す処理を行い（ステップＳ６０）、ファームウェアの読み込み処理が終了する。
【００４６】
また、完了ログがない場合（ステップＳ５９でＮｏの場合）には、そのファームウェアブロックが読み出し順序が最後のファームウェアブロックであるかを判定する（ステップＳ６１）。最後のファームウェアブロックでない場合（ステップＳ６１でＮｏの場合）には、更新順序で最初ではないファームウェアブロックの更新処理中にメモリシステム１０の電源断が発生したような場合である。たとえば図７（ａ）の場合には、ファームウェアブロック１１１−３の２ページに新たなファームウェア５１−２を書き込み中に障害が発生しているため、このファームウェアブロック１１１−３には、完了ログ５２−１，５２−２と開始ログ５３のいずれも格納されていない。一方、更新順序がその前のファームウェアブロック１１１−４には、新たなファームウェア５１−２と完了ログ５２−２とが格納され、更新順序がつぎ以降のファームウェアブロック１１１−２，１１１−１には、更新前のファームウェア５１−１と完了ログ５２−１と開始ログ５３が格納されている。そのため、そのファームウェアブロック１１１−３まで、すなわち更新順序でファームウェアブロック１１１−３〜１１１−１までが更新対象となる。この場合には、ファームウェアブロック１１１−４の新たなファームウェア５１−２を、更新処理の途中で失敗したファームウェアブロック１１１−３と、開始ログ５３が格納されているファームウェアブロック１１１−１，１１１−２に更新順序に従って書き直す処理を行い（ステップＳ６０）、ファームウェアの読み込み処理が終了する。
【００４７】
また、ステップＳ６１で最後のファームウェアブロックである場合（ステップＳ６１でＹｅｓの場合）には、更新順序で最初のファームウェアブロックの更新処理中にメモリシステムの電源断が発生したような場合である。たとえば図６（ｂ）の場合には、ファームウェアブロック１１１−４の２ページに新たなファームウェア５１−２を書き込み中に障害が発生しているため、このファームウェアブロック１１１−４には、完了ログ５２−１，５２−２と開始ログ５３のいずれも格納されていない。一方、更新順序がつぎ以降のファームウェアブロック１１１−１〜１１１−３には、更新前のファームウェア５１−１と完了ログ５２−１と開始ログ５３が格納されている。つまり、どのファームウェアブロック１１１−１〜１１１−４にも新たなファームウェア５１−２が格納されていないことになる。そのため、すべてのファームウェアブロック１１１−４が更新対象となる。この場合には、更新処理の途中で失敗したファームウェアブロック１１１−４以外のファームウェアブロック１１１−１〜１１１−３の更新前のファームウェア５１−１を、ファームウェアブロック１１１−４に書き直すリカバリ処理を行い（ステップＳ６５）、ファームウェアの読み込み処理が終了する。
【００４８】
一方、ステップＳ５８でつぎのファームウェアブロックに開始ログがある場合（ステップＳ５８でＹｅｓの場合）には、そのファームウェアブロックが読み出し順序で最後のブロックであるかを判定する（ステップＳ６４）。最後のブロックではない場合（ステップＳ６４でＮｏの場合）にはステップＳ５８へと処理が戻る。
【００４９】
また、最後のブロックである場合（ステップＳ６４でＹｅｓの場合）には、たとえば図４（ａ）のように、開始ログ５３を書き込んだ後で、更新順序で最初のファームウェアブロック１１１−４に新たなファームウェア５１−２を書き込む前にメモリシステム１０の電源断が発生したような場合である。この場合には、全てのファームウェアブロック１１１−１〜１１１−４のいずれも更新されておらず、更新前のファームウェア５１−１が正常に残されている状態である。そのため、全てのファームウェアブロック１１１−１〜１１１−４に新たなファームウェア５１−２を書き込むリカバリ処理が行われ（ステップＳ６５）、ファームウェアの読み込み処理が終了する。
【００５０】
一方、ステップＳ５２またはステップＳ５４で読み出し順序が最初のファームウェアブロックからファームウェアを読み出せなかった場合（ステップＳ５２またはＳ５４でＮｏの場合）には、読み出し順序でつぎのファームウェアブロックのステップＳ５２またはステップＳ５４で読み出せなかったページ以降を読み出す処理を行う（ステップＳ６６）。これは図７（ｂ）に示されるように、最初のファームウェアブロックで読み出しができない場合には、最初のファームウェアブロックに新たなファームウェアを書き込み中にメモリシステム１０の電源断やＮＡＮＤフラッシュメモリのページ書き込み失敗などの障害が発生したことを意味している。すなわち、読み出し順でつぎのファームウェアブロック以降には、新たなファームウェアが既に格納されており、かつ読み出し失敗となるページが存在しないことを意味していることになる。そのため、上記のように読み出し順で最初のファームウェアブロックから読み出せなかったページがある場合には、つぎのファームウェアブロックの読み出せなかったページから読み込み処理を行っても、同じ新たなファームウェアであるので問題は生じない。また、このように読み出し順で最初のファームウェアブロックで読み出せなかった場合に、つぎのファームウェアブロックの同じページからファームウェアを読み出せるようにするために、第１の実施形態では、図３でのファームウェアブロックの更新順序と、図８でのファームウェアブロックの読み出し順序とを逆にしている。
【００５１】
たとえば、図７（ｂ）の場合には、読み出し順序で最初のファームウェアブロック１１１−１の２ページまでは新たなファームウェア５１−２が書き込まれている。この場合には、システム管理部１３４は、読み出し順序で最初のファームウェアブロック１１１−１の２ページまでを読み込み、その後読み出し順序でつぎのファームウェアブロック１１１−２の３ページ以降を読み込み、新たなファームウェア５１−２を実行可能としている。また、この場合には、ファームウェアブロック１１１−１が更新対象となる。
【００５２】
ついで、読み出したファームウェアを実行した後（ステップＳ６７）、システム管理部１３４は、読み出し順序で最初のファームウェアブロックに、他のファームウェアブロックの新たなファームウェアを書き込むリカバリ処理を行い（ステップＳ６８）、ファームウェア５１の読み込み処理が終了する。
【００５３】
なお、上述した説明では、ファームウェア５１を書き込んだつぎのページに完了ログ５２を書き込む場合を例に挙げたが、完了ログ５２として、ファームウェア５１を正常に書き込むことができたことを示すものであれば、他の形態であってもよい。たとえば、特定のビットにファームウェア５１の更新完了の有無を示す役割を持たせ、このビットのシグネチャを確認することで、ファームウェア５１の更新完了の有無を判断することができる。また、ファームウェア５１の先頭にファームウェア５１のサイズ情報を設けておき、各ファームウェアブロック１１１−１〜１１１−４に格納されているファームウェアがサイズ情報と同じサイズを持っているか否かを完了ログの代わりとしてもよい。
【００５４】
以上説明してきたように、第１の実施形態では、多重化されたファームウェアブロック１１１−１〜１１１−４の各ブロックにファームウェア５１と、そのファームウェアの更新が完了したことを示す完了ログ５２と、つぎのファームウェアへの更新前に記録する開始ログ５３と、を記録するようにしたので、ファームウェア５１の更新状態を示すログ用に別途専用のブロックを設ける必要が無くなる。その結果、ＮＡＮＤメモリ１１の疲弊を遅らせることが可能となる。また、ファームウェアブロック１１１−１〜１１１−４の内容の更新の際には、ブロック管理部１３３が準備するブロックに開始ログ５３や完了ログ５２を記録することなく、システム管理部１３４が行うファームウェア５１の更新処理時に障害が発生しても、再起動時にシステム管理部１３４で対応することができ、システム内部処理でシステム管理部１３４とブロック管理部１３３の順序依存関係を排除し、処理の簡素化およびバグの軽減を図ることができる。
【００５５】
ここで、ファームウェア５１を更新する際にファームウェアブロック１１１−１〜１１１−４の更新順序を、メモリシステム１０の起動時のファームウェア５１を読み出すファームウェアブロック１１１−１〜１１１−４の読み込み順序と同じになるようにした場合を考える。読み出し順序（更新順序）で最初のファームウェアブロック１１１−１への新たなファームウェア５１の書き込み中に障害が発生した場合には、メモリシステム１０が再起動される。そのとき、システム管理部１３４は、書き込みができたページまでしか読み込むことができない。これは、第１の実施形態のように、読み込み順序で最初のファームウェアブロック１１１−１に格納されているファームウェア５１とつぎのファームウェアブロック１１１−２のファームウェア５１のバージョンの整合性が担保されないために、読み出しができなかったページをつぎのファームウェアブロックから読み出すことができないからである。その結果、新たなファームウェア５１の一部のみを読み込んだ状態で動作してしまう危険性がある。
【００５６】
これに対して、第１の実施形態では、ファームウェア５１を更新する際にファームウェアブロック１１１−１〜１１１−４の更新順序を、メモリシステム１０の起動時のファームウェア５１を読み出すファームウェアブロック１１１−１〜１１１−４の読み出し順序とは逆順となるようにした。これによって、たとえば更新順序で最後のファームウェアブロック１１１−１への新たなファームウェア５１の書き込み中に障害が発生した場合でも、それより前のファームウェアブロック１１１−２〜１１１−４には正常に新たなファームウェア５１が書きこまれていることになる。その結果、次回メモリシステム１０が起動される際には、読み出し順序で最初のファームウェアブロック１１１−１を先頭ページから読み出し、読み出しができないページから最終ページまでは読み出し順序でつぎのファームウェアブロック１１１−２から読み出して、システム管理部１３４でファームウェア５１を完全に読み出して処理を行うことが可能になる。
【００５７】
（第２の実施形態）
第１の実施形態では、ファームウェアブロックの更新処理中にシステム電源断やページ書き込み失敗などの障害が発生した後のファームウェアブロックのリカバリ処理について述べた。第２の実施形態では、ファームウェアブロックを構成するメモリセルの劣化によって、ファームウェアブロックの読み出しエラーが発生した場合の処理について説明する。
【００５８】
図９は、第２の実施形態によるファームウェアの読み出しエラー発生時の処理の手順の一例を示すフローチャートである。なお、ここでは、ファームウェア格納領域のファームウェアブロックは、全て同じ世代（バージョン）のファームウェアを有していることを前提とする。
【００５９】
まず、システム管理部１３４は、ファームウェアブロックのいずれかからファームウェアを読み込む（ステップＳ９１）。これは、たとえば図８のステップＳ５１，Ｓ５３，Ｓ６６での処理である。そして、読み出しエラーであるかを判定する（ステップＳ９２）。ここで、読み出しエラーは、ブロックを構成するメモリセルの劣化によって記録しているデータが破壊される場合に返される信号である。読み出しエラーでない場合（ステップＳ９２でＮｏの場合）には、正常に読み込めたことになるので、そのまま処理が終了する。
【００６０】
一方、読み出しエラーが発生した場合（ステップＳ９２でＹｅｓの場合）には、そのファームウェアブロックについて読み出しエラーが通算して所定の回数発生したかを判定する（ステップＳ９３）。読み出しエラーの発生が所定の回数未満の場合（ステップＳ９３でＮｏの場合）には、そのファームウェアブロックについてリカバリ処理を行う（ステップＳ９４）。
【００６１】
このリカバリ処理では、ＮＡＮＤメモリ１１（メモリセル）が原因で読み出しエラーが発生した場合には、他のファームウェアブロックから取得したファームウェアで、そのブロックに書き直して復旧することを目指す。これは、高い確率でメモリセルが劣化していると判断できるまで所定の回数行われる。以上によって、ファームウェアの読み出しエラー発生時の処理が終了する。
【００６２】
また、ステップＳ９３で所定の回数の読み出しエラーが発生した場合（ステップＳ９３でＹｅｓの場合）には、そのファームウェアブロックをバッドブロックとして登録するバッドブロック処理を行う（ステップＳ９５）。
【００６３】
このバッドブロック処理では、リカバリ処理をしても所定の回数の読み出しエラーが発生したファームウェアブロックは、そのファームウェアブロックを構成するＮＡＮＤメモリ１１に問題があるものとして、以後の処理で使用しないようにするものである。そこで、システム管理部１３４は、所定の回数の読み出しエラーが発生したファームウェアブロックをバッドブロックとして登録する。これによって、システム管理部１３４は、次回以降このブロックにアクセスしないようにすることができる。また、この処理によってファームウェアの多重度は１減ることになる。以上によって、ファームウェアの読み出しエラー発生時の処理が終了する。
【００６４】
図１０は、バッドブロック処理後のファームウェアブロックの状態の一例を示す図である。バッドブロック処理前では、ファームウェアブロック１１１−１→ファームウェアブロック１１１−２→ファームウェアブロック１１１−３→ファームウェアブロック１１１−４の順にファームウェア５１の読み込み順が設定されている。
【００６５】
その後、最初のファームウェアブロック１１１−１に読み出しエラーが所定の回数発生して、ファームウェアブロック１１１−１がバッドブロック化される。これによって、ファームウェアブロック１１１−１がバッドブロック化された後のファームウェア５１の読み出し処理では、ファームウェアブロック１１１−１ははじめからアクセスされず、ファームウェアブロック１１１−２→ファームウェアブロック１１１−３→ファームウェアブロック１１１−４の順にファームウェア５１の読み込み順が設定されることになる。
【００６６】
第２の実施形態では、所定の回数の読み出しエラーを起こしたファームウェアブロックをバッドブロックとした。これによって、読み出しエラーが頻発するファームウェアブロックからファームウェアを読み出す場合に比して、ファームウェアの読み込み処理を安定化させ、高速化することができるという効果を有する。
【００６７】
（第３の実施形態）
図１１は、ＳＳＤを搭載したパーソナルコンピュータの一例を示す斜視図である。パーソナルコンピュータ１２００は、本体１２０１、および表示ユニット１２０２を備えている。表示ユニット１２０２は、ディスプレイハウジング１２０３と、このディスプレイハウジング１２０３に収容された表示装置１２０４と、を備えている。
【００６８】
本体１２０１は、筐体１２０５と、キーボード１２０６と、ポインティングデバイスであるタッチパッド１２０７とを備えている。筐体１２０５内部には、メイン回路基板、ＯＤＤ（optical  disk  device）ユニット、カードスロット、およびＳＳＤ１０Ａ等が収容されている。このＳＳＤは、第１および第２の実施形態で説明したメモリシステムに相当している。
【００６９】
カードスロットは、筐体１２０５の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部１２０８が設けられている。ユーザは、この開口部１２０８を通じて筐体１２０５の外部から追加デバイスをカードスロットに挿抜することが可能である。
【００７０】
ＳＳＤ１０Ａは、従来のＨＤＤの置き換えとして、パーソナルコンピュータ１２００内部に実装された状態として使用してもよいし、パーソナルコンピュータ１２００が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【００７１】
図１２は、ＳＳＤを搭載したパーソナルコンピュータのシステム構成例を示すブロック図である。パーソナルコンピュータ１２００は、ＣＰＵ１３０１、ノースブリッジ１３０２、主メモリ１３０３、ビデオコントローラ１３０４、オーディオコントローラ１３０５、サウスブリッジ１３０９、ＢＩＯＳ−ＲＯＭ１３１０、ＳＳＤ１０Ａ、ＯＤＤユニット１３１１、エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１３１２、およびネットワークコントローラ１３１３等を備えている。
【００７２】
ＣＰＵ１３０１は、パーソナルコンピュータ１２００の動作を制御するために設けられたプロセッサであり、ＳＳＤ１０Ａから主メモリ１３０３にロードされるオペレーティングシステム（ＯＳ）を実行する。さらに、ＯＤＤユニット１３１１が、装填された光ディスクに対して読み出し処理および書き込み処理の少なくとも１つの処理の実行を可能にした場合に、ＣＰＵ１３０１は、それらの処理の実行をする。
【００７３】
また、ＣＰＵ１３０１は、ＢＩＯＳ−ＲＯＭ１３１０に格納されたシステムＢＩＯＳ（Basic  Input  Output  System）も実行する。なお、システムＢＩＯＳは、パーソナルコンピュータ１２００内のハードウェア制御のためのプログラムである。
【００７４】
ノースブリッジ１３０２は、ＣＰＵ１３０１のローカルバスとサウスブリッジ１３０９との間を接続するブリッジデバイスである。ノースブリッジ１３０２には、主メモリ１３０３をアクセス制御するメモリコントローラも内蔵されている。
【００７５】
また、ノースブリッジ１３０２は、ＡＧＰ（Accelerated  Graphics  Port）バス等を介してビデオコントローラ１３０４との通信、およびオーディオコントローラ１３０５との通信を実行する機能も有している。
【００７６】
主メモリ１３０３は、プログラムやデータを一時的に記憶し、ＣＰＵ１３０１のワークエリアとして機能する。主メモリ１３０３は、たとえばＤＲＡＭから構成される。
【００７７】
ビデオコントローラ１３０４は、パーソナルコンピュータ１２００のディスプレイモニタとして使用される表示ユニット１２０２を制御するビデオ再生コントローラである。
【００７８】
オーディオコントローラ１３０５は、パーソナルコンピュータ１２００のスピーカ１３０６を制御するオーディオ再生コントローラである。
【００７９】
サウスブリッジ１３０９は、ＬＰＣ（Low  Pin  Count）バス１３１４上の各デバイス、およびＰＣＩ（Peripheral  Component  Interconnect）バス１３１５上の各デバイスを制御する。また、サウスブリッジ１３０９は、各種ソフトウェアおよびデータを格納する記憶装置であるＳＳＤ１０Ａを、ＡＴＡインタフェースを介して制御する。
【００８０】
パーソナルコンピュータ１２００は、セクタ単位でＳＳＤ１０Ａへのアクセスを行う。ＡＴＡインタフェース（Ｉ／Ｆ）を介して、書き込みコマンド、読み出しコマンド、フラッシュコマンド等がＳＳＤ１０Ａに入力される。
【００８１】
また、サウスブリッジ１３０９は、ＢＩＯＳ−ＲＯＭ１３１０、およびＯＤＤユニット１３１１をアクセス制御するための機能も有している。
【００８２】
ＥＣ／ＫＢＣ１３１２は、電力管理のためのエンベデッドコントローラと、キーボード（ＫＢ）１２０６およびタッチパッド１２０７を制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。
【００８３】
このＥＣ／ＫＢＣ１３１２は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ１２００の電源をＯＮ／ＯＦＦする機能を有している。ネットワークコントローラ１３１３は、たとえばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【００８４】
パーソナルコンピュータ１２００は、ＳＳＤ１０Ａに電源供給を行い、また、ＳＳＤ１０Ａに停止要求（Standby要求）を発行する。仮にパーソナルコンピュータ１２００からＳＳＤ１０Ａへの電源供給が不正に断たれた場合であっても、書き込みエラーの発生を未然に防ぐことができる。
【００８５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８６】
１…ホスト、１０…メモリシステム、１１…ＮＡＮＤメモリ、１２…ＲＡＭ、１３…コントローラ、５１…ファームウェア、５２…完了ログ、５３…開始ログ、１１０…固定領域、１１１…ファームウェアブロック、１３１…コマンド処理部、１３２…データ転送部、１３３…ブロック管理部、１３４…システム管理部。
【図１】
2013174976.tif 000003
【図２】
2013174976.tif 000004
【図３】
2013174976.tif 000005
【図４】
2013174976.tif 000006
【図５】
2013174976.tif 000007
【図６】
2013174976.tif 000008
【図７】
2013174976.tif 000009
【図８】
2013174976.tif 000010
【図９】
2013174976.tif 000011
【図１０】
2013174976.tif 000012
【図１１】
2013174976.tif 000013
【図１２】
2013174976.tif 000014