(57)【特許請求の範囲】
【請求項１】
蓄えられる電荷が閾値以上に保持されるとき「０」を示し、電荷が閾値未満に保持されるとき「１」を示す複数のセルを備え、前記各セルが示す「０」及び「１」の組み合わせで表される情報が複数のブロックとして記憶されるフラッシュメモリ部と、
前記各ブロックの使用状態を示すブロック管理値を前記各ブロックに付加し、最新値が認識される毎に、前記各ブロックの何れかに同最新値を書き込むメモリ制御部と、を備え、
前記ブロック管理値は、各セルが示す「０」及び「１」の組み合わせで表される２進数を複数桁で区切り、これら区切り単位で進数変換することにより得られる複数桁のＮ進数（Ｎ＞２）であって、前記メモリ制御部は、前記ブロック管理値に基づき各ブロックが使用状態及び未使用状態の何れであるかを判定し、未使用状態である特定のブロックに前記最新値を書き込んだとき、そのブロック管理値を未使用状態から使用状態とし、前記特定のブロックのデータ容量によって次の最新値の書き込みが不可と判断したとき、前記特定のブロックの最新値を次の未使用のブロックにコピーするとともに、前記次のブロックにおける前記ブロック管理値を未使用状態から使用状態とした後、前記書き込みが不可と判断された前のブロックのブロック管理値を使用状態から未使用状態とするとともに、前記前のブロックの情報を消去するフラッシュメモリ装置において、
前記メモリ制御部は、前記未使用状態においては前記ブロック管理値に対応する全てのセルを「１」として、これらを前記区切り単位でＮ進数に変換することにより前記ブロック管理値の各桁を全て同一のＮ進数である「初期記号」とするとともに、
前記使用状態においては前記ブロック管理値におけるＮ進数の複数桁の何れか１桁に対応する複数のセルのうち２つ以上を「０」としたうえで当該複数のセルの「０」及び「１」をＮ進数に変換することで前記複数桁の何れか１桁を「特定記号」とし、前記ブロック管理値におけるその他の桁を前記「初期記号」として、
前記ブロック管理値を未使用状態から使用状態とする際には、同ブロック管理値を前記ブロック毎に前記「特定記号」の桁の位置を予め定められた順番でずらした前記ブロック管理値とし、
前記使用状態である前記ブロックが複数存在する場合において、前記ブロック管理値の「特定記号」の位置に基づき直近に使用状態とされたと判断した前記ブロックにおける最新値を読み出し、前記ブロックの前記ブロック管理値における前記その他の桁が前記「初期記号」であっても、前記「特定記号」とされるべき１桁が「特定記号」以外であるとき、そのブロックからの前記最新値の読み出しを規制するフラッシュメモリ装置。
【請求項２】
請求項１に記載のフラッシュメモリ装置において、
前記ブロック管理値は、その各桁が４つの前記セルの「０」及び「１」を通じて示される１６進法の４桁の数字であって、
１６進法において前記「初期記号」は「Ｆ」であり、前記「特定記号」は「０」であるフラッシュメモリ装置。
【請求項３】
請求項１又は２に記載のフラッシュメモリ装置において、
前記メモリ制御部は、前記最新値の書き込みが不可と判断された前のブロックから次のブロックに前記最新値をコピーしているときに、前記最新値が更新された場合には、この更新を反映させた最新値を次のブロックに書き込み、
前記コピー中にリセットが発生した場合には、前記ブロック管理値の「特定記号」の位置に基づき前記次のブロックの最新値を読み出すとともに、同最新値においてコピーが完了していない領域においては前記前のブロックの最新値を読み出して前記領域を補完するフラッシュメモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、フラッシュメモリ装置に関する。
【背景技術】
【０００２】
従来、フラッシュメモリ装置においては、データの読み出し時間の短縮を図るべく、メモリ領域をブロックという単位に分けて管理している（例えば、特許文献１参照）。そして、各ブロックにはブロック管理値が付与されている。ブロック管理値とは、そのブロックが使用状態（アクティブ状態）及び未使用状態の何れであるかを示す情報である。
【０００３】
図６に示すように、ブロック管理値は、例えば、１６進法による４桁の数字から構成される。本例では、アクティブ状態においては「＄１１１１」が割り当てられ、未使用状態においては「＄ＦＦＦＦ」が割り当てられる。以下、本明細書では、「＄」の後に示される数字は１６進法の数字とする。
【０００４】
詳しくは、図７に示すように、上記ブロック管理値の４桁は、電荷を蓄放電可能とされるセル１０を通じて表される。セル１０は、溜まっている電荷が閾値Ｔｈ以上のときデジタル情報としての「０」を表し、溜まっている電荷が閾値Ｔｈ未満のときデジタル情報としての「１」を表す。
【０００５】
図８に示すように、４つのセル１０の「０」及び「１」、換言すると２進法の４桁の数字により上記１６進法の１桁が表される。
図６の上側に示すように、第１のブロックがアクティブ状態であって、第２のブロックが未使用状態であるとする。両ブロックは、データを格納する第１〜第ｎのデータエリアＡ１〜Ａｎを有する（ｎは自然数）。未使用状態にある第２のブロックにおける全てのデータエリアＡ１〜Ａｎは、データが存在しない空き状態である。データ（最新値）の書き込み要求があると、その最新値は第１のブロックにおける第１〜第ｎのデータエリアＡ１〜Ａｎに順番に書き込まれていく。これにより、空き状態であるデータエリアが減っていく。そして、図６の下側に示すように、第１のブロックにおける第ｎのデータエリアＡｎに最新値が書き込まれたとき、第２のブロックにおけるブロック管理値が未使用状態「＄ＦＦＦＦ」からアクティブ状態「＄１１１１」に書き換えられるとともに、当該最新値が第２のブロックにおける第１のデータエリアＡ１にコピーされる。その後に、第１のブロックに記憶されるデータが全て消去されるとともに、そのブロック管理値がアクティブ状態から未使用状態に書き換えられるメンテナンスが実行される。
【０００６】
なお、上記コピー中に、最新値が更新される場合もある。この場合、更新された最新値が第２のブロックの第１のデータエリアＡ１に書き込まれる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平９−１３４３１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、第１のブロックから第２のブロックへの最新値のコピー中に、フラッシュメモリ装置の電源が一時的にオフとなることでリセットが発生するおそれがある。このとき、第１のブロックが未使用状態へ切り替えられていないため、再度電源がオンとなったときアクティブ状態となるブロックが２つ存在することになって最新値が不明となる。特に、コピー中に、最新値が更新された場合には、第１及び第２のブロック間で最新値が異なるデータとなる。このとき、真の最新値は、第２のブロックにおける最新値であるものの、それを判断することができない。よって、誤って第１のブロックにおける最新値が読み出されるおそれがある。
【０００９】
これを解消するべく、アクティブ状態とするブロック管理値を連番化することが検討されている。具体的には、第１のブロックをアクティブ状態とするとき、そのブロック管理値を「＄１１１１」として、第２のブロックをアクティブ状態とするとき、そのブロック管理値を「＄１１１２」とする。
【００１０】
これにより、たとえ、上記リセットの発生によりアクティブ状態となるブロックが２つ存在することになっても、ブロック管理値が大きい方（上記例では「＄１１１２」）のブロックにおける真の最新値を読み出すことができる。
【００１１】
本構成においても、最新値が第２のブロックにコピーされた後、上述のメンテナンスが実行される。すなわち、図９（ａ）に示すように、第１のブロック管理値がアクティブ状態から未使用状態、すなわち、「＄０００１」から「＄ＦＦＦＦ」に書き換えられる。このとき、「＄ＦＦＦＦ」とするべく、全てのセル１０の電荷は抜かれる。しかし、セル１０から電荷が抜ける態様は一様ではなく、セル１０が「１」となる順番はランダムである。例えば、図９（ｂ）に示すように、１６進法における「１」（１桁目）に対応する４つのセル１０のうち２桁目のセル１０が最も早く「１」となったとする。この時点で、リセットが発生した場合には、上記４つのセルは「００１１」となるため、１６進法における上記「１」が「３」となる。このため、ブロック管理値が「＄０００３」となってしまう。この場合、第１のブロックのブロック管理値「＄０００３」が第２のブロックのブロック管理値「＄０００２」より大きくなる。従って、メンテナンス中の第１のブロックから最新値が読み出されて、上記同様に、真の最新値を読み出すことができないおそれがある。
【００１２】
この発明は、こうした実情に鑑みてなされたものであり、その目的は、メンテナンス中にリセットが発生した場合であっても、より確実に真の最新値を読み出すことができるフラッシュメモリ装置を提供することにある。
【課題を解決するための手段】
【００１３】
以下、上記目的を達成するための手段及びその作用効果について説明する。
請求項１に記載の発明は、蓄えられる電荷が閾値以上に保持されるとき「０」を示し、電荷が閾値未満に保持されるとき「１」を示す複数のセルを備え、前記各セルが示す「０」及び「１」の組み合わせで表される情報が複数のブロックとして記憶されるフラッシュメモリ部と、前記各ブロックの使用状態を示すブロック管理値を前記各ブロックに付加し、最新値が認識される毎に、前記各ブロックの何れかに同最新値を書き込むメモリ制御部と、を備え、前記ブロック管理値は、各セルが示す「０」及び「１」の組み合わせで表される２進数を複数桁で区切り、これら区切り単位で進数変換することにより得られる複数桁のＮ進数（Ｎ＞２）であって、前記メモリ制御部は、前記ブロック管理値に基づき各ブロックが使用状態及び未使用状態の何れであるかを判定し、未使用状態である特定のブロックに前記最新値を書き込んだとき、そのブロック管理値を未使用状態から使用状態とし、前記特定のブロックのデータ容量によって次の最新値の書き込みが不可と判断したとき、前記特定のブロックの最新値を次の未使用のブロックにコピーするとともに、前記次のブロックにおける前記ブロック管理値を未使用状態から使用状態とした後、前記書き込みが不可と判断された前のブロックのブロック管理値を使用状態から未使用状態とするとともに、前記前のブロックの情報を消去するフラッシュメモリ装置において、前記メモリ制御部は、前記未使用状態においては前記ブロック管理値に対応する全てのセルを「１」として、これらを前記区切り単位でＮ進数に変換することにより前記ブロック管理値の各桁を全て同一のＮ進数である「初期記号」とするとともに、前記使用状態においては前記ブロック管理値におけるＮ進数の複数桁の何れか１桁に対応する複数のセルのうち２つ以上を「０」としたうえで当該複数のセルの「０」及び「１」をＮ進数に変換することで前記複数桁の何れか１桁を「特定記号」とし、前記ブロック管理値におけるその他の桁を前記「初期記号」として、前記ブロック管理値を未使用状態から使用状態とする際には、同ブロック管理値を前記ブロック毎に前記「特定記号」の桁の位置を予め定められた順番でずらした前記ブロック管理値とし、前記使用状態である前記ブロックが複数存在する場合において、前記ブロック管理値の「特定記号」の位置に基づき直近に使用状態とされたと判断した前記ブロックにおける最新値を読み出し、前記ブロックの前記ブロック管理値における前記その他の桁が前記「初期記号」であっても、前記「特定記号」とされるべき１桁が「特定記号」以外であるとき、そのブロックからの前記最新値の読み出しを規制することをその要旨としている。
【００１４】
同構成によれば、ブロック管理値は、その何れか１桁が「特定記号」とされ、その他の桁が「初期記号」とされる。そして、ブロック管理値を使用状態とする際に、その値がブロック毎に異なるように、予め設定された順番で「特定記号」の桁の位置がずらされたブロック管理値が付される。このため、たとえ、使用状態であるブロックが複数存在する場合であっても、ブロック管理値に基づき直近にアクティブ状態とされたブロックから真の最新値を読み出すことができる。
【００１５】
ここで、前のブロックから次のブロックへの最新値のコピーが完了した後に、前のブロックにおけるブロック管理値を使用状態から未使用状態とするとともに、前のブロックのデータを消去するメンテナンスが実行される。この前のブロックのデータを消去するときには、ブロック管理値は全ての桁が「初期記号」とされる。より具体的には、全てセルの電荷が抜かれて、セルが「１」とされる。各セルの電荷が抜ける態様は一様ではなく、セルが「１」となる順番はランダムである。よって、メンテナンス中に電源が一時的にオフ状態となることでリセットが発生した場合には、「特定記号」を示す複数のセルにおいて、「０」であった２以上のセルのうち何れかが先に「１」となる。この場合には、ブロック管理値は、１桁だけ「特定記号」及び「初期記号」以外の数字となって、その他の桁については「初期記号」となる。このようにブロック管理値が構成されるときには、そのブロックからの最新値の読み出しが規制される。よって、上記メンテナンス中にリセットが発生した場合であっても、メンテナンス中のブロックからの最新値が誤って読み出されることが抑制される。これにより、より確実に真の最新値を読み出すことが可能となる。
【００１６】
請求項２に記載の発明は、請求項１に記載のフラッシュメモリ装置において、前記ブロック管理値は、その各桁が４つの前記セルの「０」及び「１」を通じて示される１６進法の４桁の数字であって、１６進法において前記「初期記号」は「Ｆ」であり、前記「特定記号」は「０」であることをその要旨としている。
【００１７】
同構成によれば、各ブロックに、使用状態のブロック管理値として「＄ＦＦＦ０」、「＄ＦＦ０Ｆ」、「＄Ｆ０ＦＦ」及び「＄０ＦＦＦ」の何れかが付される。そして、上記メンテナンス中にリセットが発生すると、「特定記号」としての「０」の桁が、１６進法における「１」〜「Ｅ」となる。これは、「０」が「Ｆ」に達する前にリセットが発生するからである。この場合には、メンテナンス中のブロックからの最新値の読み出しが規制される。よって、より確実に真の最新値が読み出される。
【００１８】
請求項３に記載の発明は、請求項１又は２に記載のフラッシュメモリ装置において、前記メモリ制御部は、前記最新値の書き込みが不可と判断された前のブロックから次のブロックに前記最新値をコピーしているときに、前記最新値が更新された場合には、この更新を反映させた最新値を次のブロックに書き込み、前記コピー中にリセットが発生した場合には、前記ブロック管理値の「特定記号」の位置に基づき前記次のブロックの最新値を読み出すとともに、同最新値においてコピーが完了していない領域においては前記前のブロックの最新値を読み出して前記領域を補完することをその要旨としている。
【００１９】
同構成によれば、最新値を次のブロックにコピーしているときに、最新値が更新された場合には、更新された最新値が次のブロックに書き込まれる。例えば、コピー中にリセットが発生した場合には、ブロック管理値の「特定記号」の位置に基づき次のブロックの最新値が読み出されるとともに、同最新値においてコピーが完了していない領域においては前のブロックの最新値が読み出されることで補完される。これにより、最新値において更新された領域のコピーが完了した後にリセットが発生した場合であっても、更新された真の最新値を読み出すことができる。
【発明の効果】
【００２０】
本発明によれば、フラッシュメモリ装置において、メンテナンス中にリセットが発生した場合であっても、より確実に真の最新値を読み出すことができる。
【図面の簡単な説明】
【００２１】
【図１】フラッシュメモリ装置の構成図。
【図２】各ブロック、特にそのブロック管理値を示したメモリマップ。
【図３】アクティブ状態となったブロックに付されるブロック管理値の順番を示した説明図。
【図４】（ａ）はコピー中に最新値が更新された場合の各ブロックを示したメモリマップ、（ｂ）は（ａ）の途中でリセットが発生した場合の各ブロックを示したメモリマップ。
【図５】メンテナンス時のブロック管理値を示した説明図。
【図６】背景技術における各ブロック、特にそのブロック管理値を示したメモリマップ。
【図７】背景技術におけるセルを模式的に示した説明図。
【図８】背景技術における複数のセルによる１６進法の数字の表示方法を示した説明図。
【図９】背景技術における（ａ）は通常メンテナンス時のブロック管理値を示した説明図、（ｂ）はメンテナンス中にリセットが発生したときのブロック管理値を示した説明図。
【発明を実施するための形態】
【００２２】
以下、本発明にかかるフラッシュメモリ装置を具体化した一実施形態について図１〜図５を参照して説明する。
図１に示すように、フラッシュメモリ装置は、メモリ制御部１１と、フラッシュメモリ部１５とを備える。フラッシュメモリ部１５は不揮発性メモリであって、複数のセル１０で構成される。フラッシュメモリ部１５は、上記背景技術において説明したように、複数のセル１０の「０」及び「１」を通じてデータを記憶する。
【００２３】
メモリ制御部１１は、フラッシュメモリ部１５を利用して最新値を管理する。この最新値は、図示しない外部装置からの情報に応じてメモリ制御部１１によって認識される。
図２に示すように、メモリ制御部１１は、フラッシュメモリ部１５のデータ領域を複数のブロックＢ１〜Ｂｎに分割して使用する。各ブロックＢ１〜Ｂｎは、ブロック管理値と、第１〜第ｎのデータエリアＡ１〜Ａｎとで構成される。ブロック管理値は、１６進法による４桁の数字から構成される。具体的には、図２に示すように、アクティブ状態においては「＄ＦＦＦ０」、「＄ＦＦ０Ｆ」、「＄Ｆ０ＦＦ」及び「＄０ＦＦＦ」の何れかが順番に割り当てられる。すなわち、本例では、アクティブ状態のブロック管理値はブロック毎に異なる。また、未使用状態においては、全てのブロックに対して「＄ＦＦＦＦ」が割り当てられる。本例では、「Ｆ」は「初期記号」に相当し、「０」は「特定記号」に相当する。
【００２４】
また、最新値も、ブロック管理値と同様に、１６進法による複数桁の数字から構成される。１６進法の数字は、上記背景技術において説明したように、複数のセル１０の「０」及び「１」を通じて表される。
【００２５】
全てのブロックＢ１〜Ｂｎに何もデータが記憶されていない状態においては、各ブロック管理値が未使用状態（「＄ＦＦＦＦ」）となっている。この状態において、メモリ制御部１１は、最新値を認識すると、その最新値を第１のブロックＢ１における第１のデータエリアＡ１に書き込むとともに、第１のブロックＢ１におけるブロック管理値を未使用状態（「＄ＦＦＦＦ」）からアクティブ状態（「＄ＦＦＦ０」）とする。以下、同様に、メモリ制御部１１は、順番に最新値を第１のブロックＢ１の第２〜第ｎのデータエリアＡ２〜Ａｎに書き込んでいく。このとき、古い最新値が消去されない。また、ブロック管理値は「＄ＦＦＦ０」に維持される。
【００２６】
図２の下側に示すように、メモリ制御部１１は、第１のブロックＢ１における第ｎのデータエリアＡｎに最新値を書き込むと、第２のブロックＢ２のブロック管理値を未使用状態（「＄ＦＦＦＦ」）からアクティブ状態（「＄ＦＦ０Ｆ」）に書き換える。このとき、第２のブロックＢ２におけるアクティブ状態を示すブロック管理値「＄ＦＦ０Ｆ」は、第１のブロックＢ１におけるアクティブ状態を示すブロック管理値「＄ＦＦＦ０」に対して「０」の位置を左に１桁ずらしたものである。
【００２７】
そして、メモリ制御部１１は、第１のブロックＢ１の最新値を、第２のブロックＢ２における第１のデータエリアＡ１にコピーする。その後に、メモリ制御部１１は、第１のブロックＢ１に記憶されるデータを消去するとともに、ブロック管理値をアクティブ状態（「＄ＦＦＦ０」）から未使用状態（「＄ＦＦＦＦ」）に書き換えるメンテナンスを行う。
【００２８】
また、第１のブロックと同様にして、第２のブロックＢ２における第ｎのデータエリアＡｎに最新値が書き込まれると、第３のブロックＢ３におけるブロック管理値がアクティブ状態（「＄Ｆ０ＦＦ」）に書き換えられた後に、第３のブロックＢ３の第１のデータエリアＡ１に最新値がコピーされる。そして、第２のブロックＢ２について上記メンテナンスが実行される。以下同様に、第４のブロックＢ４がアクティブ状態とされるときには「＄０ＦＦＦ」がブロック管理値として書き込まれて、第３のブロックＢ３について上記メンテナンスが実行される。そして、第５のブロックＢ５がアクティブ状態とされるときには再び「＄ＦＦＦ０」がブロック管理値として書き込まれて、第４のブロックＢ４について上記メンテナンスが実行される。このように、図３に示すように、「０」が１桁ずつ左にずらされる態様で、同図の矢印の順にブロック管理値が付与される。
【００２９】
また、メモリ制御部１１は、第１のブロックＢ１の第ｎ−１のデータエリアＡｎ−１まで最新値を書き込んで、次の最新値が容量の観点から第ｎのデータエリアＡｎに入りきらない場合、次の最新値を第２のブロックＢ２に書き込む。この場合、第２のブロックＢ２の第１及び第２のデータエリアＡ１，Ａ２に次の最新値が書き込まれる。
【００３０】
上記構成によれば、特定のブロックの最新値がコピーされた後に、そのブロックはアクティブ状態から未使用状態に書き換えられるため、基本的にはアクティブ状態となっているブロックは１つである。このため、メモリ制御部１１は、アクティブ状態におけるブロックから最新値を読み出すことができる。
【００３１】
ここで、コピー中に、フラッシュメモリ装置の電源が一時的にオフとなることでリセットが発生するおそれがある。この場合、図２の下側の例では、第２のブロックＢ２におけるブロック管理値の書き換えは完了しているものの第１のブロックＢ１におけるブロック管理値の書き換えは完了していないため、アクティブ状態となるブロックが２つ存在するおそれがある。
【００３２】
上述のように、アクティブ状態ではブロック毎に異なるブロック管理値が付与される。これを利用して、メモリ制御部１１は、最新値を読み出す際に、アクティブ状態のブロックが複数あれば、ブロック管理値の「０」の位置に基づき最新値を読み出す。例えば、メモリ制御部１１は、ブロック管理値が「＄ＦＦＦ０」である第１のブロックＢ１と、ブロック管理値が「＄ＦＦ０Ｆ」である第２のブロックＢ２とがある場合には、図３に示すブロック管理値の付与順序に基づき、「＄ＦＦ０Ｆ」が「＄ＦＦＦ０」より新しい旨判断し、「＄ＦＦ０Ｆ」に対応した第２のブロックＢ２における最新値を読み出す。すなわち、メモリ制御部１１に内蔵される図示しないメモリにブロック管理値の付与順序が予め記憶されている。
【００３３】
図４（ａ）に示すように、第１のブロックＢ１の最新値を、第２のブロックＢ２にコピーしている最中に、最新値が更新される場合がある。ここでは、更新後の最新値を真の最新値と呼ぶ。メモリ制御部１１は、最新値のコピー中に最新値が更新されると、真の最新値を第２のブロックＢ２に書き込む。本例では、左の桁から順に最新値がコピーされるとする。図４（ａ）の例では、メモリ制御部１１は、右から４桁目の「５」をコピーしているとき、３桁目が「Ａ」から「３」に更新された旨認識した場合には、３桁目に更新後の「３」を書き込む。これにより、第２のブロックＢ２には真の最新値（「＄５３９１」）を書き込むことができる。
【００３４】
さらに、上記状況に加えて、図４（ｂ）に示すように、右から２桁目（「９」）の書き込み中にリセットが発生したとする。この場合、４桁目及び３桁目（「５」及び「３」）のコピーが完了し、残りの２桁はコピーが完了していないため初期状態の「Ｆ」となる。
【００３５】
この状態において、メモリ制御部１１は、最新値を読み出す場合、まず、上記同様にブロック管理値に基づき、第２のブロックＢ２における最新値を読み出す。そして、その最新値に「Ｆ」が存在する場合、コピー中にリセットが発生したとして、「Ｆ」の桁を、第１のブロックＢ１における最新値（「９」及び「１」）で補完する。これにより、アクティブ状態となるブロックが２つある場合であっても、正しい順番で最新値が読み出される。上記例では、第１のブロックＢ１の最新値が最初に読み出されること、すなわち、真の最新値と異なる最新値が読み出されることが防止される。よって、真の最新値をより確実に読み出すことができる。
【００３６】
また、メモリ制御部１１は、ブロック管理値においてアクティブ状態における「０」が「１」〜「Ｅ」となっている場合には、そのブロック管理値を有するブロックからの最新値の読み出しを規制する。
【００３７】
例えば、上記メンテナンスにおいては、アクティブ状態（「＄ＦＦＦ０」）から未使用状態（「＄ＦＦＦＦ」）にブロック管理値を書き換える。この場合には、図５の丸数字１に示すように、ブロック管理値における１桁目である「＄０」を、その桁に対応した４つのセル１０を２進法の「００００」から「１１１１」とすることで「＄Ｆ」とする。
【００３８】
ここで、各セル１０の電荷が抜ける態様は一様ではなく、セルが「１」となる順番はランダムである。よって、ブロック管理値を未使用状態に書き換えている途中にリセットが発生した場合には、上記２進法の「００００」の「０」が所定の組み合わせで「１」となって、ブロック管理値が「＄ＦＦＦ１」〜「＄ＦＦＦＥ」となることがある。
【００３９】
具体的には、図５の丸数字２に示すように、２進法の「００００」において１桁目が「１」となった時点でリセットが発生することでブロック管理値が「＄ＦＦＦ１」となる。図５の丸数字３に示すように、２進法の「００００」において２桁目が「１」となった時点でリセットが発生することでブロック管理値が「＄ＦＦＦ２」となる。その他の組み合わせで上記２進法の４桁が構成されることでブロック管理値は「＄ＦＦＦ３」〜「＄ＦＦＦＥ」となりうる。
【００４０】
メモリ制御部１１は、例えば第１のブロックＢ１のブロック管理値が「＄ＦＦＦ１」〜「＄ＦＦＦＥ」となっている場合には、その値を有するブロックからの最新値の読み出しを規制し、第２のブロックＢ２から最新値を読み出す。ここで、最新値の読み出しが規制されたブロックは、メンテナンス中であると予想されるところ、最新値を読み出す対象としては不適当である。従って、メンテナンス中にリセットが発生した第１のブロックＢ１から最新値が誤って読み出されることが抑制される。これにより、より確実に真の最新値を読み出すことが可能となる。
【００４１】
そして、再び電源がオン状態とされると、メモリ制御部１１は、第１のブロックＢ１のブロック管理値を「＄ＦＦＦＦ」とするべく、再び各セル１０から電荷を抜いていく。
以上、説明した実施形態によれば、以下の効果を奏することができる。
【００４２】
（１）第１のブロックＢ１から第２のブロックＢ２への最新値のコピーが完了した後に、第１のブロックＢ１におけるブロック管理値をアクティブ状態から未使用状態とするとともに、第１のブロックＢ１のデータを消去するメンテナンスが実行される。このように、メンテナンス実行時には、第１のブロックＢ１のブロック管理値は、「＄ＦＦＦ０」から「＄ＦＦＦＦ」とされる。より具体的には、ブロック管理値における「＄０」に対応する４つのセル１０の電荷が抜かれて、４つのセル１０が「１」とされる。ここで、各セル１０の電荷が抜ける態様は一様ではなく、セル１０が「１」となる順番はランダムである。よって、メンテナンス中に電源がオフ状態となるリセットが発生した場合には、ブロック管理値における「＄０」の桁が、１６進法における「１」〜「Ｅ」となる可能性がある。このように、ブロック管理値が１桁の「１」〜「Ｅ」と、３桁の「Ｆ」とで構成される場合には、その値を有するブロックからの最新値の読み出しが規制される。よって、上記メンテナンス中にリセットが発生した場合であっても、メンテナンス中のブロックから最新値が誤って読み出されることが抑制される。これにより、より確実に真の最新値を読み出すことができる。
【００４３】
（２）最新値を第２のブロックＢ２にコピーしているときに、最新値が更新された場合には、更新された最新値が第２のブロックＢ２に書き込まれる。例えば、コピー中にリセットが発生した場合には、ブロック管理値の「０」の位置に基づき第２のブロックＢ２の最新値が読み出されるとともに、同最新値においてコピーが完了していない領域においては第１のブロックＢ１の最新値が読み出されることで補完される。これにより、最新値において更新された領域のコピーが完了した後にリセットが発生した場合であっても、更新された真の最新値を読み出すことができる。
【００４４】
（３）第１のブロックＢ１の第ｎ−１のデータエリアＡｎ−１まで最新値を書き込んで、次の最新値が容量の観点から第ｎのデータエリアＡｎに入りきらない場合、つぎの最新値が第２のブロックＢ２に書き込まれる。この状況において、コピーの完了時にリセットが発生した場合には、両ブロックＢ１，Ｂ２間で最新値が異なる。この場合であっても、ブロック管理値の「０」の位置に基づき、正しく第２のブロックＢ２の最新値が読み出される。
【００４５】
（４）たとえ両ブロック間の最新値が同じ場合であっても、上記実施形態のようにブロック管理値の「０」の位置に基づく優先順位があれば、従来のアクティブ状態のブロック管理値が同一の場合と異なって、毎回同一の処理を実行できる。
【００４６】
なお、上記実施形態は、これを適宜変更した以下の形態にて実施することができる。
・上記実施形態においては、ブロック管理値は、１６進法による４桁の数字から構成されていた。しかし、ブロック管理値は１６進法に限らず、例えば８進法、１０進法又は３２進法であってもよい。例えば３２進法の場合、ブロック管理値は５桁の数字から構成されて、ブロック管理値に対応する全てのセルが「０」となる初期記号は「Ｖ」となる。よって、「ＶＶＶＶ０」、「ＶＶＶ０Ｖ」…といった順番でブロック毎に異なるアクティブ状態のブロック管理値が付与される。
【００４７】
・上記実施形態においては、図３に示すように、アクティブ状態となったブロックに対して「＄ＦＦＦ０」、「＄ＦＦ０Ｆ」、「＄Ｆ０ＦＦ」及び「＄０ＦＦＦ」の順でブロック管理値が付与されていた。しかし、予め決められていれば、この順番は上記例に限らない。
【００４８】
・上記実施形態においては、アクティブ状態となったブロックに対して「０」の位置を左に１桁ずつずらしたブロック管理値が順に付与されていた。しかし、このずらす対象は、
４桁の２進法の数字において２以上の「０」が存在する１６進法の数字であれば「０」でなくてもよい。具体的には、「７」、「Ｂ」、「Ｄ」、「Ｅ」及び「Ｆ」以外の数字であればよい。
【００４９】
例えば、上記「０」に代えて「３」をずらしてもよい。この「３」は２進法で「００１１」で表される。この場合、メンテナンス中にリセットが発生すると、２進法で「０１１１」又は２進法で「１０１１」となるおそれがある。ここで、２進法で「０１１１」は１６進法で「７」であって、２進法で「１０１１」は１６進法で「Ｂ」である。よって、本構成においては、アクティブ状態のブロック管理値が例えば「＄３３３７」又は「＄３３３Ｂ」であれば、そのブロックからの最新値の読み出しは規制される。
【符号の説明】
【００５０】
１０…セル、１１…メモリ制御部、１５…フラッシュメモリ部。
【図１】
0005451682.tif 000002
【図２】
0005451682.tif 000003
【図３】
0005451682.tif 000004
【図４】
0005451682.tif 000005
【図５】
0005451682.tif 000006
【図６】
0005451682.tif 000007
【図７】
0005451682.tif 000008
【図８】
0005451682.tif 000009
【図９】
0005451682.tif 000010