(57)【要約】    【課題】  データの書き換えの際に書き換えが中断されたような場合でも、有効なデータを格納しているデータ領域を正しく判定することができるフラッシュメモリにおけるデータアクセス制御方法、データアクセス制御プログラムを提供する。    【解決手段】  データを書き込むデータ領域を有する複数のブロックを有し、複数の当該ブロックを使用してデータの追記による書き込みを行うフラッシュメモリにおけるデータアクセス制御において、ブロックに、データが書き込まれたデータ領域の有効性を判別するためのフラグであって、データ領域が有効であることを示す有効フラグと、無効であることを示す無効フラグを設け、ブロックからデータの読み出しを行う際に、複数のブロックから有効フラグと無効フラグの値を読み出し、読み出した有効フラグと無効フラグの値によって、何れのブロックのデータ領域が有効であるかどうかの判別を行う。【選択図】    図４
2005234957.tif 000002
【特許請求の範囲】
【請求項１】
データを書き込むデータ領域を有する複数のブロックを有し、複数の当該ブロックを使用してデータの追記による書き込みを行うフラッシュメモリにおけるデータアクセス制御方法であって、
前記ブロックに、データが書き込まれた前記データ領域の有効性を判別するためのフラグを設け、
前記ブロックからデータの読み出しを行う際に、複数の前記ブロックから前記フラグの値を読み出し、読み出した前記フラグの状態により、有効な前記データ領域の判別を行うことを特徴とするフラッシュメモリにおけるデータアクセス制御方法。
【請求項２】
複数の前記ブロックを使用してデータの追記を行う場合に、一方の前記ブロックの前記データ領域にデータを書き込んだ際に、当該ブロックの前記フラグを有効に、他方の前記ブロックの前記フラグを無効に設定することを特徴とする請求項１に記載のフラッシュメモリにおけるデータアクセス制御方法。
【請求項３】
前記ブロックの前記フラグとして、前記データ領域が有効であることを示す有効フラグと、無効であることを示す無効フラグを設け、
複数の前記ブロックを使用してデータの追記を行う場合に、一方の前記ブロックの前記データ領域にデータを書き込んだ際に、当該ブロックの前記有効フラグに有効を示す値を書き込み、他方の前記ブロックの前記無効フラグに無効を示す値を書き込むことを特徴とする請求項１又は請求項２に記載のフラッシュメモリにおけるデータアクセス制御方法。
【請求項４】
前記ブロックからデータの読み出しを行う際に、複数の前記ブロックから前記有効フラグと前記無効フラグの値を読み出し、
一方の前記ブロックの前記有効フラグと前記無効フラグの値が、それぞれ有効を示す値と無効でない値の組み合わせの場合に、他方の前記ブロックの有効フラグと無効フラグの値に関わらず、一方の前記ブロックのデータ領域を有効と判定し、
一方の前記ブロックの前記有効フラグと前記無効フラグの値が、それぞれ有効を示す値と無効でない値の組み合わせ以外の場合、前記他方の前記ブロックの前記有効フラグと前記無効フラグの値が、有効を示す値と無効でない値の組み合わせの場合に、他方の前記ブロックのデータ領域を有効と判定することを特徴とする請求項３に記載のフラッシュメモリにおけるデータアクセス制御方法。
【請求項５】
前記ブロックからデータの読み出しを行う際に、複数の前記ブロックから前記有効フラグと前記無効フラグの値を読み出してデータ領域の有効性を判定する場合に、
前記有効フラグと前記無効フラグの値を、異なる２つ以上の信号レベルで読み出すことを特徴とする請求項３又は請求項４に記載のフラッシュメモリにおけるデータアクセス制御方法。
【請求項６】
前記信号レベルとして、前記ブロックからデータを読み出す際の読み出しレベルである第１の信号レベルと、前記ブロックの前記データ領域にデータを書き込む際の書き込みレベルあるいは前記ブロックの消去を行う際の消去レベルである第２の信号レベルを用いることを特徴とする請求項５に記載のフラッシュメモリにおけるデータアクセス制御方法。
【請求項７】
前記ブロックからデータの読み出しを行う際に、前記第１の信号レベルで複数の前記ブロックから前記有効フラグと前記無効フラグの値を読み出し、
前記ブロックの前記有効フラグと前記無効フラグの値が、一方が有効を示す値と無効でない値の組み合わせで、他方が有効を示す値と無効でない値の組み合わせ以外の場合、前記有効フラグと前記無効フラグの値が、有効を示す値と無効でない値の組み合わせの前記ブロックのデータ領域を有効と判定し、
双方の前記ブロックの前記有効フラグと前記無効フラグの値が、それぞれ有効を示す値と無効でない値の組み合わせの場合に、前記第２の信号レベルで複数の前記ブロックから前記有効フラグと前記無効フラグの値を読み出し、
前記ブロックの前記有効フラグと前記無効フラグの値が、一方が有効を示す値と無効でない値の組み合わせで、他方が有効を示す値と無効でない値の組み合わせ以外の場合、前記有効フラグと前記無効フラグの値が、有効を示す値と無効でない値の組み合わせの前記ブロックのデータ領域を有効と判定することを特徴とする請求項６に記載のフラッシュメモリにおけるデータアクセス制御方法。
【請求項８】
ＣＰＵを制御し、データを書き込むデータ領域を有する複数のブロックを有し、複数の当該ブロックを使用してデータの追記による書き込みを行うフラッシュメモリのアクセス制御を行うデータアクセス制御プログラムであって、
前記ブロックが、データが書き込まれた前記データ領域の有効性を判別するためのフラグを有し、
前記ブロックからデータの読み出しを行う際に、複数の前記ブロックから前記フラグの値を読み出し、読み出した前記フラグの状態により、有効な前記データ領域の判別を行う機能を有することを特徴とするフラッシュメモリにおけるデータアクセス制御プログラム。
【請求項９】
複数の前記ブロックを使用してデータの追記を行う場合に、一方の前記ブロックの前記データ領域にデータを書き込んだ際に、当該ブロックの前記フラグを有効に、他方の前記ブロックの前記フラグを無効に設定する機能を有することを特徴とする請求項８に記載のフラッシュメモリにおけるデータアクセス制御プログラム。
【請求項１０】
前記ブロックの前記フラグとして、前記データ領域が有効であることを示す有効フラグと、無効であることを示す無効フラグを設け、
複数の前記ブロックを使用してデータの追記を行う場合に、一方の前記ブロックの前記データ領域にデータを書き込んだ際に、当該ブロックの前記有効フラグに有効を示す値を書き込み、他方の前記ブロックの前記無効フラグに無効を示す値を書き込む機能を有することを特徴とする請求項８又は請求項９に記載のフラッシュメモリにおけるデータアクセス制御プログラム。
【請求項１１】
前記ブロックからデータの読み出しを行う際に、複数の前記ブロックから前記有効フラグと前記無効フラグの値を読み出し、
一方の前記ブロックの前記有効フラグと前記無効フラグの値が、それぞれ有効を示す値と無効でない値の組み合わせの場合に、他方の前記ブロックの有効フラグと無効フラグの値に関わらず、一方の前記ブロックのデータ領域を有効と判定し、
一方の前記ブロックの前記有効フラグと前記無効フラグの値が、それぞれ有効を示す値と無効でない値の組み合わせ以外の場合、前記他方の前記ブロックの前記有効フラグと前記無効フラグの値が、有効を示す値と無効でない値の組み合わせの場合に、他方の前記ブロックのデータ領域を有効と判定する機能を有することを特徴とする請求項１０に記載のフラッシュメモリにおけるデータアクセス制御プログラム。
【請求項１２】
前記ブロックからデータの読み出しを行う際に、複数の前記ブロックから前記有効フラグと前記無効フラグの値を読み出してデータ領域の有効性を判定する場合に、
前記有効フラグと前記無効フラグの値を、異なる２つ以上の信号レベルで読み出す機能を有することを特徴とする請求項１０又は請求項１１に記載のフラッシュメモリにおけるデータアクセス制御プログラム。
【請求項１３】
前記信号レベルとして、前記ブロックからデータを読み出す際の読み出しレベルである第１の信号レベルと、前記ブロックの前記データ領域にデータを書き込む際の書き込みレベルあるいは前記ブロックの消去を行う際の消去レベルである第２の信号レベルを用いることを特徴とする請求項１２に記載のフラッシュメモリにおけるデータアクセス制御プログラム。
【請求項１４】
前記ブロックからデータの読み出しを行う際に、前記第１の信号レベルで複数の前記ブロックから前記有効フラグと前記無効フラグの値を読み出し、
前記ブロックの前記有効フラグと前記無効フラグの値が、一方が有効を示す値と無効でない値の組み合わせで、他方が有効を示す値と無効でない値の組み合わせ以外の場合、前記有効フラグと前記無効フラグの値が、有効を示す値と無効でない値の組み合わせの前記ブロックのデータ領域を有効と判定し、
双方の前記ブロックの前記有効フラグと前記無効フラグの値が、それぞれ有効を示す値と無効でない値の組み合わせの場合に、前記第２の信号レベルで複数の前記ブロックから前記有効フラグと前記無効フラグの値を読み出し、
前記ブロックの前記有効フラグと前記無効フラグの値が、一方が有効を示す値と無効でない値の組み合わせで、他方が有効を示す値と無効でない値の組み合わせ以外の場合、前記有効フラグと前記無効フラグの値が、有効を示す値と無効でない値の組み合わせの前記ブロックのデータ領域を有効と判定する機能を有することを特徴とする請求項１３に記載のフラッシュメモリにおけるデータアクセス制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリにおけるデータアクセス制御方法、データアクセス制御プログラムに関し、特に２つのブロックを使用してデータの追記による書き込みを行うフラッシュメモリにおけるデータアクセス制御方法、データアクセス制御プログラムに関する。
【背景技術】
【０００２】
フラッシュメモリは、ＥＥＰＲＯＭの一種であり、ブロック単位でデータを消去することで、データを新たに書き込むことができる構造となっている。このフラッシュメモリは、外部から電力を供給しなくても記憶したデータが消えることがないので、デジタルカメラや家庭用ゲーム機などのメモリカード、パソコンのＢＩＯＳの記憶などに利用されている。
【０００３】
図１０と図１１を参照して、従来のフラッシュメモリにおいて、複数のブロック（例えば、２つのブロック）を使用してデータ追記によるデータ書き換えを行う場合の動作を簡単に説明する。
【０００４】
図１０は、フラッシュメモリの領域０から領域２の３つの領域から構成されるブロック０とブロック１の２つのブロックを利用してデータ書き換えを行う場合の状態の変化を示している。
【０００５】
フラッシュメモリにおいてデータ追記を行う場合、書き込みデータは、ブロック０、ブロック１のそれぞれに同一のデータを書き込む。ここでは、ブロックの初期状態（各領域には初期値「ＦＦＨ」が格納されている）からデータ「ｄ１」〜「ｄ３」の追記とブロックの消去を順次行う場合の例を示している。
【０００６】
なお、両ブロック０、１からの読み出しデータが共に初期値「ＦＦＨ」である場合、また互いの読み出しデータが不一致の場合には、所定のディフォルト値がディフォルトデータ「ｄ０」として使用される。
【０００７】
例えば、データ「ｄ１」の書き込みを行う場合、図１０の（２）で、ブロック０の領域０にデータ「ｄ１」を書き込んだ後、図１０の（３）で、ブロック１の領域０にデータ「ｄ１」を書き込む。この図１０の（３）の状態では、有効データとしてデータ「ｄ１」が読み出される。図１０中、書き換えがなされているブロックの領域を網目によって示している。
【０００８】
フラッシュメモリの２つのブロック（０）、ブロック（１）を使用して、データ追記によるデータ書き換えを行う際、例えば、ブロック（０）が一杯になった場合、ブロック（０）と同じデータを、ブロック（１）へ書き込み、ブロック（０）については、ブロック（１）が一杯になった後に新規のデータを書き込みのために消去を行う（図１０の（８））。
【０００９】
フラッシュメモリからのデータの読み出し時は、図１１に示すように、まず読み出しレベルを設定する（ステップ１１０１）。この読み出しレベルは、ＣＰＵからフラッシュメモリのデータを読み出すために必要な信号レベルである。
【００１０】
そして、設定された読み出しレベルで、ブロック０とブロック１のそれぞれから最新のデータを読み出す（ステップ１１０２、１１０３）。例えば、図１０の（３）の場合であれば、ブロック０の領域０に格納されるデータ「ｄ１」と、ブロック１の領域０に格納されているデータ「ｄ１」が最新のデータとして読み出される。
【００１１】
次いで、２つのブロックから読み出したデータの比較を行う（ステップ１１０４）。２つのデータが互いに一致する場合には、当該読み出したデータを有効データとする（ステップ１１０５）。データが不一致の場合は、予め決めてあるディフォルトデータ「ｄ０」をデータとする（ステップ１１０６）。
【００１２】
例えば、図１０の（３）のタイミングでデータの読み出しがなされた場合、ブロック０とブロック１から読み出したデータ「ｄ１」が一致するので、データ「ｄ１」が有効データとなる。
【００１３】
また、図１０の（２）のタイミングでは、ブロック０から読み出されるデータがデータ「ｄ１」で、ブロック１から読み出されるデータがデータ「ＦＦＨ」であるので、ステップ１１０４の比較で不一致となり、ディフォルトデータ「ｄ０」が有効データとなる。さらに、図１０の（４）の場合も、ブロック０から読み出されるデータがデータ「ｄ２」で、ブロック１から読み出されるデータがデータ「ｄ１」であるので、不一致となり、ディフォルトデータ「ｄ０」が有効データとなる。
【００１４】
上記図１１に示すデータ読み出しにおける処理は、ユーザアプリケーション（ソフトウェア）上の制御によって行われる。
【００１５】
なお、データ不一致の場合の処理として、ディフォルトデータの代わりに前回の一致データを使用するという方法も存在する。
【００１６】
また、図１０と図１１に示す例では、２ブロックを使用して読み出しデータの一致判断を行う場合を示したが、３ブロックを使用した追記方法によって、３つのブロックから読み出した最新データの多数決により有効データを判断することいった方法もある。この３つのブロックからの読み出しデータについて多数決により有効データを判断する方法については、例えば特開平１１−３２５９５３号公報（特許文献１）に開示されている。
【特許文献１】特開平１１−３２５９５３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
上述した従来のフラッシュメモリにおけるデータアクセス制御方法にあっては、以下に述べるような種々の問題点がある。
【００１８】
２つのブロックを使用してデータの追記を行う従来のフラッシュメモリにおいては、電源瞬断等の原因によりデータの書き換え処理が中断したような場合、例えば、図１０の（２）からブロック１の領域０にデータを書き込む際のタイミングＴで電源瞬断等で処理が中断した場合、２つのブロックにあるデータの一致性が損なわれてしまい、最新のデータが使用されない可能性がある。
【００１９】
この理由は、各ブロックから読み出した２つのデータを比較し、一致するかどうかによってデータの有効と無効を判別するが、不一致の場合に何れのブロックのデータが有効なのかを判断できず、ディフォール値を有効データとするためである。図１０の例の場合、「ｔ」で示したタイミングにおいて、電源瞬断等で処理が中断した場合には、実際にブロックに最新のデータが格納されていても、データ不一致となり最新データが保持されていないと判断される。また、データの更新でブロックの領域が一杯になってしまうと消去する必要があるため、何れかのブロックが消去された状態でも、上記と同様に有効データの判別ができなくなる場合がある。
【００２０】
また、特許文献１に開示されるような３つ以上のブロックを使用して多数決によって有効データを判断する場合おいても、上記のように電源瞬断等の原因で書き換え処理が中断した場合には、各ブロックのデータの有効性が保証されないので、有効データの正しい判断ができない可能性がある。
【００２１】
さらに、３つ以上のブロックを使用して多数決によって有効データを判断する方式の場合、多数のブロックに同一のデータを書き込みことから領域の無駄が大きいという欠点もある。
【００２２】
本発明の目的は、データの書き換えの際に書き換えが中断されたような場合でも、有効なデータを格納しているデータ領域を正しく判定することができるフラッシュメモリにおけるデータアクセス制御方法、データアクセス制御プログラムを提供することにある。
【課題を解決するための手段】
【００２３】
上記目的を達成する本発明は、データを書き込むデータ領域を有する複数のブロックを有し、複数の当該ブロックを使用してデータの追記による書き込みを行うフラッシュメモリにおけるデータアクセス制御方法であって、ブロックに、データが書き込まれた前記データ領域の有効性を判別するためのフラグであって、データ領域が有効であることを示す有効フラグと、無効であることを示す無効フラグを設け、ブロックからデータの読み出しを行う際に、複数のブロックから有効フラグと無効フラグの値を読み出し、読み出した有効フラグと無効フラグの値によって、何れのブロックのデータ領域が有効であるかどうかの判別を行うものである。
【００２４】
また、他の態様によれば、ブロックからデータの読み出しを行う際に、複数のブロックから有効フラグと無効フラグの値を読み出してデータ領域の有効性を判定する場合に、有効フラグと無効フラグの値を、異なる２つ以上の信号レベルで読み出すようにする。この場合、信号レベルとして、ブロックからデータを読み出す際の読み出しレベルである第１の信号レベルと、ブロックのデータ領域にデータを書き込む際の書き込みレベルあるいはブロックの消去を行う際の消去レベルである第２の信号レベルを用いる。
【発明の効果】
【００２５】
本発明のフラッシュメモリにおけるデータアクセス制御方法によれば、以下に述べるような優れた効果が得られる。
【００２６】
第１に、データの書き換えの際、電源瞬断等により書き換えが中断された場合でも、有効なデータを格納しているデータ領域を正しく判定することができる。
【００２７】
第２に、電源瞬断等により書き換えが中断された結果、通常の読み出しレベルではブロック内の有効フラグ、無効フラグの読み出しが不正となるような稀な状態でも、有効なデータを格納しているデータ領域を正確に判定することができる。
【００２８】
有効フラグ、無効フラグの読み出しに使用する読み出しレベルを２以上備えているためである。
【実施例１】
【００２９】
以下、本発明の好ましい実施例について図面を参照して詳細に説明する。
【００３０】
図１は、本発明を適用するデータ処理システムの構成を示しており、フラッシュメモリ１０、ＣＰＵ２０、ＲＡＭ３０が互いにシステムバスにより接続された構成になっている。
【００３１】
ＣＰＵ２０は、フラッシュメモリ１０に対するアドレス／データ／コマンドの各信号による制御を行う。
【００３２】
フラッシュメモリ１０には、ＣＰＵ２０によって実行されるプログラム（データアクセス制御プログラム）及びデータを格納する。
【００３３】
ＲＡＭ３０には、フラッシュメモリ１０の書き換え処理がなされる場合に、フラッシュメモリ１０から上記プログラムが転送され格納される。
【００３４】
プログラム制御されるＣＰＵ２０によるフラッシュメモリ１０に対するデータ書き換え処理は、例えば以下のような処理手順によって実行される。
（ａ）ＣＰＵ２０からフラッシュメモリ１０内に格納されているデータアクセス制御プログラム１００をＲＡＭ３０へ転送する（フラッシュメモリ１０から読み出して、ＲＡＭ３０へ書き込む）。
（ｂ）フラッシュメモリ１０上のプログラムからＲＡＭ３０上プログラムへ分岐する。
（ｃ）ＣＰＵ２０からフラッシュメモリ１０に対して、書き込み指定アドレス、データ及び書き込み要求コマンド信号を出力する。
（ｄ）フラッシュメモリ１０は、ＣＰＵ２０から書き込み要求コマンドに基づいて書き込み指定アドレスにデータの書き込みを行う。
（ｅ）書き込み（又は消去）が完了すると、フラッシュメモリ１０からＣＰＵ２０に対して完了割り込みを出力する。
【００３５】
以上の手順により、フラッシュメモリ１０の各ブロックに対するデータの書き込み又は消去が実行される。
【００３６】
ＣＰＵ２０で実行されるデータアクセス制御プログラム１００の制御によるフラッシュメモリ１０のデータ読み出し処理については後述する。
【００３７】
図２は、本発明の第１の実施例によるフラッシュメモリ１０の構成に示している。第１の実施例によるフラッシュメモリ１０は、図示のように、多数のブロック（０）、（１）、〜（Ｎ）から構成されており、それらブロックの２つずつを使用してデータの書き換え処理を行う。図２の場合、ブロック（０）とブロック（１）に同一のデータを書き込むことでデータの書き換え処理を行う。
【００３８】
フラッシュメモリ１０の一部には、フラッシュメモリ１０に対するデータ書き換え処理を行うためのデータアクセス制御プログラム１００が格納されており、このデータアクセス制御プログラム１００がＣＰＵ２０で実行され、ＣＰＵ２０の制御によってフラッシュメモリ１０のデータ書き換え処理がなされる。
【００３９】
本実施例によるフラッシュメモリ１０のブロック（０）〜（Ｎ）は、図示のように、複数のデータ領域０〜ｎ（ｎは１以上の数）を有すると共に、有効フラグ１０ａと無効フラグ１０ｂを有している。
【００４０】
有効フラグ１０ａと無効フラグ１０ｂは、ブロックのデータ領域（書き込まれているデータ）が有効であるか否かを示すためのフラグであり、有効である場合有効フラグ１０ａに値「００Ｈ」が、無効である場合無効フラグ１０ｂに値「００Ｈ」が書き込まれる。書き込む値については、有効と無効を区別できれば任意に定めることができる。
【００４１】
図３は、従来のフラッシュメモリの構成を示す図であり、多数のブロックからなる点については本実施例のフラッシュメモリと同じであるが、各ブロックは複数のデータ領域０〜ｎを有するだけである。
【００４２】
以下、第１の実施例によるフラッシュメモリによるデータ書き換え処理とデータ読み出しにおけるデータ判別処理について説明する。
【００４３】
図４は、フラッシュメモリ１０のブロック（０）とブロック（１）の２つのブロックを使用してデータの書き換え処理を行う場合の状態変化を示している。ここで、便宜上、ブロック（０）とブロック（１）がそれぞれ１つのデータ領域と有効フラグ１０ａ及び無効フラグ１０ｂからなる場合を示している。
【００４４】
ここでは、初期状態においては、フラッシュメモリ１０のブロック（０）、（１）のデータ領域、有効フラグ１０ａ及び無効フラグ１０ｂにはそれぞれ初期値としてデータ「ＦＦＨ」が格納されている。この初期状態からデータの追記とブロックの消去を順次行う場合について説明する。
【００４５】
図５はデータの書き換え処理の流れを示すフローチャートである。まず、ＣＰＵ２０上で実行されるデータアクセス制御プログラム１００によって書き込みレベルの設定が行われる（ステップ５０１）。
【００４６】
そして、図４の（１）に示す初期状態において、ブロック（０）のデータ領域へのデータ書き込み要求が出力されると（ステップ５０２）、ブロック（０）に対してデータが書き込まれる（ステップ５０３）。ここでは、図４の（２）に示すように、データ「ｄ０」が書き込まれる。
【００４７】
次いで、書き込みを行ったブロック（０）の有効フラグ１０ａにデータが有効であることを示す値（ここでは、値「００Ｈ」）が書き込まれる（ステップ５０４）。これにより、図４の（３）の状態となる。
【００４８】
次に、ブロック（１）のデータ領域へのデータ書き込み要求が出力されると（ステップ５０５）、ブロック（１）に対してデータが書き込まれる（ステップ５０６）。ここでは、図４の（４）に示すように、データ「ｄ１」が書き込まれる。
【００４９】
次いで、書き込みを行ったブロック（１）の有効フラグ１０ａにデータが有効であることを示す値（値「００Ｈ」）が書き込まれる（ステップ５０７）。これにより、図４の（５）の状態となる。
【００５０】
ブロック（１）の有効フラグ１０ａへの書き込みがなされると、他方のブロック（０）の無効フラグ１０ｂにデータが無効であることを示す値（ここでは、値「００Ｈ」）が書き込まれる（ステップ５０８）。これにより、図４の（６）の状態となる。
【００５１】
図５において、ステップ５０１からステップ５０４は、図４の（１）に示す初期状態からデータの書き込みがなされる場合の処理であり、以降の処理においては、ステップ５０５からの処理が繰り返される。
【００５２】
すなわち、一方のブロックにデータを書き込み、有効フラグ１０ａの書き込みを行った後に、書き込みを行ったブロックではない他方のブロックについて無効フラグ１０ｂへの書き込みを行うといった処理を繰り返すことで、データの書き換えが実行される。図４中、書き換えがなされているブロックのデータ領域を網目によって示している。
【００５３】
ブロックの消去に際しては、図４の（６）、（１１）に示すように、消去対象となるブロックのデータ領域、有効フラグ１０ａ及び無効フラグ１０ｂの全てに初期値「ＦＦＨ」の書き込みを行う。
【００５４】
従来のフラッシュメモリでは、２つのブロックにそれぞれ同一のデータを書き込む処理を行っていたが、本実施例のフラッシュメモリ１０においては、２つのブロックに書き込むデータは、それぞれ個別のデータであり、同一でも異なるデータもよい。
【００５５】
次に、上記のようにデータの書き込みがなされたフラッシュメモリ１０からのデータ読み出しにおける有効領域（有効データ）の判別処理について図６に従って説明する。この処理は、図１に示すＣＰＵ２０上で実行されるデータアクセス制御プログラム１００によって実行される。
【００５６】
図６に示すように、まず読み出しレベルを設定する（ステップ６０１）。
【００５７】
そして、設定された読み出しレベルで、ブロック（０）とブロック（１）のそれぞれから有効フラグ１０ａと無効フラグ１０ｂの値を読み出す（ステップ６０２、６０３）。例えば、図４の（５）の状態であれば、ブロック（０）について、有効フラグ１０ａの値「００Ｈ」、無効フラグ１０ｂの値「ＦＦＨ」が読み出され、ブロック（１）について、有効フラグ１０ａの値「００Ｈ」、無効フラグ１０ｂの値「ＦＦＨ」が読み出される。
【００５８】
次いで、上記読み出した有効フラグ１０ａと無効フラグ１０ｂの値による判定がなされる（ステップ６０４）。
【００５９】
この判定処理においては、ブロック（０）について、有効フラグ１０ａの値が「００Ｈ」、無効フラグ１０ｂの値が「ＦＦＨ」である場合には、ブロック（１）の有効フラグと無効フラグの状態によらず、ブロック（０）のデータ領域が有効領域であると判定する（ステップ６０５）。すなわち、ブロック（０）のデータ領域に書き込まれているデータが有効データとなる。
【００６０】
また、ブロック（０）の有効フラグ１０ａと無効フラグ１０ｂの値が、「００Ｈ」と「ＦＦＨ」の組み合わせ以外の場合であって、ブロック（１）の有効フラグ１０ａの値が「００Ｈ」、無効フラグ１０ｂの値が「ＦＦＨ」である場合には、ブロック（１）のデータ領域が有効領域であると判定する（ステップ６０６）。すなわち、ブロック（１）のデータ領域に書き込まれているデータが有効データとなる。
【００６１】
本実施例では、上記のように、フラッシュメモリ１０の２つのブロック（０）、ブロック（１）を使用して、データ追記によるデータ書き換えを行う際、例えば、ブロック（０）が一杯になった場合、新規のデータを、ブロック（１）へ書き込み、ブロック（０）については、ブロック（１）が一杯になった後に新規のデータを書き込みのために消去を行う（図４の（７）、（１１））。
【００６２】
この場合、あるブロックへのデータ書き換えに何らかの原因（電源瞬断等）により失敗した場合、又はあるブロックの消去が実行された場合、ブロック(０)、ブロック(１)の何れのブロックに書き込まれているデータが有効かを判別するための手段が必要となる。
【００６３】
本実施例によるフラッシュメモリ１０では、ブロック（０）、ブロック（１）のそれぞれに有効フラグ１０ａ、無効フラグ１０ｂを設け、図６に示す手順によって有効領域の判別を行うことにより、上記何れの場合でもどのブロックが有効かを的確に判別することができる。
【実施例２】
【００６４】
ところで、図４の（６）でブロック（０）の無効フラグ１０ｂへの書き込みを行った後、ブロック（０）の消去を行う際（図４のタイミングｔ）、電源瞬断等の原因により書き換えが中断した場合、場合によってはブロック（０）が有効な状態となってしまう場合が発生する可能性もある（すなわち、ブロック（０）の有効フラグ１０ａが値「００Ｈ」、無効フラグ１０ｂの値が「ＦＦＨ」であると判定される）。
【００６５】
この状態を図８、図９を用いて説明する。
【００６６】
図８、図９は、フラッシュメモリ１０の書き込み、読み出し、消去の各制御を行う場合の制御信号のレベル（電圧レベル）を示している。例えば、消去レベル（ＥＷＶ）が２Ｖ（ボルト）、読み出しレベル（ＲＥＡＤ）が４Ｖ、書き込みレベル（ＷＷＶ）が６Ｖのように、各レベルが設定される。
【００６７】
フラッシュメモリ１０の各ブロックへのデータ、有効フラグ１０ａと無効フラグ１０ｂの値の書き込みが正常に行われている状態では、有効フラグ１０ａと無効フラグ１０ｂに有効を示す値「００Ｈ」が書き込まれると、図８に示すように、書き込みレベルより高い信号レベルとなり、無効を示す値「ＦＦＨ」では消去レベル（ＥＷＶ）より低い信号レベルとなっている。図８では、有効フラグ１０ａの値が「００Ｈ」で、無効フラグ１０ｂの値が「ＦＦＨ」の場合を示している。
【００６８】
この状態において、図６に示すように、読み出しレベル（ＲＥＡＤ）に基づいて、各ブロックの有効フラグ１０ａと無効フラグ１０ｂの読み出しを行えば、それぞれの値を正確に読み出すことができ、有効フラグ１０ａが「００Ｈ」で無効フラグ１０ｂが「ＦＦＨ」であると判定される。
【００６９】
ところが、上記の例のように、電源瞬断等の原因により、ブロック（０）への書き換えが正常に行われずに中断したような場合、正常に書き込みがなされていれば本来ブロック（０）の有効フラグ１０ａと無効フラグ１０ｂの値は共に「ＦＦＨ」（図４の（８）の状態）であり、図９の×印で示す信号レベルにあるべきが、ブロック（０）の有効フラグ１０ａ及び無効フラグ１０ｂの信号レベルが図９の○印で示す信号レベルのように、有効フラグ１０ａが読み出しレベル（ＲＥＡＤ）より僅かに高く、無効フラグ１０ｂが読み出しレベル（ＲＥＡＤ）より僅かに低いレベルとなってしまう場合がある。
【００７０】
この場合、図６に示す手順で、読み出しレベル（ＲＥＡＤ）に基づいて、各ブロックの有効フラグ１０ａと無効フラグ１０ｂの読み出しを行うと、有効フラグ１０ａが「００Ｈ」で無効フラグ１０ｂが「ＦＦＨ」であると判定されてしまい、不正な状態となる。
【００７１】
本発明の第２の実施例では、上記ような不正な状態の発生をなくし、より正確に有効領域の判定を行うことができるようにしている。
【００７２】
第２の実施例によるフラッシュメモリ１０の各ブロックの構造については、第１の実施例と同じであり、この実施例では、データ読み出しにおける有効領域（有効データ）の判別処理が第１の実施例と相違する。
【００７３】
第２の実施例によるフラッシュメモリ１０からのデータ読み出しにおける有効領域（有効データ）の判別処理について図７に従って説明する。この処理は、図１に示すＣＰＵ２０の制御によって実行される。
【００７４】
図７に示すように、まず読み出しレベル（ＲＥＡＤ）に設定する（ステップ７０１）。
【００７５】
そして、設定された読み出しレベルで、ブロック（０）とブロック（１）のそれぞれから有効フラグ１０ａと無効フラグ１０ｂの値を読み出す（ステップ７０２、７０３）。
【００７６】
次いで、上記読み出した有効フラグ１０ａと無効フラグ１０ｂの値による判定がなされる（ステップ７０４）。
【００７７】
この判定処理においては、ブロック（０）の有効フラグ１０ａと無効フラグ１０ｂの値が「００Ｈ」、「ＦＦＨ」で、ブロック（１）の有効フラグ１０ａと無効フラグ１０ｂの値が「００Ｈ」と「ＦＦＨ」の組み合わせ以外である場合、ブロック（０）のデータ領域が有効領域であると判定する（ステップ７０５）。すなわち、ブロック（０）のデータ領域に書き込まれているデータが有効データとなる。
【００７８】
また、ブロック（０）の有効フラグ１０ａと無効フラグ１０ｂの値が「００Ｈ」と「ＦＦＨ」の組み合わせ以外で、ブロック（１）の有効フラグ１０ａと無効フラグ１０ｂの値が「００Ｈ」、「ＦＦＨ」である場合には、ブロック（１）のデータ領域が有効領域であると判定する（ステップ７０６）。すなわち、ブロック（１）のデータ領域に書き込まれているデータが有効データとなる。
【００７９】
ステップ７０４の判定で、ブロック（０）とブロック（１）の有効フラグ１０ａと無効フラグ１０ｂの値が、何れも「００Ｈ」、「ＦＦＨ」である場合、上記のように書き換えが正常に行われずに中断した場合であって、ブロック（０）またはブロック（１）の有効フラグ１０ａと無効フラグ１０ｂの信号レベルが、図９に示すように、本来の信号レベルとなっておらず、フラグの読み出しが正確に行われていない不正状態となっている可能性がある。よって、この場合、レベルを書き込みレベル（ＷＷＶ）に設定して（ステップ７０７）、再度有効フラグ１０ａと無効フラグ１０ｂの値を読み出す（ステップ７０８、７０９）。
【００８０】
そして、読み出した有効フラグ１０ａと無効フラグ１０ｂに対する判定を行う（ステップ７１０）。
【００８１】
この判定処理では、ステップ７０４と同様に、ブロック（０）の有効フラグ１０ａと無効フラグ１０ｂの値が「００Ｈ」、「ＦＦＨ」で、ブロック（１）の有効フラグ１０ａと無効フラグ１０ｂの値が「００Ｈ」と「ＦＦＨ」の組み合わせ以外である場合、ブロック（０）のデータ領域が有効領域であると判定し（ステップ７０５）、ブロック（０）の有効フラグ１０ａと無効フラグ１０ｂの値が「００Ｈ」と「ＦＦＨ」の組み合わせ以外で、ブロック（１）の有効フラグ１０ａと無効フラグ１０ｂの値が「００Ｈ」、「ＦＦＨ」である場合には、ブロック（１）のデータ領域が有効領域であると判定する（ステップ７０６）。
【００８２】
例えば、図４のタイミングｔで書き換え処理が中断して、ブロック（０）の有効フラグ１０ａと無効フラグ１０ｂの信号レベルが図９の○印で示すような状態となり、ブロック（１）の有効フラグ１０ａと無効フラグ１０ｂの信号レベルが図８に示す状態である場合、上記書き込みレベル（ＷＷＶ）による有効フラグ１０ａと無効フラグ１０ｂの読み出しを行えば、各フラグを値を正確に読み出すことができ、正確な有効領域の判定が実現する。
【００８３】
なお、図７に示す判別処理では、読み出しレベル（ＲＥＡＤ）以外に、書き込みレベル（ＷＷＶ）によって有効フラグと無効フラグの読み出しを行って判定を行う場合を示したが、消去レベル（ＥＷＶ）によって判定を行うようにしてもよいことは言うまでもない。
【００８４】
本実施例によれば、上記のような不正状態についても、読み出しレベル（ＲＥＡＤ）だけでなく、書き込みレベル（ＷＷＶ）あるいは消去レベル（ＥＷＶ）で判断することにより、正確に有効領域の判別が可能となる。有効領域の判別に２つ以上の読み出しレベルを設けることにより、より正確な有効領域の判別が行える。すなわち、電源瞬断等により書き換えが中断された結果、通常の読み出しレベルではブロック内の有効フラグ、無効フラグの読み出しが不正となるような稀な状態でも、有効なデータを格納しているデータ領域を正確に判定することができる。
【００８５】
以上好ましい実施例をあげて本発明を説明したが、本発明は必ずしも上記実施例に限定されるものではなく、その技術的思想の範囲内において様々に変形して実施することができる。
【００８６】
上記実施例では、フラッシュメモリ１０のブロックのデータ領域が１つの場合を例にとって説明したが、各ブロックのデータ領域が複数の場合でも同様に本発明を適用することができる。各ブロックに複数のデータ領域が存在する場合には、例えば、各ブロックの複数のデータ領域について最新のデータを書き込んだデータ領域を有効領域とする。
【図面の簡単な説明】
【００８７】
【図１】本発明によるフラッシュメモリにおけるデータアクセス制御方法を適用するデータ処理システムの構成例を示すブロック図である。
【図２】本発明の第１の実施例によるフラッシュメモリの構成を示す図である。
【図３】従来のフラッシュメモリの構成例を示す図である。
【図４】本発明の第１の実施例によるフラッシュメモリのの２つのブロックを使用してデータの書き換え処理を行う場合の状態変化を示す図である。
【図５】本発明の第１の実施例によるフラッシュメモリにおける２つのブロックを使用してデータの書き換え処理の処理内容を示すフローチャートである。
【図６】本発明の第１の実施例によるフラッシュメモリのデータ読み出しにおける有効領域の判別処理を示すフローチャートである。
【図７】本発明の第２の実施例によるフラッシュメモリのデータ読み出しにおける有効領域の判別処理を示すフローチャートである。
【図８】有効フラグと無効フラグの信号レベルとフラッシュメモリの読み出しレベル、書き込みレベル及び消去レベルの各信号レベルとの関係を示す図である。
【図９】有効フラグと無効フラグの信号レベルとフラッシュメモリの読み出しレベル、書き込みレベル及び消去レベルの各信号レベルとの関係を示す図である。
【図１０】従来のフラッシュメモリにおける２つのブロックを使用してデータの書き換え処理を行う場合の状態変化を示す図である。
【図１１】従来のフラッシュメモリのデータ読み出しにおける有効データの判別処理を示すフローチャートである。
【符号の説明】
【００８８】
１０：フラッシュメモリ
２０：ＣＰＵ
３０：ＲＡＭ
１００：データアクセス制御プログラム
【図１】
2005234957.tif 000003
【図２】
2005234957.tif 000004
【図３】
2005234957.tif 000005
【図４】
2005234957.tif 000006
【図５】
2005234957.tif 000007
【図６】
2005234957.tif 000008
【図７】
2005234957.tif 000009
【図８】
2005234957.tif 000010
【図９】
2005234957.tif 000011
【図１０】
2005234957.tif 000012
【図１１】
2005234957.tif 000013