(57)【特許請求の範囲】
【請求項１】
データを記録する複数のユーザセクタと、
ユーザセクタ毎に、該ユーザセクタの位置を示すアドレス、および、該ユーザセクタへの記録エラーの回数を示すエラーカウント値を対応させて規定するユーザセクタテーブルと
を有する不揮発性メモリセルを備え、さらに
前記ユーザセクタのうち記録エラーが発生したエラーセクタに対し、前記ユーザセクタテーブルに規定された該エラーセクタのエラーカウント値に基づいて、後にデータを記録するか否かを判定するコントローラを備え、
前記不揮発性メモリセルは、記録エラーが発生した場合に前記エラーセクタに代えてデータを記録する予備セクタをさらに有しており、
前記コントローラは、後にデータを記録すると判定した前記エラーセクタを、後に使用される予備セクタに変更する、半導体記憶装置。
【請求項２】
前記不揮発性メモリセルは、予備セクタ毎に、該予備セクタの位置を示すアドレス、および、該予備セクタへの記録エラーの回数を示すエラーカウント値を対応させて規定する予備セクタテーブルをさらに有する、請求項１に記載の半導体記憶装置。
【請求項３】
前記コントローラは、前記エラーセクタのエラーカウント値が予め設定された値よりも小さい場合には、該エラーセクタに後にデータを記録すると判定し、大きい場合には、該エラーセクタには後にデータを記録しないと判定する、請求項２に記載の半導体記憶装置。
【請求項４】
前記予備セクタテーブルには、使用される予備セクタの順序が付されており、
前記コントローラは、該エラーセクタに後にデータを記録すると判定した場合には前記順序に基づいて最先の予備セクタにデータを記録し、前記エラーセクタから変更された予備セクタには、最先の順序を付す、請求項３に記載の半導体記憶装置。
【請求項５】
前記コントローラは、前記エラーセクタのエラーカウント値と記録エラーが発生するまでの前記エラーセクタへの記録回数との比が、予め設定された値よりも小さい場合には、該エラーセクタに後にデータを記録すると判定し、大きい場合には、該エラーセクタには後にデータを記録しないと判定する、請求項２に記載の半導体記憶装置。
【請求項６】
前記予備セクタテーブルには、予備セクタが使用される順序が付されており、
前記コントローラは、該エラーセクタに後にデータを記録すると判定した場合には、前記順序に基づいて最先の予備セクタにデータを記録し、前記エラーセクタから変更された予備セクタには、最後の順序を付す、請求項５に記載の半導体記憶装置。
【請求項７】
前記コントローラは、前記最先の予備セクタに続く予備セクタの順序を前にずらす、請求項６に記載の半導体記憶装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ブロック単位でリード／ライト／イレースされるフラッシュメモリ等を用いた不揮発性半導体記憶装置に関する。
【０００２】
【従来の技術】
セクタ単位でリード、ライト、イレース処理される不揮発性半導体メモリとして、例えば三菱電機製M5M29F25611VPや日立製作所製HN29W25611があげられる。これらは２ｋバイトのセクタ単位でリード、ライト、消去処理されるフラッシュメモリである。従来のフラッシュメモリを用いた記憶装置は、ホストコンピュータが書き込むセクタアドレス（論理アドレス）をフラッシュメモリの物理アドレスに変換し、さらにホストコンピュータが発行したコマンドによってフラッシュメモリに対するセクタデータの読み出しや書き込みを行う。
【０００３】
フラッシュメモリには、規定値以内の初期不良セクタや使用開始後に使用できなくなる不良セクタが存在する。このような初期的および後発的に起こる不良セクタに対しては、ホストコンピュータの論理アドレスを代替セクタの物理アドレスに変換する処理が必要になる。一方、一度書き込み／消去エラーが起こったセクタであっても再度書き込み／消去を行うと正常に動作するセクタが存在することも知られている。そのようなセクタのエラーは偶発的なエラーであると考えられている。
【０００４】
【発明が解決しようとする課題】
従来は、書き込み／消去エラーが起こると無条件に不良セクタとみなし、偶発エラーセクタに対しても代替セクタへの変換を行っていた。そのため、正常に動作可能な偶発エラーセクタが使用されず無駄が生じていた。使用開始時においても予備セクタを十分確保しなければならず、予め確保すべきユーザの使用可能な記憶容量が抑制されていた。
【０００５】
本発明の目的は、偶発エラーセクタを再利用することで、無駄なく記憶容量を使用でき、信頼性の高い低コストな半導体記憶装置を提供することである。
【０００６】
【課題を解決するための手段】
本発明の半導体記憶装置は、データを記録する複数のユーザセクタと、ユーザセクタ毎に、該ユーザセクタの位置を示すアドレス、および、該ユーザセクタへの記録エラーの回数を示すエラーカウント値を対応させて規定するユーザセクタテーブルとを有する不揮発性メモリセルを備え、さらに前記ユーザセクタのうち記録エラーが発生したエラーセクタに対し、前記ユーザセクタテーブルに規定された該エラーセクタのエラーカウント値に基づいて、後にデータを記録するか否かを判定するコントローラを備えており、これにより上記目的が達成される。
【０００７】
前記不揮発性メモリセルは、記録エラーが発生した場合に前記エラーセクタに代えてデータを記録する予備セクタをさらに有しており、  前記コントローラは、後にデータを記録すると判定した前記エラーセクタを、後に使用される予備セクタに変更してもよい。
【０００８】
前記不揮発性メモリセルは、予備セクタ毎に、該予備セクタの位置を示すアドレス、および、該予備セクタへの記録エラーの回数を示すエラーカウント値を対応させて規定する予備セクタテーブルをさらに有していてもよい。
【０００９】
前記コントローラは、前記エラーセクタのエラーカウント値が予め設定された値よりも小さい場合には、該エラーセクタに後にデータを記録すると判定し、大きい場合には、該エラーセクタには後にデータを記録しないと判定してもよい。
【００１０】
前記予備セクタテーブルには、使用される予備セクタの順序が付されており、前記コントローラは、該エラーセクタに後にデータを記録すると判定した場合には前記順序に基づいて最先の予備セクタにデータを記録し、前記エラーセクタから変更された予備セクタには、最先の順序を付してもよい。
【００１１】
前記コントローラは、前記エラーセクタのエラーカウント値と記録エラーが発生するまでの前記エラーセクタへの記録回数との比が、予め設定された値よりも小さい場合には、該エラーセクタに後にデータを記録すると判定し、大きい場合には、該エラーセクタには後にデータを記録しないと判定してもよい。
【００１２】
前記予備セクタテーブルには、予備セクタが使用される順序が付されており、前記コントローラは、該エラーセクタに後にデータを記録すると判定した場合には、前記順序に基づいて最先の予備セクタにデータを記録し、前記エラーセクタから変更された予備セクタには、最後の順序を付してもよい。
【００１３】
前記コントローラは、前記最先の予備セクタに続く予備セクタの順序を前にずらしてもよい。
【００１４】
【発明の実施の形態】
以下、添付の図面を参照して本発明の実施の形態１および２を説明する。
【００１５】
（実施の形態１）
図１は、不揮発性メモリセル１５を有する本発明の半導体記憶装置１の構成を示すブロック図である。半導体記憶装置１は、例えばフラッシュメモリであり、カード型半導体記憶装置１（例えばＡＴＡカード）である。カード型半導体記憶装置１は、デジタル機器により文字情報、画像情報、音楽情報等のデジタル情報を記録する外部記憶メディアとして用いられる。
【００１６】
図１を参照して、カード型半導体記憶装置１は、半導体記憶装置１の内部動作を制御する内部コントローラ１０と、内部コントローラ１０の動作プログラムを格納するＲＯＭおよびＲＡＭ１１と、フラッシュメモリのアクセスに必要な制御信号を予め定められたタイミングで生成し、フラッシュメモリへのアクセスを制御する制御シーケンサ１２と、カードを装着した端末機（図示せず）がフラッシュメモリにアクセスする際の制御命令等を介在するための複数のレジスタ１３（パラメータレジスタ１３−１、コマンドレジスタ１３−２、ステータスレジスタ１３−３）と、読み出し、または書き込みの対象となるデータを一時的に格納するデータバッファ１４と、大容量データを記録するメモリセルアレイからなるフラッシュメモリ１５とを備えている。
【００１７】
端末機（図示せず）がカード型半導体記憶装置１のフラッシュメモリ１５にデータを記録し、フラッシュメモリ１５からデータを読み出すには、端末機が、カード制御信号と、カードアドレスバスを介してアドレスデコーダ１６に送るレジスタ選択のための情報と、カードデータバスを介してレジスタ１３およびデータバッファ１４に送るデータとによって各レジスタにアクセスし、データの読み出し、書き込みを行う。具体的には、端末機がパラメータレジスタ１３−１にパラメータをセットしてコマンドレジスタ１３−２にコマンドを書き込むと、内部コントローラ１０はパラメータレジスタ１３−１およびコマンドレジスタ１３−２を読み、コマンドに応じた所定の処理を行う。コマンドの処理が正常に終了できたか、または、エラー終了したかは、ステータスレジスタ１３−３を読み出して判断する。フラッシュメモリ１５内のデータはデータバッファ１４を介してアクセスされる。
【００１８】
フラッシュメモリ１５には、後述のようにユーザセクタの他に、不良セクタや、種々の制御に必要なデータが格納されたセクタがある。端末機からはユーザセクタに対して論理アドレスで参照されるため、内部コントローラ１０は論理−物理アドレスの変換を行う。
【００１９】
図２の（ａ）は、フラッシュメモリ１５のメモリマップを示す。フラッシュメモリ１５は、大きく、ユーザデータ記録領域１５−１、ユーザセクタアドレス変換テーブル１５−２、および、予備セクタアドレス変換テーブル１５−３とを含む。ユーザデータ記録領域１５−１は、ユーザの所望のデータを記録する領域である。ただし、ユーザデータ記録領域１５−１には、データを格納するユーザセクタの他に、当初からデータを記録できない、または使用開始後にデータが記録できなくなった不良セクタ、および、不良セクタが発生した場合の代替として用いられる、本発明の特徴である予備セクタ（後述）も存在する。これらのセクタは、ランダムな物理アドレスの位置に混在する。ユーザーセクタには論理アドレスが割り当てられており、図１の例では［］内の数字で示す。同様に予備セクタにも論理番号が割り当てられている。
【００２０】
図２の（ｂ）は、本発明によるユーザセクタアドレス変換テーブル１５−２を示す図である。ユーザセクタアドレス変換テーブル１５−２には、論理アドレスであるオフセットパラメータｋに対応するユーザセクタ［ｋ］の物理アドレスUSR_PA[k]を得られるよう論理アドレス順に物理アドレスが格納されている。さらにテーブル１５−２には、物理アドレスに加えてそのユーザセクタ［ｋ］のエラーカウント値USR_ER[k]が格納されている。エラーカウント値USR_ER[k]とは、過去にそのセクタに書き込み／消去エラー（記録エラー）が生じた回数を表す値である。従来は、記録エラーが生じたセクタはその後使用していなかったが、本発明はそのようなセクタであっても再度書き込み／消去を行うと正常に動作する場合には再利用するので、エラーカウント値USR_ER[k]としてエラーの回数を保持することとした。例えば、エラーカウントが０のセクタ（オフセットパラメータｋ＝２のユーザセクタ）はこれまでエラーが生じておらず、また、エラーカウントが３のセクタ（オフセットパラメータｋ＝１のユーザセクタ）はすでに３回エラーが生じていることを表す。なお、以下では、一度記録エラーが起こったセクタであっても再度書き込み／消去を行うと正常に動作するセクタを、偶発エラーセクタと称する。
【００２１】
図２の（ｃ）は、予備セクタアドレス変換テーブル１５−３を表す。予備セクタアドレス変換テーブル１５−３には、論理アドレスであるオフセットパラメータｉに対応する予備セクタ［ｉ］の物理アドレスRSV_PA[i]を得られるよう論理アドレス順に物理アドレスが格納されている。「予備セクタ」とは、ユーザセクタに記録エラーが発生した場合に、ユーザデータを代わりに記憶する代替のためのセクタである。どのようにして代替するかは、図３を参照して詳述する。さらに物理アドレスに加えてそのセクタのエラーカウント値RSV_ER[i]を格納する。予備セクタのエラーカウント値RSV_ER[i]は０以上の値をとる。なお、後述のように予備セクタはデータを記録されるとユーザセクタとして機能するため、将来的にはユーザセクタアドレス変換テーブル１５−２に登録されることとなる。そのため予備セクタもエラーカウント値RSV_ER[i]を保持する必要がある。
【００２２】
アドレス変換テーブル１５−２、１５−３はフラッシュメモリセルアレイ１５に格納されているので、電源が切られた後でも情報を保持でき、その一方で保持した情報を電気的に消去できる。
【００２３】
続いて、偶発エラーであるか否かを判定してエラーセクタを再利用する処理を説明する。以下説明する処理は、主として内部コントローラ１０（図１）の制御に基づく処理である。図３は、実施の形態１における記録エラー発生時の再書き込み処理のフローチャートを示す。まずエラーが発生したユーザーセクタアドレスの論理アドレスｋと予備セクタの先頭番号ｉとを取得する（ステップＳ３０１）。次に、予備セクタの先頭番号ｉが所定の上限値を超えているか否かを判断して、予備セクタの有無をチェックする（ステップＳ３０２）。予備セクタの先頭番号ｉが予め確保しておいた予備セクタの数を超えていれば予備セクタは使い切ってしまっていることになり、これ以上予備セクタを割り当てられない。よってエラー終了となる。一方、予備セクタの先頭番号ｉが所定の上限値を超えていない場合には、ユーザセクタアドレス変換テーブル１５−２（図２の（ｂ））を参照してユーザーセクタアドレスｋからエラーカウント値USR_ER[k]を取得する（ステップＳ３０３）。そして、エラーカウント値USR_ER[k]に基づいてそのエラーが偶発エラーか否かを判定する（ステップＳ３０４）。
【００２４】
偶発エラーか否かの判定を２つの具体例で説明する。第１の例としては、偶発エラーか否かを、エラーカウント値USR_ER[k]が規定回数に達しているか否か、すなわちUSR_ER[k]＜規定回数であるか否かにより判定する。エラーが規定回数より多く発生しているセクタは不良セクタとみなし、その後の使用はしない。規定回数を何回とするかは適宜決定できるが、例えば１０回である。
【００２５】
第２の例としては、偶発エラーか否かを、エラーカウントUSR_ER[k]を書換え回数で割った値（記録エラー発生率：USR_ER[k]／（書換え回数）））が規定値に達しているか否かにより判定する。すなわち記録エラー発生率が規定値より大きければそのセクタは不良セクタとみなし、その後の使用はしない。規定値をどの程度にするかは適宜決定できるが、例えば０．２０（５回の書き込みに対してエラーが１回生じる値）である。
【００２６】
上述の第１の例においてエラーが規定回数以下である場合、または、上述の第２の例において記録エラー発生率が規定値以下である場合には、偶発エラーとみなして次の処理に進む。次の処理は、エラーセクタを予備セクタとして再利用し、データの記録を予備セクタへ代替するための処理である。まずエラーカウント値USR_ER[k]を１加算する（ステップＳ３０５）。そしてエラーセクタの物理アドレスUSR_PA[k]、エラーカウント値USR_ER[k]を一旦仮変数tempに退避させる（ステップＳ３０６）。これは後の予備セクタとしての登録のためである。その後、予備セクタ番号ｉの物理アドレスRSV_PA[i]、エラーカウントRSV_ER[i]の各値を、ユーザセクタアドレス変換テーブル１５−２のUSR_PA[k]、USR_ER[k]が格納されていた位置（オフセットｋ）に書き込む（ステップＳ３０７）。この処理は、予備セクタを、書き込みの対象であるユーザセクタとして割り当てることを意味する。その結果、この時点で偶発エラーセクタから予備セクタへの代替が完了する。次いで、偶発エラーを起こしたセクタを再度利用できるよう予備セクタとして登録する。具体的には、予備セクタアドレス変換テーブル１５−３において、代替に使用したRSV_PA[i]、RSV_ER[i]が格納されていた位置（オフセットｉ）に、退避させておいた偶発エラーセクタの物理アドレスUSR_PA[k]、エラーカウント値USR_ER[k]を書き込む（ステップＳ３０８）。この処理により、偶発エラーセクタが次に使用される予備セクタとして登録されたことになる。換言すれば、この処理は、偶発エラーであるとの判定があったときは偶発エラーセクタと次に使用する予備セクタとを入れ替えることを意味する。その後、処理はステップＳ３１１へ進む。
【００２７】
一方ステップＳ３０４での処理の結果、偶発エラーセクタと判定されなかった場合（すなわち不良セクタと判定された場合）、当該セクタは２度と使用しないので、ユーザセクタアドレス変換テーブル１５−２の書き換えを行う。具体的には予備セクタのアドレスRSV_PA[i]およびエラーカウント値RSV_ER[i]を、書き込みの対象であるユーザセクタの物理アドレスUSR_PA[k]、エラーカウント値USR_ER[k]として割り当てる（ステップＳ３０９）。この結果、書き換え直前のUSR_PA[k]が示す物理アドレスはもはやユーザセクタアドレス変換テーブル１５−２に登録されないこととなり、当該アドレスのセクタは破棄されたことになる。ステップＳ３０９の処理の結果、番号ｉの予備セクタはユーザセクタとして使用されたので、未使用の予備セクタの先頭番号ｉを１加算し（ステップＳ３１０）、ステップＳ３１１へ進む。未使用予備セクタの先頭番号ｉはパラメータとして不揮発性メモリ上に保持する。
【００２８】
次に予備セクタによって置き換えられたユーザーセクタ値USR_PA[k]に対しエラーによって正常に完了できなかった書き込み処理を再び行い（ステップＳ３１１）、書き込み処理が正常にできたかを判定する（ステップＳ３１２）。書き込みが正常に終了していれば処理を終了する。書き込みが正常に終了していなければ再度ステップＳ３０２に戻り、ステップＳ３０２からの処理を再び行う。
【００２９】
本実施の形態によれば、記録エラーが発生しそれが偶発エラーと判定されたセクタは予備セクタに置き換えられるとともに、自身は次に使用されるべき予備セクタとして登録される。記録エラーが生じたセクタが偶発エラーセクタか否かは、累積エラー発生回数に基づいて判定する。不良セクタは何度書き込みを行っても必ずエラーとなるので、除外できる。偶発エラーセクタを再度利用することでエラーセクタの無駄な消耗を防いで記憶容量を確保できる。よって装置の寿命を延ばして低コスト化を実現できる。なお、偶発エラーセクタはエラーは生じたものの、再度の記録時には通常のユーザセクタと同じ性能を有するので、信頼性も高い。
【００３０】
（実施の形態２）
実施の形態２では、実施の形態１と異なる手法により、エラーセクタの再利用、およびエラーセクタの破棄を行う発明を説明する。また実施の形態１では、偶発エラーセクタは次に使用されるべき予備セクタとして登録されたが、実施の形態２では、偶発エラーセクタは予備セクタの最後尾に登録される。
【００３１】
実施の形態２においても、図１の半導体記憶装置１の構成、および、図２のフラッシュメモリセルアレイ１５（図１）のデータ構造を利用する。ただし、図１および図２の説明は、実施の形態１で既にしたので、以下では省略する。
【００３２】
図４は、実施の形態２における記録エラー発生時の再書き込み処理のフローチャートを示す。図４を参照して、偶発エラーであるか否かを判定してエラーセクタを再利用する処理を説明する。以下説明する処理は、主として内部コントローラ１０（図１）の制御に基づく処理である。まず記録エラーが発生したユーザーセクタアドレスの論理アドレスｋと、未使用の予備セクタの数Ｎとを取得する（ステップＳ４０１）。次に、未使用予備セクタ数Ｎが所定の１以上か否かを判断して、予備セクタの有無をチェックする（ステップＳ４０２）。未使用予備セクタ数Ｎが０であれば予備セクタは使い切ってしまっていることになり、これ以上予備セクタを割り当てられない。よってエラー終了となる。一方、未使用予備セクタ数Ｎが１以上の場合には、ユーザセクタアドレス変換テーブル１５−２（図２の（ｂ））を参照してユーザーセクタアドレスｋからエラーカウント値USR_ER[k]を取得する（ステップＳ４０３）。そして、エラーカウント値USR_ER[k]に基づいてそのエラーが偶発エラーか否かを判定する（ステップＳ４０４）。
【００３３】
偶発エラーか否かの判定は、実施の形態１で具体的に説明した２つの例のいずれに基づいても行うことができる。すなわちエラーカウント値USR_ER[k]が規定回数に達しているか否か、または記録エラー発生率が規定値に達しているか否かに基づいて行えばよい。これらの説明は実施の形態１でしたので省略する。
【００３４】
偶発エラーと判定した場合、エラーセクタを予備セクタとして再利用し、データの記録を予備セクタへ代替するための処理に進む。まずエラーカウントUSR_ER[k]を１加算する（ステップＳ４０５）。そして物理アドレスUSR_PA[k]、エラーカウントUSR_ER[k]を一旦仮変数tempに退避させる（ステップＳ４０６）。そして予備セクタ番号０の物理アドレスRSV_PA[0]、エラーカウントRSV_ER[0]の値を、ユーザセクタアドレス変換テーブル１５−２のUSR_PA[k]、USR_ER[k]が格納されていた位置（オフセットｋ）に書き込む（ステップＳ４０７）。この処理は、予備セクタを、書き込みの対象であるユーザセクタとして割り当てることを意味する。「予備セクタ番号０」としたのは、予備セクタは常に０番目を使用するからである。その結果、この時点で予備セクタへの代替が完了する。
【００３５】
次いで、偶発エラーを起こしたセクタを再度利用できるよう予備セクタとして登録するために、予備セクタアドレス変換テーブルを更新する。予備セクタは常に０番目を使用するので、予備セクタを使用した後１つづつ前にシフトさせ、次の予備セクタが０番目になるようにする（ステップＳ４０８）。さらに偶発エラーを起こしたセクタを再度利用できるよう予備セクタの最後尾に登録する（ステップＳ４０９）。具体的には、予備セクタアドレス変換テーブルのオフセットパラメータ（Ｎ−１）にステップＳ４０６で退避させた物理アドレスUSR_PA[k]、エラーカウントUSR_ER[k]を書き込む。この処理により、偶発エラーセクタが予備セクタの最後尾に登録され、将来の使用に備えることができる。その後、処理はステップＳ４１３へ進む。
【００３６】
一方ステップＳ４０４での処理の結果、偶発エラーセクタと判定されなかった場合（すなわち不良セクタと判定された場合）、当該セクタは２度と使用しないので、ユーザセクタアドレス変換テーブル１５−２（図２）の書き換えを行う。具体的には予備セクタのアドレスRSV_PA[0]およびエラーカウント値RSV_ER[0]を、書き込みの対象であるユーザセクタの物理アドレスUSR_PA[k]、エラーカウント値USR_ER[k]として割り当てる（ステップＳ４１０）。この結果、書き換え直前のUSR_PA[k]が示す物理アドレスはもはやユーザセクタアドレス変換テーブル１５−２（図２）に登録されないこととなり、当該アドレスのセクタは破棄されたことになる。ステップＳ４１０の処理の結果、番号０の予備セクタはユーザセクタとして使用されたので、予備セクタの番号を１つづつ前にシフトさせ、次の予備セクタが０番目になるようにする（ステップＳ４１１）。そして未使用予備セクタ数Ｎは１つ使用されて減少するので、Ｎ−１とする（ステップＳ４１２）。未使用予備セクタ数Ｎはパラメータとして不揮発性メモリ上に保持する。
【００３７】
次に予備セクタによって置き換えられたユーザーセクタ値USR_PA[k]に対し記録エラーによって正常に完了できなかった書き込み処理を再び行い（ステップＳ４１３）、書き込み処理が正常にできたかを判定する（ステップＳ４１４）。書き込みが正常に終了していれば処理を終了する。書き込みが正常に終了していなければ再度ステップＳ４０２に戻り、ステップＳ４０２からの処理を再び行う。
【００３８】
本実施の形態によれば、記録エラーが発生しそれが偶発エラーと判定されたセクタは予備セクタに置き換えられるとともに、自身は予備セクタの最後尾に登録され将来の使用に備える。記録エラーが生じたセクタが偶発エラーセクタか否かは、累積エラー発生回数に基づいて判定する。不良セクタは何度書き込みを行っても必ずエラーとなるので、除外できる。偶発エラーセクタを再度利用することでセクタの無駄な消耗を防いで記憶容量を確保できる。よって装置の寿命を延ばして低コスト化が実現される。なお、実施の形態１で説明したと同様、偶発エラーセクタの信頼性は高い。
【００３９】
図３および４を参照して説明した半導体記憶装置１（図１）の処理フローは、このように動作させるプログラムとしても実現される。このようなプログラムは内部コントローラ１０（図１）により実行される。
【００４０】
【発明の効果】
ユーザセクタのうち記録エラーが発生したエラーセクタに対し、ユーザセクタテーブルに規定されたエラーセクタのエラーカウント値に基づいて、後にデータを記録するか否かを判定する。これにより、記録エラーが発生したセクタであってもデータを記録のために再利用されるため、セクタの無駄な消耗を防いで記憶容量を確保できる。また高い信頼性を有したまま装置の寿命を延ばして低コスト化を実現できる。
【００４１】
記録エラーが生じたときにデータを記録する代替のセクタとして予備セクタを設け、後にデータを記録する場合には、エラーセクタを予備セクタに変更する。これにより後に記録エラーが発生した場合に、当該エラーセクタにデータを記録できることとなり、エラーセクタであっても有効に利用できる。
【００４２】
予備セクタに対しても、予備セクタへの記録エラーの回数を示すエラーカウント値を規定した予備セクタテーブルを設ける。これにより、予備セクタに後にデータが記録されても、エラーカウント値をユーザセクタテーブルに登録することでユーザセクタとして機能させることができる。
【００４３】
後にデータを記録するか否かを判定するために、累積したエラーカウント値を予め設定した値と比較する。これにより、予め設定した値よりも小さい場合にはエラーセクタを有効に再利用できる。
【００４４】
エラーセクタから変更された予備セクタには最先の順序が付される。よってエラーセクタを有効に再利用できる。
【００４５】
後にデータを記録するか否かを判定するために、エラーセクタのエラーカウント値と記録エラーが発生するまでのエラーセクタへの記録回数との比を、予め設定された値と比較する。これにより、予め設定した値よりも小さい場合にはエラーセクタを有効に再利用できる。
【００４６】
エラーセクタから変更された予備セクタには、最後の順序が付される。よってエラーセクタを有効に再利用できる。
【００４７】
最先の予備セクタに続く予備セクタの順序を前にずらす。これにより、予備セクタの使用順序が管理できる。
【図面の簡単な説明】
【図１】  不揮発性メモリセルを有する本発明の半導体記憶装置の構成を示すブロック図である。
【図２】  （ａ）は、フラッシュメモリのメモリマップを示す図である。（ｂ）は、本発明によるユーザセクタアドレス変換テーブルを示す図である。（ｃ）は、予備セクタアドレス変換テーブルを表す図である。
【図３】  実施の形態１における書き込みエラー発生時の再書き込み処理のフローチャートである。
【図４】  実施の形態２における書き込みエラー発生時の再書き込み処理のフローチャートである。
【符号の説明】
１  半導体記憶装置、  １０  内部コントローラ、  １５  フラッシュメモリセルアレイ、  １５−１  ユーザデータ記録領域、  １５−２  ユーザセクタアドレス変換テーブル、  １５−３  予備セクタアドレス変換テーブル
【図１】
0004766781.tif 000002
【図２】
0004766781.tif 000003
【図３】
0004766781.tif 000004
【図４】
0004766781.tif 000005