(57)【特許請求の範囲】
【請求項１】
使用するデータ容量に相当する個数のデータセクタよりなるフラッシュデータメモリと、
２Ｎ（Ｎは２以上の整数）個のバッファセクタよりなるフラッシュバッファと、
データセクタのアドレスがそれぞれ書き込まれるＮ個のセクタ管理領域を有するセクタ管理手段と
を備えたフラッシュメモリ装置のデータ書き換え方法であって、
第ｎ回目のデータ書き換え処理の第ｎの書き換えデータを第ｎのバッファセクタに書き込む第１のステップと、
第ｎのセクタ管理領域を上記第ｎの書き換えデータの書き換えアドレスである第ｎの書き換えアドレスに書き換える第２のステップと、
第１から第Ｎまでのセクタ管理領域に書き込まれているアドレスの最大Ｎ個のデータセクタと、第（ｎ＋１）から第（ｎ＋Ｎ）までのＮ個のバッファセクタとを、セクタ内の全メモリセルを同時に消去するときにそのセクタを完全に消去するのにかかる時間よりも短い時間であって、かつ上記完全に消去するのにかかる時間の１／Ｎ以上の時間で同時に消去処理する第３のステップと
を有する一連の処理を、上記ｎを１からＮまで１つずつ増やして合計Ｎ回繰り返し、これらＮ回のデータ書き換え処理においてのＮ回の上記消去処理によって、第１の書き換えアドレスのデータセクタおよび第（Ｎ＋１）のバッファセクタを完全に消去する第４のステップと、
第１のバッファセクタに書き込まれている上記第１の書き換えデータを、上記第１の書き換えアドレスの上記完全に消去したデータセクタに書き込む第５のステップと
を備えた
ことを特徴とするデータ書き換え方法。
【請求項２】
請求項１記載のデータ書き換え方法において、
上記第１のステップは、上記第ｎの書き換えアドレスと重複するアドレスが上記セクタ管理手段内にあるか否かを判別し、上記セクタ管理手段内にすでにある上記重複するアドレスを無効にするとともに、上記第ｎの書き換えデータを上記第ｎのバッファセクタに書き込み、
上記第５のステップは、第１のセクタ管理領域に書き込まれている上記第１の書き換えアドレスが有効であるときにのみ、上記第１のバッファセクタに書き込まれている第１の書き換えデータを、上記第１の書き換えアドレスの完全に消去したデータセクタに書き込む
ことを特徴とするデータ書き換え方法。
【請求項３】
Ｎ（Ｎは２以上の整数）個のデータセクタよりなるフラッシュデータメモリと、
２Ｎ個のバッファセクタよりなるフラッシュバッファと、
データセクタのアドレスがそれぞれ書き込まれるＮ個のセクタ管理領域を有するセクタ管理手段と
を備えたフラッシュメモリ装置のデータ書き換え方法であって、
第１回目のデータ書き換え処理の第１の書き換えデータを第１のバッファセクタに書き込む第１のステップと、
第１のセクタ管理領域を上記第１の書き換えデータの書き換えアドレスである第１の書き換えアドレスに書き換える第２のステップと、
第１から第Ｎまでのセクタ管理領域に書き込まれているアドレスの最大Ｎ個のデータセクタと、第２から第（Ｎ＋１）までのＮ個のバッファセクタとを、セクタ内の全メモリセルを同時に消去するときにそのセクタを完全に消去するのにかかる時間よりも短い時間であって、かつ上記完全に消去するのにかかる時間の１／Ｎ以上の時間で同時に消去処理する第３のステップと、
第２回目から第Ｎ回目までのデータ書き換え処理ごとに、セクタ管理領域およびバッファセクタを１つずつずらして、上記第１のステップから上記第３のステップまでの一連の処理をさらに（Ｎ−１）回繰り返し、これら合計Ｎ回のデータ書き換え処理においての合計Ｎ回の上記消去処理によって、上記第１の書き換えアドレスのデータセクタおよび上記第（Ｎ＋１）のバッファセクタを完全に消去する第４のステップと、
上記第１のバッファセクタに書き込まれている上記第１の書き換えデータを、上記第１の書き換えアドレスの上記完全に消去したデータセクタに書き込む第５のステップと
を備えた
ことを特徴とするデータ書き換え方法。
【請求項４】
請求項１から３までのいずれか１つに記載のデータ書き換え方法において、
読み出しアドレスが上記セクタ管理手段に書き込まれているアドレスであるか否かを判別することによって、読み出しデータがデータセクタに書き込まれているか否かを判別し、データセクタに書き込まれていれば上記フラッシュデータメモリから読み出し、データセクタに書き込まれていなければ上記フラッシュバッファから読み出すことを特徴とするデータ書き換え方法。
【請求項５】
使用するデータ容量に相当する個数のデータセクタよりなるフラッシュデータメモリと、
２Ｎ（Ｎは２以上の整数）個のバッファセクタよりなるフラッシュバッファと、
揮発性メモリで構成され、データセクタのアドレスがそれぞれ書き込まれるＮ個のセクタ管理領域を有するセクタ管理手段と、
上記データセクタのアドレスがそれぞれ書き込まれる２Ｎ個の不揮発性セクタ管理領域を有し、第ｎの不揮発性セクタ管理領域が第ｎのバッファセクタに設けられている不揮発性セクタ管理手段と、
を備えたフラッシュメモリ装置のデータ書き換え方法であって、
第ｎ回目のデータ書き換え処理の第ｎの書き換えデータを第ｎのバッファセクタに書き込む第１のステップと、
第ｎのセクタ管理領域を上記第ｎの書き換えデータの書き換えアドレスである第ｎの書き換えアドレスに書き換えるとともに、第ｎの不揮発性セクタ管理領域に上記第ｎの書き換えアドレスを書き込む第２のステップと、
第１から第Ｎまでのセクタ管理領域に書き込まれているアドレスの最大Ｎ個のデータセクタと、第（ｎ＋１）から第（ｎ＋Ｎ）までのＮ個のバッファセクタとを、セクタ内の全メモリセルを同時に消去するときにそのセクタを完全に消去するのにかかる時間よりも短い時間であって、かつ上記完全に消去するのにかかる時間の１／Ｎ以上の時間で同時に消去処理する第３のステップと
を有する一連の処理を、上記ｎを１からＮまで１つずつ増やして合計Ｎ回繰り返し、これらＮ回のデータ書き換え処理においてのＮ回の上記消去処理によって、第１の書き換えアドレスのデータセクタおよび第（Ｎ＋１）のバッファセクタを完全に消去する第４のステップと、
第１のバッファセクタに書き込まれている上記第１の書き換えデータを、上記第１の書き換えアドレスの上記完全に消去したデータセクタに書き込む第５のステップと
を備え、
上記第１のステップは、上記第ｎの書き換えアドレスと重複するアドレスが上記セクタ管理手段内にあるか否かを判別し、上記セクタ管理手段内にすでにある上記重複するアドレスを上記セクタ管理手段内でのみ無効にし、上記第ｎの書き換えデータを上記第ｎのバッファセクタに書き込みしてから、上記不揮発性セクタ管理手段内にすでにある上記重複するアドレスを上記不揮発性セクタ管理手段内で無効にし、
上記第５のステップは、上記第１のセクタ管理領域に書き込まれている上記第１の書き換えアドレスが有効であるときにのみ、上記第１のバッファセクタに書き込まれている第１の書き換えデータを、上記第１の書き換えアドレスの完全に消去したデータセクタに書き込む
ことを特徴とするデータ書き換え方法。
【請求項６】
使用するデータ容量よりもＮ（Ｎは２以上の整数）個以上多いデータセクタ数のフラッシュデータメモリと、
上記フラッシュデータメモリに書き込まれるデータの論理アドレス数と同数のアドレス管理領域を有し、それぞれの論理アドレスのアドレス管理領域にその論理アドレスに割り当てたデータセクタの物理アドレスが書き込まれたアドレス管理手段と、
データセクタの物理アドレスがそれぞれ書き込まれる複数のセクタ管理領域を有するセクタ管理手段と
を備えたフラッシュメモリ装置のデータ書き換え方法であって、
第ｎ回目のデータ書き換え処理の第ｎの書き換えデータを、被書き換えデータが書き込まれているデータセクタとは異なる他の完全に消去されているデータセクタであって第ｎのセクタ管理領域に書き込まれている物理アドレスのデータセクタに書き込む第１のステップと、
上記第ｎの書き換えデータの論理アドレスのアドレス管理領域に書き込まれている物理アドレスであって上記被書き換えデータが書き込まれているデータセクタの物理アドレスである第ｎの被書き換え物理アドレスを、第（ｎ＋Ｎ）のセクタ管理領域に書き込む第２のステップと、
上記第ｎの書き換えデータの論理アドレスのアドレス管理領域に書き込まれている上記第ｎの被書き換え物理アドレスを、上記第ｎの書き換えデータを書き込んだデータセクタの物理アドレスに書き換える第３のステップと、
第（ｎ＋１）から第（ｎ＋Ｎ）までのセクタ管理領域に書き込まれている物理アドレスの最大Ｎ個のデータセクタを、セクタ内の全メモリセルを同時に消去するときにそのセクタを完全に消去するのにかかる時間よりも短い時間であって、かつ上記完全に消去するのにかかる時間の１／Ｎ以上の時間で同時に消去処理する第４のステップと
を有する一連の処理を、上記ｎを１からＮまで１つずつ増やして合計Ｎ回繰り返し、これらＮ回のデータ書き換え処理においてのＮ回の上記消去処理によって、第１の被書き換え物理アドレスのデータセクタを完全に消去する第５のステップと
を備えた
ことを特徴とするデータ書き換え方法。
【請求項７】
請求項６記載のデータ書き換え方法において、
上記フラッシュデータメモリは、上記データ容量よりも（Ｍ＋Ｎ）（Ｍは１以上の整数）個以上多いデータセクタ数であり、
上記第１のステップは、
上記第ｎの書き換えデータを、被書き換えデータが書き込まれているデータセクタとは異なる他の完全に消去されているデータセクタであって第（ｍ＋ｎ）（ｍは初期値０で最大値Ｍの変数）のセクタ管理領域に書き込まれている物理アドレスのデータセクタに書き込む第６のステップと、
上記第６のステップで正常に書き込みできたか否かをチェックし、正常の場合には上記第２のステップに進み、異常の場合には、第（ｍ＋ｎ）のセクタ管理領域のデータセクタを不良としたあと、上記ｍを１つインクリメントして上記第６のステップに戻る第７のステップと
を有し、
上記第２のステップは、上記第ｎの被書き換え物理アドレスを第（ｎ＋Ｍ＋Ｎ）のセクタ管理領域に書き込み、
上記第４のステップは、第（ｎ＋Ｍ＋１）から第（ｎ＋Ｍ＋Ｎ）までのセクタ管理領域に書き込まれている物理アドレスの最大Ｎ個のデータセクタを、セクタ内の全メモリセルを同時に消去するときにそのセクタを完全に消去するのにかかる時間よりも短い時間であって、かつ上記完全に消去するのにかかる時間の１／Ｎ以上の時間で同時に消去処理する
ことを特徴とするデータ書き換え方法。
【請求項８】
（Ｎ＋１）（Ｎは２以上の整数）個のデータセクタよりなるフラッシュデータメモリと、
上記フラッシュデータメモリに書き込まれるデータの論理アドレスに割り当てたデータセクタの物理アドレスが書き込まれるアドレス管理領域を有するアドレス管理手段と、
データセクタの物理アドレスのそれぞれが書き込まれる複数のセクタ管理領域を有するセクタ管理手段と
を備えたフラッシュデータメモリ装置のデータ書き換え方法であって、
第１回目のデータ書き換え処理の第１の書き換えデータを、被書き換えデータが書き込まれているデータセクタとは異なる他の完全に消去されているデータセクタであって第１のセクタ管理領域に書き込まれている物理アドレスのデータセクタに書き込む第１のステップと、
上記アドレス管理領域に書き込まれている物理アドレスであって上記被書き換えデータが書き込まれているデータセクタの物理アドレスである第１の被書き換え物理アドレスを、第（Ｎ＋１）のセクタ管理領域に書き込む第２のステップと、
上記アドレス管理領域に書き込まれている上記第１の被書き換え物理アドレスを、上記第１の書き換えデータを書き込んだデータセクタの物理アドレスに書き換える第３のステップと、
第２から第（Ｎ＋１）までのセクタ管理領域に書き込まれている物理アドレスの最大Ｎ個のデータセクタを、セクタ内の全メモリセルを同時に消去するときにそのセクタを完全に消去するのにかかる時間よりも短い時間であって、かつ上記完全に消去するのにかかる時間の１／Ｎ以上の時間で同時に消去処理する第４のステップと、
第２回目から第Ｎ回目までのデータ書き換え処理ごとに、セクタ管理領域を１つずつずらして、上記第１のステップから上記第４のステップまでの一連の処理をさらに（Ｎ−１）回繰り返し、これら合計Ｎ回のデータ書き換え処理においての合計Ｎ回の上記消去処理によって、上記第１の被書き換え物理アドレスのデータセクタを完全に消去する第５のステップと
を備えた
ことを特徴とするデータ書き換え方法。
【請求項９】
請求項６から８までのいずれか１つに記載のデータ書き換え方法において、
読み出し論理アドレスに相当する物理アドレスを、上記アドレス管理手段から検索し、その物理アドレスのセクタに書き込まれているデータを読み出すことを特徴とするデータ書き換え方法。
【請求項１０】
使用するデータ容量に相当する個数のデータセクタよりなるフラッシュデータメモリと、
２Ｎ（Ｎは２以上の整数）個のバッファセクタよりなるフラッシュバッファと、
データセクタのアドレスがそれぞれ書き込まれるＮ個のセクタ管理領域を有するセクタ管理手段と
を備えたフラッシュメモリ装置のデータを、請求項１から５までのいずれか１つに記載のデータ書き換え方法によって書き換えることを特徴とするデータ書き換え装置。
【請求項１１】
使用するデータ容量よりもＮ（Ｎは２以上の整数）個以上多いセクタ数のフラッシュデータメモリと、
上記フラッシュデータメモリに書き込まれるデータの論理アドレス数と同数のアドレス管理領域を有し、それぞれの論理アドレスのアドレス管理領域にその論理アドレスに割り当てたセクタの物理アドレスが書き込まれたアドレス管理手段と、
データセクタの物理アドレスがそれぞれ書き込まれる複数のセクタ管理領域を有するセクタ管理手段と
を備えたフラッシュメモリ装置のデータを、請求項６から９までのいずれか１つに記載のデータ書き換え方法によって書き換えることを特徴とするデータ書き換え装置。
【請求項１２】
使用するデータ容量に相当する個数のデータセクタよりなるフラッシュデータメモリと、
２Ｎ（Ｎは２以上の整数）個のバッファセクタよりなるフラッシュバッファと、
データセクタのアドレスがそれぞれ書き込まれるＮ個のセクタ管理領域を有するセクタ管理手段と
を備え、
データ書き換え装置によって請求項１から５までのいずれか１つに記載のデータ書き換え方法でデータの書き換えがなされることを特徴とするフラッシュメモリ装置。
【請求項１３】
使用するデータ容量よりもＮ（Ｎは２以上の整数）個以上多いデータセクタ数のフラッシュデータメモリと、
上記フラッシュデータメモリに書き込まれるデータの論理アドレス数と同数のアドレス管理領域を有し、それぞれの論理アドレスのアドレス管理領域にその論理アドレスに割り当てたセクタの物理アドレスが書き込まれたアドレス管理手段と、
データセクタの物理アドレスがそれぞれ書き込まれる複数のセクタ管理領域を有するセクタ管理手段と
を備え、
データ書き換え装置によって請求項６から９までのいずれか１つに記載のデータ書き換え方法でデータの書き換えがなされることを特徴とするフラッシュメモリ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フラッシュＥＥＰＲＯＭメモリ（以下、フラッシュメモリとする）のデータを書き換えるデータ書き換え装置およびデータ書き換え方法に関する。
【０００２】
【従来の技術】
フラッシュメモリは、不揮発性の複数のメモリセルによって構成されている。フラッシュメモリのデータ書き換えは、消去（イレース：Ｅｒａｓｅ）と書き込み（ライト：Ｗｒｉｔｅ）の２つがセットになっている。消去は１ページ分または複数ページ分あるいは１セクタ分または複数セクタ分のメモリセルを単位としてなされ、書き込みは１バイト分や１ワード分のメモリセルを単位としてなされ、消去単位は、書き込み単位よりも大きい（例えば、特許文献１参照）。また例えば、消去はメモリセルのフローティングゲートから電子を抜き取ることによってなされ、書き込みはメモリセルのフローティングゲートに電子を注入することによってなされる。このようなフラッシュメモリのデータ書き換えでは、まず消去単位のメモリセルを一括して消去し、そのあと消去単位内のそれぞれの書き込み単位にデータを書き込む。
【０００３】
従来のデータ書き換えでは、消去は、セクタを完全に消去できるまで（データ読み出し時にメモリセルが消去状態であることが識別できるように、例えばフローティングゲートから電子を抜き取ることができるまで）、消去単位内のメモリセルのソースおよびドレインならびにコントロールゲートに継続して所定の消去電圧を印加することによってなされる。同様に、書き込みは、セクタを完全に書き込みできるまで（データ読み出し時にメモリセルが書き込み状態であることが識別できるように、例えばフローティングゲートに電子を注入することができるまで）、書き込み単位内のメモリセルのソースおよびドレインならびにコントロールゲートに継続して所定の書き込み電圧を印加することによってなされる。
【０００４】
【特許文献１】
特開平１１−８５６２９号公報（図１）
【０００５】
【発明が解決しようとする課題】
しかしながら上記従来のデータ書き換えでは、書き込み時間が数１０［μｓ］と短いのに対し、消去時間が数１０［ｍｓ］と非常に長いので、例えばコンタクト付きＩＣカードやコンタクトレスＩＣカードに内蔵されたフラッシュメモリのデータ書き換えのように、数［ｍｓ］で高速にデータ書き換えをする必要がある場合には、データ書き換え時間が長くなり過ぎるという課題があった。
【０００６】
本発明は、このような従来の課題を解決するためになされたものであり、高速なデータ書き換えができるデータ書き換え装置およびデータ書き換え方法を提供することを目的とするものである。
【０００７】
【課題を解決するための手段】
本発明のデータ書き換え装置は、使用するデータ容量よりもＮ（Ｎは２以上の整数）個以上多いセクタ数のフラッシュメモリのデータ書き換えをするデータ書き換え装置であって、セクタを完全に消去するのにかかる時間より短い時間で１個のセクタを合計Ｎ回で時分割に消去し、消去中のＮ個のセクタの書き換えデータを他のセクタに書き込むことを特徴とするものである。
【０００８】
【発明の実施の形態】
実施の形態１
図１は本発明の実施の形態１のマイクロコンピュータの機能ブロック図である。この実施の形態１のマイクロコンピュータは、ＲＡＭ２と、コントロールＲＯＭ（Ｃ−ＲＯＭ）３ａおよびアプリケーションＲＯＭ（ＡＰ−ＲＯＭ）３ｂからなるＲＯＭ３と、制御部４と、データバス５と、アドレスバス６とを備え、フラッシュメモリ部１のデータ書き換えをするデータ書き換え装置を構成している。フラッシュメモリ部１は、例えば、コンタクト付きＩＣカードやコンタクトレスＩＣカードに内蔵されているか、あるいはこの実施の形態１のマイクロコンピュータに内蔵されている。
【０００９】
フラッシュメモリ部１は、ユーザデータなどが不揮発に書き込まれるフラッシュメモリを有する。ＲＡＭ２には、ワークデータ（データ書き換え時の変数データなど）が一時書き込みされる。Ｃ−ＲＯＭ３ａには、フラッシュメモリ部１のデータ書き換えやマイクロコンピュータのその他の制御をするためのデータおよびプログラムが記憶されており、ＡＰ−ＲＯＭ３ｂには、ユーザのアプリケーションプログラムが記憶されている。制御部４は、Ｃ−ＲＯＭ３ａ内のプログラムに従って、データ書き換えなどを制御する。ＲＡＭ２、ＲＯＭ３、制御部４、およびフラッシュメモリ部１は、データバス５およびアドレスバス６によって相互に接続されている。
【００１０】
フラッシュメモリ部１のデータ書き換えは、ＡＰ−ＲＯＭ３ｂ内のアプリケーションプログラムからＣ−ＲＯＭ３ａ内のデータ書き換え制御プログラムをコールして、その制御プログラムに従ってなされるので、アプリケーションプログラムは、フラッシュメモリ部１のデータ書き換え制御を気にせずに処理できる。
【００１１】
図２はフラッシュメモリ部１の機能ブロック図である。図２に示すように、フラッシュメモリ部１は、フラッシュデータメモリ１１およびフラッシュバッファ１２によって構成されたフラッシュメモリと、アドレスラッチ１３と、アドレスポインタ１４と、読み出し用データ差し替え回路１５とを備えている。
【００１２】
［フラッシュデータメモリ１１］
フラッシュデータメモリ１１は、フラッシュメモリで構成され、書き換えデータが書き込まれる３２［バイト］構成のセクタ（データセクタ）を２５６個（データセクタ０，１，…，２５５）備えており、１セクタ単位または複数セクタ単位の消去と１ワード単位（２バイト単位）の書き込みが可能になっている。
【００１３】
［フラッシュバッファ１２］
フラッシュバッファ１２は、書き換えデータが一時書き込みされる３２［バイト］構成のデータエリアと、２［バイト］構成の管理エリア１２ｂからなる３４［バイト］構成のセクタ（バッファセクタ）を３２個（バッファセクタ０，１，…，３１）備えており、１セクタ単位または複数セクタ単位の消去と１ワード単位の書き込みが可能になっている。フラッシュバッファ１２のバッファセクタ０〜３１の管理エリア１２ｂは、データセクタのセクタアドレスが書き込まれるセクタ管理手段を構成している。
【００１４】
フラッシュデータメモリ１１とフラッシュバッファ１２は、消去時に同時に複数のセクタ（データセクタおよびバッファセクタ）を選択できるようになっており、同時に複数のセクタを消去できる構成になっている。
【００１５】
図３は管理エリア１１ａのビット構成図である。図３に示すように、それぞれのバッファセクタに設けられた２［バイト］の管理エリア１２ａは、書き換えアドレスが書き込まれるセクタアドレスエリア１２ｂ（ｂｉｔ７−ｂｉｔ０の８［ビット］）と、有効フラグが書き込まれる有効フラグエリア１２ｃ（ｂｉｔ８の１［ビット］）と、重複フラグが書き込まれる重複フラグエリア１２ｄ（ｂｉｔ９の１［ビット］）と、セクタポインタが書き込まれるセクタポインタエリア１２ｅ（ｂｉｔ１３−ｂｉｔ１０の４［ビット］）と、未使用ビットエリア（ｂｉｔ１５，ｂｉｔ１４の２［ビット］）とによって構成されている。
【００１６】
上記の書き換えアドレスは、そのバッファセクタのデータエリアに一時書き込みされた書き換えデータを書き込むべきデータセクタのセクタアドレスである。また、有効フラグエリア１２ｃの有効フラグおよび重複フラグエリア１２ｄの重複フラグは、そのバッファセクタのセクタアドレスエリア１２ｂの書き換えアドレスおよびデータエリアのデータが有効であるか無効であるかを示すフラグである。
【００１７】
［アドレスラッチ１３］
アドレスラッチ１３は、管理エリア１２ａの下位９ビット（有効フラグエリア１２ｃおよびセクタアドレスエリア１２ｂ）と同じビット構成の９［ビット］のラッチエリアを１６個（ラッチエリアＡｄ０，Ａｄ１，…，Ａｄ１５）備えている。それぞれのラッチエリアのｂｉｔ７−ｂｉｔ０には、書き換えアドレスが書き込まれ、ｂｉｔ８には、有効フラグが書き込まれる。このアドレスラッチ１３の合計１４４［ビット］のラッチ出力は、読み出し用データ差し替え回路１５に入力される。このアドレスラッチ１３は、バッファセクタの管理エリアと同様に、データセクタのセクタアドレスが書き込まれるセクタ管理手段を構成している。ただし、このアドレスラッチ１３では、ｂｉｔ８の有効フラグによって、そのバッファセクタのセクタアドレスエリア１２ｂのセクタアドレスおよびデータエリアのデータが有効であるか無効であるかを示す。
【００１８】
［アドレスポインタ１４］
アドレスポインタ１４は、５［ビット］のカウンタで構成され、フラッシュバッファ１２およびアドレスラッチ１３のポインタの役割を果たし、下位４ビット（ｂｉｔ３−ｂｉｔ０）でアドレスラッチ１３のラッチエリアの位置を示し、５ビット全体でフラッシュバッファ１２のバッファセクタの位置を示す。
【００１９】
［読み出し用データ差し替え回路１５］
図４は読み出し用データ差し替え回路１５の構成例を示す図である。図４において、読み出し用データ差し替え回路１５は、１４４（９×１６）個のＸＯＲゲート１５ａと、１６個のＮＯＲゲート１５ｂと、１６個のＡＮＤゲート１５ｃと、１個のＯＲゲート１５ｄと、１個のＩＮＶゲート１５ｅと、３２個のＡＮＤゲート１５ｆとによって構成されている。
【００２０】
アドレスバス６（図１参照）からの入力アドレスは、１３ビット構成であり、その上位８ビット（Ａ１２−Ａ５）がセクタアドレスになっている。また、アドレスラッチ１３のラッチエリアＡｄｘ（ｘは０，１，…１５のいずれか）のラッチ出力では、下位８ビット（ｂｉｔ７−ｂｉｔ０）がセクタアドレス（書き換えアドレス）であり、上位１ビット（ｂｉｔ８）が有効フラグである。
【００２１】
それぞれのＸＯＲゲート１５ａは、ラッチエリアＡｄｘのラッチ出力のｂｉｔｙ（ｙは０，１，…７のいずれか）と、入力アドレスのビットＡ（ｙ＋５）とを２入力とし、両ビットの同異を比較する。
【００２２】
第（ｘ＋１）のＮＯＲゲート１５ｂは、ラッチエリアＡｄｘのｂｉｔ７−ｂｉｔ０（データセクタアドレス）についてのＸＯＲゲート１５ａの８出力を入力とする。
【００２３】
第（ｘ＋１）のＡＮＤゲート１５ｃは、ラッチエリアＡｄｘのｂｉｔ７−ｂｉｔ０についてのＮＯＲゲート１５ｂの出力と、ラッチエリアＡｄｘのｂｉｔ８（有効フラグ）とを入力とする。
【００２４】
ＯＲゲート１５ｄは、１６個のＡＮＤゲート１５ｃの出力を入力とし、これらの１６入力のＯＲ信号を、フラッシュデータメモリ１１とフラッシュバッファ１２のセレクタ信号ＢＵＦ／ＭＥＭＢとしてを出力する。
【００２５】
ＩＮＶゲート１５ｅは、アドレスポインタ１４の最上位ビットｂｉｔ４を入力とし、その反転信号を出力する。
【００２６】
第（２ｘ＋１）のＡＮＤゲート１５ｆは、第（ｘ＋１）のＡＮＤゲート１５ｃの出力と、アドレスポインタ１４のｂｉｔ４とを２入力とし、バッファセクタ（ｘ＋１６）の選択信号ＢＳＥＬ（ｘ＋１６）を出力する。また、第（２ｘ＋２）のＡＮＤゲート１５ｆは、第（ｘ＋１）のＡＮＤゲート１５ｃの出力と、ＩＮＶゲート１５ｅの出力とを２入力とし、バッファセクタｘの選択信号ＢＳＥＬｘを出力する。
【００２７】
この実施の形態１では、データセクタは３２［バイト］構成、バッファセクタは３４（３２＋２）［バイト］構成であり、消去単位は１［セクタ］または複数［セクタ］、書き込み単位は１［ワード］（２［バイト］）である。従って、１［セクタ］を消去したときには、フラッシュデータメモリ１１では１６回の書き込みがなされ、フラッシュバッファ１２では１７回の書き込みがなされる。
【００２８】
セクタのデータエリアを３２［バイト］構成としたフラッシュメモリでは、８［ｋバイト］のデータ容量は２５６［セクタ］に相当する。フラッシュメモリ部１のフラッシュメモリは、フラッシュデータメモリ１１のデータセクタと、フラッシュバッファ１２のバッファセクタのデータエリアとを併せて、２８８（２５８＋３２）［セクタ］で構成されており、８［ｋバイト］のデータ容量よりも３２［セクタ］多い構成になっている。
【００２９】
そして、この実施の形態１は、セクタを完全に消去するのにかかる時間よりも短い時間（ただし、セクタを完全に消去するのにかかる時間の１／１６の時間以上）でデータ書き換え処理ごとに消去処理をすることによって１個のセクタを合計１６回のデータ書き換え処理で時分割に消去し、消去中の１６個のデータセクタに書き込むべき書き換えデータをバッファセクタに一時書き込みしておき、このバッファセクタに一時書き込みした書き換えデータを時分割消去が完了したデータセクタに書き込むことを特徴とするものである。
【００３０】
［データ書き換え動作］
このような実施の形態１のデータ書き換え処理は、ＡＰ−ＲＯＭ３ｂ内のアプリケーションプログラムからＣ−ＲＯＭ３ａ内のデータ書き換えサブルーチン（データ書き換え制御プログラム）をコールし、制御部４がそのデータ書き換えサブルーチンに従って制御する。以下に実施の形態１のデータ書き換え動作について説明する。
【００３１】
図５から図７までは本発明の実施の形態１のデータ書き換え処理を説明する図であって、データ書き換え処理を繰り返したときのフラッシュデータメモリ１１、バッファメモリ１２、アドレスラッチ１３、およびアドレスポインタ１４の状態を示す図である。図５から図７までにおいて、（１）は１回目のデータ書き換え処理、（２）は２回目のデータ書き換え処理、（３）は１６回目のデータ書き換え処理、（４）は１７回目のデータ書き換え処理、（５）は３２回目のデータ書き換え処理である。また、図５から図７までおよび以下の説明では、フラッシュデータメモリ１１およびフラッシュバッファ１２のメモリセルの消去状態を”０”、書き込み状態を”１”としている。
【００３２】
［１回目のデータ書き換え処理］
図５（１）の１回目のデータ書き換え処理では、アドレスポインタ１４は”０００００”であり、アドレスポインタ１４が示すバッファセクタ０（図２参照）のデータエリアには、書き換えデータＤａｔａ１が書き込まれ、上記バッファセクタ０の管理エリア（図２の１２ａおよび図３参照）には、１回目の書き換えアドレス（書き換えデータＤａｔａ１を書き込むべきデータセクタのアドレス）Ａｄｄ１（ｂｉｔ７−ｂｉｔ０）と、有効フラグ＝”１”（ｂｉｔ８）と、重複フラグ＝”０”（ｂｉｔ９）と、セクタポインタ＝”０００１”（ｂｉｔ１３−ｂｉｔ１０）とが書き込まれる。なお、上記バッファセクタ０は、１回目のデータ書き換え処理の前に消去が完了している。
【００３３】
また、１回目のデータ書き換え処理では、アドレスポインタ１４の下位４ビット”００００”が示すアドレスラッチ１３のラッチエリアＡｄ０（図２参照）には、１回目の書き換えアドレスＡｄｄ１（ｂｉｔ７−ｂｉｔ０）と、有効フラグ＝”１”（ｂｉｔ８）とが書き込まれる。
【００３４】
そして、１回目のデータ書き換え処理では、書き換えアドレスＡｄｄ１のデータセクタと、バッファセクタ１からバッファセクタ１６までの１６個のバッファセクタ（アドレスポインタの現データ＋１からアドレスポインタの現データ＋１６までのバッファセクタ）の合計１７セクタが同時に消去される。このときの消去時間は、従来の消去時間（セクタを完全に消去できる時間）よりも短く、上記従来の消去時間の１／１６以上の時間である。
【００３５】
書き換えアドレスＡｄｄ１のデータセクタと、バッファセクタ１６は、この１回目のデータ書き換え処理での消去が最初の時分割消去となる。消去時間が従来よりも短いので、書き換えアドレスＡｄｄ１のデータセクタおよびバッファセクタ１６は、中途半端な消去状態で、完全には消去されていない。また、バッファセクタ１は、この１回目のデータ書き換え処理での消去によって完全に消去されたことになる。
【００３６】
［２回目のデータ書き換え処理］
図５（２）の２回目のデータ書き換え処理では、アドレスポインタ１４が”００００１”にインクリメントされ、アドレスポインタ１４が示す第２のバッファセクタのデータエリアには、書き換えデータＤａｔａ２が書き込まれ、上記バッファセクタ１の管理エリア（図２の１２ａおよび図３参照）には、２回目の書き換えアドレス（書き換えデータＤａｔａ２を書き込むべきデータセクタのアドレス）Ａｄｄ２（ｂｉｔ７−ｂｉｔ０）と、有効フラグ＝”１”（ｂｉｔ８）と、重複フラグ＝”０”（ｂｉｔ９）と、セクタポインタ＝”０００１”（ｂｉｔ１３−ｂｉｔ１０）とが書き込まれる。
【００３７】
また、２回目のデータ書き換え処理では、アドレスポインタ１４の下位４ビット”０００１”が示すアドレスラッチ１３のラッチエリアＡｄ１には、２回目の書き換えアドレスＡｄｄ２（ｂｉｔ７−ｂｉｔ０）と、有効フラグ＝”１”（ｂｉｔ８）とが書き込まれる。
【００３８】
そして、２回目のデータ書き換え処理では、書き換えアドレスＡｄｄ１，Ａｄｄ２の２個のデータセクタと、バッファセクタ２からバッファセクタ１７までの１６個のバッファセクタ（アドレスポインタの現データ＋１からアドレスポインタの現データ＋１６までのバッファセクタ）の合計１８セクタが同時に消去される。このときの消去時間も、上記１回目のデータ書き換え処理のときと同じである。
【００３９】
書き換えアドレスＡｄｄ２のデータセクタおよびバッファセクタ１７は、この２回目のデータ書き換え処理での消去が最初の時分割消去となり、書き換えアドレスＡｄｄ１のデータセクタおよびバッファセクタ１６は、この２回目のデータ書き換え処理での消去が２回目の時分割消去となり、バッファセクタ２は、この２回目のデータ書き換え処理での消去によって完全に消去されたことになる。
【００４０】
［３回目から１５回目までのデータ書き換え処理］
３回目から１５回目までのデータ書き換え処理では、上記１回目および２回目のデータ書き換え処理と同様に、データ書き換え処理ごとに、アドレスポインタ１４が”０００１０”，”０００１１”，…，”０１１１０”とインクリメントされ、アドレスポインタ１４が示すバッファセクタ２からバッファセクタ１４までのデータエリアに、３回目の書き換えデータＤａｔａ３から１５回目の書き換えデータＤａｔａ１５までが書き込まれ、上記バッファセクタ２からバッファセクタ１４までの管理エリアに、３回目の書き換えアドレスＡｄｄ３から１５回目の書き換えアドレスＡｄｄ１５までと、有効フラグ＝”１”と、重複フラグ＝”０”と、セクタポインタ＝”０００１”とが書き込まれる。
【００４１】
また、３回目から１５回目までのデータ書き換え処理では、上記１回目および２回目のデータ書き換え処理と同様に、データ書き換え処理ごとに、アドレスポインタ１４の下位４ビット”００１０”，”００１１”，…，”１１１０”が示すアドレスラッチ１３のラッチエリアＡｄ２からラッチエリアＡｄ１４までのラッチエリアに、３回目の書き換えアドレスＡｄｄ３から１５回目の書き換えアドレスＡｄｄ１５までと、有効フラグ＝”１”とが書き込まれる。
【００４２】
そして、３回目から１５回目までのデータ書き換え処理では、上記１回目および２回目のデータ書き換え処理と同様に、データ書き換え処理ごとに、バッファセクタの管理エリアに書き込まれた書き換えアドレスの複数のデータセクタと、アドレスポインタの現データ＋１からアドレスポインタの現データ＋１６までの１６個のバッファセクタとが同時に消去される。
【００４３】
［１６回目のデータ書き換え処理］
図６（３）の１６回目の書き換え処理では、アドレスポインタ１４が”０１１１１”にインクリメントされ、アドレスポインタ１４が示すバッファセクタ１５のデータエリアには、書き換えデータＤａｔａ１６が書き込まれ、上記バッファセクタ１５の管理エリア（図２の１２ａおよび図３参照）には、１６回目の書き換えアドレス（書き換えデータＤａｔａ１６を書き込むべきデータセクタのアドレス）Ａｄｄ１６（ｂｉｔ７−ｂｉｔ０）と、有効フラグ＝”１”（ｂｉｔ８）と、重複フラグ＝”０”（ｂｉｔ９）と、セクタポインタ＝”０００１”（ｂｉｔ１３−ｂｉｔ１０）とが書き込まれる。
【００４４】
また、１６回目のデータ書き換え処理では、アドレスポインタ１４の下位４ビット”１１１１”が示すアドレスラッチ１３のラッチエリアＡｄ１５には、１６回目の書き換えアドレスＡｄｄ１６（ｂｉｔ７−ｂｉｔ０）と、有効フラグ＝”１”（ｂｉｔ８）とが書き込まれる。
【００４５】
そして、１６回目のデータ書き換え処理では、書き換えアドレスＡｄｄ１，Ａｄｄ２，…，Ａｄｄ１６の１６個のデータセクタと、バッファセクタ１６からバッファセクタ３１までの１６個のバッファセクタ（アドレスポインタの現データ＋１からアドレスポインタの現データ＋１６までのバッファセクタ）の合計１８セクタが同時に消去される。このときの消去時間も、上記１回目および２回目のデータ書き換え処理のときと同じである。
【００４６】
この１６回目のデータ書き換え処理がなされたことによって、アドレスラッチ１３が一杯になり、フラッシュバッファ１２が半分埋まる。書き換えアドレスＡｄｄ１６のデータセクタおよびバッファセクタ３１は、この１６回目のデータ書き換え処理での消去が最初の時分割消去となる。また、書き換えアドレスＡｄｄ１のデータセクタおよびバッファセクタ１６は、この１６回目のデータ書き換え処理での消去が１６回目の時分割消去となり、完全に消去されたことになる。
【００４７】
［１７回目のデータ書き換え処理］
図６（４）の１７回目のデータ書き換え処理では、アドレスポインタ１４が”１００００”にインクリメントされ、アドレスポインタ１４は、第１７のバッファセクタを示し、アドレスポインタ１４の下位４ビット”００００”は、上記１回目のデータ書き換え処理と同じアドレスラッチ１３のラッチエリアＡｄ０を示す。この１７回目のデータ書き換え処理では、上記ラッチエリアＡｄ０の有効フラグ（アドレスポインタの現データ−１６のバッファセクタであるバッファセクタ０の管理エリアの有効フラグ）が、データ書き換え処理前にすでに”１”になっているので、上記バッファセクタ０に書き込まれている書き換えデータＤａｔａ１を、上記ラッチエリアＡｄ０（上記バッファセクタ０の管理エリア）に書き込まれている１回目の書き換えアドレスＡｄｄ１のデータセクタに書き込み、一時保管のバッファセクタからデータセクタに移す。
【００４８】
なお、上記１回目から１６回目までの書き換え処理では、ラッチエリアＡｄ０からラッチエリアＡｄ１５までのラッチエリアの有効フラグ（バッファセクタ１６からバッファセクタ３０までの管理エリアの有効フラグ）はデータ書き換え処理前には”１”になっていないので、バッファセクタ１６からバッファセクタ３０までのデータエリアのデータをデータセクタに移す処理はされない。
【００４９】
また、１７回目のデータ書き換え処理では、アドレスポインタ１４が示すバッファセクタ１６のデータエリアには、書き換えデータＤａｔａ１７が書き込まれ、上記バッファセクタ１６の管理エリア（図２の１２ａおよび図３参照）には、１７回目の書き換えアドレス（書き換えデータＤａｔａ１７を書き込むべきデータセクタのアドレス）Ａｄｄ１７（ｂｉｔ７−ｂｉｔ０）と、有効フラグ＝”１”（ｂｉｔ８）と、重複フラグ＝”０”（ｂｉｔ９）と、セクタポインタ＝”０００１”（ｂｉｔ１３−ｂｉｔ１０）とが書き込まれる。
【００５０】
また、１７回目のデータ書き換え処理では、１回目の書き換えデータＤａｔａ１をデータセクタに移したあと、アドレスポインタ１４の下位４ビットが示すアドレスラッチ１３の上記ラッチエリアＡｄ０では、上記１回目の書き換えアドレスＡｄｄ１（ｂｉｔ７−ｂｉｔ０）が１７回目の書き換えアドレスＡｄｄ１７（ｂｉｔ７−ｂｉｔ０）に書き換えられるとともに、有効フラグ＝”１”（ｂｉｔ８）が書き込まれる。
【００５１】
そして、１７回目のデータ書き換え処理では、書き換えアドレスＡｄｄ２，Ａｄｄ３，…，Ａｄｄ１７の１６個のデータセクタと、バッファセクタ０およびバッファセクタ１７からバッファセクタ３１までの１６個のバッファセクタ（アドレスポインタの現データ＋１からアドレスポインタの現データ＋１６までのバッファセクタ）の合計３２セクタが同時に消去される。このときの消去時間も、上記１回目および２回目のデータ書き換え処理のときと同じである。
【００５２】
書き換えアドレスＡｄｄ１７のデータセクタおよびバッファセクタ０は、この１７回目のデータ書き換え処理での消去が最初の時分割消去となる。また、書き換えアドレスＡｄｄ２のデータセクタおよびバッファセクタ１７は、この１７回目のデータ書き換え処理での消去が１６回目の時分割消去となり、完全に消去されたことになる。
【００５３】
［１８回目から３１回目までのデータ書き換え処理］
１８回目から３１回目までのデータ書き換え処理では、上記１７回目のデータ書き換え処理と同様に、データ書き換え処理ごとに、アドレスポインタ１４が”１０００１”，”０００１０”，…，”１１１１０”とインクリメントされ、アドレスポインタ１４は、バッファセクタ１７からバッファセクタ３０までを順次示し、アドレスポインタ１４の下位４ビット”０００１”，”００１０”，…，”１１１０”は、上記２回目から１５回目までのデータ書き換え処理と同じアドレスラッチ１３のラッチエリアＡｄ１からラッチエリアＡｄ１４までを順次示す。これら１８回目から３１回目までのデータ書き換え処理では、上記ラッチエリアＡｄ１からラッチエリアＡｄ１４の有効フラグ（バッファセクタ１からバッファセクタ１４までの管理エリアの有効フラグ）がいずれも”１”なので、上記バッファセクタ１からバッファセクタ１４までに一時書き込みされていた書き換えデータＤａｔａ２，Ｄａｔａ３，…，Ｄａｔａ１５を、上記ラッチエリアＡｄ１からラッチエリアＡｄ１４（上記バッファセクタ１からからバッファセクタ１４までの管理エリア）に書き込まれている２回目から１５回目までの書き換えアドレスＡｄｄ２，Ａｄｄ３，…，Ａｄｄ１５のデータセクタに書き込んで移す処理をする。
【００５４】
また、１８回目から３１回目までのデータ書き換え処理では、上記１７回目のデータ書き換え処理と同様に、データ書き換え処理ごとに、アドレスポインタ１４が示すバッファセクタ１７からバッファセクタ３０までのデータエリアに、１８回目の書き換えデータＤａｔａ１８から３１回目の書き換えデータＤａｔａ３１までが書き込まれ、上記バッファセクタ１７からバッファセクタ３０までの管理エリアに、１８回目の書き換えアドレスＡｄｄ１８から３１回目の書き換えアドレスＡｄｄ３１までと、有効フラグ＝”１”と、重複フラグ＝”０”と、セクタポインタ＝”０００１”とが書き込まれる。
【００５５】
また、１８回目から３１回目までのデータ書き換え処理では、上記１７回目のデータ書き換え処理と同様に、データ書き換え処理ごとに、２回目の書き換えデータＤａｔａ１から１５回目の書き換えデータＤａｔａ１５までをデータセクタに移したあと、アドレスポインタ１４の下位４ビットが示すアドレスラッチ１３の上記ラッチエリアＡｄ１からラッチエリアＡｄ１４では、上記２回目の書き換えアドレスＡｄｄ２から上記１５回目の書き換えアドレスＡｄｄ１５までが、それぞれ１８回目の書き換えアドレスＡｄｄ１８から３１回目の書き換えアドレスＡｄｄ３１までに書き換えられるとともに、有効フラグ＝”１”が書き込まれる。
【００５６】
そして、１８回目から３１回目までのデータ書き換え処理では、上記１７回目のデータ書き換え処理と同様に、データ書き換え処理ごとに、バッファセクタの管理エリアに書き込まれた書き換えアドレスの１６個のデータセクタと、アドレスポインタの現データ＋１からアドレスポインタの現データ＋１６までの１６個のバッファセクタとが同時に消去される。
【００５７】
［３２回目の書き換え処理］
図７（５）の３２回目の書き換え処理では、アドレスポインタ１４が”１１１１１”にインクリメントされ、アドレスポインタ１４は、バッファセクタ３１を示し、アドレスポインタ１４の下位４ビット”１１１１”は、上記１６回目のデータ書き換え処理と同じアドレスラッチ１３のラッチエリアＡｄ１５を示す。この３２回目のデータ書き換え処理では、上記ラッチエリアＡｄ１５の有効フラグ（アドレスポインタの現データ−１６のバッファセクタであるバッファセクタ１５の管理エリアの有効フラグ）が、データ書き換え処理前にすでに”１”になっているので、上記バッファセクタ１５に書き込まれている書き換えデータＤａｔａ１６を、上記ラッチエリアＡｄ１５（上記バッファセクタ１５の管理エリア）に書き込まれている１６回目の書き換えアドレスＡｄｄ１６のデータセクタに書き込み、一時保管のバッファセクタからデータセクタに移す。
【００５８】
また、３２回目のデータ書き換え処理では、アドレスポインタ１４が示すバッファセクタ３１のデータエリアには、書き換えデータＤａｔａ３２が書き込まれ、上記バッファセクタ３１の管理エリア（図２の１２ａおよび図３参照）には、３２回目の書き換えアドレス（書き換えデータＤａｔａ３２を書き込むべきデータセクタのアドレス）Ａｄｄ３２（ｂｉｔ７−ｂｉｔ０）と、有効フラグ＝”１”（ｂｉｔ８）と、重複フラグ＝”０”（ｂｉｔ９）と、セクタポインタ＝”０００１”（ｂｉｔ１３−ｂｉｔ１０）とが書き込まれる。
【００５９】
また、３２回目のデータ書き換え処理では、１６回目の書き換えデータＤａｔａ１６をデータセクタに移したあと、アドレスポインタ１４の下位４ビットが示すアドレスラッチ１３の上記ラッチエリアＡｄ１５では、上記１６回目の書き換えアドレスＡｄｄ１６（ｂｉｔ７−ｂｉｔ０）が３２回目の書き換えアドレスＡｄｄ３２（ｂｉｔ７−ｂｉｔ０）に書き換えられるとともに、有効フラグ＝”１”（ｂｉｔ８）が書き込まれる。
【００６０】
そして、３２回目のデータ書き換え処理では、書き換えアドレスＡｄｄ１７，Ａｄｄ１８，…，Ａｄｄ３２の１６個のデータセクタと、バッファセクタ０からバッファセクタ１５までの１６個のバッファセクタ（アドレスポインタの現データ＋１からアドレスポインタの現データ＋１６までのバッファセクタ）の合計３２セクタが同時に消去される。このときの消去時間も、上記１回目および２回目のデータ書き換え処理のときと同じである。
【００６１】
この３２回目のデータ書き換え処理がなされたことによって、アドレスラッチ１３が再び一杯になり、フラッシュバッファ１２が全て埋まる。書き換えアドレスＡｄｄ３２のデータセクタは、この３２回目のデータ書き換え処理での消去が最初の時分割消去となる。バッファセクタ１５も、この３２回目のデータ書き換え処理での消去が、２度目の消去においての最初の時分割消去となる。また、書き換えアドレスＡｄｄ１７のデータセクタおよびバッファセクタ０は、この３２回目のデータ書き換え処理での消去が１６回目の時分割消去となり、完全に消去されたことになる。
【００６２】
３３回目のデータ書き換え処理は、上記１回目のデータ書き換え処理に、一時保管の書き換えデータをバッファセクタからデータセクタに移す処理を追加したものと同様である。つまり、３３回目以降のデータ書き換え処理では、図５（１）から図７（５）までと同様の処理が繰り返される。このようなデータ書き換え処理の繰り返しによって、データセクタおよびバッファセクタは、時分割で順次消去され、書き換えデータは、消去が完了したバッファセクタに順次一時書き込みされ、消去が完了したデータセクタに順次移される。
【００６３】
ただし、３３回目以降のデータ書き換え処理では、バッファセクタの管理エリアには、セクタポインタ＝”００１０”（ｂｉｔ１３−ｂｉｔ１０、図３の１２ｅ参照）が書き込まれる。さらに、その次の３２回のデータ書き換え処理である６５回目以降のデータ書き換え処理では、セクタポインタ＝”０１００”が書き込まれる。このようにセクタポインタは、３２回のデータ書き換え処理ごとに、”１”となるビットをシフトして書き込まれる。これは電源投入時のバッファセクタの最初の書き込み位置（電源投入前のバッファセクタの最後の書き込み位置）を識別するための手法である。なお、電源投入時の初期化処理については、あとで説明する。
【００６４】
図８は本発明の実施の形態１のデータ書き換え処理を示すフローチャートである。図８および以下の説明では、フラッシュデータメモリ１１およびフラッシュバッファ１２のメモリセルの消去状態を”０”、書き込み状態を”１”としている。
【００６５】
図８および以下の説明において、Ｐはアドレスポインタ１４にセットされたデータ（ポインタデータ）である。また、ＬＡＴ［Ｐ］は、アドレスラッチ１３のラッチエリアであって、ポインタデータＰの下位４［ビット］が示す位置のラッチエリアである。
【００６６】
また、ＢＵＦ［Ｐ］，ＢＵＦ［Ｐ−１６］，ＢＵＦ［Ｐ＋１］，ＢＵＦ［Ｐ＋１６］は、それぞれバッファセクタであって、ＢＵＦ［Ｐ］は、ポインタデータＰの位置のバッファセクタであり、ＢＵＦ［Ｐ−１６］，ＢＵＦ［Ｐ＋１］，ＢＵＦ［Ｐ＋１６］は、それぞれデータＰ−１６，Ｐ＋１，Ｐ＋１６をポインタデータとしたときの位置のバッファセクタである。ただし、ここでは３２個のバッファセクタをサイクリックに使用するため、Ｐ−１６およびＰ＋１６は、いずれもポインタデータＰに１６を加算し、その値を３２で除算した剰余である。つまり、Ｐ−１６およびＰ＋１６は、
（Ｐ＋１６）ｍｏｄ３２
なる演算で求めた値である。また、Ｐ＋１は、ポインタデータＰに１を加算し、その値を３２で除算した剰余である。つまり、Ｐ＋１は、
（Ｐ＋１）ｍｏｄ３２
なる演算で求めた値である。
【００６７】
また、ＭＥＭ［ＬＡＴ［Ｐ］］は、データセクタであって、ラッチエリアＬＡＴ［Ｐ］に書き込まれた書き換えアドレスのデータセクタである。同時に、ＭＥＭ［ＬＡＴ［Ｐ］］は、バッファセクタＢＵＦ［Ｐ］またはＢＵＦ［Ｐ−１６］の管理エリア（図２の１２ａおよび図３参照）に書き込まれた書き換えアドレスのデータセクタでもある。
【００６８】
［ステップＳ１］
まず図８のステップＳ１で、ポインタデータＰに１を加算して更新する。ただし、ここでは３２個のバッファセクタをサイクリックに使用するため、実際には、ポインタデータＰに１を加算し、その値を３２で除算して、その剰余でポインタデータＰを更新する。つまり、
（Ｐ＋１）ｍｏｄ３２
なる演算で求めた値でポインタデータＰを更新する。
【００６９】
［ステップＳ２，Ｓ３］
次にステップＳ２で、今回の書き換えアドレスが、すでにアドレスラッチ１３に書き込まれている書き換えアドレスと重複しているか否かを判別し、重複している書き換えアドレスがあれば、ステップＳ３で、書き換えアドレスが重複しているバッファセクタの管理エリア（図２の１２ａおよび図３参照）の重複フラグ（ｂｉｔ９、図３の１２ｄ参照）に”１”を書き込み、さらにステップＳ４で、書き換えアドレスが重複しているアドレスラッチ１３のラッチエリア内の有効フラグ（ｂｉｔ８）に”０”を書き込み、ステップＳ５に進む。また、上記ステップＳ２で重複している書き換えアドレスがなければ、ステップＳ５に進む。
【００７０】
なお、上記ステップＳ３，Ｓ４で、書き換えアドレスの重複を識別するために、アドレスラッチ１３のラッチエリアでは、有効フラグに”０”を書き込んで、そのラッチエリアに書き込まれた書き換えアドレスを無効にしているが、バッファセクタの管理エリアでは、重複フラグに”１”を書き込んで、その管理エリアに書き込まれた書き換えアドレスを無効にしている。これは、管理エリアの有効フラグを”０”に消去するには、そのバッファセクタを消去しなけでばならず、時間がかかるからである。また、上記図５から図７まででは、書き換えアドレスの重複はないものとして説明した。
【００７１】
［ステップＳ５］
ステップＳ５では、ラッチエリアＬＡＴ［Ｐ］に書き込まれた有効フラグ（ｂｉｔ８）が”１”か否かを判別することによって、そのラッチエリアＬＡＴ［Ｐ］に書き込まれている書き換えアドレスが有効であるか否かを判別し、上記の有効フラグが”１”であればステップＳ６に進み、”０”であればステップＳ７に進む。
【００７２】
このステップＳ５では、ラッチエリアＬＡＴ［Ｐ］はまだ更新前なので、ラッチエリアＬＡＴ［Ｐ］には、バッファセクタＢＵＦ［Ｐ−１６］の管理エリアに書き込まれているものに相当する書き換えアドレスおよび有効フラグが書き込まれている。この更新前のラッチエリアＬＡＴ［Ｐ］の有効フラグ（ｂｉｔ８）は、バッファセクタＢＵＦ［Ｐ−１６］に、データセクタＭＥＭ［ＬＡＴ［Ｐ］］に書き込む有効な書き換えデータがあるか否かを示すフラグであって、有効な書き換えデータがある場合には”１”となり、今回の書き換え処理およびその１５回前までの書き換え処理において書き換えアドレスが重複して無効になった場合や、バッファセクタＢＵＦ［Ｐ−１６］がまだ未使用の場合には、無効であることを示す”０”となる。
【００７３】
［ステップＳ６］
ステップＳ６では、バッファセクタＢＵＦ［Ｐ−１６］に一時書き込みされている有効な書き換えデータを、データセクタＭＥＭ［ＬＡＴ［Ｐ］］に書き込む。
【００７４】
上記ステップＳ６では、ワード単位の書き込みになるので、１６回の書き込み処理をすることになる。ここで、１［ワード］の書き込み時間を２０［μｓ］とすると、この書き込み処理に３２０［μｓ］かかることになる。
【００７５】
また、上記ステップＳ６で、データセクタに書き込まれる書き換えデータは、１６回前のデータ書き換え処理においてバッファセクタＢＵＦ［Ｐ−１６］に一時書き込みされた書き換えデータである。従って、上記ステップＳ６は、本来書き込まれるべきデータセクタＭＥＭ［ＬＡＴ［Ｐ］］に、上記バッファセクタＢＵＦ［Ｐ−１６］に一時書き込みされた書き換えデータを移す処理となる。
【００７６】
［ステップＳ７］
次にステップＳ７で、バッファセクタＢＵＦ［Ｐ］のデータエリアに、今回の書き換えデータを書き込むとともに、バッファセクタＢＵＦ［Ｐ］の管理エリアに、今回の書き換えアドレス（ｂｉｔ７−ｂｉｔ０）および有効フラグ＝”１”（ｂｉｔ８）を書き込む。
【００７７】
上記ステップＳ７においても、ワード単位の書き込みで１７回書き込むことになるので、この書き込み処理に３４０［μｓ］かかることになる。
【００７８】
［ステップＳ８］
次にステップＳ８で、ラッチエリアＬＡＴ［Ｐ］に、今回の書き換えアドレス（ｂｉｔ７−ｂｉｔ０）および有効フラグ＝”１”（ｂｉｔ８）を書き込んで、ラッチエリアＬＡＴ［Ｐ］を更新する。
【００７９】
［ステップＳ９］
最後にステップＳ９で、１６個のデータセクタＭＥＭ［ＬＡＴ［Ｐ−１５］］〜ＭＥＭ［ＬＡＴ［Ｐ］］の内で、書き換えアドレスが有効な（ラッチエリアに書き込まれた有効フラグが”１”である）全てのデータセクタと、１６個のバッファセクタＢＵＦ［Ｐ＋１］〜ＢＵＦ［Ｐ＋１６］とを同時に消去する。
【００８０】
なお、この実施の形態１では、フラッシュデータメモリ１１およびフラッシュバッファ１２のデコーダは複数のセクタを同時に選択できるようになっているので、同時に複数のデータセクタおよび複数のバッファセクタを消去することができる。
【００８１】
また、この実施の形態１では、データ書き換え処理ごとの１６回の時分割消去によってそれぞれのセクタを完全に消去するので、上記ステップＳ９での消去時間は、従来の消去時間の１／１６の時間とすることができる。例えば、セクタの完全な消去に２０［ｍｓ］必要な場合は、１．２５［ｍｓ］の消去時間となる。
【００８２】
以上で１回のデータ書き換え処理が完了したことになり、ソフト処理を除いた１回のデータ書き換え処理時間は、アドレス重複がない場合で０．３２＋０．３４＋１．２５＝１．９１［ｍｓ］となり、アドレス重複があった場合でも管理エリアの書き込みが１回増えるだけなので、２［ｍｓ］以内で完了できる計算になる。
【００８３】
［初期設定処理］
上記電源投入時の初期設定処理について以下に説明する。アドレスラッチ１３およびアドレスポインタ１４は、揮発性記憶手段（レジスタやカウンタ）で構成されており、電源が切れるとデータが消えてしまうので、電源投入時には、アドレスラッチ１３およびアドレスポインタ１４を初期設定できるようにする必要がある。そのためには、電源投入時のバッファセクタの最初の書き込み位置（電源投入前のバッファセクタの最後の書き込み位置）を識別できるようにする必要がある。
【００８４】
そこで、この実施の形態１では、揮発性記憶手段で構成された第１のセクタ管理手段であるアドレスラッチ１３の他に、フラッシュメモリで構成された第２のセクタ管理手段であるフラッシュバッファ１２の管理エリア１２ａとによって、セクタ管理手段を構成し、電源が切れてもデータを保持できるフラッシュバッファ１２の管理エリア１２ａ内に設けたセクタポインタを参照することによって、電源投入時の最初の書き込み位置（電源投入前の最後の書き込み位置）を識別でき、アドレスラッチ１３およびアドレスポインタ１４を初期設定できるようにしている。
【００８５】
セクタポインタは、上記図５から図７までにおいて説明したように、”０００１”，”００１０”，”０１００”というように、３２回のデータ書き換え処理ごとに”１”となるビットをシフトして書き込まれる。
【００８６】
電源投入時に、管理エリア１２ａのセクタポインタを、バッファセクタ０からバッファセクタ３１の順で参照していき、まずセクタポインタが”００００”でないバッファセクタを探し、そこからさらにセクタポインタが”００００”であるバッファセクタを探す。
【００８７】
バッファセクタ０からバッファセクタ３１の順で参照したとき、セクタポインタが”００００”でないデータから”００００”になった最初のバッファセクタが、電源投入時の最初の書き込み位置となり、そのバッファセクタの１個前のバッファセクタ（セクタポインタが”００００”でない最後のバッファセクタ）が電源投入前の最後の書き込み位置となるので、アドレスポインタ１４には、この電源投入前の最後の書き込み位置を示すデータを初期設定する。
【００８８】
次に、上記初期設定したアドレスポインタ１４が示す位置のバッファセクタの管理エリアの下位９ビット（ｂｉｔ７−ｂｉｔ０の書き換えアドレスおよびｂｉｔ８の有効フラグ、図３の１２ｂおよび１２ｃ参照）をアドレスポインタ１４の下位４ビットが示す位置のアドレスラッチ１３のラッチエリアに書き込む。
【００８９】
さらに、現アドレスポインタデータ−１の位置から現アドレスポインタデータ−１６の位置までの管理エリア１２ａの下位９ビットを、それぞれ現アドレスポインタデータ−１の下位４ビットの位置から現アドレスポインタデータ−１６の下位４ビットの位置までのアドレスラッチ１３のラッチエリアにそれぞれ書き込む。以上で、アドレスラッチ１３およびアドレスポインタ１４の初期設定が完了する。
【００９０】
ここで、セクタポインタ（図３の１２ｅ参照）に、”１”にするビットの位置を変えたポインタを使用しているのは、バッファセクタの消去が１６回のデータ書き換え処理での時分割消去によってなされるため、管理エリア１２ａによっては中途半端な消去状態（消去途中の状態）のものが存在するが、このような消去途中の管理エリア１２ａを含んでいても、電源投入時の最初の書き込み位置（電源投入前の最後の書き込み位置）を確実に識別することができるようにするためである。
【００９１】
以上の初期設定処理によって電源投入時にアドレスラッチ１３およびアドレスポインタ１４を確実に初期設定することができる。
【００９２】
このような初期設定処理は、Ｃ−ＲＯＭ３ａ内にサブルーチンとして用意しておけば、ＡＰ−ＲＯＭ３ｂ内のアプリケーションプログラムからＣ−ＲＯＭ３ａ内の初期設定サブルーチン（初期設定制御プログラム）をコールし、制御部４がその初期設定サブルーチンに従って制御する。
【００９３】
［データ読み出し動作］
実施の形態１のデータ読み出し動作について以下に説明する。アドレスラッチ１３に書き込まれているセクタアドレスのデータセクタは消去中であるため、このデータを読み出す場合には、バッファセクタに一時書き込みされているデータに差し替えて読み出す必要がある。このため、読み出しセクタアドレスがアドレスラッチ１３に書き込まれているものか否かを判別することによって、読み出しデータが、データセクタに移される前のバッファセクタに一時書き込みされているデータであるか、すでにデータセクタに書き込まれたデータであるかを判別し、データセクタに書き込まれる前のバッファセクタに一時書き込みされているデータであればそのバッファセクタから読み出し、すでにデータセクタに書き込まれているデータであればそのデータセクタから読み出す処理が必要である。
【００９４】
このようなデータ読み出し処理は、読み出し用データ差し替え回路１５（図１および図４参照）によってなされる。図４の読み出し用データ差し替え回路１５において、アドレスラッチ１３のラッチエリアＡｄｘから出力されたセクタアドレス（ｂｉｔ７−ｂｉｔ０）は、８個のＸＯＲゲート１５ａによって、読み出しセクタアドレス（読み出しアドレスの上位８ビット）Ａ１２−Ａ５と比較され、全てのビットが一致した場合にのみ、第（ｘ＋１）のＮＯＲゲート１５ｂの出力が”Ｈ”（Ｈｉｇｈ）になる。
【００９５】
また、ラッチエリアＡｄｘから出力された有効フラグ（ｂｉｔ８）は、重複した書き換えアドレスの書き換えデータが一時書き込みされたバッファセクタや未使用のバッファセクタではそのバッファセクタの管理エリアのアドレスおよびデータエリアのデータが無効であることを示す”０”（”Ｌ”（Ｌｏｗ））であり、重複していない書き換えアドレスの書き換えデータが一時書き込みされているバッファセクタではそのバッファセクタの管理エリアに書き込まれている書き換えアドレスおよびデータエリアに書き込まれている書き換えデータが有効であることを示す”１”（”Ｈ”）である。
【００９６】
このため、読み出しセクタアドレスがラッチエリアＡｄｘに書き込まれているセクタアドレス（書き換えアドレス）と一致し、かつその書き換えアドレスおよび書き換えデータが有効である場合にのみ、第（ｘ＋１）のＡＮＤゲート１５ｃの出力は”Ｈ”になる。
【００９７】
第１から第１６までのＡＮＤゲート１５ｃの出力はＯＲゲート１５ｄに入力され、ＯＲゲート１５ｄの出力であるセレクタ信号ＢＵＦ／ＭＥＭＢは、いずれかのＡＮＤゲート１５ｃの出力が”Ｈ”であれば、バッファセクタからの読み出しを示す”Ｈ”となり、全てのＡＮＤゲート１５ｃの出力が”Ｌ”であれば、データセクタからの読み出しを示す”Ｌ”となる。
【００９８】
また、アドレスポインタ１４の最上位ビット（ｂｉｔ４）の出力と第（ｘ＋１）のＡＮＤゲート１５ｃの出力とを第（２ｘ＋１）のＡＮＤゲート１５ｆに入力して、バッファセクタ（ｘ＋１６）の選択信号ＢＳＥＬ（ｘ＋１６）を生成し、アドレスポインタ１４の最上位ビット（ｂｉｔ４）の反転出力（ＩＮＶゲート１５ｅの出力）と第（ｘ＋１）のＡＮＤゲート１５ｃの出力とを第（２ｘ＋２）のＡＮＤゲート１５ｆに入力して、バッファセクタｘの選択信号ＢＳＥＬｘを生成する。
【００９９】
このように、読み出しセクタアドレスがアドレスラッチ１３の１６個のラッチエリアＡｄ０〜Ａｄ１５に書き込まれたセクタアドレス（書き換えアドレス）のいずれかと一致し、かつそのラッチエリアに書き込まれた有効フラグが”１”の場合には、セレクタ信号ＢＵＦ／ＭＥＭＢがフラッシュバッファ１２からの読み出しを示す”Ｈ”になるとともに、バッファセクタの選択信号ＢＳＥＬ０〜ＢＳＥＬ３１のいずれかが”Ｈ”になり、そのフラッシュバッファセクタに一時書き込みされているデータが読み出されることになる。選択信号ＢＳＥＬｘが”Ｈ”であれば、バッファセクタｘ（第（ｘ＋１）のバッファセクタ）のデータエリアに一時書き込みされいる書き換えデータが読み出される。
【０１００】
また、読み出しセクタアドレスがアドレスラッチ１３の１６個のラッチエリアＡｄ０〜Ａｄ１５に書き込まれたセクタアドレス（書き換えアドレス）のいずれとも一致しなければ、セレクタ信号ＢＵＦ／ＭＥＭＢがフラッシュデータメモリ１１からの読み出しを示す”Ｌ”になり、読み出しセクタアドレスのデータバッファに書き込まれているデータが読み出される。
【０１０１】
以上のように実施の形態１によれば、書き換えデータおよび書き換えアドレスをバッファセクタに一時書き込みし、上記書き換えアドレスのデータセクタを、完全な消去にかかる時間の１／１６の時間ずつの消去処理によって、１６回のデータ書き換え処理で時分割で消去し、消去が完了した上記データセクタに、上記バッファセクタに一時書き込みした書き換えデータを書き込んで移すことにより、１回のデータ書き換え処理にかかる時間を短くできる。
【０１０２】
また、読み出し用データ差し替え回路１５によってデータセクタおよびバッファセクタからのデータ読み出しを制御することにより、データセクタに書き込まれていないデータの読み出しをアプリケーションプログラムで意識する必要がなく、データ読み出し処理時間を短くできる。
【０１０３】
また、目標の書き換え処理時間になるように時分割して消去するので、長時間の消去処理のためのバックアップ電源が必要ない。
【０１０４】
また、１６回のデータ書き換え処理中にアドレスが重複した場合、最新の書き換えデータのみがデータセクタに書き込まれるので、フラッシュデータメモリ１１の書き換え回数を少なくできる。
【０１０５】
実施の形態２
本発明の実施の形態２のマイクロコンピュータは、上記実施の形態１のマイクロコンピュータ（図１参照）において、データ書き換え処理の手順の一部を変更したものである。
【０１０６】
上記実施の形態１では、図１のステップＳ２でアドレスの重複を検出すると同時に、ステップＳ３でバッファセクタの管理エリアに重複フラグ＝”１”を書き込んで、そのバッファセクタに書き込まれている書き換えアドレスおよび書き換えデータを無効にしている。
【０１０７】
しかしながら、このような手順では、新しい書き換えデータおよびその書き換えアドレスをバッファセクタに書き込む処理が完了する前に、アドレスが重複した古いデータを無効にしてしまうため、図１のステップＳ５からＳ７までの間に事故などで電源が切れた場合に、有効な書き換えデータが判らなくなってしまう可能性がある。
【０１０８】
そこで、実施の形態２では、新しい書き換えデータをバッファセクタに書き込み完了してから、アドレスが重複した古いデータが書き込まれているバッファセクタの管理エリアに重複フラグ＝”１”を書き込んで無効にすることによって、フラッシュバッファ１２では新旧データの少なくともいずれかが必ず有効になっているので、新しい書き換えデータの一時書き込みの途中で電源が切れても、電源の再投入時の初期設定処理において有効な書き換えデータを識別できる。なお、実施の形態２のマイクロコンピュータの構成は、上記実施の形態１のマイクロコンピュータ（図１および図２参照）と全く同じなので、その説明を省略する。
【０１０９】
図９は本発明の実施の形態２のデータ書き換え処理を示すフローチャートである。なお、図９において、図８に記載のものに相当するものには同じ符号を付してある。また、図９および以下の説明において、ＤＵＰＦは重複検出フラグ、Ｐ２は書き換えアドレスが重複しているバッファセクタの位置を示すデータ（重複位置データ）が書き込まれる変数であり、これらの重複検出フラグＤＵＰＦおよび変数Ｐ２はＲＡＭ２（図１参照）内に設けられている。また、ＢＵＦ［Ｐ２］は、変数Ｐ２に書き込まれた重複位置データが示す位置のバッファセクタである。
【０１１０】
この図９の実施の形態２のデータ書き換え処理は、上記実施の形態１のデータ書き換え処理（図８参照）において、ステップＳ１をステップＳ１’、ステップＳ３をＳ３’にそれぞれ変更し、ステップＳ７とＳ８の間に、ステップＳ１０およびＳ１１を設けたものである。実施の形態２のデータ書き換え処理について、上記実施の形態１のデータ書き換え処理との違いを中心にして以下に説明する。
【０１１１】
この実施の形態２のデータ書き換え処理では、ＲＡＭ２（図１参照）内に重複検出フラグＤＵＰＦを設けてあり、まず図９のステップＳ１’で、ポインタデータＰをインクリメントして更新するとともに、重複検出フラグＤＵＰＦを”０”にする。
【０１１２】
上記の重複検出フラグＤＵＰＦは、そのデータ書き換え処理において、アドレスの重複が検出されたか否かを示すフラグであり、ＤＵＰＦ＝”０”はアドレスの重複が検出されなかったことを示し、ＤＵＰＦ＝”１”はアドレス重複が検出されたことを示す。
【０１１３】
また、この実施の形態２のデータ書き換え処理では、ＲＡＭ２（図１参照）内に変数Ｐ２を設けてあり、ステップＳ２でアドレスの重複が検出されたら、ステップＳ３’で、重複検出フラグＤＵＰＦを”１”にするとともに、変数Ｐ２に、書き換えアドレスが重複しているバッファセクタの位置を示すデータ（重複位置データ）を書き込む。
【０１１４】
ステップ４からステップＳ７まででは、上記実施の形態１と同様に、バッファセクタＢＵＦ［Ｐ−１６］に有効な書き換えデータが一時書き込みされていれば、その書き換えデータをデータセクタＭＥＭ［ＬＡＴ［Ｐ］］に書き込み、バッファセクタＢＵＦ［Ｐ］に、今回の書き換えデータおよび書き換えアドレスを書き込む。なお、アドレスラッチ１３のラッチエリアについては、この実施の形態２においても上記実施の形態１と同様に、ステップＳ２でアドレスの重複を検出すると同時に、ステップＳ４でラッチエリアの有効フラグを”１”から”０”に書き換えて、そのラッチエリアに書き込まれた書き換えアドレスを無効にしている。
【０１１５】
そしてステップＳ１０で、重複検出フラグＤＵＰＦが”１”か否かを判別することによって、上記ステップＳ２でアドレスの重複を検出したか否かを判別し、ＤＵＰＦ＝”１”ならばステップＳ１１に進み、ＤＵＰＦ＝”０”ならばステップＳ８に進む。
【０１１６】
ステップ１１では、バッファセクタＢＵＦ［Ｐ２］の管理エリア（図２の１２ａおよび図３参照）の重複フラグ（ｂｉｔ９、図３の１２ｄ参照）に”１”を書き込む。なお、ステップＳ８以降は上記実施の形態１と同様である。
【０１１７】
以上のように実施の形態２によれば、書き換えアドレスが重複した場合に、新しい書き換えデータをバッファセクタに書き込み完了してから、アドレスが重複した古いデータが書き込まれているバッファセクタの管理エリアに重複フラグ＝”１”を書き込んで無効にすることにより、上記実施の形態１と同様の効果が得られる上に、データ書き換え処理の途中で電源が切れても、有効な書き換えデータを失うことなく完全に復旧できる。
【０１１８】
実施の形態３
本発明の実施の形態３のマイクロコンピュータは、上記実施の形態１のマイクロコンピュータ（図１参照）において、主にフラッシュメモリ部１の構成および機能を変更したものである。
【０１１９】
図１０は本発明の実施の形態３のマイクロコンピュータにおいてのフラッシュメモリ部１の機能ブロック図である。なお、図１０において、図２に記載のものに相当するものには同じ符号を付してある。
【０１２０】
図１０に示すように、実施の形態３のフラッシュメモリ部１は、フラッシュデータメモリ１１およびイレースバッファ１６によって構成されたフラッシュメモリと、アドレスラッチ１３と、アドレスポインタ１４と、アドレスＲＡＭ１７とを備えている。
【０１２１】
この実施の形態３のフラッシュメモリ部１は、上記実施の形態１のフラッシュメモリ部１（図２参照）において、フラッシュバッファ１２および読み出し用データ差し替え回路１５を削除して、イレースバッファ１６およびアドレスＲＡＭ１７を設け、フラッシュデータメモリ１１、アドレスラッチ１３、およびアドレスポインタ１４の構成や機能をそれぞれ変更したものである。
【０１２２】
［フラッシュデータメモリ１１］
実施の形態３のフラッシュデータメモリ１１は、フラッシュメモリで構成され、書き換えデータが書き込まれる３２［バイト］構成のデータエリアと、主に書き換え論理アドレスが書き込まれる２［バイト］構成のメモリ管理エリア１１ａからなる３４［バイト］構成のセクタ（データセクタ）を２８８個備えており、１セクタ単位または複数セクタ単位の消去と１ワード単位の書き込みが可能になっている。
【０１２３】
図１１はメモリ管理エリア１１ａのビット構成図である。図１１に示すように、それぞれのデータセクタに設けられた２［バイト］のメモリ管理エリア１１ａは、書き換えデータの論理セクタアドレス（書き換え論理アドレス）が書き込まれる論理セクタアドレスエリア１１ｂ（ｂｉｔ７−ｂｉｔ０の８［ビット］）と、有効セクタフラグが書き込まれる有効セクタフラグエリア１１ｃ（ｂｉｔ８の１［ビット］）と、不良セクタフラグが書き込まれる不良セクタフラグエリア１１ｄ（ｂｉｔ９の１［ビット］）と、ダミーデータ”００００００”のダミービットエリア（ｂｉｔ１５−ｂｉｔ１０の６［ビット］）とによって構成されている。
【０１２４】
有効セクタフラグエリア１１ｃの有効セクタフラグおよび不良セクタフラグエリア１１ｄの不良セクタフラグは、そのデータセクタが有効であるか無効であるかを示すフラグである。また、上記の不良フラグは、そのデータセクタが不良セクタであるか否かを示すフラグである。
【０１２５】
［イレースバッファ１６］
イレースバッファ１６は、それぞれ２［バイト］構成の１６個のバッファデータエリア１６ａと、２［バイト］構成のバッファ管理エリア１６ｄからなる３４［バイト］構成のセクタ（バッファセクタ）を４個備えており、１セクタ単位または複数セクタ単位の消去と１ワード単位の書き込みが可能になっている。このイレースバッファ１６は、データセクタの物理セクタアドレスが書き込まれるセクタ管理手段を構成している。
【０１２６】
図１２はバッファデータエリア１６ａのビット構成図である。図１２に示すように、それぞれのバッファセクタに１６個ずつ設けられた２［バイト］のバッファデータエリア１６ａは、データセクタの物理セクタアドレスが書き込まれる物理セクタアドレスエリア１６ｂ（ｂｉｔ８−ｂｉｔ０の９［ビット］）と、書き込み完了フラグが書き込まれる書き込み完了フラグエリア１６ｃ（ｂｉｔ９の１［ビット］）と、ダミービット＝”００００００”のダミービットエリア（ｂｉｔ１５−ｂｉｔ１０の６［ビット］）とによって構成されている。
【０１２７】
それぞれのバッファデータエリア１６ａに書き込まれた物理セクタアドレスは、これから時分割消去によってこれから消去するデータセクタおよび消去中のデータセクタの物理セクタアドレス、またはデータ書き込み可能なデータセクタの物理セクタアドレスである。また、書き込み完了フラグエリア１６ｃの書き込み完了フラグは、書き込みが完了したか否かを示すフラグである。
【０１２８】
また、それぞれのバッファセクタのバッファ管理エリア１６ｄには、バッファデータエリア１６ａが書き込まれるごとに、下位ビットから順に１ビットずつ”１”が書き込まれる。これによって、バッファセクタ内のすでの書き込んだバッファデータエリア１６ａの位置、および次に書き込むバッファデータエリア１６ａの位置を識別できるようになっている。
【０１２９】
フラッシュデータメモリ１１は、複数のデータセクタを同時に消去できるようになっており、さらにフラッシュデータメモリ１１とイレースバッファ１６は、消去時に同時に複数のセクタ（複数のデータセクタおよび１つのバッファセクタ）を選択できるようになっており、同時に複数のセクタを消去できる構成になっている。
【０１３０】
［アドレスポインタ１４］
実施の形態３のアドレスポインタ１４は、６［ビット］のカウンタで構成され、イレースバッファ１６のポインタの役割を果たし、上位２ビット（ｂｉｔ５，ｂｉｔ４）でイレースバッファ１６のバッファセクタの位置を示し、下位４ビット（ｂｉｔ３−ｂｉｔ０）でバッファセクタ内でのバッファデータエリア１６ａの位置を示す。
【０１３１】
［アドレスＲＡＭ１７］
アドレスＲＡＭ１７は、８［ｋバイト］のデータ容量に相当する２５６セクタ分のデータ（２５６個の論理セクタ）を識別するための８［ビット］の論理セクタアドレスと同じアドレスでそれぞれのデータエリアをアクセスでき、それぞれのデータエリア（アドレス管理エリア）に、データセクタ（物理セクタ）を識別するための９［ビット］の物理セクタアドレスを書き込みできる構成のＲＡＭである。つまり、アドレスＲＡＭ１７のそれぞれのアドレス管理エリアのアドレスは、８［ｋバイト］のデータ容量のそれぞれの論理セクタアドレスと同じになっており、ＲＡＭ１７のそれぞれのアドレス管理エリアには、そのアドレスと同じ論理セクタアドレスを割り当たデータセクタ（物理セクタ）の物理セクタアドレスが書き込まれている。このアドレスＲＡＭ１７は、８［ｋバイト］のデータ容量の論理セクタアドレス数と同数のアドレス管理エリアを有し、それぞれのアドレス管理エリアを上記論理セクタアドレスと同じアドレスでアクセス可能であり、それぞれのアドレス管理エリアに、そのアドレスと同じ論理セクタアドレスを割り当てたデータセクタの物理セクタアドレスが書き込まれたアドレス管理手段を構成している。
【０１３２】
論理セクタアドレスは、例えば８［ｋバイト］のデータ容量に相当する２５６セクタ分（２５６個の論理セクタ）を識別してアクセス可能とするために、上記それぞれの論理セクタに付されるアドレスであり、２５６個の論理セクタでは、８［ビット］である。また、物理セクタアドレスは、フラッシュデータメモリ１１のデータセクタ（物理セクタ）を識別してアクセス可能とするために、それぞれのデータセクタに固定で付されるアドレスでである。フラッシュデータメモリ１１には、論理セクタ数よりも多い２８８個のデータセクタが設けられているので、物理セクタアドレスは９［ビット］になる。これらの２８８個のデータセクタの内の２５６個のデータセクタに２５６個の論理セクタアドレスがそれぞれ割り当てられる。そして、この実施の形態３では、それぞれの論理セクタアドレスには、固定不変のデータセクタが割り当てられるのではなく、その論理セクタアドレスのデータ書き換えごとに、異なるデータセクタが割り当てられる。
【０１３３】
［アドレスラッチ１３］
実施の形態３のアドレスラッチ１３は、データセクタの物理セクタアドレスと同じビット構成の９［ビット］のレジスタで構成され、フラッシュデータメモリ１１のデータ読み出しに使用するためにアドレスＲＡＭ１７から読み出された物理セクタアドレスをラッチする。
【０１３４】
この実施の形態３のフラッシュメモリ部１のフラッシュデータメモリ１１は、２８８［セクタ］で構成されており、８［ｋバイト］のデータ容量よりも３２［セクタ］多い構成になっている。この上記データ容量よりも多い３２［セクタ］の内、１６［セクタ］は、上記実施の形態１と同様の時分割消去を可能にするために設けられたものであり、残りの１６［セクタ］は、不良セクタをリカバリするために設けられたものである。
【０１３５】
そして、この実施の形態３は、書き換えデータをその論理セクタアドレスが割り当てられていた第１のデータセクタとは異なる第２のデータセクタに書き込んで、上記の論理セクタアドレスの割り当てデータセクタを第１のデータセクタから第２のデータセクタに変更し、セクタを完全に消去するのにかかる時間よりも短い時間（ただし、セクタを完全に消去するのにかかる時間の１／１６の時間以上）でデータ書き換え処理ごとに消去処理をすることによって、上記第１のデータセクタを合計１６回のデータ書き込み処理で時分割に消去することを特徴とするものである。
【０１３６】
［データ書き換え動作］
このような実施の形態３のデータ書き換え処理は、上記実施の形態１と同様に、ＡＰ−ＲＯＭ３ｂ内のアプリケーションプログラムからＣ−ＲＯＭ３ａ内のデータ書き換えサブルーチン（データ書き換え制御プログラム）をコールし、制御部４がそのデータ書き換えサブルーチンに従って制御する。以下に実施の形態３のデータ書き換え動作について説明する。
【０１３７】
図１３は本発明の実施の形態３のデータ書き換え処理を示すフローチャートである。図１３および以下の説明では、フラッシュデータメモリ１１およびイレースバッファ１６のメモリセルの消去状態を”０”、書き込み状態を”１”としている。
【０１３８】
図１３および以下の説明において、Ｐはアドレスポインタ１４にセットされたデータ（ポインタデータ）である。また、ＥＲＰおよびＣＨＫはＲＡＭ２（図１参照）内に設けられた変数である。また、Ａｄｄは、書き換えデータの論理セクタアドレス（書き換え論理アドレス）である。
【０１３９】
また、ＢＵＦ［Ｐ］，ＢＵＦ［ＥＲＰ］，ＢＵＦ［Ｐ−１５］は、それぞれバッファデータエリア（図１０の１６ａ参照）であって、ＢＵＦ［Ｐ］は、ポインタデータＰの位置のバッファデータエリアであり、ＢＵＦ［ＥＲＰ］は、変数ＥＲＰをポインタデータとしたときの位置のバッファデータエリアであり、ＢＵＦ［Ｐ−１５］は、Ｐ＋１５をポインタデータとしたときの位置のバッファデータエリアである。ただし、ここでは６４個のバッファデータエリアをサイクリックに使用するため、Ｐ−１５は、ポインタデータＰに１５を加算し、その値を６４で除算した剰余である。つまり、Ｐ＋１５は、
（Ｐ＋１５）ｍｏｄ６４
なる演算で求めた値である。
【０１４０】
また、ＭＥＭ［ＢＵＦ［ＥＲＰ］のｂｉｔ８−０］は、物理セクタアドレスのデータセクタである。
【０１４１】
また、ＲＡＭ［Ａｄｄ］は、ＲＡＭ１７内の書き換え論理アドレスＡｄｄと同じアドレスのデータエリア（アドレス管理エリア）である。
【０１４２】
図１４および図１５は本発明の実施の形態３のデータ書き換え処理の一例を説明する図であって、（１）は図１３のステップＳｔｅｔ１、（２）は図１３のステップＳｔｅｔ２、（３）は図１３のステップＳｔｅｔ３、（４）は図１３のステップＳｔｅｔ４の処理をした状態である。
【０１４３】
図１４および図１５のデータ書き換え処理の例では、そのデータ書き換え処理の開始前に、物理セクタアドレスＰ−Ａｄｄ１のデータセクタに、論理セクタアドレスＡｄｄの古いデータＤａｔａ１が書き込まれており、アドレスＲＡＭ１７のアドレスＡｄｄのデータエリアには、物理セクタアドレスＰ−Ａｄｄ１が書き込まれており、”００００００”，”０００００１”，…，”０１１１１１”をポインタデータとしたときの位置の１６個のバッファデータエリア１６には、物理セクタアドレスＥ−Ａｄｄ１，Ｅ−Ａｄｄ１，…，Ｅ−Ａｄｄ３２が書き込まれており、アドレスポインタ１４にはポインタデータ”０１１１１１”がセットされている。
【０１４４】
従って、図１４および図１５のデータ書き換え処理の例では、そのデータ書き換え処理の開始前に、物理セクタアドレスＥ−Ａｄｄ１からＥ−Ａｄｄ１７までの１７個のデータセクタはすでに消去を完了しており、物理セクタアドレスＥ−Ａｄｄ１８のデータセクタはすでに１５回の時分割消去処理がなされており、物理セクタアドレスＥ−Ａｄｄ３２のデータセクタはすでに１回の時分割消去処理がなされている。
【０１４５】
また、図１４および図１５のデータ書き換え処理の例では、書き換えデータはＤａｔａ２であり、その論理セクタアドレス（書き換え論理アドレス）はＡｄｄである。従って、データｄａｔａ１が被書き換えデータである。
【０１４６】
これら図１４および図１５のデータ書き換え処理を具体例として、図１３のデータ書き換え処理について以下に説明する。
【０１４７】
［ステップＳ２１］
まず、図１３のステップＳ２１で、ポインタデータＰに１を加算して更新する。ただし、ここでは６４個のバッファデータエリアをサイクリックに使用するため、実際には、ポインタデータＰに１を加算し、その値を６４で除算して、その剰余でポインタデータＰを更新する。つまり、
（Ｐ＋１）ｍｏｄ６４
なる演算で求めた値でポインタデータＰを更新する。
【０１４８】
更新前のポインタデータＰは、前回のデータ書き換え処理で、消去するデータセクタの物理アドレスを書き込んだバッファデータエリア（図１０の１６ａおよび図１１参照）の位置を示し、更新されたポインタデータＰは、今回のデータ書き換え処理で、消去するデータセクタの物理アドレスを書き込むバッファデータエリアの位置を示す。
【０１４９】
図１４および図１５の例では、ポインタデータＰは、”０１１１１１”（１０進法で３１）から”１０００００”（１０進法で３２）に更新される。更新前のポインタデータＰ＝”０１１１１１”は、消去するデータセクタの物理アドレスＥ−Ａｄｄ３２を前回書き込んだバッファデータエリア（図１４（１）参照）の位置を示し、更新されたポインタデータＰ＝”１０００００”は、消去するデータセクタの物理アドレスＰ−Ａｄｄ１を今回書き込むバッファデータエリア（図１４（２）参照）の位置を示す。
【０１５０】
［ステップＳ２２］
この実施の形態３のデータ書き換え処理では、ＲＡＭ２（図１参照）内に変数ＥＲＰを設けてあり、図１３のステップＳ２２で、この変数ＥＲＰに、ポインタデータＰから３２を減算した値を書き込む。ただし、ここでは６４個のバッファデータエリアをサイクリックに使用するため、実際には、あらかじめポインタデータＰに３２を加算し、その値を６４で除算して、その剰余を変数ＥＲＰに書き込む。つまり、
（Ｐ＋３２）ｍｏｄ６４
なる演算で求めた値を変数ＥＲＰに書き込む。
【０１５１】
上記の変数ＥＲＰは、消去が完了して書き込み可能になったデータセクタの物理セクタアドレスが書き込まれているバッファデータエリアの位置を示す。この実施の形態３では、フラッシュデータメモリ１１を、８［ｋバイト］のデータ容量よりも３２［セクタ］（時分割消去のための１６［セクタ］およびリカバリ処理のための１６［セクタ］）多い構成としており、１６回のデータ書き換え処理での時分割消去によってセクタを完全に消去するので、リカバリ処理がなされていなければ、バッファデータエリアＢＵＦ［Ｐ］の３２個前のバッファデータエリアから１７個前のバッファデータエリアまでに書き込まれた物理セクタアドレスの１６個のデータセクタが、消去が完了して書き込み可能になったデータセクタである。これら１６個のバッファデータエリアの内の最初のバッファデータエリア（バッファデータエリアＢＵＦ［Ｐ］の３２個前のバッファデータエリア）の位置を示すために、ポインタデータＰから３２を減算した値を変数ＥＰＲとしている。
【０１５２】
図１４および図１５の例では、
ＥＲＰ＝（３２＋３２）ｍｏｄ６４＝０
であり、この変数ＥＲＰ＝０は、物理アドレスＥ−Ａｄｄ１が書き込まれたバッファデータエリア（図１４（１）参照）の位置を示す。
【０１５３】
［ステップＳ２３］
図１３のステップＳ２３では、バッファデータエリアＢＵＦ［ＥＲＰ］の書き込み完了フラグ（ｂｉｔ９、図１２の１６ｃ）が”０”であるか否かを判別し、書き込み完了フラグが”０”ならばステップＳ２４に進み、”１”ならばステップＳ３４に進む。
【０１５４】
［ステップＳ２４］
上記ステップ２３で書き込み完了フラグ＝”０”であれば、図１３のステップＳ２４で、その書き込み完了フラグ（バッファデータエリアＢＵＦ［ＥＲＰ］の書き込み完了フラグ）に”１”を書き込む。
【０１５５】
［ステップＳ２５，Ｓ２６］
次に図１３のステップＳ２５で、データセクタＭＥＭ［ＢＵＦ［ＥＲＰ］のｂｉｔ８−０］のデータエリアに、書き換えデータを書き込み、図１３のステップＳ２６で、そのデータセクタＭＥＭ［ＢＵＦ［ＥＲＰ］のｂｉｔ８−０］のメモリ管理エリア（図１０の１１ａおよび図１１参照）に、書き換え論理アドレス（ｂｉｔ７−ｂｉｔ０、図１１の１１ｂ参照）および有効セクタフラグ＝”１”（ｂｉｔ８、図１１の１１ｃ参照）を書き込む。
【０１５６】
図１４および図１５の例では、物理セクタアドレスＥ−Ａｄｄ１のデータセクタのデータエリアに、書き換えデータＤａｔａ２が書き込まれ、物理セクタアドレスＥ−Ａｄｄ１のデータセクタのメモリ管理エリアに、書き換え論理アドレスＡｄｄ（ｂｉｔ７−ｂｉｔ０）および有効セクタフラグ＝”１”が書き込まれる（図１４（１）参照）。
【０１５７】
なお、上記ステップＳ２５，Ｓ２６では、ワード単位の書き込みになるので、１７回の書き込み処理をすることになる。ここで、１［ワード］の書き込み時間を２０［μｓ］とすると、この書き込み処理に３４０［μｓ］かかることになる。
【０１５８】
［ステップＳ２７］
次に図１３のステップＳ２７で、上記ステップＳ２５，Ｓ２６での書き込みが正常になされたか否かをチェックし、書き込みが正常になされていればステップＳ２８に進み、書き込みが正常になされていなければステップＳ３２に進む。
【０１５９】
［ステップＳｔｅｐ１］
ここまでのステップＳ２１からＳ２７まではステップＳｔｅｐ１の処理を構成しており、このステップＳｔｅｐ１の処理によって図１４（１）の状態になる。図１４（１）では、物理セクタアドレスＥ−Ａｄｄ１のデータセクタに、書き換えデータＤａｔａ２と、その論理セクタアドレス（書き換え論理アドレス）Ａｄｄが書き込まれている。
【０１６０】
このように、ステップＳｔｅｐ１は、ポインタデータＰを更新して変数ＥＲＰを求め、バッファデータエリアＢＵＦ［ＥＲＰ］に書き込まれている物理セクタアドレスＥ−Ａｄｄ１に、新しい書き換えデータＤａｔａ２および書き換え論理アドレスＡｄｄを書き込む処理である。
【０１６１】
［ステップＳ２８，Ｓ２９］
上記ステップＳ２７で書き込みＯＫであれば、図１３のステップＳ２８で、アドレス管理エリアＲＡＭ［Ａｄｄ］にアクセスし、古いデータ（被書き換えデータ）が書き込まれているデータセクタの物理セクタアドレスをバッファデータエリア［Ｐ］のｂｉｔ８−ｂｉｔ０に書き込み、図１３のステップＳ２９で、上記古いデータの物理セクタアドレスを書き込んだバッファセクタのバッファ管理エリア１６ｄ（図１０参照）を更新する。
【０１６２】
［ステップＳｔｅｐ２］
これらのステップＳ２８およびＳ２９はステップＳｔｅｐ２の処理を構成しており、このステップＳｔｅｐ２の処理によって図１４（２）の状態になる。図１４（２）では、書き換え論理アドレスＡｄｄと同じアドレスＲＡＭ１７のアドレス（アドレス管理エリアＲＡＭ［Ａｄｄ］）に書き込まれている物理セクタアドレスであって古いデータ（被書き換えデータ）Ｄａｔａ１が書き込まれているデータセクタの物理セクタアドレスであるＰ−Ａｄｄ１が、ポインタデータＰ＝”１０００００”の位置のバッファデータエリアに書き込まれ、この物理セクタアドレスＰ−Ａｄｄ１を書き込んだバッファセクタのバッファ管理エリア１６ｄが、”００００００００００００００００”から”０００００００００００００００１”に更新されている。
【０１６３】
［ステップＳ３０］
次に図１３のステップＳ３０で、アドレス管理エリアＲＡＭ［Ａｄｄ］に、新しい書き換えデータを書き込んだデータセクタの物理セクタアドレスを書き込む。
【０１６４】
［ステップＳｔｅｐ３］
このステップＳ３０はステップＳｔｅｐ３の処理となり、このステップＳｔｅｐ３の処理によって図１５（３）の状態となる。図１５（３）では、書き換え論理アドレスＡｄｄと同じアドレスＲＡＭ１７のアドレス（アドレス管理エリアＲＡＭ［Ａｄｄ］）に、新しい書き換えデータＤａｔａ２を書き込んだデータセクタの物理セクタアドレスＥ−Ａｄｄ１が書き込まれている。
【０１６５】
［ステップＳ３１］
次に図１３のステップＳ３１で、バッファデータエリアＢＵＦ［Ｐ］〜ＢＵＦ［Ｐ−１５］に書き込まれている物理セクタアドレスの１６個のデータセクタと、バッファデータエリアＢＵＦ［Ｐ］のバッファセクタ（イレースバッファ１６のポインタデータＰの上位２ビットが示す位置のバッファセクタ）の次の位置の１個のバッファセクタとの合計１７セクタを同時に消去する。
【０１６６】
［ステップＳｔｅｐ］
このステップ３１はステップＳｔｅｐ４の処理となり、このステップＳｔｅｐ４の処理によって図１５（４）の状態となる。図１５（４）では、物理セクタアドレスＥ−Ａｄｄ１８，Ｅ−Ａｄｄ１９，…Ｅ−Ａｄｄ３２，Ｐ−Ａｄｄ１の１６個のデータセクタと、物理セクタアドレスＰ−Ａｄｄ１が書き込まれたバッファセクタの次の位置の１個のバッファセクタとの合計１７セクタが時分割で消去されている。
【０１６７】
なお、この実施の形態３では、上記実施の形態１および２と同様に、フラッシュデータメモリ１１のデコーダは複数のセクタを同時に選択できるようになっているので、同時に複数のデータセクタおよびバッファセクタを消去することができる。
【０１６８】
この実施の形態３でも、消去時間は、上記実施の形態１および２と同様に、データ書き換え処理ごとの１６回の時分割消去によってそれぞれのセクタを完全に消去するので、上記ステップＳ３１での消去時間は、従来の消去時間の１／１６の時間とすることができる。例えば、セクタの完全な消去に２０［ｍｓ］必要な場合は、１．２５［ｍｓ］の消去時間となる。
【０１６９】
上記ステップＳ３１（上記ステップＳｔｅｐ４）の処理の完了によって１回のデータ書き換え処理が完了したことになり、ソフト処理を除いた１回の書きデータ換え処理時間は、ステップＳｔｅｐ１では３４０［μｓ］、ステップＳｔｅｐ２では１［ワード］の書き込み２回で４０［μｓ］、ステップＳｔｅｐ３ではＲＡＭの書き込みなので数１０〜数１００［ｎｓ］、ステップＳｔｅｐ４の消去では１．２５［ｍｓ］となるので、ステップＳｔｅｐ３の書き込み時間を無視すると、０．３４＋０．０４＋１．２５＝１．６３［ｍｓ］となる。
【０１７０】
この実施の形態３では、論理セクタよりも多いデータセクタを設け、データセクタを物理セクタアドレスで管理することによって、上記実施の形態１および２のようなバッファセクタに一時書き込みした書き換えデータをデータセクタに移す書き込みが不要になるので、１回のデータ書き換え処理にかかる時間を上記実施の形態１および２よりも短くすることができる。
【０１７１】
［リカバリ処理］
この実施の形態３では、書き込み不良が発生したときのリカバリ処理のために、１６個のデータセクタが設けられている。図１３のステップＳ２７で書き込み不良が発生したときのリカバリ処理について以下に説明する。
【０１７２】
［ステップＳ３２］
上記ステップＳ２７で書き込みＮＧであれば、図１３のステップＳ３２で、そのデータセクタＭＥＭ［ＢＵＦ［ＥＲＰ］のｂｉｔ８−０］のメモリ管理エリア１１ａに、不良セクタフラグ＝”１”（ｂｉｔ９、図１１の１１ｄ参照）を書き込み、ステップＳ３４に進む。なお、上記ステップＳ２３でバッファデータエリアＢＵＦ［ＥＲＰ］の書き込み完了フラグが”１”であったときにも、ステップＳ３４に進む。
【０１７３】
［ステップＳ３４］
図１３のステップＳ３４では、変数ＥＲＰに１を加算して更新し、ステップＳ３５に進む。ただし、ここでは６４個のバッファデータエリアをサイクリックに使用するため、実際には、変数ＥＲＰに１を加算し、その値を６４で除算して、その剰余で変数ＥＲＰを更新する。つまり、
（ＥＲＰ＋１）ｍｏｄ６４
なる演算で求めた値で変数ＥＲＰを更新する。
【０１７４】
図１４および図１５の例では、
ＥＲＰ＝（ＥＲＰ＋１）ｍｏｄ６４＝１
であり、この更新された変数ＥＲＰ＝１は、物理アドレスＥ−Ａｄｄ２が書き込まれたバッファデータエリア（図１４（１）参照）の位置を示す。
【０１７５】
この実施の形態３では、ＲＡＭ２（図１参照）内に変数ＣＨＫを設けてあり、図１３のステップＳ３５で、上記ステップＳ２１で更新したポインタデータＰから上記ステップＳ３４で更新した変数ＥＲＰを減算した値を変数ＣＨＫに書き込む。ただし、実際には、あらかじめポインタデータＰに６４を加算し、その加算値から変数ＥＲＰを減算し、その減算を６４で除算して、その剰余を変数ＣＨＫに書き込む。つまり、
（Ｐ＋６４−ＥＲＰ）ｍｏｄ６４
なる演算で求めた値を変数ＣＨＫに書き込む。
【０１７６】
上記の変数ＣＨＫは、上記ステップＳ３４ですでに変数ＥＲＰに１が加算されているので、
１５≦ＣＨＫ≦３１
を範囲とする変数であり、この変数ＣＨＫから時分割消去のためのデータセクタの個数１６を減算して１を加算した値ＣＨＫ−１５は、リカバリ処理に使用可能なデータセクタ数を示す。
【０１７７】
［ステップＳ３６，Ｓ３７］
次にステップＳ３６で、変数ＣＨＫが１６以上か否かを判別し、ＣＨＫ≧１６ならば、ステップＳ２３に戻って再度ステップＳｔｅｐ１の処理にトライし、ＣＨＫ＜１６ならば、図１３のステップＳ３７で、異常終了処理をして、データ書き換え処理を終了する。
【０１７８】
図１４および図１５の例では、すでに消去を完了している物理セクタアドレスＥ−Ａｄｄ２，…，Ｅ−Ａｄｄ１７の１６個のデータセクタがリカバリ処理に使用可能であり、物理セクタアドレスＥ−Ａｄｄ１のデータセクタの書き込みがＮＧであれば、再度のステップＳｔｅｐ１の処理で、物理セクタアドレスＥ−Ａｄｄ２のデータセクタに書き込みをする。
【０１７９】
上記ステップＳ３４からＳ３７までは、主に書き込みエラーが発生したときに、不良データセクタを使用しないようにするとともに、その不良データセクタを他のデータセクタでリカバリする処理であり、この実施の形態３では１６個の不良データセクタが発生するまで、リカバリ可能である。なお、不良データセクタの物理セクタアドレスは、書き込みエラーの発生以降は、イレースバッファ１６およびアドレスＲＡＭ１７に書き込まれることはないので、書き込みエラーの発生以降は、不良データセクタが使用されることはない。
【０１８０】
［データ読み出し動作］
実施の形態３のデータ読み出し動作について以下に説明する。まず、１３［ビット］の読み出し論理アドレスの上位８ビットである読み出し論理セクタアドレスでアドレスＲＡＭ１７をアクセスし、そのアドレス管理エリアに書き込まれている９［ビット］の物理セクタアドレスを読み出して、アドレスラッチ１３に書き込む。そして、このアドレスラッチ１３に書き込んだ物理アドレスセクタと、読み出し論理アドレスの下位４ビットとによって、フラッシュデータメモリ１１からデータを読み出すことにより、データ読み出し処理が完了する。
【０１８１】
［初期設定処理］
この実施の形態３でも、上記実施の形態１と同様に、電源投入時にはアドレスポインタ１４およびアドレスＲＡＭ１７の初期設定処理が必要である。この実施の形態３の初期設定処理について以下に説明する。
【０１８２】
まず、フラッシュデータメモリ１１のメモリ管理エリア１１ａのデータを順次読み出し、有効セクタフラグ（ｂｉｔ８、図１１の１１ｃ参照）が”１”であり、かつ不良セクタフラグ（ｂｉｔ９、図１１の１１ｄ参照）が”０”であるデータセクタについては、そのメモリ管理エリア１１ａに書き込まれている論理セクタアドレス（ｂｉｔ７−ｂｉｔ０、図１１の１１ａ参照）と同じアドレスのアドレスＲＡＭ１７のアドレス管理エリアに、そのデータセクタの物理セクタアドレスを書き込む。
【０１８３】
また、イレースバッファ１６のバッファ管理エリア１６ｄのデータを順にチェックして、前回のデータ書き換え処理で書き込んだバッファデータエリアを判別し、アドレスポインタ１４にセットする。前回書き込んだバッファデータエリアは、バッファ管理エリア１６ｄのビットを下位から順にチェックするによって、簡単に判別できる。以上で、アドレスＲＡＭ１７およびアドレスポインタ１４の初期設定が完了する。
【０１８４】
このような初期設定処理は、上記実施の形態１と同様に、Ｃ−ＲＯＭ３ａ内にサブルーチンとして用意しておけば、ＡＰ−ＲＯＭ３ｂ内のアプリケーションプログラムからＣ−ＲＯＭ３ａ内の初期設定サブルーチン（初期設定制御プログラム）をコールし、制御部４がその初期設定サブルーチンに従って制御する。
【０１８５】
以上のように実施の形態３によれば、書き換えデータをその論理セクタアドレスが割り当てられていた第１のデータセクタとは異なる第２のデータセクタに書き込んで、上記の論理セクタアドレスの割り当てデータセクタを第１のデータセクタから第２のデータセクタに変更し、上記第１のデータセクタを、完全な消去にかかる時間ずつ消去処理によって、１６回のデータ書き換え処理で時分割で消去することにより、１回のデータ書き換え処理にかかる時間を短くできる。
【０１８６】
さらに、データ容量よりも多く設けたデータセクタの物理セクタアドレスと書き換えデータの論理セクタアドレスの関連をアドレスＲＡＭ１７で管理することにより、書き換えデータを一時書き込みしたバッファセクタからデータセクタに移す処理が不要になるので、上記実施の形態１および２よりもさらに見かけの書き換え処理時間を短縮できる。
【０１８７】
また、データ容量よりも多く設けたデータセクタの物理セクタアドレスと書き換えデータの論理セクタアドレスの関連をアドレスＲＡＭ１７で管理することにより、見かけの書き換えセクタアドレス（論理セクタアドレス）は同じでも、異なるデータセクタに書き換えデータを順次書き込んでいくので、フラッシュメモリの信頼性を向上させる効果が得られる。
【０１８８】
また、リカバリ処理のためのデータセクタを設け、不良セクタが発生した場合のリカバリ処理を可能にしたことによっても、フラッシュメモリの信頼性を向上させる効果が得られる。
【０１８９】
また、アドレスＲＡＭ１７およびアドレスラッチ１３によって、読み出し論理セクタアドレスを物理セクタアドレスに変換してデータ読み出しをすることにより、論理セクタと物理セクタの位置の違いをアプリケーションプログラムで意識する必要がなく、データ読み出し処理時間を短くできる。
【０１９０】
また、上記実施の形態１および２と同様に、
目標の書き換え処理時間になるように時分割して消去するので、長時間の消去処理のためのバックアップ電源が必要ない。
【０１９１】
なお、上記実施の形態１および２において、アドレスの重複を判別しないようにすることも可能である。
【０１９２】
また、上記実施の形態３において、リカバリ処理をしないことも可能である。この場合には、フラッシュデータメモリ１１のデータセクタ数を１６個減らすことができ、イレースバッファ１６のバッファセクタ数を１個減らすことができる。
【０１９３】
また、上記実施の形態３では、フラッシュデータメモリ１１とイレースバッファ１６を別々のフラッシュメモリとして説明したが、１つのフラッシュメモリにまとめることも可能である。
【０１９４】
また、上記実施の形態３では、フラッシュデータメモリ１１をデータセクタ数がデータ容量よりも３２個多い構成にしたが、さらにデータセクタ数を増やすことも可能である。データセクタ数を多くすれば、１つのデータセクタの実際の書き換え回数が減らせるので信頼性が向上するとともに、リカバリ処理に使用可能なデータセクタを増やすことができる。
【０１９５】
また、上記実施の形態３では、イレースバッファ１６をバッファセクタ数が４個の構成としたが、さらにバッファセクタ数を増やすことも可能である。
【０１９６】
また、上記実施の形態３では、データ書き込み処理ごとに、アドレスポインタ１４とバッファ管理エリア１６ａの書き込み完了フラグから変数ＥＲＰを求めているが、電源投入時に変数ＥＲＰを求めておき、そのあとのデータ書き換え処理ごとに変数ＥＲＰを更新することも可能である。
【０１９７】
また、上記実施の形態１から３において、アドレスポインタ１４をＲＡＭ２内に設けることも可能である。
【０１９８】
また、上記実施の形態１から３では、１／１６に時分割して消去処理をする例を説明したが、時分割数は２以上の任意の数に設定可能である。時分割数を増やせば、さらに見かけ上の書き換え時間を短くできる。
【０１９９】
また、上記実施の形態１から３では、フラッシュメモリの書き込み状態を”１”、消去状態を”０”として説明したが、逆にすることも可能である。
【０２００】
【発明の効果】
以上説明したように本発明によれば、データ書き換え処理ごとのＮ回の時分割消去によってそれぞれのセクタを完全に消去するので、１回のデータ書き換え処理時間を短くできるという効果がある。
【図面の簡単な説明】
【図１】本発明の実施の形態１のマイクロコンピュータの機能ブロック図である。
【図２】図１のフラッシュメモリ部の機能ブロック図である。
【図３】図２のフラッシュバッファにおいての管理エリアのビット構成図である。
【図４】図２の読み出し用データ差し替え回路の構成例を示す図である。
【図５】本発明の実施の形態１のマイクロコンピュータにおいての書き換え処理を説明する図である（その１）。
【図６】本発明の実施の形態１のマイクロコンピュータにおいての書き換え処理を説明する図である（その２）。
【図７】本発明の実施の形態１のマイクロコンピュータにおいての書き換え処理を説明する図である（その３）。
【図８】本発明の実施の形態１のマイクロコンピュータにおいての書き換え処理を示すフローチャートである。
【図９】本発明の実施の形態２のマイクロコンピュータにおいての書き換え処理を示すフローチャートである。
【図１０】本発明の実施の形態３のマイクロコンピュータにおいてのフラッシュメモリ部の機能ブロック図である。
【図１１】図１０においてのメモリ管理エリアのビット構成図である。
【図１２】図１０においてのバッファデータエリアのビット構成図である。
【図１３】本発明の実施の形態３のマイクロコンピュータにおいての書き換え処理を示すフローチャートである。
【図１４】本発明の実施の形態３のマイクロコンピュータにおいての書き換え処理の各ステップでの状態を示す図である（その１）。
【図１５】本発明の実施の形態３のマイクロコンピュータにおいての書き換え処理の各ステップでの状態を示す図である（その２）。
【符号の説明】
１  フラッシュメモリ部、  ２  ＲＡＭ、  ３  ＲＯＭ、  ３ａ  Ｃ−ＲＯＭ、  ３ｂ  ＡＰ−ＲＯＭ、  ４  制御部、  ５  データバス、  ６  アドレスバス、  １１  フラッシュデータメモリ、  １１ａ  メモリ管理エリア、  １１ｂ論理セクタアドレスエリア、  １１ｃ  有効フラグエリア、  １１ｄ  不良フラグエリア、  １２  フラッシュバッファ、  １２ａ  管理エリア、  １２ｂ  セクタアドレスエリア、  １２ｃ  有効フラグエリア、  １２ｄ  重複フラグエリア、  １２ｅ  セクタポインタエリア、  １３  アドレスラッチ、  １４  アドレスポインタ、  １５  読み出し用データ差し替え回路、  １６  イレースバッファ、  １６ａ  バッファデータ、  １６ｂ  物理セクタアドレスエリア、  １６ｃ  書き込み完了フラグエリア、  １６ｄ  バッファ管理エリア、  １７  アドレスＲＡＭ。
【図１】
0003587842.tif 000002
【図２】
0003587842.tif 000003
【図３】
0003587842.tif 000004
【図４】
0003587842.tif 000005
【図５】
0003587842.tif 000006
【図６】
0003587842.tif 000007
【図７】
0003587842.tif 000008
【図８】
0003587842.tif 000009
【図９】
0003587842.tif 000010
【図１０】
0003587842.tif 000011
【図１１】
0003587842.tif 000012
【図１２】
0003587842.tif 000013
【図１３】
0003587842.tif 000014
【図１４】
0003587842.tif 000015
【図１５】
0003587842.tif 000016