(57)【要約】【課題】  起動プログラムが実行できないことにより装置を起動できなくなる事態を回避可能なフラッシュメモリの制御方法、メモリコントローラ及び当該メモリコントローラを備えるフラッシュメモリシステムを提供することを目的とする。【解決手段】  ホストシステムの起動時に、前記ホストシステムの起動プログラムとそのバックアッププログラムとを記憶すべきフラッシュメモリに、起動プログラムが格納されているか否かを判定する。起動プログラムが格納されている場合には起動プログラムを、格納されていない場合には、バックアッププログラムを読み出す。そして、読み出された起動プログラム又はバックアッププログラムを、ホストシステムに供給する。【選択図】図９
2006350430.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリを記憶媒体として利用するホストシステムが指定する仮想的なブロックのアドレスを定義する論理ブロックアドレスと前記フラッシュメモリが有する各ブロックの固有のアドレスを定義する物理ブロックアドレスとの対応付けを示すアドレス対応情報を管理するアドレス管理手段と、
前記ホストシステムからの命令に応答して、前記アドレス対応情報に基づき、前記フラッシュメモリにデータを書き込む書き込み手段と、
前記ホストシステムからの命令に応答して、前記アドレス対応情報に基づき、前記フラッシュメモリに書き込まれているデータを読み出して前記ホストシステムに供給する、読み出し手段と、
前記ホストシステムの起動時に、前記ホストシステムが実行すべき起動プログラムが前記フラッシュメモリに格納されているか否かを判定する判定手段と、から構成されるメモリコントローラであって、
前記フラッシュメモリは、前記起動プログラムと前記起動プログラムのバックアッププログラムとを記憶し、
前記アドレス管理手段は、前記判定手段が、前記起動プログラムが格納されていないと判定した場合、前記起動プログラムのバックアッププログラムが前記フラッシュメモリから読み出されるように前記アドレス対応情報を更新し、
前記読み出し手段は、前記ホストシステムの起動時に前記アドレス対応情報に基づき、前記起動プログラム又は前記起動プログラムのバックアッププログラムを前記ホストシステムに供給する、
ことを特徴とするメモリコントローラ。
【請求項２】
前記アドレス管理手段は、所定の論理ブロックアドレスを前記起動プログラムが格納されるブロックの論理ブロックアドレスとして管理し、
前記判定手段は、前記アドレス管理手段が保持するアドレス対応情報において、前記起動プログラムが格納される所定の論理ブロックアドレスに物理ブロックアドレスが対応付けられていない場合に、前記フラッシュメモリに前記起動プログラムが格納されていないと判定する、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記読み出し手段は、読み出したデータに含まれる誤りを、前記フラッシュメモリが有するブロックを構成するページ毎に、１つのページに対し所定数の誤りを限度として、訂正する誤り訂正手段を備え、
読み出したページに含まれる誤りが前記誤り訂正手段により訂正可能な所定数よりも多い場合に、当該読み出したページに代えて前記起動プログラムのバックアッププログラムが格納されたブロックの当該読み出したページに対応するページを読み出す、
ことを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項４】
前記フラッシュメモリは、前記起動プログラムと前記起動プログラムのバックアッププログラムとを記憶するためのプログラム専用領域を有する、
ことを特徴とする請求項１から３のいずれか１項に記載のメモリコントローラ。
【請求項５】
前記アドレス管理手段は、前記判定手段が、前記フラッシュメモリに前記起動プログラムが格納されていないと判定した場合、前記アドレス対応情報における前記起動プログラムが記憶されるべき論理ブロックアドレスに対応する物理ブロックアドレスを、前記起動プログラムのバックアッププログラムが記憶されたブロックの物理ブロックアドレスで置き換えるように更新し、
前記読み出し手段は、更新されたアドレス対応情報に基づいて前記起動プログラムのバックアッププログラムを読み出す、
ことを特徴とする請求項１から４のいずれか１項に記載のメモリコントローラ。
【請求項６】
前記書き込み手段は、前記起動プログラムのバックアッププログラム以外のデータを書き込む際には、データが書き込まれる各ブロックが有する冗長領域に、各ブロックに対応する論理ブロックアドレスを示す論理シリアル番号を書き込み、前記起動プログラムのバックアッププログラムのデータを書き込む際には、データが書き込まれる各ブロックが有する冗長領域に、各ブロックに対応する論理ブロックアドレスが存在しない論理シリアル番号を書き込み、
前記アドレス管理手段は、論理ブロックアドレスと物理ブロックアドレスとの対応関係を、前記冗長領域に書き込まれた前記論理シリアル番号に基づいて管理し、前記判定手段が、前記フラッシュメモリに前記起動プログラムが格納されていないと判定した場合、前記アドレス対応情報における前記起動プログラムが記憶されるべき論理ブロックアドレスに対応する物理ブロックアドレスを、対応する論理ブロックアドレスが存在しない論理シリアル番号が冗長領域に書き込まれているブロックの物理ブロックアドレスで置き換えるように更新し、
前記読み出し手段は、更新されたアドレス対応情報に基づいて前記起動プログラムのバックアッププログラムを読み出す、
ことを特徴とする請求項５に記載のメモリコントローラ。
【請求項７】
前記書き込み手段は、前記起動プログラムを更新する際に、前記起動プログラムのバックアッププログラムも更新する、
ことを特徴とする請求項１から６のいずれか１項に記載のメモリコントローラ。
【請求項８】
請求項１乃至７のいずれか１項に記載のメモリコントローラと、フラッシュメモリとを備えることを特徴とするフラッシュメモリシステム。
【請求項９】
ホストシステムの起動時に、前記ホストシステムの起動プログラムが格納されているか否かを判定する判定ステップと、
前記判定ステップで前記起動プログラムが格納されていると判定された場合に、前記フラッシュメモリから、前記起動プログラムを読み出す第１の読み出しステップと、
前記判定ステップで前記起動プログラムが格納されていないと判定された場合に、前記フラッシュメモリから、前記起動プログラムのバックアッププログラムを読み出す第２の読み出しステップと、
前記判定ステップで前記起動プログラムが格納されていると判定された場合における前記第１の読み出しステップで読み出された前記起動プログラム又は前記判定ステップで前記起動プログラムが格納されていないと判定された場合における前記第２の読み出しステップで読み出されたバックアッププログラムを、前記ホストシステムに供給する供給ステップと、から構成される、
ことを特徴とするフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ及び当該メモリコントローラを備えるフラッシュメモリシステムに関する。
【背景技術】
【０００２】
近年、フラッシュメモリの性能（記憶容量、信頼性、動作速度等）が向上し、不揮発性の記憶媒体として、プログラム等を格納する用途に用いられつつある。
【０００３】
フラッシュメモリは、その特性上、読み出されたデータに誤りが混入するおそれがある。例えば、メモリセルに対する読み出しや書き込みが実行された場合に、このメモリセルとビット線を共通にする他のメモリセルの状態が変化してしまう、ディスターブ現象がその一例として挙げられる（特許文献１を参照）。
このため、フラッシュメモリを記憶媒体として利用する装置の電源投入時に、フラッシュメモリに格納された起動プログラム（ブートプログラム）を実行しようとする場合、正常にプログラムが実行されず、当該装置を起動できないことがあった。
【特許文献１】特開２００４−２７２４７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明は上記の実情に鑑みてなされてもので、起動プログラムが実行できないことにより装置を起動できなくなる事態を回避可能なフラッシュメモリの制御方法、メモリコントローラ及び当該メモリコントローラを備えるフラッシュメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の第１の観点に係るメモリコントローラは、フラッシュメモリを記憶媒体として利用するホストシステムが指定する仮想的なブロックのアドレスを定義する論理ブロックアドレスと前記フラッシュメモリが有する各ブロックの固有のアドレスを定義する物理ブロックアドレスとの対応付けを示すアドレス対応情報を管理するアドレス管理手段と、前記ホストシステムからの命令に応答して、前記アドレス対応情報に基づき、前記フラッシュメモリにデータを書き込む書き込み手段と、前記ホストシステムからの命令に応答して、前記アドレス対応情報に基づき、前記フラッシュメモリに書き込まれているデータを読み出して前記ホストシステムに供給する、読み出し手段と、前記ホストシステムの起動時に、前記ホストシステムが実行すべき起動プログラムが前記フラッシュメモリに格納されているか否かを判定する判定手段と、から構成されるメモリコントローラであって、前記フラッシュメモリは、前記起動プログラムと前記起動プログラムのバックアッププログラムとを記憶し、前記アドレス管理手段は、前記判定手段が、前記起動プログラムが格納されていないと判定した場合、前記起動プログラムのバックアッププログラムが前記フラッシュメモリから読み出されるように前記アドレス対応情報を更新し、前記読み出し手段は、前記ホストシステムの起動時に前記アドレス対応情報に基づき、前記起動プログラム又は前記起動プログラムのバックアッププログラムを前記ホストシステムに供給する、ことを特徴とする。
なお、本発明において、ホストシステムとは、フラッシュメモリを記憶媒体として利用する装置を指すものとする。
【０００６】
前記アドレス管理手段は、所定の論理ブロックアドレスを前記起動プログラムが格納されるブロックの論理ブロックアドレスとして管理し、前記判定手段は、前記アドレス管理手段が保持するアドレス対応情報において、前記起動プログラムが格納される所定の論理ブロックアドレスに物理ブロックアドレスが対応付けられていない場合に、前記フラッシュメモリに前記起動プログラムが格納されていないと判定してもよい。
【０００７】
前記読み出し手段は、読み出したデータに含まれる誤りを、前記フラッシュメモリが有するブロックを構成するページ毎に、１つのページに対し所定数の誤りを限度として、訂正する誤り訂正手段を備え、読み出したページに含まれる誤りが前記誤り訂正手段により訂正可能な所定数よりも多い場合に、当該読み出したページに代えて前記起動プログラムのバックアッププログラムが格納されたブロックの当該読み出したページに対応するページを読み出してもよい。
【０００８】
前記フラッシュメモリは、前記起動プログラムと前記起動プログラムのバックアッププログラムとを記憶するためのプログラム専用領域を有してもよい。
【０００９】
前記アドレス管理手段は、前記判定手段が、前記フラッシュメモリに前記起動プログラムが格納されていないと判定した場合、前記アドレス対応情報における前記起動プログラムが記憶されるべき論理ブロックアドレスに対応する物理ブロックアドレスを、前記起動プログラムのバックアッププログラムが記憶されたブロックの物理ブロックアドレスで置き換えるように更新し、前記読み出し手段は、更新されたアドレス対応情報に基づいて前記起動プログラムのバックアッププログラムを読み出してもよい。
【００１０】
前記書き込み手段は、前記起動プログラムのバックアッププログラム以外のデータを書き込む際には、データが書き込まれる各ブロックが有する冗長領域に、各ブロックに対応する論理ブロックアドレスを示す論理シリアル番号を書き込み、前記起動プログラムのバックアッププログラムのデータを書き込む際には、データが書き込まれる各ブロックが有する冗長領域に、各ブロックに対応する論理ブロックアドレスが存在しない論理シリアル番号を書き込み、前記アドレス管理手段は、論理ブロックアドレスと物理ブロックアドレスとの対応関係を、前記冗長領域に書き込まれた前記論理シリアル番号に基づいて取得し、前記判定手段が、前記フラッシュメモリに前記起動プログラムが格納されていないと判定した場合、前記アドレス対応情報における前記起動プログラムが記憶されるべき論理ブロックアドレスに対応する物理ブロックアドレスを、対応する論理ブロックアドレスが存在しない論理シリアル番号が冗長領域に書き込まれているブロックの物理ブロックアドレスで置き換えるように更新し、前記読み出し手段は、更新されたアドレス対応情報に基づいて前記起動プログラムのバックアッププログラムを読み出してもよい。
なお、本発明において、冗長領域とは、ホストシステムが利用するデータが記録されるユーザ領域に記録されたデータの管理に用いる付加的な情報が記録される領域を指すものとする。
【００１１】
前記書き込み手段は、前記起動プログラムを更新する際に、前記起動プログラムのバックアッププログラムも更新してもよい。
【００１２】
本発明の第２の観点に係るフラッシュメモリシステムは、上記の特徴のうち、少なくともいずれか一つを有するメモリコントローラと、フラッシュメモリとを備えることを特徴とする。
【００１３】
本発明の第３の観点に係るフラッシュメモリの制御方法は、ホストシステムの起動時に、前記ホストシステムの起動プログラムが格納されているか否かを判定する判定ステップと、前記判定ステップで前記起動プログラムが格納されていると判定された場合に、前記フラッシュメモリから、前記起動プログラムを読み出す第１の読み出しステップと、前記判定ステップで前記起動プログラムが格納されていないと判定された場合に、前記フラッシュメモリから、前記起動プログラムのバックアッププログラムを読み出す第２の読み出しステップと、前記判定ステップで前記起動プログラムが格納されていると判定された場合における前記第１の読み出しステップで読み出された前記起動プログラム又は前記判定ステップで前記起動プログラムが格納されていないと判定された場合における前記第２の読み出しステップで読み出されたバックアッププログラムを、前記ホストシステムに供給する供給ステップと、から構成される、ことを特徴とする。
【発明の効果】
【００１４】
本発明によれば、起動プログラムとそのバックアッププログラムを格納し、起動時に起動プログラムが正常に格納されていない場合、バックアッププログラムを読み出して供給する。このため、本発明に係るメモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム及びフラッシュメモリの制御方法は、起動プログラムが実行できないことにより装置を起動できなくなる事態を回避することができる。
【発明を実施するための最良の形態】
【００１５】
以下、図面に基づき、本発明の実施の形態について詳細に説明する。
【００１６】
[フラッシュメモリシステム１の説明]
図１は、本発明に係るフラッシュメモリシステム１を概略的に示すブロック図である。図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するコントローラ３で構成されている。
【００１７】
なお、フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続される。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成される。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００１８】
コントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（エラー・コレクション・コード）ブロック１１と、ＲＯＭ（Read Only Memory）１２と、から構成される。これら機能ブロックによって構成されるコントローラ３は、一つの半導体チップ上に集積される。以下に各機能ブロックについて説明する。
【００１９】
マイクロプロセッサ６は、ＲＯＭ１２に記録されたプログラムに従って、コントローラ３の全体の動作を制御する。具体的には、マイクロプロセッサ６は、フラッシュメモリ２にデータを書き込むための書き込み処理、データを読み出すための読み出し処理、アドレス変換テーブルの作成、消去済ブロック検索用テーブルの作成等の処理を実行するように各部を制御する。
【００２０】
ホストインターフェースブロック７は、ホストシステム４との間の、データ、アドレス情報、ステータス情報、外部コマンド情報等の授受を行なう。すなわち、フラッシュメモリシステム１とホストシステム４は、外部バス１３を介して相互に接続される。かかる状態において、ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてコントローラ３の内部に取り込まれ、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００２１】
より詳細には、ホストインターフェースブロック７は、ホストシステム４より供給されるホストアドレス及び外部コマンドを一時的に格納するコマンドレジスタ、書き込み又は読み出しを行うデータのサイズを格納するセクタ数レジスタ、書き込み又は読み出しを行うデータの論理ブロックアドレスを格納するＬＢＡ（Logical Block Addressing）レジスタ、等を有する。そして、これらのレジスタを介してホストシステム４との情報の授受を行う。
【００２２】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。
【００２３】
バッファ９は、フラッシュメモリ２から読み出したデータ及びフラッシュメモリ２に書き込むデータを一時的に保持する。
【００２４】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド情報等の授受を行う。
【００２５】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加されるエラーコレクションコードを生成するとともに、読み出しデータに付加されたエラーコレクションコードに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００２６】
ＲＯＭ１２は、マイクロプロセッサ６による処理の手順を定義するプログラムを格納する不揮発性の記憶素子である。具体的には、ＲＯＭ１２は、例えば、書き込み処理、読み出し処理、アドレス変換テーブルの作成、消去済ブロック検索用テーブルの作成等の処理手順を定義するプログラムを格納する。
【００２７】
[フラッシュメモリの説明]
次に、フラッシュメモリ２について説明する。図２は、フラッシュメモリ２のメモリ構造を概略的に示す図である。図２に示したように、フラッシュメモリ２はデータの読み出し及び書き込みにおける処理単位であるページと、データの消去単位であるブロックで構成されている。
【００２８】
上記ページは、例えば、５１２バイトのユーザ領域２５と、１６バイトの冗長領域２６によって構成される。ユーザ領域２５は、主に、ホストシステム４から供給されるデータが格納される領域であり、冗長領域２６は、エラーコレクションコード、ブロックステータス、論理シリアル番号等の付加情報が格納される領域である。
【００２９】
エラーコレクションコードは、ユーザ領域２５に格納されたデータに含まれる誤りを訂正するための付加情報であり、ＥＣＣブロック１１によって生成される。このエラーコレクションコードに基づき、ユーザ領域２５に格納されたデータに含まれる誤りが所定数以下であれば、その誤りが訂正される。
【００３０】
ブロックステータスは、そのブロックが不良ブロック（正常にデータの書き込み等を行なうことができないブロック）であるか否かを示すフラグであり、そのブロックが不良ブロックであると判断された場合には、不良ブロックであることを示すフラグが設定される。
【００３１】
論理シリアル番号は、そのブロックにデータが格納されている場合に、そのブロックがどの論理ブロックアドレスに対応するかを示す。
また、本実施の形態のフラッシュメモリ２は、対応する論理ブロックアドレスが存在しない論理シリアル番号を付されたブロックを有する。この対応する論理ブロックアドレスが存在しない論理シリアル番号を付されたブロックのユーザ領域２５には、起動プログラムのバックアッププログラムが格納される。
なお、そのブロックにデータが格納されていない場合は、論理シリアル番号も格納されていないので、論理シリアル番号が格納されているか否かで、そのブロックが消去済ブロックであるか否かを判断することができる。つまり、論理シリアル番号が格納されていない場合は消去済ブロックであると判断できる。
【００３２】
[論理ブロックアドレスと物理ブロックアドレスの説明]
フラッシュメモリ２はデータの上書きができないため、データの書き替えを行なう場合には、ブロック消去されている消去済ブロックに新たなデータ（書き替え後のデータ）を書き込み、古いデータ（書き替え前のデータ）が書き込まれていたブロックを消去するという２段階の処理を行なわなければならない。このとき、消去はブロック単位で処理されるため、古いデータ（書き替え前のデータ）が書き込まれていたページが含まれるブロックの、全ページのデータが消去されてしまう。従って、データの書き替えを行なう場合、書き替えるページが含まれるブロックの、他のページのデータについても、消去済ブロックに移動させる処理が必要となる。
【００３３】
上記のようにデータを書き替える場合、書き替え後のデータは書き替え前と異なるブロックに書き込まれるため、ホストシステム４側から与えられる論理ブロックアドレスと、フラッシュメモリ２内でのブロックアドレスである物理ブロックアドレスとの対応関係は、データを書き替える毎に動的に変化する。このため、論理ブロックアドレスと物理ブロックアドレスの対応関係を示したアドレス変換テーブルが必要となる。なお、このアドレス変換テーブルは、フラッシュメモリの冗長領域２６に書き込まれている論理シリアル番号に基づいて作成され、データが書き替えられる毎に、その書き替えに関わった部分の対応関係が更新される。
【００３４】
［ゾーンの構成の説明］
次に、フラッシュメモリ２内の複数のブロックで構成したゾーンを、論理ブロックアドレスの空間に割当てるゾーン管理について図面を参照して説明する。図３は、１０２４のブロックでゾーンを構成した例を示している。図３に示した例では、ゾーンは、１０２４のブロックＢ００００〜Ｂ１０２３（物理ブロックアドレスの００００〜１０２３）で構成され、各ブロックは、読み出し及び書き込み処理の単位である３２のページＰ００〜Ｐ３１で構成されている。ここで、ブロックは消去処理の単位であり、ページは読み出し及び書き込み処理の単位である。
【００３５】
また、このゾーンを、論理ブロックアドレスの空間に割当てる場合、不良ブロックの発生を考慮して、ゾーンを構成するブロック数よりも少ないブロック数の論理ブロックアドレスの空間に割当てられる。この割当は、通常、フラッシュメモリ２の仕様に応じて行なわれるが、例えば、１０２４のブロックで構成されたゾーンを、１０００ブロック分の論理ブロックアドレスの空間に割当てたり、９５０ブロック分の論理ブロックアドレスの空間に割当てたりすることができる。この際、論理ブロックアドレスの空間に割当てるブロック数を増やせば、フラッシュメモリの使用効率は良くなるが、不良ブロックの発生に対する許容量（許容できる不良ブロックの発生数）は少なくなる。
なお、図４に示すように、本実施の形態のフラッシュメモリシステム１においては、１０２４ブロックで構成されたゾーンを、１０００ブロック分の論理ブロックアドレスの空間に割当てるものとする。
【００３６】
また、本実施の形態のフラッシュメモリ２は、図５に示すように、１０２４ブロックで構成されたゾーンのうち、最初の８ブロック（Ｂ００００〜Ｂ０００７）を、ホストシステム４が起動される際に実行される起動プログラム及びそのバックアッププログラムを格納するための専用ブロック（以下、プログラム専用ブロックと呼ぶ）とし、残りのブロックをユーザが自由にデータを書き込むことができるブロック（以下、ユーザ利用ブロックと呼ぶ）とする。
なお、プログラム専用ブロックのサイズは、ユーザ利用ブロックと合わせて１０２４ブロックを超過しない範囲であれば８ブロックに限られない。また、プログラム専用ブロックは、ゾーンの最初の部分以外の部分に割り当てられても構わない。
【００３７】
プログラム専用ブロックに格納されるデータの中で、起動プログラムが書き込まれたブロックの冗長領域２６には、対応する論理ブロックアドレスが存在する、所定の論理シリアル番号が書き込まれる。図５に示す例では、プログラム専用ブロックの中の起動プログラムが格納されたブロック（Ｂ００００〜Ｂ０００２）の対応する論理シリアル番号として、それぞれＬＢ０からＬＢ２が割り当てられる。
【００３８】
また、プログラム専用ブロックに格納されるデータの中で、バックアッププログラムが書き込まれたブロックの冗長領域２６には、対応する論理ブロックアドレスが存在しない、所定の論理シリアル番号が書き込まれる。図５に示す例では、プログラム専用ブロックの中のバックアッププログラムが格納されたブロック（Ｂ０００５〜Ｂ０００７）の対応する論理シリアル番号として、それぞれＬＢ１０００からＬＢ１００２が割り当てられる。
【００３９】
なお、図５に示す例において、プログラム専用ブロックの中のＢ０００３及びＢ０００４には、対応する論理シリアル番号が割り当てられていないが、これらのブロックは消去済みのブロックであり、プログラムの書き替えの際に利用される。
また、起動プログラム及びそのバックアッププログラムは、上述のように論理シリアル番号によって判別できるので、ゾーン内のブロックをプログラム専用ブロックとユーザ利用ブロックとに分割せずにこれらのプログラムを格納するようにしてもよい。
【００４０】
［アドレス変換テーブルの説明］
次に、アドレス変換テーブルについて、説明する。アドレス変換テーブルは、論理ブロックアドレスと物理ブロックアドレスの対応関係を管理する。
図６は、図４に示したゾーン０に対するアドレス変換テーブルの一例を示したものであり、各論理ブロックアドレスに対応するデータが格納されているフラッシュメモリ２内での物理ブロックアドレスが、論理ブロックアドレス順に記述されている。また、フラッシュメモリ２にデータが格納されていない論理ブロックアドレスについては、アドレス変換テーブルのその論理ブロックアドレスに対応した部分に、物理ブロックアドレスではなく、データが格納されていないことを示すフラグ（以下、対応するデータが格納されていないことを示すフラグを未格納フラグと言う。）が設定される。本実施の形態では、未格納フラグとして物理ブロックアドレスの代わりに全ビットに１を設定するものとする（図６に示す例では、ＬＢ３、ＬＢ４及びＬＢ９９８に未格納フラグが設定されている）。
【００４１】
なお、各ゾーンに割り当てられた論理ブロックアドレスの空間では、論理ブロックアドレス順で各ブロックに論理シリアル番号が付けられる。すなわち、上述のように、各ゾーンに１０００ブロック分の論理ブロックアドレスの空間を割り当てた場合、論理ブロックアドレスの順でＬＢ０からＬＢ９９９までの論理シリアル番号が付けられる。ここで、論理シリアル番号ＬＢ０は、１０００ブロック分の論理ブロックアドレスの空間における先頭の論理ブロックアドレスに対応し、論理シリアル番号ＬＢ９９９は、１０００ブロック分の論理ブロックアドレスの空間における１０００番目の論理ブロックアドレスに対応する。従って、論理シリアル番号ＬＢ１０００以降については対応する論理ブロックアドレスがない。
【００４２】
アドレス変換テーブルを作成する手順は以下の通りである。例えば、図４に示したゾーン０のアドレス変換テーブルを作成する場合、マイクロプロセッサ６は、１０００ブロック分の物理ブロックアドレスを記述できる領域をＳＲＡＭ上に確保し、その物理ブロックアドレスを記述する領域に初期設定として未格納フラグを設定する。その後、マイクロプロセッサ６は、フラッシュメモリインターフェースブロック１０を制御してフラッシュメモリ２のゾーン０を構成するブロックの冗長領域２６を順次読み出していき、冗長領域２６に論理シリアル番号が記述されている場合には、アドレス変換テーブルのその論理シリアル番号に対応する部分に、その論理シリアル番号が記述されているブロックの物理ブロックアドレスを記述する。
【００４３】
なお、このアドレス変換テーブルの作成処理で物理ブロックアドレスが記述されなかった部分については、初期設定で記述された未格納フラグがそのまま残る。
【００４４】
［消去済ブロック検索用テーブルの説明］
次に、消去済ブロック検索用テーブルについて、図面を参照して説明する。消去済ブロック検索用テーブルは、データの書き込み先とすることができる消去済ブロックを検索するためのテーブルである。
【００４５】
まず、消去済ブロック検索用テーブルを用いて、消去済ブロックを検索する方法について説明する。例えば、図４に示したゾーンの消去済ブロックを検索する場合、マイクロプロセッサ６は、１０２４ビットの領域をＳＲＡＭ上に確保し、その領域の各ビットにゾーンを構成する各ブロックを割当てた消去済ブロック検索用テーブルを作成する。
【００４６】
図７は、図４に示したゾーン０とゾーン１の消去済ブロック検索用テーブルを模式的に示した概念図である。ここで、ゾーン０の消去済ブロック検索用テーブル上のビットは、ブロックＢ００００〜Ｂ１０２３（物理ブロックアドレスの００００〜０１０２３）に対応し、ゾーン１の消去済ブロック検索用テーブル上のビットは、ブロックＢ１０２４〜Ｂ２０４７（物理ブロックアドレスの１０２４〜２０４７）に対応する。
【００４７】
また、消去済ブロック検索用テーブル上のビットと、ゾーンを構成するブロックとの対応関係については、図７に示した消去済ブロック検索用テーブル上のビットを、上の行から下の行へ、各行を左から右へ物理ブロックアドレス順に対応させている。従って、ゾーン０の消去済ブロック検索用テーブルでは、左上のビットが、Ｂ００００（物理ブロックアドレスの００００）のブロックに対応し、右下のビットが、Ｂ１０２３（物理ブロックアドレスの１０２３）のブロックに対応する。
【００４８】
また、消去済ブロック検索用テーブル上のビットは、「０」と「１」で消去済ブロックであるか否かを示しており、例えば、データが書き込まれている場合（または不良ブロックであることを示すブロックステータスが記述されている場合）は、そのビットに「０」を、データが書き込まれていない場合（消去済ブロックの場合）は、そのビットに「１」を設定する。
【００４９】
なお、この消去済ブロック検索用テーブルは、アドレス変換テーブルを作成する際に一緒に作成することができる。例えば、マイクロプロセッサ６は、消去済ブロック検索用テーブルを作成するＳＲＡＭ上の領域に「０」を設定しておき、各ブロックの冗長領域２６に論理シリアル番号も不良ブロックであることを示すブロックステータスも記述されていないときに、そのブロックに対応するビットに「１」を設定するようにすれば、アドレス変換テーブルを作成する際に一緒に作成することができる。つまり、ゾーンを構成するブロックの冗長領域２６に記述されているデータを読み出したときにこの処理を行なえば、消去済ブロックに対応するビットだけに「１」が設定され、消去済ブロックでないブロックに対応するビットは予め設定した「０」のままになる。
【００５０】
また、マイクロプロセッサ６は、消去済ブロックにデータが書き込まれたときに、そのブロックに対応するビットを「１」から「０」に変更し、データが書き込まれているブロックがブロック消去されたときに、そのブロックに対応するビットを「０」から「１」に変更することで、消去済ブロック検索用テーブルを随時更新する。
【００５１】
次に、この消去済ブロック検索用テーブルを用いて、ユーザ利用ブロックにおける、消去済ブロックを検索する場合について図８を参照して説明する。図８は、ゾーン０の消去済ブロック検索用テーブルを示している。例えば、１行目の各ビットは、ブロックＢ００００〜Ｂ０００７（物理ブロックアドレスの００００〜０００７）に対応し、下端の行の各ビットはブロックＢ１０１６〜Ｂ１０２３（物理ブロックアドレスの１０１６〜１０２３）に対応する。
【００５２】
マイクロプロセッサ６は、消去済ブロック検索用テーブルを、上の行から下の行へと走査する。また、マイクロプロセッサ６は、消去済ブロック検索用テーブル内の各行を左から右へと走査する。すなわち、消去済ブロック検索用テーブルの一番上の行の各ビットは、プログラム専用ブロックに対応するため、マイクロプロセッサ６は、消去済ブロック検索用テーブルのブロックＢ０００８（物理ブロックアドレス０００８）に対応するビット（２行目の、左端のビット）から、走査を開始する。そして、ブロックＢ１０２３（物理ブロックアドレスの１０２３）に対応するビット（下端の行の、右端のビット）までを走査していき、消去済ブロックに対応する「１」のビットを検索する。
【００５３】
図８に示した消去済ブロック検索用テーブルを検索する場合、上から２番目の行の、左から３番目のビットが「１」なので、マイクロプロセッサ６は、ここで検索を終了し、このビットに対応するブロックＢ００１０（物理ブロックアドレスの００１０）を、データの書き込み先のブロックとして特定する。
【００５４】
また、次回の検索は、上から２番目の行の、左から４番目のビットから走査を開始し、上から４番目の行の、左から５番目のビットが「１」なので、マイクロプロセッサ６は、ここで検索を終了し、このビットに対応するブロックＢ００２８（物理ブロックアドレスの００２８）を、データの書き込み先のブロックとして特定する。その後も、このような検索を続けていき、下端の行の、右端のビットまで走査が進んだときは、２行目の、左端のビットに戻る。
【００５５】
なお、プログラム専用ブロックの消去済ブロックを検索する場合には、上記と同様の検索を、消去済ブロック検索用テーブルの１行目に対して実施すればよい。
【００５６】
［書き込み処理の説明］
次に、ホストシステム４からのコマンドに応答して実行される書き込み処理について説明する。この書き込み処理では、フラッシュメモリ２へのデータ書き込みが実行される。
ホストシステム４からの書き込み処理の実行を要求するコマンドは、ホストインターフェースブロック７のコマンドレジスタに書き込まれる。また、データの書き込み先の論理ブロックアドレスと、書き込むデータのサイズは、それぞれホストインターフェースブロック７のＬＢＡレジスタと、セクタ数レジスタとに書き込まれる。
【００５７】
コマンドレジスタに書き込まれた命令に応答して、マイクロプロセッサ６は、消去済ブロック検索用テーブルを検索して特定したブロックに、データを書き込む。この書き込み処理では、マイクロプロセッサ６は、フラッシュメモリインターフェースブロック１０を制御して、内部バス１４を介して、書き込み先のブロック内のページに、データを書き込む。マイクロプロセッサ６は、データを書き込んだブロックの冗長領域２６に、エラーコレクションコード、論理シリアル番号等を書き込む。
【００５８】
また、上記書き込み処理で、ホストシステム４側から供給された論理ブロックアドレスに対応する旧データが存在する場合（上書きをする場合）は、上記新データの書き込み処理の後に旧データの消去処理が行なわれる。なお、消去する旧データが格納されているブロックの物理ブロックアドレスは、アドレス変換テーブルに基づいて得ることができる。この消去処理では、マイクロプロセッサ６は、フラッシュメモリインターフェースブロック１０を制御して、内部バス１４を介して、フラッシュメモリ２の旧データが格納されているブロックの物理ブロックアドレスのデータを消去する。
【００５９】
また、プログラム専用ブロックに書き込まれている起動用プログラムを更新する場合には、上記の手順によって起動用プログラムのデータを書き替えるとともに、バックアッププログラムも更新する。なお、バックアッププログラムは、ホストシステム４から論理ブロックアドレスを指定して更新することができない。従って、起動プログラムの更新を要求するコマンドが与えられたとき、マイクロプロセッサ６は、起動プログラムを更新するとともに、その起動プログラムを別の物理ブロックアドレスにも書き込み、そのブロックの冗長領域２６にバックアッププログラムが格納されていることを示す論理シリアル番号を書き込む。
【００６０】
［読み出し処理の説明］
読み出し処理は、ホストシステム４からのコマンドに応答して実行される。
ホストシステム４からの読み出し処理の実行を要求するコマンドは、ホストインターフェースブロック７のコマンドレジスタに書き込まれる。また、読み出すデータの論理ブロックアドレスは、ホストインターフェースブロック７のＬＢＡレジスタに書き込まれ、読み出すデータのサイズはセクタ数レジスタに書き込まれる。
【００６１】
コマンドレジスタに書き込まれた命令に応答して、マイクロプロセッサ６は、ＬＢＡレジスタに書き込まれた論理ブロックアドレスを、アドレス変換テーブルに基づき物理ブロックアドレス（論理ブロックアドレスに対応するデータが格納されているブロックの物理ブロックアドレス）に変換する。
【００６２】
続いて、マイクロプロセッサ６は、フラッシュメモリインターフェースブロック１０を制御して、内部バス１４を介して、ホストシステム４側から与えられる論理ブロックアドレスに対応するデータが格納されているブロック内のページに格納されているデータを、バッファ９に読み出す。
【００６３】
マイクロプロセッサ６は、バッファ９に読み出したデータを、当該データに付加されているエラーコレクションコードに基づいて誤りを訂正する。そして、マイクロプロセッサ６は、訂正後のデータを、ホストインターフェースブロック７を制御して、外部バス１３を介してホストシステム４に供給する。マイクロプロセッサ６はこれらの処理をセクタ数レジスタに書き込まれたページ数分繰り返して実行し、その後、読み出し処理を終了する。
【００６４】
［ブート処理の説明］
次に、ホストシステム４が起動する際に、フラッシュメモリ２に格納された起動プログラムを読み出して実行する、ブート処理の手順について、図９に示すフローチャートを参照して説明する。
【００６５】
ブート処理は、例えば、ホストシステム４の電源投入やホストシステム４のリセット操作が行われたときに実行される。
ブート処理が開始されると、コントローラ３のマイクロプロセッサ６は、フラッシュメモリインターフェースブロック１０及び内部バス１４を介してフラッシュメモリ２にアクセスする。そして、起動プログラムが格納されているゾーンのアドレス変換テーブルをワークエリア８に作成する（ステップＳ１００）。
【００６６】
次に、マイクロプロセッサ６は、ステップＳ１００で作成したアドレス変換テーブルを参照して、起動プログラムの格納領域に割り当てられている論理ブロックアドレスに対応する物理ブロックアドレスが存在するか否かを判定する（ステップＳ１１０）。なお、論理ブロックアドレスには、上述のように各ゾーン内で論理シリアル番号が付けられているので、起動プログラムの格納領域に割り当てられている論理シリアル番号に対応する物理ブロックアドレスが存在するか否かにより上記判定を実施することができる。
【００６７】
論理シリアル番号ＬＢ０〜ＬＢ２が起動プログラムの格納領域に、論理シリアル番号ＬＢ１０００〜ＬＢ１００２がバックアッププログラムの格納領域に、それぞれ割り当てられている場合において、アドレス変換テーブル上で論理シリアル番号ＬＢ０〜ＬＢ２に対応する物理ブロックアドレスが存在する場合（ステップＳ１１０；Ｙｅｓ）、マイクロプロセッサ６は、処理をステップＳ１３０に移す。
【００６８】
一方、アドレス変換テーブル上で論理シリアル番号ＬＢ０〜ＬＢ２に対応する物理ブロックアドレスが存在しない場合（ステップＳ１１０；Ｎｏ）、バックアッププログラムの格納領域に割り当てられている論理シリアル番号ＬＢ１０００〜ＬＢ１００２に対応する物理ブロックアドレスを、アドレス変換テーブルの論理シリアル番号ＬＢ０〜ＬＢ２に対応する部分に書き込む（ステップＳ１２０）。つまり、アドレス変換テーブルの論理シリアル番号ＬＢ０に対応する部分に論理シリアル番号１０００に対応する部分の物理ブロックアドレスを書き込み、アドレス変換テーブルの論理シリアル番号ＬＢ１に対応する部分に論理シリアル番号１００１に対応する部分の物理ブロックアドレスを書き込み、アドレス変換テーブルの論理シリアル番号ＬＢ２に対応する部分に論理シリアル番号１００２に対応する部分の物理ブロックアドレスを書き込む。その後、マイクロプロセッサ６は、処理をステップＳ１３０に移す。
【００６９】
ステップＳ１３０において、マイクロプロセッサ６は、アドレス変換テーブルに基づいて、フラッシュメモリ２から起動プログラム又はバックアッププログラムを読み出す（ステップＳ１３０）。つまり、アドレス変換テーブルの論理シリアル番号ＬＢ０〜ＬＢ２に対応する部分に、論理シリアル番号ＬＢ０〜ＬＢ２に対応する物理ブロックアドレスが書き込まれている場合には、起動プログラムが読み出され、論理シリアル番号ＬＢ１０００〜ＬＢ１００２に対応する物理ブロックアドレスが書き込まれている場合には、バックアッププログラムが読み出される。読み出された起動プログラム又はバックアッププログラムは、ホストシステム４内のＲＡＭ（Random Access Memory）に書き込まれる。なお、メモリコントローラ内にホストシステムから直接アクセス可能なＳＲＡＭ領域を設け、そこに読み出された起動プログラム又はバックアッププログラムを書き込んでもよい。
【００７０】
ホストシステム４は、起動プログラム又はバックアッププログラムを実行し、所望の動作を実現する（ステップＳ１４０）。
【００７１】
以上で説明したように、本実施の形態のフラッシュメモリシステム１は、フラッシュメモリ２に起動プログラムとそのバックアッププログラムとを格納し、起動時に作成されるアドレス変換テーブルに基づいて起動プログラム又はそのバックアッププログラムを読み出す。ホストシステム４は、読み出された起動プログラム又はバックアッププログラムを実行し、所望の動作を実現する。
【００７２】
ここで、バックアッププログラムが格納されている領域には、ホストシステム４側のアドレス空間、つまり、論理ブロックアドレスの空間が割り当てられていないので、ホストシステム４は常に起動プログラムが格納されている領域を指定して、起動プログラム又はそのバックアッププログラムの読み出し処理を要求する。一方、この読み出し処理は、アドレス変換テーブルに基づいて実行される。このため、アドレス変換テーブル上で起動プログラムが格納されている領域に対応する部分に、起動プログラムが格納されている領域の物理ブロックアドレスが書き込まれている場合には起動プログラムが読み出され、バックアッププログラムが格納されている領域の物理ブロックアドレスが書き込まれている場合にはバックアッププログラムが読み出される。
【００７３】
なお、アドレス変換テーブルの作成時に、起動プログラムが正常に格納されていないと判定された場合には、アドレス変換テーブルの起動プログラムが格納されている領域に対応する部分に、バックアッププログラムが格納されている領域の物理ブロックアドレスが書き込まれる。従って、ホストシステム４は、起動プログラムが正常に格納されていない場合でも、特別な処理を行うことなくバックアッププログラムを読み出し、そのバックアッププログラムを実行することができる。
【００７４】
なお、上述の説明では、起動時にアドレス変換テーブルを書き替えることによりバックアッププログラムを読み出したが、起動プログラムの読み出しを実行しているときに読み出したページに含まれる誤りを訂正することができなくなった場合（ＥＣＣブロック１１で訂正可能な許容数を超える誤りが検出された場合）に、そのページの格納データだけを、バックアッププログラムの対応する格納データで置き換えてもよい。
【００７５】
例えば、上述のように、論理シリアル番号ＬＢ０〜ＬＢ２が起動プログラムの格納領域に、論理シリアル番号ＬＢ１０００〜ＬＢ１００２がバックアッププログラムの格納領域に、それぞれ割り当てられている場合に、起動プログラムが正常に格納されていれば、アドレス変換テーブルの論理シリアル番号ＬＢ０〜ＬＢ２に対応する部分に、論理シリアル番号ＬＢ０〜ＬＢ２に対応する物理ブロックアドレスが書き込まれる。従って、論理シリアル番号ＬＢ０〜ＬＢ２に対応する物理ブロックアドレスで指示されたブロックから格納データが読み出される。ＬＢ０〜ＬＢ２に対応する物理ブロックアドレスで指示されたブロック内の各ページから順次格納データが読み出されているときに、読み出されたページに含まれる誤りを訂正することができなくなった場合、そのページの格納データがバックアッププログラム内の対応するページの格納データで代用される。例えば、誤り訂正をすることができなくなったページが、論理シリアル番号ＬＢ０に対応する物理ブロックアドレスで指示されたブロックの１０ページ目であれば、当該ページの格納データをＬＢ１０００に対応する物理ブロックアドレスで指示されたブロックの１０ページ目の格納データで代用する。なお、起動プログラムとバックアッププログラムとの対応関係は、論理シリアル番号ＬＢ０と論理シリアル番号ＬＢ１０００が対応し、論理シリアル番号ＬＢ１と論理シリアル番号ＬＢ１００１が対応し、論理シリアル番号ＬＢ２と論理シリアル番号ＬＢ１００２が対応するように設定されているものとする。
【図面の簡単な説明】
【００７６】
【図１】本発明に係るフラッシュメモリシステムを概略的に示すブロック図である。
【図２】フラッシュメモリのアドレス空間の構造を概略的に示す図である。
【図３】１０２４のブロックでゾーンを構成した例を示す図である。
【図４】ゾーンの構成例を示す図である。
【図５】ゾーンを構成するブロックの割当の例を示す図である。
【図６】アドレス変換テーブルの例を示す図である。
【図７】消去済ブロック検索用テーブルの例を示す概念図である。
【図８】消去済ブロック検索用テーブルを用いた消去済ブロックの検索方法を説明するための図である。
【図９】ブート処理の手順を説明するフローチャートである。
【符号の説明】
【００７７】
１  フラッシュメモリシステム
２  フラッシュメモリ
３  コントローラ
４  ホストシステム
６  マイクロプロセッサ
７  ホストインターフェースブロック
８  ワークエリア
９  バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１２  ＲＯＭ
１３  外部バス
１４  内部バス
２５  ユーザ領域
２６  冗長領域 
【図１】
2006350430.tif 000003
【図２】
2006350430.tif 000004
【図３】
2006350430.tif 000005
【図４】
2006350430.tif 000006
【図５】
2006350430.tif 000007
【図６】
2006350430.tif 000008
【図７】
2006350430.tif 000009
【図８】
2006350430.tif 000010
【図９】
2006350430.tif 000011