(57)【要約】【課題】  高速でデータの書き換えができ、しかも書き換え回数の少ないフラッシュメモリのデータ書き換え方法を提供する。【解決手段】  複数のエリア１〜ｎに分割され、この各エリア１〜ｎの同一位置にそれぞれデータが書き込まれるセクタ１を有するフラッシュメモリ１０を備え、書換データを書き込む際、その書換データとエリア１の書換対象位置のデータとの排他的論理和をとり、さらに、この排他的論理和のデータとエリア２の前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込む。【選択図】        図１
2005038518.tif 000002
【特許請求の範囲】
【請求項１】
複数のエリアに分割され、この各エリアの同一位置にそれぞれデータが書き込まれるセクタを有するメモリを備え、
書換データを書き込む際、その書換データと１番目エリアの書換対象位置のデータとの排他的論理和をとり、さらに、この排他的論理和のデータと２番目エリアの前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込むことを特徴とするメモリのデータ書き換え方法。
【請求項２】
前記処理を最終エリアまで行った際に初期値がなかったときは、各エリアの同一位置毎に、１番目エリアのデータと２番目エリアのデータとの排他的論理和をとり、さらに、この排他的論理和のデータと３番目エリアのデータとの排他的論理和をとる処理を順次繰り返し、この処理の繰り返しによって前記セクタ内の全データを読み出して書換対象位置のデータを書換データに変更し、その後、前記セクタ内の全データを消去して、その変更データを含む新たな全データをそのセクタの１番目エリアに書き込むことを特徴とする請求項１記載のメモリのデータ書き換え方法。
【請求項３】
複数のエリアに分割され、この各エリアに複数のデータが書き込まれるセクタを有するメモリを備え、
書換データを書き込む際、その書換データと前記セクタの１番目エリアのデータとの排他的論理和をとり、さらに、この排他的論理和のデータと２番目エリアのデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアのデータが初期値であったとき、そのエリアにそれまでに求めた排他的論理和のデータを書き込むことを特徴とするメモリのデータ書き換え方法。
【請求項４】
前記処理を最終エリアまで行った際に初期値がなかったときは、前記セクタ内の全エリアを消去した後に、前記書換データをそのセクタの１番目エリアに書き込むことを特徴とする請求項３記載のメモリのデータ書き換え方法。
【請求項５】
複数のエリアに分割され、この各エリアにデータが書き込まれるセクタと、このセクタの各エリアに格納されたデータのエリア番号を指定する複数のポインタデータが書き込まれるポインタ用セクタとを有するメモリを備え、
書換データを書き込む際、前記ポインタ用セクタの１番目ポインタデータと２番目ポインタデータとの排他的論理和をとり、さらに、この排他的論理和のポインタデータと３番目ポインタデータとの排他的論理和をとる処理を順次繰り返してエリア番号を読み出し、このエリア番号に基づく前記セクタのエリアからデータを読み出して前記書換データと変更し、その後、前記エリア番号と前記セクタのエリア数と比較し、前記エリア番号が前記エリア数より小さいときは、そのエリア番号に「１」をインクリメントしてその新たなエリア番号のエリアに変更データを書き込み、また、前記エリア番号と前記エリア数とが同一のときは、前記セクタ内の全データを消去した後に変更データをそのセクタの１番目エリアに書き込んで、前記エリア番号を「１」とすることを特徴とするメモリのデータ書き換え方法。
【請求項６】
前記ポインタ用セクタに、「１」をインクリメントしたエリア番号、又は「１」のエリア番号を書き込む際、そのエリア番号と前記ポインタ用セクタの１番目ポインタデータとの排他的論理和をとり、さらに、この排他的論理和のポインタデータと２番目ポインタデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該ポインタデータが初期値であったとき、そのポインタデータにそれまでに求めた排他的論理和のポインタデータを上書きし、前記処理を最終まで行った際に初期値がなかったときは、前記ポインタ用セクタ内の全ポインタデータを消去した後に、前記エリア番号をそのポインタ用セクタの１番目に書き込むことを特徴とする請求項５に記載のメモリのデータ書き換え方法。
【請求項７】
複数のエリアに分割され、この各エリアの同一位置にそれぞれデータが書き込まれる二つのセクタと、この二つのセクタの何れか一方を選択する複数のセレクタデータが書き込まれるセレクタ用セクタとを有するメモリを備え、
書換データを書き込む際、前記セレクタ用セクタの１番目セレクタデータと２番目ポインタデータとの排他的論理和をとり、さらに、この排他的論理和のセレクタデータと３番目セレクタデータとの排他的論理和をとる処理を順次繰り返してセクタ選択データを読み出し、この選択データに基づく一方のセクタの１番目エリアの書換対象位置のデータと前記書換データとの排他的論理和をとり、さらに、この排他的論理和のデータと２番目エリアの前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込むことを特徴とするメモリのデータ書き換え方法。
【請求項８】
前記処理を最終エリアまで行った際に初期値がなかったときは、各エリアの同一位置毎に、１番目エリアのデータと２番目エリアのデータとの排他的論理和をとり、さらに、この排他的論理和のデータと３番目エリアのデータとの排他的論理和をとる処理を順次繰り返し、この処理の繰り返しによって前記セクタ内の全データを読み出して書換対象位置のデータを書換データに変更し、もう一方のセクタの１番目エリアに、その変更データを含む新たな全データを書き込んで、前記セクタ選択データに「１」をインクリメントすることを特徴とする請求項７記載のメモリのデータ書き換え方法。
【請求項９】
前記セクタ選択データに「１」をインクリメントした際、そのセクタ選択データと前記セレクタ用セクタの１番目セレクタデータとの排他的論理和をとり、さらに、この排他的論理和のセレクタデータと２番目セレクタデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該セレクタデータが初期値であったとき、そのセレクタデータにそれまでに求めた排他的論理和のセレクタデータを上書きし、前記処理を最終まで行った際に初期値がなかったときは、前記セレクタ用セクタ内の全セレクタデータを消去した後に、前記セクタ選択データをそのポインタ用セクタの１番目に書き込むことを特徴とする請求項８記載のメモリのデータ書き換え方法。
【請求項１０】
データが書き込まれる複数のエリアと、メモリ選択データ及びエリア指定データが書き込まれた管理エリアとが設けられたセクタを有する二つのメモリを備え、
書換データを書き込む際、二つのメモリに設けられた管理エリアのメモリ選択データに基づいて何れか一方のメモリを選択し、かつ、そのメモリの管理エリアのエリア指定データに基づくエリアに前記書換データを書き込むと共に、他方のメモリの複数のエリア内のデータを分割して消去し、一方のメモリの各エリアにデータを書き込んだときに他方のメモリの各エリア内のデータの消去が完了するようにし、二つのメモリに交互に書換データを書き込めるように前記二つの管理エリアの各データで誘導できるようにしたことを特徴とするメモリのデータ書き換え方法。
【請求項１１】
前記二つのメモリに加えてキャッシュメモリを備え、
その二つのメモリのうち一方のメモリに書換データを書き込んだ際に、前記キャッシュメモリに同じ書換データを書き込み、その一方のメモリに書き込んだデータを読み出す際には、前記キャッシュメモリから同じデータを読み出すことを特徴とする請求項１０記載のメモリのデータ書き換え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばフラッシュメモリのデータの書き換え方法に関するものである。
【背景技術】
【０００２】
従来、フラッシュメモリ内のデータ書込領域が複数のデータブロックに分割されている場合において、所定のデータブロックに書換データを書き込むとき、そのデータブロック内のデータを消去し、その後に、そのデータブロックに書換データを書き込むようにしている（例えば、特許文献１参照）。
【０００３】
【特許文献１】特開平６−３２４９４５号公報（第３頁、図９、図１０）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、前述した従来のデータ書き換え方法では、コンタクト付きＩＣカードやコンタクトレスＩＣカードのように数ｍＳで書き換え可能な不揮発性メモリを書き換える必要がある場合には、書き換え時間が長すぎて対応できないと言う欠点があった。
また、１バイト又は１ワード単位でのデータの書き換えを行う場合には、１セクタ（ページ）単位に消去を行ってから書き換えるようにしているので、書き換えの必要のない部分まで書き換えを行ってしまい、書き換え回数が増えてしまう欠点があり、メモリセルの劣化を早める恐れがあった。
また、セレクトトランジスタを設けてバイト単位またはワード単位の消去を可能にすれば、書き換え回数は少なくできるが、メモリセルにセレクトトランジスタを追加しなければならず、フラッシュメモリのサイズが大幅に大きくなるという課題があった。
【課題を解決するための手段】
【０００５】
本発明に係るメモリのデータ書き換え方法は、複数のエリアに分割され、この各エリアの同一位置にそれぞれデータが書き込まれるセクタを有するメモリを備え、書換データを書き込む際、その書換データと１番目エリアの書換対象位置のデータとの排他的論理和をとり、さらに、この排他的論理和のデータと２番目エリアの前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込むようにした。
【発明の効果】
【０００６】
以上のように本発明によれば、書換データを書き込む際、その書換データとメモリの１番目エリアの書換対象位置のデータとの排他的論理和をとり、さらに、この排他的論理和のデータと２番目エリアの前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込むようにしたので、従来のデータ書き換えと比べ、データの消去がない分、高速でデータを書き換えることができ、また、一つのセクタを複数のエリアに分割して使用しているので、同一セルの書き換え回数を減らすことが可能になり、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になるので、メモリサイズを小さく抑えることができる。
【発明を実施するための最良の形態】
【０００７】
実施の形態１．
図１は本発明の実施の形態１に係るメモリのデータ書換方法の説明図である。なお、図中に示す実線の矢印はデータ書き換え時のデータの流れを示し、破線の矢印はデータ読み出し時のデータの流れを示す。
実施の形態１のメモリは、例えば、フラッシュメモリ１０からなり、一括消去が可能な一定バイト数を一つのセクタとして複数のセクタ１〜セクタｎに分割されている。その内、セクタ１は、データ書換用として、複数のエリア１〜エリアｎにそれぞれｍバイトサイズで分割されている。このエリア１〜エリアｎは、前述したように一つのセクタ１であるため、一度の消去処理により一括消去が可能な構成となっており、一方、書き込みは１バイト単位で行うことができる構成になっている。なお、通常、フラッシュメモリ１０の消去状態と書込み状態は、メモリセルの方式や読み出し方法により異なるが、ここでは、消去状態を「０」、書込状態を「１」として説明する。
【０００８】
フラッシュメモリ１０以外のシステム構成は、図示していないが、システム全体を制御するＣＰＵ等からなる制御部、制御プログラムが格納されたＲＯＭ等のプログラムメモリ、各種のデータを一時保管するためのＲＡＭ等のワークメモリ２０等からなっている。このワークメモリ２０は、データ書換時に使用するエリア番号書き込みのための変数領域ｊと、データ読出時に使用するエリア毎のデータ番号を書き込むための変数領域ｋと、データ読出時に使用するエリア番号書き込みのための変数領域L と、書換データ及びこの書換データをＸＯＲしたＸＯＲデータを書き込むための変数領域ＷＤと、各エリアに保存されたデータを書き込むための変数領域ＲＤと、各エリアのデータをＸＯＲして得られる真のデータを一時的に保存するためのデータ書込領域２１とを有している。
【０００９】
次に、実施の形態１の動作について図２及び図３のフローチャートを用いて説明する。図２は実施の形態１におけるデータ書き換え時の動作を示すフローチャート、図３は実施の形態１におけるデータ読み出し時の動作を示すフローチャートである。なお、図２のフローチャートはデータＤ［ｉ］を書き換えるときの一例で、まず最初に、各エリア１〜ｎのＤ１［ｉ］〜Ｄｎ［ｉ］が消去状態の「００ｈ」になっているときの動作を説明し、次に、そのＤ１［ｉ］〜Ｄｎ［ｉ］にデータが書き込まれているときの動作を説明する。
【００１０】
制御部（図示せず）は、１バイトの書換データＤ［ｉ］の入力を検知すると、まず、フラッシュメモリ１０のセクタ１のエリア番号である「１」をワークメモリ２０の変数領域ｊに書き込み、前記の書換データＤ［ｉ］をワークメモリ２０の変数領域ＷＤに書き込む（Step１）。次に、エリアｊのｉ番目のデータ、この場合は、エリア１のｉ番目のデータＤ１［ｉ］をワークメモリ２０の変数領域ＲＤに書き込む（Step２）。そして、変数領域ＷＤ、ＲＤにそれぞれ書き込んだ書換データＤ［ｉ］とデータＤ１［ｉ］のＸＯＲ（排他的論理和）をとり、その結果のＸＯＲデータを変数領域ＷＤ内の書換データＤ［ｉ］に上書きする（Step３）。その後、ワークメモリ２０の変数領域ＲＤに書き込んだエリア１のデータＤ１［ｉ］が「００ｈ」かどうかを判別し（Step４）、そのデータＤ１［ｉ］が「００ｈ」でないときは、変数領域ｊに「１」をインクリメントして「２」とするが（Step６）、変数領域ＲＤに書き込んだエリア１のデータＤ１［ｉ］が「００ｈ」のときは、変数領域ＷＤに書き込んだＸＯＲデータをエリア１のデータＤ１［ｉ］に上書きし（Step５）、前述した一連の動作を終了する。この場合は、エリア１のＤ１［ｉ］に書き込まれていたデータが「００ｈ」であるため、そのＤ１［ｉ］には、入力された真の書換データＤ［ｉ］が書き込まれる。
【００１１】
この後に、２回目の書換データＤ［ｉ］が入力されたときは、フラッシュメモリ１０のセクタ１のエリアを指定する「１」をワークメモリ２０の変数領域ｊに書き込み、書換データＤ［ｉ］をワークメモリ２０の変数領域ＷＤに書き込む（Step１）。次に、エリア１のｉ番目のデータＤ１［ｉ］をワークメモリ２０の変数領域ＲＤに書き込む（Step２）。そして、変数領域ＷＤ、ＲＤにそれぞれ書き込んだ書換データＤ［ｉ］とデータＤ１［ｉ］のＸＯＲをとり、その結果のＸＯＲデータを変数領域ＷＤ内のデータＤ［ｉ］に上書きする（Step３）。その後、ワークメモリ２０の変数領域ＲＤに書き込んだエリア１のデータＤ１［ｉ］が「００ｈ」かどうかを判別する（Step４）。この場合は、前述したように、エリア１のデータＤ１［ｉ］が「００ｈ」でないので、変数領域ｊに「１」をインクリメントして「２」とし（Step６）、その変数領域ｊの値がセクタ１のエリア番号の「ｎ」を超えたかどうかを判別する（Step７）。変数領域ｊの値が「ｎ」を超えていたときはセクタ１内の全データＤ［０］〜Ｄ［ｍ］の読み出し処理に入るが（Step８）、この時点では、変数領域ｊの値が「２」で「ｎ」以下であるため、次のエリア２のｉ番目のデータＤ２［ｉ］を読み出し、変数領域ＲＤのデータＤ１［ｉ］に上書きする（Step２）。
【００１２】
次いで、そのデータＤ２［ｉ］と変数領域ＷＤに書き込んだ前回のＸＯＲデータをさらにＸＯＲし、その結果の新たなＸＯＲデータを変数領域ＷＤ内のＸＯＲデータに上書きする（Step３）。その後は、前述したように変数領域ＲＤに書き込んだエリア２のデータＤ２［ｉ］が「００ｈ」かどうかを判別し（Step４）、この場合は、エリア２のデータＤ２［ｉ］が「００ｈ」であるため、変数領域ＷＤ内の新たなＸＯＲデータをエリア２のデータＤ２［ｉ］に上書きし（Step５）、データ書き換え処理を終了する。
【００１３】
また、３回目の書換データＤ［ｉ］が入力されたときは、前述したようにセクタ１のエリアを指定する「１」をワークメモリ２０の変数領域ｊに書き込み、書換データＤ［ｉ］をワークメモリ２０の変数領域ＷＤに書き込む（Step１）。次に、エリア１のｉ番目のデータＤ１［ｉ］をワークメモリ２０の変数領域ＲＤに書き込む（Step２）。そして、変数領域ＷＤ、ＲＤにそれぞれ書き込んだ書換データＤ［ｉ］とデータＤ１［ｉ］のＸＯＲをとり、その結果のＸＯＲデータを変数領域ＷＤの書換データＤ［ｉ］に上書きする（Step３）。その後、ワークメモリ２０の変数領域ＲＤに書き込んだエリア１のデータＤ１［ｉ］が「００ｈ」かどうかを判別する（Step４）。そのエリア１のデータＤ１［ｉ］は「００ｈ」でないので、変数領域ｊに「１」をインクリメントして「２」とし（Step６）、その変数領域ｊの値がセクタ１のエリア番号の「ｎ」を超えたかどうかを判別する（Step７）。変数領域ｊの値が「２」で「ｎ」以下であるため、エリア番号が「２」であるエリア２のｉ番目のデータＤ２［ｉ］を読み出し、変数領域ＲＤのデータＤ１［ｉ］に上書きする（Step２）。
【００１４】
次いで、そのデータＤ２［ｉ］と変数領域ＷＤに書き込んだ前回のＸＯＲデータをさらにＸＯＲし、その結果の新たなＸＯＲデータを変数領域ＷＤ内のＸＯＲデータに上書きする（Step３）。その後は、変数領域ＲＤに書き込んだエリア２のデータＤ２［ｉ］が「００ｈ」かどうかを判別し（Step４）、このときは、エリア２のデータＤ２［ｉ］が「００ｈ」でないため、変数領域ｊに「１」をインクリメントして「３」とし（Step６）、その変数領域ｊの値がセクタ１のエリア番号の「ｎ」を超えたかどうかを判別する（Step７）。変数領域ｊの値が「３」で「ｎ」以下であるため、エリア番号が「３」であるエリア３のｉ番目のデータＤ３［ｉ］を読み出し、変数領域ＲＤのデータＤ２［ｉ］に上書きする（Step２）。
【００１５】
その後は、そのデータＤ３［ｉ］と変数領域ＷＤに書き込んだＸＯＲデータをＸＯＲし、その結果のＸＯＲデータを変数領域ＷＤ内のＸＯＲデータに上書きする（Step３）。次に、変数領域ＲＤに書き込んだエリア３のデータＤ３［ｉ］が「００ｈ」かどうかを判別し（Step４）、この時点では、エリア３のデータＤ３［ｉ］が「００ｈ」であるため、変数領域ＷＤ内のＸＯＲデータをエリア３のデータＤ３［ｉ］に上書きし（Step５）、データ書き換え処理を終了する。前述したStep１〜Step７までの動作によるデータの書き換えはｎ回まで行うことができる。
【００１６】
次に、各エリア１〜ｎのＤ１［ｉ］〜Ｄｎ［ｉ］に「００ｈ」以外のデータが書き込まれているときの動作を説明する。
この場合は、ｎ回後の書換データＤ［ｉ］が入力されたときで、その書換データＤ［ｉ］をセクタ１のエリア１〜ｎの各データＤ１［ｉ］〜Ｄｎ［ｉ］と繰り返しＸＯＲした後に、Step７において、変数領域ｊの値が「ｎ」を超えたかどうかを判別する。この場合は、エリアｎを超えるので、フラッシュメモリ１０のセクタ１に書き込まれているデータＤ１［０］〜Ｄｎ［ｍ］から真のデータＤ［０］〜Ｄ［ｍ］を読み出す処理に入る（Step８）。この読み出し処理については図３を用いて後述する。Step８において読み出した真のデータＤ［０］〜Ｄ［ｍ］をワークメモリ２０のデータ書込領域２１に一時的に保存し、ワークメモリ２０に保存した真のデータＤ［０］〜Ｄ［ｍ］のうちデータＤ［ｉ］に書換データＤ［ｉ］を上書きして変更し（Step９）、次いで、フラッシュメモリ１０のセクタ１に書き込まれている全データＤ１［０］〜Ｄｎ［ｍ］を消去し（Step１０）、そして、データＤ［ｉ］の変更が終了した真のデータＤ［０］〜Ｄ［ｍ］をワークメモリ２０から読み出して、フラッシュメモリ１０のセクタ１のエリア１に書き込み（Step１１）、書換データＤ［ｉ］の書き換え処理を終了する。
【００１７】
次に、図３に示すフローチャートに基づいてデータの読み出し時の動作を説明する。
制御部（図示せず）は、図２に示すStep８で真のデータＤ１［０］〜Ｄｎ［ｍ］の読み出し処理に入ると、まず、セクタ１の各エリア１〜ｎにそれぞれ書き込まれたデータの配列順である「０」をワークメモリ２０の変数領域ｋに書き込む（Step２１）。次に、フラッシュメモリ１０のセクタ１のエリア番号の「１」をワークメモリ２０の変数領域L に書き込むと共に、ワークメモリ２０のデータ書込領域２１のＤ［ｋ］、この場合は、Ｄ［０］に消去状態の「００ｈ」を書き込んでデータＤ［０］とする（Step２２）。
【００１８】
その後、セクタ１のエリアL のｋ番目のデータＤL［ｋ］、 この時点では、エリア１の１番目のデータＤ１［０］を読み出し、データ書込領域２１のデータＤ［０］とＸＯＲをとり、その結果のＸＯＲデータをデータ書込領域２１のデータＤ［０］の「００ｈ」に上書きする（Step２３）。そして、変数領域L に「１」をインクリメントして「２」とし（Step２４）、その値がセクタ１のエリア番号の「ｎ」を超えたかどうかを判別する（Step２５）。変数領域L の値が「ｎ」を超えていた場合は、Step２３〜Step２５の動作の繰り返しにより、真のデータＤ［０］がデータ書込領域２１に書き込まれていると判断して、次のデータ列を読み出すためにStep２６に進むが、この時点では、変数領域L の値が「２」で「ｎ」を超えていないのでStep２３に戻る。
【００１９】
この時、エリア２の１番目のデータＤ２［０］を読み出し、データ書込領域２１に書き込んだＸＯＲデータＤ［０］とＸＯＲをとり、その結果の新たなＸＯＲデータをそのデータ書込領域２１のＸＯＲデータＤ［０］に上書きする（Step２３）。そして、変数領域L に「１」をインクリメントして「３」とし（Step２４）、その値がセクタ１のエリア番号の「ｎ」を超えたかどうかの判別に入る（Step２５）。Step２３〜Step２５の動作は、前述したように各エリア１〜ｎの１番目のデータＤ１［０］〜Ｄｎ［０］から真のデータＤ［０］を読み出すまで繰り返し行い、変数領域L の値が「ｎ」を超えたときに、変数領域ｋに「１」をインクリメントして「１」とし（Step２６）、その値が「ｍ」を超えたかどうかを判別する（Step２７）。変数領域ｋの値が「ｍ」を超えていた場合は、セクタ１の各エリア１〜ｎに書き込まれている全データＤ１［０］〜Ｄｎ［ｍ］から真のデータＤ［０］〜Ｄ［ｍ］を読み出したと判断して、この処理を終了するが、変数領域ｋの値が「１」であるため、Step２２に戻って変数領域L を再び「１」に設定し、次いで、ワークメモリ２０のデータ書込領域２１のＤ［ｋ］、この場合は、Ｄ［１］に消去状態の「００ｈ」を書き込んでデータＤ［１］とする。
【００２０】
そして、エリア１の２番目のデータＤ１［１］を読み出し、データ書込領域２１のデータＤ［１］とＸＯＲをとって、その結果のＸＯＲデータをデータ書込領域２１のデータＤ［１］の「００ｈ」に上書きし（Step２３）、変数領域L に「１」をインクリメントして「２」とし（Step２４）、その値がセクタ１のエリア番号の「ｎ」を超えたかどうかを判別する（Step２５）。この時点では、変数領域L の値が「２」で「ｎ」を超えていないのでStep２３に戻って、Step２３〜Step２５までの動作をセクタ１のエリアが「ｎ」になるまで繰り返し行う。その後は、変数領域ｋに「１」をインクリメントして「２」とし（Step２６）、その値が「ｍ」を超えたかどうかを判別する（Step２７）。この時点では、変数領域ｋの値が「２」であるためStep２２に戻って、各エリア１〜ｎのｍ番目のデータＤ１［ｍ］〜Ｄｎ［ｍ］から真のデータＤ［ｍ］を読み出すまで、前述した一連の動作を繰り返し行う（Step２２〜Step２７）。このStep２２〜Step２７の繰り返しにより、ワークメモリ２０のデータ書込領域２１に真のデータＤ［０］〜Ｄ［ｍ］を書き込んだとき、このデータの読み出し処理を終了する。
【００２１】
ここで、フラッシュメモリ１０のセクタ１の各エリア１〜ｎが消去状態（００ｈ）のときにデータを書き換えていった場合のデータの状態を具体的に図４に基づいて説明する。図４はデータを３回書き換えたときのデータの書換状態を示す図である。
各エリア１〜ｎのデータが全て「００ｈ」のときに（（ａ）参照）、１番目のＤ［０］に書換データの「５５ｈ」を書き込む場合、まず、この「５５ｈ」をワークメモリ２０の変数領域ＷＤに書き込み、次いで、エリア１の１番目のＤ１［０］の「００ｈ」を読み出してワークメモリ２０の変数領域ＲＤに書き込む。その後、変数領域ＷＤ、ＲＤにそれぞれ書き込んだ「５５ｈ」と「００ｈ」のＸＯＲをとり、その結果の「５５ｈ」を変数領域ＷＤの「５５ｈ」に上書きする。そして、ワークメモリ２０の変数領域ＲＤに書き込んだデータが「００ｈ」かどうかを判別し、この場合、そのデータが「００ｈ」であるため、変数領域ＷＤに書き込んだ「５５ｈ」をエリア１のＤ１［０］の「００ｈ」に上書きする（（ｂ）参照）。
【００２２】
次に、「５５ｈ」のデータを「ＡＡｈ」に書き換える場合は、前述したように、この「ＡＡｈ」を変数領域ＷＤに書き込み、次いで、エリア１の１番目のＤ１［０］の「５５ｈ」を読み出して変数領域ＲＤに書き込む。その後、変数領域ＷＤ、ＲＤにそれぞれ書き込んだ「ＡＡｈ」と「５５ｈ」のＸＯＲをとり、その結果の「ＦＦｈ」を変数領域ＷＤの「ＡＡｈ」に上書きする。そして、変数領域ＲＤに書き込んだデータが「００ｈ」かどうかを判別し、この場合は、そのデータが「５５ｈ」であるため、エリア２の１番目のＤ２［０］にアクセスして「００ｈ」を読み出して、変数領域ＲＤの「５５ｈ」に上書きし、この上書きした「００ｈ」と変数領域ＷＤの「ＦＦｈ」のＸＯＲをとり、その結果の「ＦＦｈ」を変数領域ＷＤに上書きする。その後、変数領域ＲＤに上書きしたエリア２の１番目のデータが「００ｈ」かどうかを判別し、この場合、そのデータが「００ｈ」であるため、変数領域ＷＤに書き込んだ「ＦＦｈ」をエリア２のＤ２［０］の「００ｈ」に上書きする（（ｃ）参照）。また、３回目の書き換えとして今度は「２０ｈ」に書き換える場合は、「５５ｈ」ＸＯＲ［ＦＦｈ」ＸＯＲ「２０ｈ」＝「８ＡＨ」をエリア３のＤ３［０］の「００ｈ」に上書きすることになる（（ｄ）参照）。
【００２３】
なお、図３（ｄ）の状態からデータを読み出す場合は、まず、ワークメモリ２０のデータ書換領域２１のＤ［０］に「００ｈ」を設定し、次いで、この「００ｈ」とエリア１の「５５ｈ」のＸＯＲをとり、さらに、このＸＯＲ値とエリア２の「ＦＦｈ」のＸＯＲをとり、最後に、このＸＯＲ値とエリア３の「８Ａｈ」をＸＯＲとることにより、３回目に書き換えたデータ「２０ｈ」が読み出される。
【００２４】
以上のように実施の形態１によれば、フラッシュメモリ１０の一つのセクタ１をｍバイトサイズで複数個のエリア１〜ｎに分割し、書換データを書き込む際には、各エリア１〜ｎのデータと繰り返しＸＯＲをとりながら「００ｈ」のエリアに保存するようにしたので、従来のデータ書き換えと比べ、データの消去がない分、高速でデータを書き換えることができる。
【００２５】
また、前述したように一つのセクタ１を複数のエリア１〜ｎに分割して使用しているので、同一セルの書き換え回数を減らすことが可能になり、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になるので、メモリサイズを小さく抑えることができる。
【００２６】
また、各エリア１〜ｎにそれぞれ書き込まれているデータは直接書き込まれたものではなくＸＯＲデータであるため、悪意をもった第３者がフラッシュメモリ１０のデータを解析しにくくなり、セキュリティの向上が期待できる。
【００２７】
さらに、本実施の形態１によれば、書換データを書き込む際、複数のエリア１〜ｎに空きエリアがない場合、各エリア１〜ｎのデータを消去することになるが、この消去をｎ回に１回のみであるため、特定の領域のみでデータの書き換えを要する例えばＩＣカード等に適用できる。さらに、コンタクトレスＩＣカードの乗車券への使用の場合は、改札での処理は高速に書き換える必要があるが、精算機での処理は遅い書き換えでも良いので、セクタ１のエリア数を十分に大きくして精算時に消去を含むデータの書き換えを行うようにすれば乗車券にも適用できる。
【００２８】
実施の形態２．
図５は本発明の実施の形態２に係るメモリのデータ書換方法の説明図である。
実施の形態２は、図中に示すようにフラッシュメモリ１０のセクタをデータの数に応じて用意し、一つのセクタを例えば１バイトのデータ格納用に使用したものである。つまり、データＤ［０］〜Ｄ［ｍ］を書き込むようにした場合、ｍ＋１個のセクタ０〜ｍを用意し、各セクタ０〜ｍをそれぞれｎバイトで構成している。
【００２９】
ワークメモリ２０は、データ書換時に使用するセクタ毎のエリア番号を書き込むための変数領域ｊと、データ読出時に使用するセクタ番号を書き込むための変数領域ｋと、データ読出時に使用するセクタ毎のエリア番号を書き込むための変数領域L と、書換データを保持するための変数領域ＷＤ’と、書換データ及びこの書換データのＸＯＲデータを書き込むための変数領域ＷＤと、各セクタ０〜ｍのエリアに保存されたデータＤ１［０］〜Ｄｎ［ｍ］を書き込むための変数領域ＲＤと、各セクタ０〜ｍのデータをＸＯＲして得られる真のデータＤ［０］〜Ｄ［ｍ］を一時的に保存するためのデータ書込領域２１とを有している。
【００３０】
次に、実施の形態２におけるデータ書き換え時の動作を図６のフローチャートを用いて説明する。なお、図２で説明した実施の形態１と同じStep No.（Step２〜Step７）には同一のStep No.を付し詳細な動作説明を割愛する。
制御部（図示せず）は、１バイトの書換データＤ［ｉ］の入力を検知すると、まず、その書換データＤ［ｉ］をワークメモリ２０の変数領域ＷＤに書き込み、セクタｉのエリアの順番を示す「１」をワークメモリ２０の変数領域ｊに書き込むと共に、変数領域ＷＤに書き込んだ書換データＤ［ｉ］を変数領域ＷＤ’に書き込む（Step１’）。
【００３１】
その後は、実施の形態１で述べたように、セクタｉのエリア番号ｊがｎを超えるまでに「００ｈ」のデータＤｊ［ｉ］を確認したときは、そのエリアにＸＯＲしたデータを変数領域ＷＤから読み込んで書き込み、また、「００ｈ」のデータＤｊ［ｉ］がなくエリア番号ｊがｎを超えたときは（Step２〜Step７）、セクタｉに書き込まれている全データＤ１［ｉ］〜Ｄｎ［ｉ］を消去する（Step１０）。そして、変数領域ＷＤ’から書換データＤ［ｉ］を読み出して、セクタｉの先頭エリアに書き込み（Step１１’）、書換データＤ［ｉ］の書き換え処理を終了する。
【００３２】
なお、各セクタ０〜ｍに書き込まれている全データＤ［０］〜Ｄ［ｍ］の読み出し処理については、基本的には実施の形態１（図３参照）と同じであるが、唯一異なる点は、読み出しデータＤ［０］〜Ｄ［ｍ］が各セクタのデータのＸＯＲを取ったものになっている点であり、実施の形態２では、前述した如くデータの数と同数のセクタを必要とする点である。
【００３３】
以上のように実施の形態２によれば、１バイトのデータに対しｎエリア（ｎバイト）を有するセクタを設け、書き換えの度にＸＯＲしたデータを各エリアに追記して行くようにしたので、実施の形態１と同様に、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になり、セキュリティの向上が期待できる。
また、書換データに対するセクタ内のエリアがＸＯＲデータでいっぱいになっていた場合に、全データＤ［０］〜Ｄ［ｍ］を読み出すことなく、該当するセクタ内のデータのみを消去して書換データを書き込むようにしているので、実施の形態１と比べ処理が簡略化でき、処理時間を短くできる。
【００３４】
さらに、一つのセクタで１バイトのデータを書き込むようにしているので、書き換えのターゲットであるデータ以外のデータを消去するようなことがなくなり、このため、他のデータが書き込み不良によりデータ化けを起こすような心配がないという効果がある。
【００３５】
実施の形態３．
図７は本発明の実施の形態３に係るメモリのデータ書換方法の説明図である。なお、図１及び図５で説明した実施の形態１、２と同一又は相当部分には同じ符号を付し説明を省略する。
実施の形態３におけるフラッシュメモリ１０は、データ書込用のセクタ１と、例えば１バイトのポインタデータＰ（以下、単に「ポインタＰ」という）を格納するためのセクタ２とを有している。セクタ１は、実施の形態１と同様にｍバイトサイズで分割された複数のエリア１〜ｎからなり、セクタ２はｎバイトで構成されている。前記のポインタＰは、各データが書き込まれているエリア番号を示している。
【００３６】
ワークメモリ２０は、実施の形態１と同じ書込領域を備えている上に、ポインタＰ書換時に使用するセクタ２のエリア番号を書き込むための変数領域ｊ’と、ポインタＰ読出時に使用するセクタ２のエリア番号を書き込むための変数領域L’と、書換ポインタＰを保持するための変数領域ＰＷＤ’と、書換ポインタＰ及びこの書換ポインタＰのＸＯＲデータを書き込むための変数領域ＰＷＤと、セクタ２の各エリアに保存されたポインタＰ１〜Ｐｎを書き込むための変数領域ＰＲＤと、セクタ２のポインタＰ１〜ＰｎをＸＯＲして得られる真のポインタＰを一時的に保存するためのデータ書込領域ＰＤとが設けられている。
【００３７】
次に、実施の形態３の動作について図８〜図１１のフローチャートを用いて説明する。図８は実施の形態３におけるデータ書き換え時の動作を示すフローチャート、図９は実施の形態３におけるデータ読み出し時の動作を示すフローチャート、図１０は実施の形態３におけるポインタＰ読み出し時の動作を示すフローチャート、図１１は実施の形態３におけるポインタＰ書き換え時の動作を示すフローチャートである。なお、図２及び図３並びに図６と同じStep No.（Step１〜Step７とStep１０，１１並びにStep２１〜Step２７）については、動作が同じであるため、詳細な動作説明を省略する。
【００３８】
制御部（図示せず）は、例えば１バイトの書換データＤ［ｉ］の入力を検知すると、その書換データＤ［ｉ］をワークメモリ２０の変数領域ＷＤに格納し、セクタ２からポインタＰを読み出すための処理に入る（Step３１）。この読み出し処理は、図１０に示すように、まず、ワークメモリ２０の変数領域L'にエリア番号を示す「１」を書き込み、次いで、変数領域ＰＤに消去状態の「００ｈ」を書き込む（Step２２）。その後、セクタ２の１番目のエリアに書き込まれたデータＰ１と変数領域ＰＤの「００ｈ」のＸＯＲをとり、変数領域ＰＤの「００ｈ」に上書きする（Step２３）。そして、変数領域L'に「１」をインクリメントして「２」とし（Step２４）、その値が「ｎ」を超えたかどうかを判別する（Step２５）。この時点では、変数領域L'の値が「２」であるためStep２２に戻って、前述した動作を繰り返す。この一連の動作を繰り返すうちに変数領域L'の値が「ｎ」を超えると、ポインタＰの読み出し処理を終了する。この読み出し処理によって、真のポインタＰが変数領域ＰＤに書き込まれる。
【００３９】
この読み出し処理が終了したときは、図８に示すStep３２において、読み出したポインタＰとセクタ１のエリア数「ｎ」とを比較する。Ｐ＝ｎならエリアｎまでデータが書き込まれていると判断してStep３３に進むが、ポインタＰがセクタ１のエリア数「ｎ」よりも少ないときは、Ｄｊ［ｉ］の何れかにＸＯＲデータを書き込むエリアがあると判断して、実施の形態１と同様のStep１〜Step６の処理を行う。この処理を実行した際に、Step４においてセクタ１から変数領域ＲＤに書き込んだデータが「００ｈ」と判断した場合は、ＸＯＲした書換データＷＤをその「００ｈ」のＤｊ［ｉ］に書き込み（Step５）、書き換え処理を終了する。また、変数領域ＲＤ内のデータが「００ｈ」でないときは、変数領域ｊ（エリア数）に「１」をインクリメントし（Step６）、その値が「Ｐ」を超えたかどうかを判別する（Step７’）。変数領域ｊの値が「Ｐ」以下のときはStep２に戻って動作を繰り返し、変数領域ｊの値が「Ｐ」を超えたときは、その［Ｐ」を超えたエリアｊにデータが書き込まれていないと判断してそのエリアｊのＤｊ［ｉ］に、ＸＯＲした書換データＷＤを書き込む（Step３８）。そして、読み出したポインタＰに「１」をインクリメントし（Step３９）、セクタ２にそのポインタ数の「Ｐ」を書き込む処理に入る（Step４０）。
【００４０】
一方、Step３２において、Ｐ＝ｎと判断したときは、前述したようにエリアｎまでデータが書き込まれていると判断して、セクタ１から全データＤ［０］〜Ｄ［ｍ］を読み出し（Step３３）、ワークメモリ２０のデータ書込領域２１に格納する。この読み出し処理については、図９を用いて後述する。その後は、データ書込領域２１に格納した全データＤ［０］〜Ｄ［ｍ］のうちＤ［ｉ］に書換データＤ［ｉ］を上書きして変更する（Step３４）。その後、セクタ１に書き込まれた全ＸＯＲデータＤ１［０］〜Ｄｎ［ｍ］を消去し（Step３５）、セクタ１のエリア１に前記の全データＤ［０］〜Ｄ［ｍ］を書き込む（Step３６）。そして、ポインタＰを「１」とし（Step３７）、前記と同様に「Ｐ」の書き込み処理に入る（Step４０）。
【００４１】
この処理は、図６で説明した実施の形態２の書き換え処理と同じであるが、書き換え処理時に使用する変数領域が異なるため、図１１に示すフローチャートに基づいて説明する。
まず、図８のStep３７又はStep３９の処理によるポインタＰをワークメモリ２０の変数領域ＰＷＤに書き込み、次いで、セクタ２のエリアの順番を示す「１」をワークメモリ２０の変数領域ｊ’に書き込むと共に、前記のポインタＰをワークメモリ２０の変数領域ＰＷＤ’に書き込む（Step１’）。
【００４２】
そして、セクタ２の１番目のエリアＰ１に書き込まれたポインタＰ１を変数領域ＰＲＤに書き込み（Step２）、変数領域ＰＷＤ、ＰＲＤにそれぞれ書き込んだポインタＰとポインタＰ１のＸＯＲ（排他的論理和）をとり、その結果のＸＯＲポインタを変数領域ＰＷＤ内のポインタＰに上書きする（Step３）。その後は、ワークメモリ２０の変数領域ＰＲＤに書き込んだポインタＰ１が「００ｈ」かどうかを判別し（Step４）、そのポインタＰ１が「００ｈ」でないときは、変数領域ｊ’に「１」をインクリメントして「２」とするが（Step６）、変数領域ＰＲＤに書き込んだポインタＰ１が「００ｈ」のときは、変数領域ＰＷＤに書き込んだＸＯＲポインタをセクタ２の１番目のエリアＰ１に上書きし（Step５）、前述した一連の動作を終了する。
【００４３】
また、セクタ２の各エリアに「００ｈ」のポインタＰがない状態でエリア番号ｊ’がｎを超えたときは（Step２〜Step７）、セクタ２に書き込まれている全ポインタＰ１〜Ｐｎを消去する（Step１０）。そして、変数領域ＰＷＤ’から書き換えのポインタＰを読み出して、セクタ２の先頭エリアＰ１に書き込み（Step１１’）、ポインタＰの書き換え処理を終了する。
【００４４】
一方、セクタ１から真のデータＤ［０］〜Ｄ［ｍ］を読み出す場合は、図９に示すように、まず最初、図１０のフローチャートに基づいてポインタＰを読み出す（Step３１）。このポインタＰの読み出し処理が終了した後は、図３で説明した実施の形態１とほぼ同様の処理を実行して、セクタ１から真のデータＤ［０］〜Ｄ［ｍ］を読み出す（Step２１〜Step２７）。実施の形態１では、Step２５で「Ｌ」と「ｎ」とを比較しているのに対し、本実施の形態３では、Step２５’において、エリア番号を示す「Ｌ」とデータが書き込まれたエリアの番号を示すポインタ数の「Ｐ」（Step３１）とを比較している点が異なるだけである。この比較処理によって、セクタ１のどのエリアまでデータが書き込まれているかがわかり、エリアからデータを読み込んでＸＯＲする回数を最少にすることができる。
【００４５】
以上のように実施の形態３によれば、フラッシュメモリ１０に、実施の形態１と同じデータ書込用のセクタ１と、セクタ１のエリアのポインタデータＰを書き込むためのセクタ２とを用意したので、実施の形態１と同様に、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になり、しかも、セクタ毎に書き込むデータがＸＯＲ値であるため、セキュリティの向上が期待できる。
【００４６】
また、ポインタデータＰを読み出すことにより、セクタ１のエリアがいっぱいで追記できない場合に素早く判断することが可能になり、データの消去と書込み処理が速やかに行うことができ、さらに、読み出し時にもポインタデータＰから使用されているエリアが分かるので、データ読み出しとＸＯＲ処理の無駄をなくすことができ、読み出し速度を速くできる。
【００４７】
実施の形態４．
図１２は本発明の実施の形態４に係るメモリのデータ書換方法の説明図である。なお、図１及び図７で説明した実施の形態１、３と同一又は相当部分には同じ符号を付し説明を省略する。
実施の形態４におけるフラッシュメモリ１０は、実施の形態３と同様に、データ書込用のセクタ１と、データが書き込まれているエリア番号を示す１バイトのポインタデータＰ（以下、単に「ポインタＰ」という）を格納するためのセクタ２とを有している。セクタ１は、実施の形態１と同様にｍバイトサイズで分割された複数のエリア１〜ｎからなり、この各エリア１〜ｎには、ＸＯＲされたデータを書き込むのではなく、直接、真のデータを書き込むようになっている。セクタ２は、実施の形態３で述べたように、ｎバイトで構成され、ＸＯＲされたポインタＰが格納されるようになっている。
【００４８】
次に、実施の形態４の動作について図１３及び図１４のフローチャートを用いて説明する。図１３は実施の形態４におけるデータ書き換え時の動作を示すフローチャート、図１４は実施の形態４におけるデータ読み出し時の動作を示すフローチャートである。なお、実施の形態３で用いた図８〜図１１と同じStep No.については、動作が同じであるため、詳細な動作説明を省略する。
【００４９】
制御部（図示せず）は、例えば１バイトの書換データＤｐ［ｉ］の入力を検知すると、そのデータを一時的にワークメモリ２０の変数領域ＷＤに格納し、次いで、ポインタＰ（エリア番号）に応じたエリアからデータＤｐ［０］〜Ｄｐ［ｍ］を読み出して、ワークメモリ２０のデータ書込領域２１に格納する（Step５１）。この読み出し処理については図１４に基づいて後述する。そして、データ書込領域２１に格納したデータＤｐ［０］〜Ｄｐ［ｍ］のうちデータＤｐ［ｉ］に書換データＤｐ［ｉ］を上書きして変更する（Step５２）。その後、セクタ２からポインタＰを読み出し（Step３１）、セクタ１のエリア番号の「ｎ」と比較する（Step３２）。なお、ポインタＰの読み出し処理については、図１０で説明した実施の形態３と同様であるため説明は割愛する。
【００５０】
ポインタＰと「ｎ」と比較した際にＰ＝ｎと確認したときは、セクタ１のエリアｎまでデータでいっぱいと判断して、セクタ１に書き込まれている全データを消去し（Step３５）、データ書込領域２１に格納したデータＤｐ［０］〜Ｄｐ［ｍ］をセクタ１のエリア１に書き込む（Step３６）。そして、ポインタＰを「１」にし、セクタ２への書き込み処理に入る（Step４０）。この処理については、図１１で説明した実施の形態３と同様であるため説明は割愛する。
【００５１】
一方、ポインタＰと「ｎ」が等しくないときは、空きエリアがあると判断して、そのポインタＰに「１」をインクリメントし（Step５３）、その値と同じエリアｐに前記のデータＤｐ［０］〜Ｄｐ［ｍ］を書き込んで（Step５４）、「１」をインクリメントしたポインタＰをセクタ２に書き込むための処理を行い（Step４０）、データ書き換えの動作を終了する。
【００５２】
次に、図１４に基づいてデータ読み出し時の動作を説明する。まず、図１０で説明した実施の形態３と同じ方法でセクタ２からポインタＰを読み出す（Step３１）。その後、各エリア１〜ｎに配列されているデータの順番を示す変数領域ｋを「０」にし（Step２１）、次いで、ポインタＰが示すエリアｐの１番目のデータＤｐ［０］を読み出してワークメモリ２０のデータ書込領域２１に書き込む（Step６２）。そして、変数領域ｋに「１」をインクリメントして「２」とし（Step２６）、バイト数の「ｍ」を超えたかどうかを判別する（Step２７）。超えていたときはこの動作を終了するが、「ｋ」が「ｍ」を超えていないときは、同一エリアｐ内にデータがあると判断して、２番目のデータＤｐ［２］を読み出してワークメモリ２０のデータ書込領域２１に書き込む（Step６２）。この一連の動作を同一のエリアｐ内に書き込まれているデータが読み出されるまで繰り返し行う（Step６２〜Step２７）。
【００５３】
以上のように実施の形態４においては、実施の形態３のようにデータを書き換えるときや読み出すときにＸＯＲすることなく、セクタ２のポインタＰの示すエリアに直接データを書き込んだり読み出すようにしたので、メモリセルの劣化の防止や、セレクトトランジスタを挿入することなくバイト単位やワード単位でデータの書き換えが可能になり、また、読み出しの際にＸＯＲして行く必要がないので、データの書き換えと読み出し処理が実施の形態３と比べ速くなるという効果がある。
【００５４】
実施の形態５．
図１５は本発明の実施の形態５に係るメモリのデータ書換方法の説明図である。なお、図１及び図７で説明した実施の形態１、３と同一又は相当部分には同じ符号を付し説明を省略する。
実施の形態５は、フラッシュメモリ１０に、データを書き込むための二つのセクタ０，１と、例えば１バイトのセレクタデータＳ（以下、単に「セレクタＳ」という）を書き込むためのセクタ２とを設けたものである。前記セレクタＳは、セクタ０又はセクタ１を選択するためのデータで、例えば、その値が偶数のときはセクタ０が、奇数のときはセクタ１が選択される。
【００５５】
ワークメモリ２０には、実施の形態１と同様の各種変数領域及びデータ格納領域２１が設けられている上に、セレクタＳに応じて１又は０を書き込むための変数領域ｑ、ｑ’と、セレクタＳの書換時にセクタ２のエリア番号を書き込むための変数領域ｊ’と、セレクタＳの読出時にセクタ２のエリア番号を書き込むための変数領域L'と、書換セレクタＳを保持するための変数領域ＳＷＤ’と、書換セレクタＳ及びこの書換セレクタＳのＸＯＲデータを書き込むための変数領域ＳＷＤと、セクタ２の各エリアに保存されたセレクタＳ１〜Ｓｎを書き込むための変数領域ＳＲＤと、セクタ２のセレクタＳ１〜ＳｎをＸＯＲして得られる真のセレクタＳを一時的に保存するためのデータ書込領域ＳＤとが設けられている。
【００５６】
次に、実施の形態５の動作について図１６及び図１７のフローチャートを用いて説明する。図１６は実施の形態５におけるデータ書き換え時の動作を示すフローチャート、図１７は実施の形態５におけるデータ読み出し時の動作を示すフローチャートである。なお、図中に示す（  ）内のStep No.は、図２及び図３で説明した実施の形態１と同じであるため、動作の説明を省略する。
【００５７】
制御部（図示せず）は、例えば１バイトの書換データＤ［ｉ］の入力を検知すると、その書換データＤ［ｉ］をワークメモリ２０の変数領域ＷＤに格納し、セクタ２からセレクタＳを読み出す処理を実行する（Step６１）。この読み出し処理については、図１０で説明した実施の形態３と同じで、この図に示すＰＤをＳＤ、ＰL'をＳL'と置き代えて処理する。制御部は、この処理によってセクタ２から読み出した真のセレクタＳを一旦変数領域ＳＤに格納し、そのセレクタＳが偶数かどうかを判別する（Step６２）。セレクタＳが偶数のときは、セクタ０を選択するために変数領域ｑに「０」、変数領域ｑ’に「１」を書き込み、また、セレクタＳが奇数のときは、セクタ１を選択するために変数領域ｑに「１」、変数領域ｑ’に「０」を書き込む。
【００５８】
その後は、図２で説明した実施の形態１と同様の動作を実行する（Step１〜Step７）。Step６２においてセクタ０を選択した場合は、変数領域ｑの「０」に基づいてセクタ０の各エリア１〜ｎからデータＤ０１［ｉ］…を順に読み出してＸＯＲして行き、途中で「００ｈ」のデータを確認したときは、その位置に、ＸＯＲした書換データを書き込んで動作を終了する。一方、セクタ０の各エリア１〜ｎに「００ｈ」以外のデータが書き込まれていた場合は、そのセクタ０から真のデータＤ［０］〜Ｄ［ｍ］を読み出してデータ書込領域２１に保存し（Step８）、かつ、その中のデータＤ［ｉ］に変数領域ＷＤ内の書換データＤ［ｉ］を上書きして変更する（Step９）。そして、真のデータＤ［０］〜Ｄ［ｍ］をもう一方のセクタ１のエリア１に書き込む（Step６５）。
【００５９】
また、Step６２においてセクタ１を選択した場合は、変数領域ｑの「１」に基づいてセクタ１の各エリア１〜ｎからデータＤ１１［ｉ］…を順に読み出してＸＯＲして行き、途中で「００ｈ」のデータを確認したときは、その位置に、ＸＯＲした書換データを書き込んで動作を終了する。一方、セクタ１の各エリア１〜ｎに「００ｈ」以外のデータが書き込まれていた場合は、そのセクタ１から真のデータＤ［０］〜Ｄ［ｍ］を読み出してデータ書込領域２１に保存し（Step８）、かつ、その中のデータＤ［ｉ］に変数領域ＷＤ内の書換データＤ［ｉ］を上書きして変更する（Step９）。そして、真のデータＤ［０］〜Ｄ［ｍ］をもう一方のセクタ０のエリア１に書き込む（Step６５）。なお、Step８の動作は、図３で説明した実施の形態１と同様であり、Step９は、前述したように実施の形態１と同じである。
【００６０】
セクタ０又はセクタ１へのデータ書込が終了すると、変数領域ＳＤのセレクタＳの値に「１」をインクリメントし（Step６６）、そのセレクタＳの書き込み処理の動作を実行する（Step６７）。この書き込み処理については、図１１で説明した実施の形態３と同じで、この図に示すＰＷＤをＳＷＤ、ＰＷＤ’をＳＷＤ’、Ｐｊ’をＳｊ’、ＰＲＤをＳＲＤとそれぞれ置き代えて処理する。この処理によって変数領域ＳＷＤ’に書き込んだセレクタＳをセクタ２の先頭エリアに書き込む。そして、Step６２で選択したセクタ０のデータＤ０１［０］〜Ｄ０ｎ［ｍ］、又はセクタ１のデータＤ１１［０］〜Ｄ１ｎ［ｍ］を消去し（Step６８）、データの書き換え処理を終了する。このデータの消去を最後に行うようにしたのは、もう一方のセクタのエリア１にデータを書き込む前に消去すると、処理の途中で電源が落ちたりして中断した場合にデータが消去してしまうので、これを防止するためである。
【００６１】
次に、図１７に基づいてデータ読み出し時の動作を説明する。まず、図１６で説明したようにセクタ２からセレクタＳを読み出し、ワークメモリ２０の変数領域ＳＤに保存する（Step６１）。そして、そのセレクタＳが偶数かどうかを判別し（Step７２）、セレクタＳが偶数のときは変数領域ｑに「０」を書き込み（Step７３）、セレクタＳが奇数のときはその変数領域ｑに「１」を書き込む（Step７４）。変数領域ｑに「０」を書き込んだ場合は、その変数に基づきセクタ０に書き込まれているデータＤ０１［０］〜Ｄ０ｎ［ｍ］を読み出してＸＯＲして行き、データ書込領域２１に一旦保存し（Step２１〜Step２７）、また、変数領域ｑに「１」を書き込んだ場合は、その変数に基づきセクタ１に書き込まれているデータＤ１１［０］〜Ｄ１ｎ［ｍ］を読み出してＸＯＲして行き、データ書込領域２１に一旦保存し（Step２１〜Step２７）、データの読み出し処理を終了する。この処理は、図３で説明した実施の形態１と同じである。
【００６２】
以上のように実施の形態５によれば、データを書き込むための二つのセクタ０，１を設け、さらに、セレクタＳを書き込むためのセクタ２を設け、このセレクタＳに基づいて二つのセクタ０，１を交互に使用するようにしたので、実施の形態１と同様に、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になり、しかも、セクタ毎に書き込むデータがＸＯＲ値であるため、セキュリティの向上が期待でき、また、書き換え途中で電源が落ちて処理が中断されても、データが消失することがないという効果が期待できる。
【００６３】
実施の形態６．
図１８は本発明の実施の形態６に係るメモリのデータ書換方法の説明図である。
実施の形態６は、図中の（ａ）に示すように、複数のセクタ０１〜ｎ、１１〜ｎをそれぞれ有する２つのフラッシュメモリ０、１（以下、単に「メモリ」という）を備え、この２つのメモリ０、１の同一番目のセクタ０１、１１をデータ格納エリアとして使用する構成になっている。各セクタ０１、１１は、例えば同図（ｂ）に示すように、所定のデータ長を格納可能な４つのエリア１〜４と管理エリア５ａ、５ｂとで構成されている。この管理エリア５ａ、５ｂは、例えば同図（ｃ）に示すように、２ビットのメモリセレクタと４ビットのエリアセレクタとから構成されている。なお、管理エリア５ａはメモリ０側のセクタ０１に、もう一方の管理エリア５ｂはメモリ１側のセクタ１１に設けられているものとする。
【００６４】
管理エリア５ａ、５ｂのメモリセレクタ内の２ビットの値は、メモリ０、１の何れかを選択するためのもので、各値の組み合わせをキーとして選択するようになっている。例えば、メモリ０（ｍ０）側のメモリセレクタが「０１」で、メモリ１（ｍ１）側のメモリセレクタが「Ｘ０」のときはメモリ０と判断して、変数ｊを「０」にし、また、メモリ０側のメモリセレクタが「０Ｘ」で、メモリ１側のメモリセレクタが「０１」のときはメモリ１と判断して、変数ｊを「１」にする。各メモリセレクタ内の値とメモリ番号は（図１８（ｅ）参照）、データとしてＲＯＭ（図示せず）に格納されており、変数ｊはワークメモリ（図示せず）の所定エリアに書き込むようになっている。
【００６５】
管理エリア５ａ、５ｂのエリアセレクタ内の４ビットの値は、エリアを選択するためのもので、データ書き換え時と読み出し時に応じて異なっている。例えば、データ書き換え時において、管理エリア５ａ、５ｂのメモリセレクタからメモリ０と判断した場合、メモリ０の管理エリア５ａのエリアセレクタに書き込まれている値に応じてそのメモリ０のセクタ０１のエリア番号を判別する。このエリア番号は変数ｋとして前記のワークメモリの所定エリアに書き込むようになっており、エリアセレクタ内の値とエリア番号は（図１８（ｄ）参照）、前記と同様にデータとしてＲＯＭに格納されている。
【００６６】
次に、実施の形態６の動作について図１９及び図２０を用いて説明する。図１９は実施の形態６におけるデータ書き換え時の動作を示すフローチャート、図２０はデータ書き換え処理に基づくセクタの状態を示す図である。なお、動作説明の便宜上、各セクタ０１、１１のそれぞれのエリア１〜５が全て消去状態の「００ｈ」になっているものとする（図２０（ａ）参照）。
【００６７】
データの書き換えが１回目の場合は、まず、各セクタ０１、１１の管理エリア５ａ、５ｂのメモリセレクタからそれぞれ値を読み出し（Step８１）、メモリ番号の選択に入る。この時点では、前述したように各メモリセレクタ内の値が共に「００」であるため、Step８２においてメモリ０と判断して、変数ｊを「０」にする（Step８３）。メモリ０を選択した場合は、セクタ０１のエリアセレクタ内の値を読み出し、データを書き込むエリア番号の判別に入る。この時は、その値が「００００」であるため、Step９２においてエリア１と判断して、変数ｋを「１」にする（Step９３）。
【００６８】
以上の判別からメモリ０のセクタ０１のエリア１にデータを書き込むと共に、もう一方のメモリ１のセクタ１１に書き込まれているデータを１／４時間消去する（Step１０２）。これは、そのセクタ１１のエリア１内のデータを消去することで、そのエリア１にデータが書き込まれているか否かの判別を行うことなく消去処理を実行するようになっている。このデータの消去について、例えば、消去時間を１０ｍＳ、書き込み時間を２０μＳとした場合、データの消去時間を２．５ｍＳで良く、書き込み速度は速いので、この消去の間に書き込むことは十分可能である。また、メモリを２つに分けた事により、ほぼ同時に書込みと消去を可能にしている。
【００６９】
データの書き込みが終了すると、セクタ０１の管理エリア５ａ内の各値を更新する（Step１０３）。この処理も消去中の２．５ｍＳの中で行い、更新には消去を伴わない「０」から「１」への変更のみとする。ここでは、管理エリア５ａのメモリセレクタの値「００」を「０１」に変更し、エリアセレクタの値「００００」を次回の書き込みエリアを示す「０００１」に変更する。これで１回目の書き換え処理が完了し、図２０（ｂ）に示すような状態となる。
【００７０】
次に、データの書き換えが２回目の場合は、前記と同様に管理エリア５ａ、５ｂのメモリセレクタからそれぞれの値を読み出し（Step８１）、メモリ番号の選択に入る。この場合は、管理エリア５ａのメモリセレクタが「０１」で、管理エリア５ｂのメモリセレクタが「００」であるため、Step８４においてメモリ０と判断して、変数ｊを「０」にする（Step８５）。その後は、選択したメモリ０側のエリアセレクタ内の値を読み出し、データを書き込むエリア番号の判別に入る。この時は、その値が「０００１」であるため、Step９４においてエリア２と判断して、変数ｋを「２」にする（Step９５）。
【００７１】
そして、選択したメモリ０のセクタ０１のエリア２にデータを書き込むと共に、もう一方のメモリ１のセクタ１１に書き込まれているデータを１／４時間消去する（Step１０２）。そして、メモリ０の管理エリア５ａのメモリセレクタの値「０１」を保持し、エリアセレクタの値「０００１」を「００１１」に変更し（Step１０３）、２回目の書き換え処理が完了する。この時の状態は図２０（ｃ）である。
【００７２】
３回目の場合は、Step８１からStep８４に進んでメモリ番号を示す変数ｊを「０」にし（Step８５）、その後は、メモリ０側のエリアセレクタ内の値が「００１１」であるため、Step９６からStep９７に進んでエリア番号を示す変数ｋを「３」にする。そして、選択したメモリ０のセクタ０１のエリア３にデータを書き込むと共に、前記と同様にメモリ１のセクタ１１に書き込まれているデータの１／４を消去し（Step１０２）、メモリ０の管理エリア５ａ内の値を変更する。この場合は、メモリセレクタの値「０１」を保持し、エリアセレクタの値「００１１」を「０１１１」に変更し（Step１０３）、３回目の書き換え処理が完了する（図２０（ｄ）参照）。
【００７３】
４回目の場合は、Step８１→Step８４→Step８５に進んで変数ｊを「０」にし、さらに、メモリ０側のエリアセレクタ内の値「０１１１」に基づいてStep９８→Step９９に進んで変数ｋを「４」にする。そして、この判別からメモリ０のセクタ０１のエリア４にデータを書き込み、メモリ１のセクタ１１に書き込まれている残り１／４時間データを消去し（Step１０２）、メモリ０の管理エリア５ａ内の値を変更する。この場合は、メモリセレクタの値「０１」を保持し、エリアセレクタの値「０１１１」を「１１１１」に変更し（Step１０３）、４回目の書き換え処理が完了する（図２０（ｅ）参照）。これにより、メモリ０側の４つの全エリア１〜４にデータが書込まれた状態となる。
【００７４】
データの書き換えが５回目の場合は、管理エリア５ａ、５ｂのメモリセレクタからそれぞれの値を読み出す（Step８１）。この時は、図２０（ｅ）に示すように、管理エリア５ａのメモリセレクタが「０１」で、管理エリア５ｂのメモリセレクタが「００」であるため、Step８４においてメモリ０と判断して、変数ｊを「０」にする（Step８５）。その後は、選択したメモリ０側のエリアセレクタ内の値を読み出し、データを書き込むエリアの番号の判別に入る。この時は、メモリ０側のエリアセレクタの値が「１１１１」であるため、Step１００において、Step８５で設定した変数ｊの「０」に「１」を加算し、その値を２で除算したときのＭＯＤ（余り）を変数ｊとする。この場合、ＭＯＤは「１」となるので、メモリ番号を示す変数ｊを「１」に変更し、エリア番号を示す変数ｋを「１」に設定する。
【００７５】
この処理からメモリ１のセクタ１１のエリア１にデータを書き込むと共に、メモリ０のセクタ０１に書き込まれているデータを消去する（Step１０２）。この場合も消去時間が２．５ｍＳ（１／４時間消去）であるが、メモリセルにより消去時間にバラツキがあるので、メモリ０のセクタ０１のデータは不定となり、図２０（ｆ）に示すような状態になる。メモリ１側のエリア１にデータを書き込んだ後は、前記と同様に、管理エリア５ｂのメモリセレクタの値「００」を「０１」に変更し、エリアセレクタの値「００００」を次回の書き込みエリアを示す「０００１」に変更する（Step１０３）。これで５回目の書き換え処理が完了する（図２０（ｆ）参照）。
【００７６】
これ以降にデータを書き換える場合は、メモリ１のセクタ１１のエリア２から順に書き込んでいき、データの書き換えが８回目の場合は、そのセクタ１１のエリア４に書き込み、管理エリア５ｂのメモリセレクタの値「０１」を保持し、エリアセレクタの値を「１１１１」に変更する。この時、メモリ０のセクタ０１は２．５ｍＳ×４回＝１０ｍＳの消去を受けたことになり、完全に消去された状態「００ｈ」になっている（図２０（ｇ）参照）。
【００７７】
また、データの書き換えが９回目の場合は、図２０（ｇ）に示すように、管理エリア５ａのメモリセレクタが「００」で、管理エリア５ｂのメモリセレクタが「０１」であるため、Step８８においてメモリ１と判断して、変数ｊを「１」にするが（Step８５）、そのメモリ１側のエリアセレクタの値が「１１１１」であるため、Step１００において、Step８９で設定した変数ｊの「１」に「１」を加算し、その値を２で除算したときのＭＯＤ（余り）を変数ｊとする。この場合、ＭＯＤは「０」となるので、メモリ番号を示す変数ｊを「０」に変更し、エリア番号を示す変数ｋを「１」に設定する。つまり、メモリ１からメモリ０に変更し、そのエリアの番号を「１」にする。
【００７８】
そして、この処理からメモリ０のセクタ０１のエリア１にデータを書き込み、メモリ１のセクタ１１に書き込まれているデータを消去する（Step１０２）。この場合も、メモリセルにより消去時間にバラツキがあるので、メモリ１のセクタ１１のデータは不定となり、図２０（ｈ）に示すような状態になる。その後は、前記と同様に、管理エリア５ａのメモリセレクタの値を「１０」に変更し、エリアセレクタの値「００００」を「０００１」に変更し（Step１０３）、９回目の書き換え処理が完了する（図２０（ｈ）参照）。前述した管理エリア５ａのメモリセレクタの変更は、メモリ１側の管理エリア５ｂのメモリセレクタの値を左に１回ローテーションさせてシフトした値である。その後は、同じように書き換え処理を行うとメモリ０のセクタ０１がいっぱいになり、今度はメモリ１のセクタ１１の消去が完了する（図２０（ｉ）参照）。
【００７９】
これ以降にデータを書き換える場合は、前述したようにStep１００でメモリ０からメモリ１に切り換わり、データの書き換えが繰り返される（図２０（ｊ）（ｋ）参照）。そして、メモリ１のセクタ１１がいっぱいになったときは、メモリ０に切り換わって、再び図２０（ｂ）からデータの書き換えが繰り返し行われる（同図（ｂ）〜（ｋ）参照）。
【００８０】
次に、データ読み出し時の動作を図２１に示すフローチャートに基づいて説明する。
例えば、メモリ０、１の各セクタ０１、１１内が図２０（ｅ）に示すような状態になっているときのデータを読み出す場合は、まず、各セクタ０１、１１の管理エリア５ａ、５ｂのメモリセレクタからそれぞれ値を読み出し（Step１１１）、メモリ番号の選択に入る。この時は、管理エリア５ａのメモリセレクタの値が「０１」で、管理エリア５ｂのメモリセレクタの値が「００」であるため、Step１１４においてメモリ０と判断して、変数ｊを「０」にする（Step１１５）。このメモリ０を選択した場合は、セクタ０１のエリアセレクタに書き込まれている値を読み出し、データを読み出すエリアの番号の判別に入る。この時は、その値が「１１１１」であるため、Step１３０においてエリア４と判断して、変数ｋを「４」にする（Step１３１）。以上の判別からメモリ０のセクタ０１のエリア４に書き込まれている最新のデータを読み出し（Step１３２）、前述した一連の動作を完了する。
【００８１】
以上のように実施の形態６においては、２つのメモリ０、１（フラッシュメモリ）を用意し、各セクタ０１、１１を所定のデータ長で複数のエリア１〜４に分割すると共に管理エリア５ａ、５ｂをそれぞれ設け、一方のメモリのエリアに追記書込みすると同時に他方のメモリのセクタ消去を分割して行い、一方のメモリのセクタの各エリアにデータを書き込んだときに、他方のメモリのセクタの消去が完了するようにして、２つのメモリに交互にデータを書き込むようにしたので、データの書き換え時間を大幅に短縮できる。
【００８２】
また、前述した実施の形態１〜５では、通常の書き換え時間は短いが、エリアがいっぱいになったときには、セクタ消去を行う必要があり、この時の書き換え処理時間は短くできなかったが、本実施の形態６では、データの書き込みと同時に分割消去を行っていくので、全てのデータの書き換えにおいて書き換え時間を短くできる。
【００８３】
さらに、本実施の形態６では、セレクトトランジスタの付加なしに、バイトやワード単位でのデータの書き換えが可能であり、メモリセル構成をシンプルにでき、また、セクタ内の複数のエリアに順に書き込んでいくので、書き換え回数を少なくすることが可能でメモリセルの劣化を防止できる。
【００８４】
実施の形態７．
図２２は本発明の実施の形態７に係るメモリのデータ書換方法の説明図である。
実施の形態７は、複数のセクタ０１〜ｎ、１１〜ｎをそれぞれ有する２つのフラッシュメモリ０、１と、キャッシュメモリ６とを備えたものである。その２つのフラッシュメモリ０、１のセクタ０１、１１には、前述した実施の形態６と同じ構成からなる４つのエリア１〜４と管理エリア５ａ、５ｂとが設けられている。前記のキャッシュメモリ６は、フラッシュメモリ０、１と同じデータ容量を有し、各セクタ０１、１１に設けられた４つのエリア１〜４にそれぞれ対応するエリア６１〜６４が設けられている。
【００８５】
次に動作について説明する。本実施の形態におけるデータの書き換え動作は、実施の形態６と殆ど同じであるが、フラッシュメモリ０又はフラッシュメモリ１の何れか一方の例えばエリア３にデータを書き込む際に、そのエリア３に対応するキャッシュメモリ６のエリア６３にも同じデータを格納する。データを読み出すときは、フラッシュメモリ０、１から読み出すのではなく、キャッシュメモリ６に格納された最新のデータを読み出す。ただし、電源投入時には、実施の形態６に示す読み出し方法でフラッシュメモリ０又は１に書き込まれている最新のデータを読み出して、キャッシュメモリ６に格納する処理が必要になる。
【００８６】
以上のように実施の形態７によれば、実施の形態６の構成にキャッシュメモリ６を追加し、フラッシュメモリ０又は１にデータの書き換えを行う際に、その最新のデータをキャッシュメモリ６に格納するようにしたので、実施の形態６と同等の効果が得られる上にデータの読み出し処理が簡略化され、読み出し速度を上げることができる。また、キャッシュメモリ６からデータを読み出すようにしているので、データ読み出し時の消費電力を低減できるという効果も期待できる。
【００８７】
なお、前記の実施の形態１〜７では、フラッシュメモリの書き換え処理と読み出し処理をＣＰＵ等の制御部と制御プログラムによるシフト処理として説明したが、それに限定されるものではなく、ハードウェアによって行っても良い。また、消去状態を「０」、書き込み状態を「１」として説明したが、これに限定されるものではない。ただし、実施の形態１〜５において「１」を消去状態とした場合には、ＸＯＲ追記する関係上ｎを奇数にするか、又はｎが偶数の場合はＸＯＲする必要がある。
【００８８】
さらに、実施の形態１〜５についても、実施の形態７のようなキャッシュメモリ６を設けて、読み出し処理を速めるようにしても良い。また、実施の形態６では、１セクタ内のエリア数を４つの例で説明したが、これに限定されるものではなく、分割されて行われる消去時間の合計が消去に必要な時間になるようにエリア分割すれば良い。この方法を用いると、理論的には、書き込みに必要な時間まで書き換え時間を短縮できる。
【図面の簡単な説明】
【００８９】
【図１】本発明の実施の形態１に係るメモリのデータ書換方法の説明図である。
【図２】実施の形態１におけるデータ書き換え時の動作を示すフローチャートである。
【図３】実施の形態１におけるデータ読み出し時の動作を示すフローチャートである。
【図４】データを３回書き換えたときのデータの書換状態を示す図である。
【図５】本発明の実施の形態２に係るメモリのデータ書換方法の説明図である。
【図６】実施の形態２におけるデータ書き換え時の動作を示すフローチャートである。
【図７】本発明の実施の形態３に係るメモリのデータ書換方法の説明図である。
【図８】実施の形態３におけるデータ書き換え時の動作を示すフローチャートである。
【図９】実施の形態３におけるデータ読み出し時の動作を示すフローチャートである。
【図１０】実施の形態３におけるポインタＰ読み出し時の動作を示すフローチャートである。
【図１１】実施の形態３におけるポインタＰ書き換え時の動作を示すフローチャートである。
【図１２】本発明の実施の形態４に係るメモリのデータ書換方法の説明図である。
【図１３】実施の形態４におけるデータ書き換え時の動作を示すフローチャートである。
【図１４】実施の形態４におけるデータ読み出し時の動作を示すフローチャートである。
【図１５】本発明の実施の形態５に係るメモリのデータ書換方法の説明図である。
【図１６】実施の形態５におけるデータ書き換え時の動作を示すフローチャートである。
【図１７】実施の形態５におけるデータ読み出し時の動作を示すフローチャートである。
【図１８】本発明の実施の形態６に係るメモリのデータ書換方法の説明図である。
【図１９】実施の形態６におけるデータ書き換え時の動作を示すフローチャートである。
【図２０】データ書き換え処理に基づくセクタの状態を示す図である。
【図２１】実施の形態６におけるデータ読み出し時の動作を示すフローチャートである。
【図２２】本発明の実施の形態７に係るメモリのデータ書換方法の説明図である。
【符号の説明】
【００９０】
１０  フラッシュメモリ、２０  ワークメモリ、２１  データ書込領域、ＸＯＲ  排他的論理和。
【図１】
2005038518.tif 000003
【図２】
2005038518.tif 000004
【図３】
2005038518.tif 000005
【図４】
2005038518.tif 000006
【図５】
2005038518.tif 000007
【図６】
2005038518.tif 000008
【図７】
2005038518.tif 000009
【図８】
2005038518.tif 000010
【図９】
2005038518.tif 000011
【図１０】
2005038518.tif 000012
【図１１】
2005038518.tif 000013
【図１２】
2005038518.tif 000014
【図１３】
2005038518.tif 000015
【図１４】
2005038518.tif 000016
【図１５】
2005038518.tif 000017
【図１６】
2005038518.tif 000018
【図１７】
2005038518.tif 000019
【図１８】
2005038518.tif 000020
【図１９】
2005038518.tif 000021
【図２０】
2005038518.tif 000022
【図２１】
2005038518.tif 000023
【図２２】
2005038518.tif 000024