(57)【要約】【課題】不揮発性半導体メモリにおけるユーザデータの書換えを高速に行なうことが可能な記憶装置を提供すること。【解決手段】フラッシュメモリ１は、ユーザデータを格納するユーザブロックと、代替用に予め確保された代替ブロックと、論理アドレスに対応するユーザブロックの物理アドレスを格納する変換テーブルと、代替ブロックの物理アドレスを格納する代替テーブルとを含む。コントローラ２は、変換テーブルを参照してユーザブロック内のページにユーザデータを書込む際、当該ページが書込み済みの場合には、代替テーブルを参照して代替ブロック内のページにユーザデータを書込んで新たなユーザブロックとし、元のユーザブロックを代替ブロックとするので、ユーザデータの書換えを高速に行なうことが可能となる。【選択図】　　　　図１
2004133677.tif 000002
【特許請求の範囲】
【請求項１】
複数のページによって構成されるブロック単位で消去が行なわれ、消去済みのページに対してページ単位で書込みが行なわれる不揮発性半導体メモリと、
前記不揮発性半導体メモリを制御する制御手段とを含んだ記憶装置であって、
前記不揮発性半導体メモリは、ユーザデータを格納するユーザブロックと、
代替用に予め確保された代替ブロックと、
論理アドレスに対応する前記ユーザブロックの物理アドレスを格納する変換テーブルと、
前記代替ブロックの物理アドレスを格納する代替テーブルとを含み、
前記制御手段は、前記変換テーブルを参照してユーザブロック内のページにユーザデータを書込む際、当該ページが書込み済みの場合には、前記代替テーブルを参照して前記代替ブロック内のページにユーザデータを書込んで新たなユーザブロックとし、元のユーザブロックを代替ブロックとする、記憶装置。
【請求項２】
前記制御手段は、前記代替ブロックを新たなユーザブロックとする場合には、前記代替テーブルの所定領域に書込まれている代替ブロックをユーザブロックとして使用し、前記代替テーブルの内容を１ブロック分だけ順次シフトした後、前記元のユーザブロックを代替ブロックとして前記代替テーブルに追加する、請求項１記載の記憶装置。
【請求項３】
前記ユーザブロックのユーザデータが書込まれているページには書込み済みであることを示すフラグを設定し、
前記制御手段は、前記フラグを参照して当該ページが書込み済みであるか否かを判定する、請求項１または２記載の記憶装置。
【請求項４】
前記不揮発性半導体メモリはさらに、前記変換テーブルおよび代替テーブルの物理アドレスを格納するポインタテーブルを含み、
前記制御手段は、前記ポインタテーブルを参照して前記変換テーブルおよび前記代替テーブルの内容を取得する、請求項１〜３のいずれかに記載の記憶装置。
【請求項５】
前記不揮発性半導体メモリはさらに、前記ポインタテーブルの代替用に確保されたポインタテーブル代替ブロックを含み、
前記ポインタテーブルにはさらに、前記ポインタテーブル代替ブロックの物理アドレスが格納され、
前記制御手段は、前記ポインタテーブルの内容を書換えるときに書込みエラーが発生した場合には、前記ポインタテーブルの内容を参照して前記ポインタテーブル代替ブロックに新しいポインタテーブルの内容を書込む、請求項４記載の記憶装置。
【請求項６】
前記変換テーブルの有効データは、１つのブロックの１ページにのみ存在し、
前記制御手段は、前記変換テーブルの内容を書換えるときに、上位ページ番号のページに新しいデータを書込むとともに当該ページが書込み済みであることを示すフラグを設定し、
最上位ページ番号のページが書込み済みの場合には、当該ブロックの内容を消去してから最下位ページ番号のページに新しいデータを書込む、請求項１〜５のいずれかに記載の記憶装置。
【請求項７】
前記代替テーブルの有効データは、１つのブロックの１ページにのみ存在し、
前記制御手段は、前記代替テーブルの内容を書換えるときに、上位ページ番号のページに新しいデータを書込むとともに当該ページが書込み済みであることを示すフラグを設定し、
最上位ページ番号のページが書込み済みの場合には、当該ブロックの内容を消去してから最下位ページ番号のページに新しいデータを書込む、請求項１〜５のいずれかに記載の記憶装置。
【請求項８】
前記ポインタテーブルの有効データは、１つのブロックの１ページにのみ存在し、
前記制御手段は、前記ポインタテーブルの内容を書換えるときに、上位ページ番号のページに新しいデータを書込むとともに当該ページが書込み済みであることを示すフラグを設定し、
最上位ページ番号のページが書込み済みの場合には、当該ブロックの内容を消去してから最下位ページ番号のページに新しいデータを書込む、請求項４または５記載の記憶装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、不揮発性半導体メモリの管理を行なう記憶装置に関し、特に、論理アドレスを不揮発性半導体メモリの物理アドレスに変換して不揮発性半導体メモリを管理する記憶装置に関する。
【０００２】
【従来の技術】
近年、不揮発性半導体メモリのうち、大容量のデータ蓄積用の不揮発性半導体メモリとして、ＮＡＮＤ型フラッシュメモリが普及しつつある。ＮＡＮＤ型フラッシュメモリにおいては、データの消去は複数のページによって構成されるブロック単位で行なわれ、データの書込みは消去済みのページに対してページ単位でのみ行なわれる。
【０００３】
このようなＮＡＮＤ型フラッシュメモリで構成される従来の記憶装置においては、ユーザが１ページのデータを書換えたい場合、該当ページに直接データを書込むことができないため、一旦該当ページのデータを消去してから新たなデータを書込むか、別の消去済みのブロックのページにデータを書込む必要がある。
【０００４】
これに関連する技術として、特開２００１−１４２７７４号公報に開示された発明がある。この発明は、書換え可能な不揮発性メモリの記憶容量が増加しても、アドレス変換テーブル用の揮発性メモリ領域の増加を不要としたアドレス変換方法に関するものである。
【０００５】
【特許文献１】
特開２００１−１４２７７４号公報
【０００６】
【発明が解決しようとする課題】
しかし、上述したＮＡＮＤ型フラッシュメモリで構成される従来の記憶装置において、該当ページのデータを消去してから新たなデータを書込む場合、データの消去はブロック単位でしか行えず、ブロック内の該当ページ以外のページのデータも消去されてしまうため、データの消去前に該当ページ以外のページのデータを退避させる必要があった。したがって、該当ページのデータを書換えるのに必要な時間が長くなるため、プロセッサの処理速度が低下するといった問題点があった。
【０００７】
また、別の消去済みのブロックにデータを書込む場合、どこにあったデータがどのブロックの何番目のページに書込まれたかというアドレス管理が必要になると共に、元のデータが格納されていたページが無効であるという情報も管理する必要がある。したがって、データの書換に伴う管理情報の更新が複雑になると共に、管理情報量も多くなるといった問題点があった。
【０００８】
さらには、特開２００１−１４２７７４号公報に開示されたアドレス変換方法は、論理アドレスをフラッシュメモリの物理アドレスに変換するものであるが、ブロック単位でのデータ消去を前提としたデータの書換えが考慮されておらず、上述した問題点を解決することはできない。
【０００９】
本発明は、上記問題点を解決するためになされたものであり、その目的は、不揮発性半導体メモリにおけるユーザデータの書換えを高速に行なうことが可能な記憶装置を提供することである。
【００１０】
【課題を解決するための手段】
本願発明に係る記憶装置は、複数のページによって構成されるブロック単位で消去が行なわれ、消去済みのページに対してページ単位で書込みが行なわれる不揮発性半導体メモリと、不揮発性半導体メモリを制御する制御手段とを含む。
【００１１】
不揮発性半導体メモリは、ユーザデータを格納するユーザブロックと、代替用に予め確保された代替ブロックと、論理アドレスに対応するユーザブロックの物理アドレスを格納する変換テーブルと、代替ブロックの物理アドレスを格納する代替テーブルとを含む。
【００１２】
制御手段は、変換テーブルを参照してユーザブロック内のページにユーザデータを書込む際、当該ページが書込み済みの場合には、代替テーブルを参照して代替ブロック内のページにユーザデータを書込んで新たなユーザブロックとし、元のユーザブロックを代替ブロックとする。
【００１３】
【発明の実施の形態】
ＮＡＮＤ型フラッシュメモリのページのサイズおよびブロックのサイズは、品種によって異なる。たとえば、１ページが５２８バイトであり、１ブロックが３２ページの構成のフラッシュメモリもあれば、１ページが２１１２バイトであり、１ブロックが６４ページのフラッシュメモリもある。本実施の形態においては、１ページが５２８バイトであり、１ブロックが３２ページの構成のフラッシュメモリを用いた記憶装置について説明するが、フラッシュメモリの構成はこれに限定されるものではない。
【００１４】
図１は、本発明の実施の形態における記憶装置の概略構成を示すブロック図である。この記憶装置は、ＮＡＮＤ型フラッシュメモリ１と、プロセッサ３と、プロセッサ３からフラッシュメモリ１へのアクセスに対して、フラッシュメモリ１への制御信号の生成や誤り訂正処理などの制御を行なうコントローラ２と、ＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）４と、ＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）５とを含む。
【００１５】
コントローラ２、プロセッサ３、ＲＯＭ４およびＲＡＭ５は、プロセッサバス６によって接続される。また、フラッシュメモリ１およびコントローラ２は、メモリバス７によって接続される。
【００１６】
ＲＯＭ４には、プロセッサ３が実行する命令コードなどが格納される。また、ＲＡＭ５は、プロセッサ３のワークエリアなどとして利用され、変数が記憶されたり、フラッシュメモリ１から読出されたデータが一次的に格納されたりする。
【００１７】
コントローラ２は、プロセッサ３がフラッシュメモリ１にアクセスするときのフラッシュメモリコマンドの印加や読出し／書込みデータの転送のためのフラッシュメモリ制御信号を生成する。また、データ読出し時は誤り訂正処理を行ない、データ書込み時は誤り訂正符号の生成およびフラッシュメモリ１への誤り訂正符号の書込みを併せて行なう。
【００１８】
なお、コントローラ２は、プロセッサ３がＲＯＭ４に格納される命令コードを実行して実現される後述の処理内容をプロセッサ３の代わりに実行するようにしてもよい。
【００１９】
図２は、フラッシュメモリ１に格納されるデータの種類を説明するための図である。ユーザブロックは、任意のユーザデータを格納するための領域であり、ブロック毎に論理アドレスが割当てられる。
【００２０】
変換テーブルには、ユーザブロックに割当てられる論理アドレスに対応する物理アドレスが格納される。代替ブロックは、ユーザブロックの書換え用および不良ブロック発生時の代替用に予め確保された領域である。
【００２１】
代替テーブルには、代替ブロックの物理アドレスおよび代替ブロック数が格納される。ポインタテーブルには、変換テーブル、代替テーブルおよびポインタテーブル代替ブロックのそれぞれの物理アドレスと、ポインタテーブル代替ブロック数とが格納される。また、ポインタテーブル代替ブロックは、ポインタテーブルの代替用に予め確保された領域である。
【００２２】
図３は、変換テーブルの内容の一例を示す図である。物理ブロックアドレスを２バイトで表すので、１６バイトの冗長データ領域を除く１ページ分の変換テーブル（５１２バイト）で２５６ブロック分のユーザブロックの管理を行なうことができる。
【００２３】
図３（ａ）は、論理ブロック０〜２５５の物理アドレスを格納した０番目の変換テーブルを示している。また、図３（ｂ）は、論理ブロックＮ×２５６〜Ｎ×２５６＋２５５の物理アドレスを格納したＮ番目の変換テーブルを示している。たとえば、５１２Ｍｂのフラッシュメモリの場合、物理ブロックの数は４０９６個であるので、Ｎが１５となって１６ブロック分の変換テーブルが存在することになる。
【００２４】
１ページに１６バイト分の冗長データ領域（ワードオフセット２５６〜２６３）が存在するが、この領域には誤り訂正コードＥＣＣ（Ｅｒｒｏｒ　Ｃｏｒｒｅｃｔｉｎｇ　Ｃｏｄｅ）と、そのページが書込み済みであることを示す書込み済みフラグとが格納される。
【００２５】
図４は、代替テーブルの内容の一例を示す図である。ワードオフセット０の領域には代替ブロック残数が格納され、それ以降の領域には０〜Ｍ番目の代替ブロックの物理アドレスが格納される。ワードオフセット２５６以降の冗長データ領域には、誤り訂正コードＥＣＣと、そのページが書込み済みであることを示す書込み済みフラグとが格納される。
【００２６】
図５は、代替テーブルの内容が更新されるところを模式的に示す図である。ユーザブロック内のページにデータを書込む際、そのユーザブロック（元ユーザブロック）内のページが書込み済みの場合、代替ブロックと交換してその代替ブロックを使用する。使用する代替ブロックは、代替テーブルの最下位に格納される代替ブロック［０］であり、この代替ブロックにユーザデータを書込み、新ユーザブロックとする。代替テーブルにおいては、内容（代替ブロック［１］〜［Ｍ］）が下位に２バイトずつシフトされ、元代替ブロック［１］が最下位の領域に格納されて新たな代替ブロック［０］となる。
【００２７】
一方、元ユーザブロックは消去され、正常に消去が完了すればそのブロックの物理アドレスが代替テーブルの最下位の領域に格納され、新たな代替ブロック［Ｍ］として将来の使用に備える。ブロックの消去が正常に完了した場合には、代替ブロック残数はＭ＋１のまま増減しない。また、ブロックの消去エラーが発生した場合には、代替ブロック残数は１だけデクリメントされてＭ個となる。
【００２８】
図６は、ポインタテーブルの内容の一例を示す図である。ワードオフセット０〜Ｎの領域にはそれぞれ変換テーブル［０］〜［Ｎ］の物理ブロックアドレスが格納される。ワードオフセット１６の領域には、代替テーブルの物理ブロックアドレスが格納される。ワードオフセット１７の領域には、ポインタテーブル代替ブロックの残数が格納され、以降の領域にはポインタテーブル代替ブロック［０］〜［９］の物理ブロックアドレスが格納される。本実施の形態においては、ポインタテーブル代替ブロックとして１０個のブロックを確保しているが、他の数であってもよい。
【００２９】
ワードオフセット２５６以降の冗長データ領域には、誤り訂正コードＥＣＣ、そのページが書込み済みであることを示す書込み済みフラグおよびそのブロックがポインタテーブルであることを識別するためのＩＤコードが格納される。
【００３０】
ポインタテーブルは所定のアドレス範囲内、たとえばブロックアドレス０〜２５５番地内に格納されるようにする。電源投入直後、プロセッサ３はこの範囲のページのＩＤコードを検索することによって、ポインタテーブルを識別してその内容を取得することができる。このポインタテーブルの内容を取得できれば、プロセッサ３は上述したフラッシュメモリ１の制御に必要な情報が格納される物理ブロックアドレスを全て参照することができる。
【００３１】
また、ポインタテーブルの格納範囲を、たとえばブロックアドレス０〜２５５番地内に制限するためには、ポインタテーブル代替ブロックも予めこの範囲内に所定数だけ確保しておく必要がある。
【００３２】
図７は、テーブル群（変換テーブル、代替テーブル、ポインタテーブル）が格納されるブロックの内容を示す図である。それぞれのテーブルは、１ブロック内の１ページだけが有効データとして使用される。それぞれのテーブルの書換えの際、ブロック内のページオフセットを１だけインクリメントしたページにテーブルの新しい内容が書込まれる。したがって、非消去状態のページのうち、最上位のページに格納されるデータが有効なテーブルとなる。
【００３３】
ブロックの最上位ページまでデータが書込まれている場合には、一旦そのブロックを消去して、先頭のページに新しいテーブルの内容が書込まれる。また、有効なテーブルが格納されるページは、ワードオフセット２５６以降の冗長データ領域に格納される書込み済みフラグを検索することによって識別され、その内容が取得される。一旦、有効なテーブルを検索してその内容を取得した後は、そのワードオフセット値をＲＡＭ５のワークエリアに格納して管理すれば、毎回テーブルが格納されるブロックを検索する必要はなくなる。
【００３４】
図８は、本発明の実施の形態における記憶装置の処理手順を説明するためのフローチャートである。まず、プロセッサ３が、ユーザデータを書込む最初の領域の論理セクタアドレスＬＳＡと、書込みを行なうセクタ数ＣＮＴとを決定する（Ｓ１０１）。ここでは、１セクタを５１２バイトとし、ページのサイズと同じであるとする。
【００３５】
次に、プロセッサ３は、論理セクタアドレスＬＳＡから、論理ブロックアドレスＬＢＡと、ブロック内のページオフセットｉｐとを算出する（Ｓ１０２）。ここでは、１ブロックを３２ページとしているので、論理ブロックアドレスＬＢＡ＝ＬＳＡ［１６：５］となり、ｉｐ＝ＬＳＡ［４：０］となる。
【００３６】
次に、プロセッサ３は、変換テーブルの内容を参照して、論理ブロックアドレスＬＢＡに対応する物理ブロックアドレスＰＢＡを取得する（Ｓ１０３）。１つの変換テーブルには２５６ブロック分の情報が格納されているので、論理ブロックアドレスＬＢＡに対応する物理ブロックアドレスＰＢＡが格納される変換テーブルの番号は、ＬＢＡ÷２５６＝ＬＢＡ［１１：８］となる。
【００３７】
変換テーブルの番号が求まれば、ポインタテーブルを参照して変換テーブルの物理ブロックアドレスを取得できるので、該当する変換テーブルの内容を読出すことができる。なお、物理ブロックアドレスＰＢＡが格納される変換テーブル内のワードアドレスは、ＬＢＡ［７：０］となる。
【００３８】
次に、プロセッサ３は、物理ブロックアドレスがＰＢＡのブロック内の、ページオフセットがｉｐのページから、セクタ数ＣＮＴ分のページの書込み済みフラグを取得する（Ｓ１０４）。そして、プロセッサ３は、書込み対象のページが全て消去状態であるか否かを判定する（Ｓ１０５）。
【００３９】
書込み対象のページに消去状態でないページがあれば（Ｓ１０５，Ｎｏ）、ステップＳ１１０へ進み、ブロック代替処理が行なわれる。また、書込み対象のページに消去状態でないページがなければ（Ｓ１０５，Ｙｅｓ）、プロセッサ３から出力されるデータをそのまま書込み対象のページに書込む（Ｓ１０６）。そして、プロセッサ３は、フラッシュメモリ１のステータスを読出すことによって、書込みが正常に完了したか否かを判定する（Ｓ１０７）。
【００４０】
書込みが正常に完了した場合には（Ｓ１０７，ｐａｓｓ）、処理を終了する。また、書込みがエラー終了した場合には（Ｓ１０７，ｆａｉｌ）、そのブロックをブロック不良と判定し、ユーザ不良フラグに１を設定し（Ｓ１０８）、代替ブロックの残数を１だけデクリメントし（Ｓ１０９）、ステップＳ１１０以降のブロック代替処理が行なわれる。
【００４１】
ステップＳ１１０において、プロセッサ３は代替テーブルを参照し、代替ブロックの物理ブロックアドレスを取得する。そして、元のユーザブロックから書込み対象以外のページのデータを代替ブロックにコピーする（Ｓ１１１）。ここで、元のユーザブロックのうち消去状態のページは、代替ブロックにコピーする必要はない。
【００４２】
次に、プロセッサ３は、書込み対象のページにデータを書込み（Ｓ１１２）、書込みが正常に完了したか否かを判定する（Ｓ１１３）。書込みが正常に完了した場合には（Ｓ１１３，ｐａｓｓ）、ステップＳ１１４へ処理が進む。また、書込みがエラー終了した場合には（Ｓ１１３，ｆａｉｌ）、ステップＳ１０９へ戻って別の代替ブロックに対するデータ書込みが行なわれる。
【００４３】
ステップＳ１１４において、プロセッサ３はユーザ不良フラグをチェックする。ユーザ不良フラグが０であれば（Ｓ１１４，Ｙｅｓ）、元のユーザブロックを消去し（Ｓ１１５）、消去が正常に完了したか否かを判定する（Ｓ１１６）。消去が正常に完了した場合には（Ｓ１１６，ｐａｓｓ）、ステップＳ１１８へ処理が進む。
【００４４】
また、消去がエラー終了した場合には（Ｓ１１６，ｆａｉｌ）、代替ブロックの残数を１だけデクリメントし、ユーザ不良フラグに１を設定して（Ｓ１１７）、ステップＳ１１８へ処理が進む。また、ステップＳ１１４において、ユーザ不良フラグが１であれば（Ｓ１１４，Ｎｏ）、ステップＳ１１８へ処理が進む。
【００４５】
プロセッサ３は、変換テーブルの内容を更新し（Ｓ１１８）、代替テーブルの内容を更新する（Ｓ１１９）。この変換テーブルの内容の更新処理および代替テーブルの内容の更新処理の詳細については後述する。
【００４６】
次に、プロセッサ３は、ポインタテーブル更新フラグが１であるか否かを判定する（Ｓ１２０）。ポインタテーブル更新フラグが１でなければ（Ｓ１２０，Ｎｏ）、処理を終了する。また、ポインタテーブル更新フラグが０であれば（Ｓ１２０，Ｙｅｓ）、ポインタテーブルの内容を更新して（Ｓ１２１）、処理を終了する。このポインタテーブルの内容の更新の詳細については後述する。
【００４７】
図９は、変換テーブルの内容の更新処理（Ｓ１１８）の処理手順を説明するためのフローチャートである。まず、プロセッサ３は、変換テーブルが格納されているブロック内の有効なデータが格納されているページのページオフセット番号ＴＢＬ＿ｉｐを１だけインクリメントする（Ｓ２０１）。なお、ページオフセット番号ＴＢＬ＿ｉｐは、初回の参照時にのみ変換テーブルが格納されるブロックを検索することによって取得され、２回目以降の参照時にはＲＡＭ内のワークエリアに格納された内容を参照することによって取得される。
【００４８】
次に、プロセッサ３は、ページオフセット番号ＴＢＬ＿ｉｐが上限を超えているか否かを判定する（Ｓ２０２）。ここでは、１ブロックを３２ページとしているので、ＴＢＬ＿ｉｐが３２であるか否かを判定している。ページオフセット番号ＴＢＬ＿ｉｐが３２でなければ（Ｓ２０２，Ｎｏ）、ステップＳ２０６へ処理が進む。
【００４９】
また、ページオフセット番号ＴＢＬ＿ｉｐが３２であれば（Ｓ２０２，Ｙｅｓ）、その変換テーブルブロックを消去し（Ｓ２０３）、消去が正常に完了したか否かを判定する（Ｓ２０４）。消去が正常に完了した場合には（Ｓ２０４，ｐａｓｓ）、ページオフセット番号ＴＢＬ＿ｉｐに０を設定し（Ｓ２０５）、ステップＳ２０６へ処理が進む。また、消去がエラー終了した場合には（Ｓ２０４，ｆａｉｌ）、ステップＳ２０８へ進み変換テーブルの代替処理が行なわれる。
【００５０】
ステップＳ２０６において、プロセッサ３は、ページオフセット番号がＴＢＬ＿ｉｐのページに新たな変換テーブルの内容を書込む。そして、書込みが正常に完了したか否かを判定する（Ｓ２０７）。書込みが正常に完了した場合には（Ｓ２０７，ｐａｓｓ）、処理を終了する。また、書込みがエラー終了した場合には（Ｓ２０７，ｆａｉｌ）、ステップＳ２０８へ進み変換テーブルの代替処理が行なわれる。
【００５１】
ステップＳ２０８において、プロセッサ３は、ポインタテーブル更新フラグに１を設定し（Ｓ２０８）、代替ブロックの残数を１だけデクリメントする（Ｓ２０９）。そして、プロセッサ３は代替テーブルを参照し、代替ブロックの物理ブロックアドレスを取得する（Ｓ２１０）。そして、プロセッサ３は、代替ブロックが消去状態なのでページオフセット番号ＴＢＬ＿ｉｐを０に初期化する（Ｓ２１１）。
【００５２】
次に、プロセッサ３は、書込み対象のページに新しい変換テーブルの内容を書込み（Ｓ２１２）、書込みが正常に完了したか否かを判定する（Ｓ２１３）。書込みが正常に完了した場合には（Ｓ２１３，ｐａｓｓ）、処理を終了する。また、書込みがエラー終了した場合には（Ｓ２１３，ｆａｉｌ）、ステップＳ２０９へ戻って別の代替ブロックに対するデータ書込みが行なわれる。
【００５３】
図１０は、代替テーブルの内容の更新処理（Ｓ１１９）の処理手順を説明するためのフローチャートである。まず、プロセッサ３は、代替テーブルが格納されているブロック内の有効なデータが格納されているページのページオフセット番号ＲＥＰ＿ｉｐを１だけインクリメントする（Ｓ３０１）。なお、ページオフセット番号ＲＥＰ＿ｉｐは、初回の参照時にのみ代替テーブルが格納されるブロックを検索することによって取得され、２回目以降の参照時にはＲＡＭ内のワークエリアに格納された内容を参照することによって取得される。
【００５４】
次に、プロセッサ３は、ページオフセット番号ＲＥＰ＿ｉｐが上限を超えているか否かを判定する（Ｓ３０２）。ここでは、１ブロックを３２ページとしているので、ＲＥＰ＿ｉｐが３２であるか否かを判定している。ページオフセット番号ＲＥＰ＿ｉｐが３２でなければ（Ｓ３０２，Ｎｏ）、ステップＳ３０６へ処理が進む。
【００５５】
また、ページオフセット番号ＲＥＰ＿ｉｐが３２であれば（Ｓ３０２，Ｙｅｓ）、その代替テーブルブロックを消去し（Ｓ３０３）、消去が正常に完了したか否かを判定する（Ｓ３０４）。消去が正常に完了した場合には（Ｓ３０４，ｐａｓｓ）、ページオフセット番号ＲＥＰ＿ｉｐに０を設定し（Ｓ３０５）、ステップＳ３０６へ処理が進む。また、消去がエラー終了した場合には（Ｓ３０４，ｆａｉｌ）、ステップＳ３０８へ進み代替テーブルの代替処理が行なわれる。
【００５６】
ステップＳ３０６において、プロセッサ３は、ページオフセット番号がＲＥＰ＿ｉｐのページに新たな代替テーブルの内容を書込む。そして、書込みが正常に完了したか否かを判定する（Ｓ３０７）。書込みが正常に完了した場合には（Ｓ３０７，ｐａｓｓ）、処理を終了する。また、書込みがエラー終了した場合には（Ｓ３０７，ｆａｉｌ）、ステップＳ３０８へ進み代替テーブルの代替処理が行なわれる。
【００５７】
ステップＳ３０８において、プロセッサ３は、ポインタテーブル更新フラグに１を設定し（Ｓ３０８）、代替ブロックの残数を１だけデクリメントする（Ｓ３０９）。そして、プロセッサ３は代替テーブルを参照し、代替ブロックの物理ブロックアドレスを取得する（Ｓ３１０）。そして、プロセッサ３は、代替ブロックが消去状態なのでページオフセット番号ＲＥＰ＿ｉｐを０に初期化する（Ｓ３１１）。
【００５８】
次に、プロセッサ３は、書込み対象のページに新しい代替テーブルの内容を書込み（Ｓ３１２）、書込みが正常に完了したか否かを判定する（Ｓ３１３）。書込みが正常に完了した場合には（Ｓ３１３，ｐａｓｓ）、処理を終了する。また、書込みがエラー終了した場合には（Ｓ３１３，ｆａｉｌ）、ステップＳ３０９へ戻って別の代替ブロックに対するデータ書込みが行なわれる。
【００５９】
図１１は、ポインタテーブルの内容の更新処理（Ｓ１２１）の処理手順を説明するためのフローチャートである。まず、プロセッサ３は、ポインタテーブルが格納されているブロック内の有効なデータが格納されているページのページオフセット番号ＰＯＩ＿ｉｐを１だけインクリメントする（Ｓ４０１）。なお、ページオフセット番号ＰＯＩ＿ｉｐは、初回の参照時にのみポインタテーブルが格納されるブロックを検索することによって取得され、２回目以降の参照時にはＲＡＭ内のワークエリアに格納された内容を参照することによって取得される。
【００６０】
次に、プロセッサ３は、ページオフセット番号ＰＯＩ＿ｉｐが上限を超えているか否かを判定する（Ｓ４０２）。ここでは、１ブロックを３２ページとしているので、ＰＯＩ＿ｉｐが３２であるか否かを判定している。ページオフセット番号ＰＯＩ＿ｉｐが３２でなければ（Ｓ４０２，Ｎｏ）、ステップＳ４０６へ処理が進む。
【００６１】
また、ページオフセット番号ＰＯＩ＿ｉｐが３２であれば（Ｓ４０２，Ｙｅｓ）、そのポインタテーブルブロックを消去し（Ｓ４０３）、消去が正常に完了したか否かを判定する（Ｓ４０４）。消去が正常に完了した場合には（Ｓ４０４，ｐａｓｓ）、ページオフセット番号ＰＯＩ＿ｉｐに０を設定し（Ｓ４０５）、ステップＳ４０６へ処理が進む。また、消去がエラー終了した場合には（Ｓ４０４，ｆａｉｌ）、ステップＳ４０９へ進みポインタテーブルの代替処理が行なわれる。
【００６２】
ステップＳ４０６において、プロセッサ３は、ページオフセット番号がＰＯＩ＿ｉｐのページに新たなポインタテーブルの内容を書込む。そして、書込みが正常に完了したか否かを判定する（Ｓ４０７）。書込みが正常に完了した場合には（Ｓ４０７，ｐａｓｓ）、処理を終了する。また、書込みがエラー終了した場合には（Ｓ４０７，ｆａｉｌ）、ステップＳ４０９へ進みポインタテーブルの代替処理が行なわれる。
【００６３】
ステップＳ４０９において、プロセッサ３は、ポインタテーブル代替ブロックの残数を１だけデクリメントする。そして、プロセッサ３はポインタテーブルを参照し、ポインタテーブル代替ブロックの物理ブロックアドレスを取得する（Ｓ４１０）。そして、プロセッサ３は、ポインタテーブル代替ブロックが消去状態なのでページオフセット番号ＰＯＩ＿ｉｐを０に初期化する（Ｓ４１１）。
【００６４】
次に、プロセッサ３は、書込み対象のページに新しいポインタテーブルの内容を書込み（Ｓ４１２）、書込みが正常に完了したか否かを判定する（Ｓ４１３）。書込みが正常に完了した場合には（Ｓ４１３，ｐａｓｓ）、処理を終了する。また、書込みがエラー終了した場合には（Ｓ４１３，ｆａｉｌ）、ステップＳ４０９へ戻って別のポインタテーブル代替ブロックに対するデータ書込みが行なわれる。
【００６５】
なお、フラッシュメモリ１からのデータ読出しについては、フラッシュメモリ１に格納されたデータの書換えが発生しないので、プロセッサ３は、単に変換テーブルから取得した物理ブロックアドレスとページオフセットとから読出し対象となるページを特定し、そのページからデータを読出せばよい。
【００６６】
以上説明したように、本実施の形態における記憶装置によれば、ユーザデータを書込むユーザブロック内のページが書込み済みの場合、代替ブロックにユーザデータを書込み、元のユーザブロックの内容を消去して代替ブロックとするようにしたので、ユーザブロックの内容を高速に書換えることが可能となった。
【００６７】
また、変換テーブル、代替テーブルまたはポインタテーブルの内容を書換える場合、消去状態のページに新しいテーブルの内容を順次書込むようにしたので、管理情報を高速に書換えることができ、ユーザブロックの内容の書換えにともなう処理を高速に行なうことが可能となった。また、制御プログラムによってフラッシュメモリ１を制御する場合には、その制御プログラムのサイズを縮小することが可能となった。
【００６８】
さらには、ブロックの書込みエラーや消去エラーが発生した場合には、他の代替ブロックにデータを書込み、そのブロックをユーザブロック、ポインタテーブルブロックなどとして管理するようにしたので、ユーザはフラッシュメモリ１を連続した論理ブロック空間としてアクセスすることができ、ファイルシステムなどを容易に構築することが可能となった。
【００６９】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【００７０】
【発明の効果】
制御手段は、変換テーブルを参照してユーザブロック内のページにユーザデータを書込む際、当該ページが書込み済みの場合には、代替テーブルを参照して代替ブロック内のページにユーザデータを書込んで新たなユーザブロックとし、元のユーザブロックを代替ブロックとするので、ユーザデータの書換えを高速に行なうことが可能となった。
【図面の簡単な説明】
【図１】本発明の実施の形態における記憶装置の概略構成を示すブロック図である。
【図２】フラッシュメモリ１に格納されるデータの種類を説明するための図である。
【図３】変換テーブルの内容の一例を示す図である。
【図４】代替テーブルの内容の一例を示す図である。
【図５】代替テーブルの内容が更新されるところを模式的に示す図である。
【図６】ポインタテーブルの内容の一例を示す図である。
【図７】テーブル群（変換テーブル、代替テーブル、ポインタテーブル）が格納されるブロックの内容を示す図である。
【図８】本発明の実施の形態における記憶装置の処理手順を説明するためのフローチャートである。
【図９】変換テーブルの内容の更新処理（Ｓ１１８）の処理手順を説明するためのフローチャートである。
【図１０】代替テーブルの内容の更新処理（Ｓ１１９）の処理手順を説明するためのフローチャートである。
【図１１】ポインタテーブルの内容の更新処理（Ｓ１２１）の処理手順を説明するためのフローチャートである。
【符号の説明】
１　フラッシュメモリ、２　コントローラ、３　プロセッサ、４　ＲＯＭ、５
ＲＡＭ、６　プロセッサバス、７　メモリバス。
【図１】
2004133677.tif 000003
【図２】
2004133677.tif 000004
【図３】
2004133677.tif 000005
【図４】
2004133677.tif 000006
【図５】
2004133677.tif 000007
【図６】
2004133677.tif 000008
【図７】
2004133677.tif 000009
【図８】
2004133677.tif 000010
【図９】
2004133677.tif 000011
【図１０】
2004133677.tif 000012
【図１１】
2004133677.tif 000013