(57)【特許請求の範囲】
【請求項１】
複数のセクタを有するフラッシュメモリにおけるデータ処理方法において、
前記複数のセクタは少なくとも第１セクタと第２セクタを含み、
前記フラッシュメモリを制御するフラッシュメモリ制御回路は、前記第１セクタのデータを前記第２セクタに移行するとき、前記第１セクタにおいて更新されなかったデータを前記第２セクタの先頭から配置するとともに、前記更新されなかったデータの識別子を前記第２セクタに付加すること
を特徴とするデータ処理方法。
【請求項２】
前記第２セクタに格納された前記第１セクタで更新されなかったデータの後に、前記第１セクタで更新されたデータが格納されること
を特徴とする請求項１に記載のデータ処理方法。
【請求項３】
前記フラッシュメモリ制御回路は、前記更新されなかったデータのデータ数を前記第２セクタに付加すること
を特徴とする請求項１または請求項２に記載のデータ処理方法。
【請求項４】
前記フラッシュメモリ制御回路は、前記更新されなかったデータの識別子を前記第２セクタに付加すること
を特徴とする請求項１乃至請求項３の何れか一に記載のデータ処理方法。
【請求項５】
前記更新されなかったデータが更新された場合には前記付加されたデータの識別子は無効化されること
を特徴とする請求項４に記載のデータ処理方法。
【請求項６】
コンピュータによって実行されるとともに前記コンピュータが読み取り可能な記録媒体に格納されるプログラムにおいて、
第１セクタと第２セクタとを有するフラッシュメモリに読み出すデータの識別子が供給され、
前記第１セクタから前記第２セクタにデータが移行される際、前記第１セクタにおいて更新されなかったデータが前記第２セクタの先頭から格納されるとともに、前記更新されなかったデータの識別子が前記第２セクタに付加されている場合に、
前記読み出すデータの識別子と、前記第２セクタに格納された前記第１セクタで更新されなかったデータの識別子と、を比較し、
前記識別子が一致するときは、前記読み出すデータを前記第２セクタの前方から検索し、
前記識別子が一致しないときは、前記読み出すデータを前記第２セクタの後方から検索すること
を特徴とするプログラム。
【請求項７】
前記第１セクタにおいて更新されなかったデータの識別子を前記第２セクタに付加し、
前記第２セクタにおいて前記更新されなかったデータが更新されたときは前記付加されたデータの識別子を無効化すること
を特徴とする請求項６に記載のプログラム。
【請求項８】
ＣＰＵと、
少なくとも第１セクタと第２セクタとを含むフラッシュメモリと、
前記ＣＰＵによって制御されるフラッシュメモリ制御回路と
を含み、
前記第１セクタから前記第２セクタにデータが移行される際、前記第１セクタにおいて更新されなかったデータが前記第２セクタの先頭から格納されるとともに、前記更新されなかったデータの識別子が前記第２セクタに付加されている場合に、
前記フラッシュメモリ制御回路は、
前記ＣＰＵからのデータ読み出しの指示に基づいて、
前記読み出すデータの識別子と、前記第２セクタに格納された前記第１セクタで更新されなかったデータの識別子と、を比較し、
前記識別子が一致するときは、前記読み出すデータを前記第２セクタの前方から検索し、
前記識別子が一致しないときは、前記読み出すデータを前記第２セクタの後方から検索すること
を特徴とするシステム。
【請求項９】
前記フラッシュメモリ制御回路は
前記第１セクタのデータを前記第２セクタに移行するときに、前記第１セクタで更新さ
れなかったデータを前記第２セクタの先頭から前記第２セクタに格納すること
を特徴とする請求項８に記載のシステム。
【請求項１０】
前記フラッシュメモリ制御回路は、
前記第１セクタにおいて更新されなかったデータの識別子を前記第２セクタに付加し、
前記第２セクタにおいて前記更新されなかったデータが更新されたときは前記付加されたデータの識別子を無効化すること
を特徴とする請求項８または請求項９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリに格納されるデータの処理方法、データ処理方法を実現するためのプログラムおよびフラッシュメモリを含むシステムに関する。
【背景技術】
【０００２】
フラッシュメモリ等の不揮発性メモリでは、書き込み単位である記憶領域にデータが既に書き込まれているとき、この記憶領域には新たなデータを上書きできない。新たなデータは、消去状態の記憶領域に書き込む必要がある。このため、データの書き込みは、アドレスを変えながら記憶領域を検索し、消去状態の記憶領域を確認した後に行う必要がある（例えば、特許文献１参照。）。
【０００３】
例えば、更新するデータは消去状態の記憶領域に順に書き込まれる。この際、最新のデータが書き込まれた記憶領域を素早く検索するために、最新のデータが書き込まれた記憶領域のアドレスが、所定の記憶領域に書き込まれる（例えば、特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−３１０２６８号公報
【特許文献２】特開２００８−９７５２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
更新するデータがアドレスを増やしながら順次に書き込まれるとき、更新頻度の高いデータはアドレスの大きい記憶領域に遷移していき、更新頻度の低いデータはアドレスの小さい記憶領域に留まる。読み出すデータの検索は、検索効率を向上するために、アドレスの大きい記憶領域からアドレスの小さい記憶領域に向けて実施される。しかしながら、この順でデータを読み出すとき、更新頻度の低いデータの検索効率は常に低くなる。
【０００６】
本発明の目的は、更新頻度の低いデータの検索効率を向上することである。
【課題を解決するための手段】
【０００７】
本発明のデータ処理方法の一形態では、複数のセクタを有するフラッシュメモリにおけるデータ処理方法において、複数のセクタは少なくとも第１セクタと第２セクタを含み、フラッシュメモリを制御するフラッシュメモリ制御回路は、第１セクタのデータを第２セクタに移行するとき、第１セクタにおいて更新されなかったデータを第２セクタの先頭から配置するとともに、更新されなかったデータの識別子を第２セクタに付加することを特徴とする。
【発明の効果】
【０００８】
第２セクタに移行されたデータの読み出しにおいて、読み出すデータの識別子が更新されなかったデータの識別子と一致するときに、読み出すデータを第２セクタの先頭から検索することで、更新頻度の低いデータの検索効率を向上できる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態におけるシステムの例を示している。
【図２】図１に示したシステムにおいて、セクタＳＥＣ２からセクタＳＥＣ１にデータを移行する例を示している。
【図３】別の実施形態におけるシステムの例を示している。
【図４】図３に示したフラッシュメモリに格納されるデータの例を示している。
【図５】図４に示したセクタＳＥＣ１にデータを書き込む例を示している。
【図６】図４に示したセクタＳＥＣ１が満杯になった後に次のセクタＳＥＣ２にデータを移行する例を示している。
【図７】有効なセクタからデータを読み出すときの検索方法の例を示している。
【図８】図６に示したセクタＳＥＣ２が満杯になった後に次のセクタＳＥＣ３にデータを移行する例を示している。
【図９】図６および図８において、次のセクタにデータを移行する手順の例を示している。
【図１０】図７において、有効なセクタからデータを読み出すときの検索方法の手順の例を示している。
【発明を実施するための形態】
【００１０】
以下、実施形態を図面を用いて説明する。
【００１１】
図１は、一実施形態におけるシステムＳＹＳの例を示している。システムＳＹＳ（ユーザシステム）は、例えば、携帯機器等のマイクロコンピュータシステムの少なくとも一部を構成する。
【００１２】
例えば、システムＳＹＳは、フラッシュメモリＦＬＡＳＨ等の不揮発性半導体メモリと、フラッシュメモリＦＬＡＳＨのアクセスを制御するフラッシュメモリ制御回路ＭＣＮＴとを有している。フラッシュメモリ制御回路ＭＣＮＴは、フラッシュメモリＦＬＡＳＨにアクセスするために、フラッシュメモリＦＬＡＳＨにアドレス信号ＡＤ、コマンド信号ＣＭＤを供給する。フラッシュメモリＦＬＡＳＨは、アドレス信号ＡＤおよびコマンド信号ＣＭＤに応じて、書き込み動作、読み出し動作または消去動作を実行する。フラッシュメモリ制御回路ＭＣＮＴは、書き込み動作時に書き込みデータをフラッシュメモリＦＬＡＳＨのデータ端子Ｉ／Ｏに供給する。フラッシュメモリ制御回路ＭＣＮＴは、読み出し動作時にフラッシュメモリＦＬＡＳＨのデータ端子Ｉ／Ｏから読み出しデータを受ける。
【００１３】
例えば、フラッシュメモリ制御回路ＭＣＮＴは、ＣＰＵ（Central Processing Unit）等のコンピュータであり、プログラムを実行することでフラッシュメモリＦＬＡＳＨに書き込み動作、読み出し動作および消去動作を実行させる。あるいは、フラッシュメモリ制御回路ＭＣＮＴは、ＣＰＵ等のコントローラからの指示を受け、フラッシュメモリＦＬＡＳＨのアクセスを制御するメモリコントローラである。このとき、フラッシュメモリ制御回路ＭＣＮＴは、ＣＰＵにより実行されるプログラムにより指示されて、フラッシュメモリＦＬＡＳＨのアクセスを制御する。プログラムは、ＣＰＵにより読み取り可能な記録媒体に格納されている。以降で説明する動作は、例えば、プログラムが実行されることにより実現される。
【００１４】
フラッシュメモリＦＬＡＳＨは、少なくとも２つのセクタＳＥＣ（ＳＥＣ１、ＳＥＣ２）を有している。各セクタＳＥＣ１−２は、データ端子Ｉ／Ｏで受けるデータが書き込まれる複数の記憶領域ＳＡを有している。各記憶領域ＳＡは、データＤＡＴＡ、データＤＡＴＡの種類を示す識別子ＩＤおよびデータＤＡＴＡが更新されているか否かを示す更新フラグＲＮＦを有している。各セクタＳＥＣは、前に有効だったセクタＳＥＣで更新されなかったデータＤＡＴＡの識別子ＩＤを格納する付加領域ＡＡを有している。例えば、識別子ＩＤは１０進数で表される。
【００１５】
フラッシュメモリＦＬＡＳＨへのデータの書き込みは、記憶領域ＳＡ単位または付加領域ＡＡに対して実施される。フラッシュメモリＦＬＡＳＨのデータの消去は、セクタＳＥＣ単位で実施される。記憶領域ＳＡへのデータＤＡＴＡおよび識別子ＩＤの上書きは実施できない。
【００１６】
この実施形態では、フラッシュメモリＦＬＡＳＨにデータＤＡＴＡを書き込み、保持するデータ処理は、次のように実施される。フラッシュメモリ制御回路ＭＣＮＴは、データＤＡＴＡを識別子ＩＤとともにセクタＳＥＣ１に順に格納していき、古いデータＤＡＴＡ（ＯＬＤ）が新しいデータＤＡＴＡ（ＮＥＷ）に順次に更新される。セクタＳＥＣ１が満杯になったときに、次のセクタＳＥＣ２にデータＤＡＴＡが移行される。この際、識別子ＩＤ毎に、セクタＳＥＣ１内で最も新しいデータＤＡＴＡと識別子ＩＤがセクタＳＥＣ２に移行される。データＤＡＴＡの読み書きを実施する有効なセクタＳＥＣは１つのみである。
【００１７】
データＤＡＴＡおよび識別子ＩＤがセクタＳＥＣ２に移行された後、セクタＳＥＣ１は、フラッシュメモリ制御回路ＭＣＮＴの消去の指示に基づいて消去される状態になり、無効にされる。セクタＳＥＣ２は、セクタＳＥＣ１の無効化とともに有効にされる。セクタＳＥＣ１の消去動作は、セクタＳＥＣ２がデータＤＡＴＡで満杯になり移行される前に実施される。
【００１８】
フラッシュメモリ制御回路ＭＣＮＴは、新たなデータＤＡＴＡを識別子ＩＤとともにセクタＳＥＣ２に順に格納していく。セクタＳＥＣ２が満杯になったとき、識別子ＩＤ毎に、セクタＳＥＣ２内で最も新しいデータＤＡＴＡがセクタＳＥＣ１に移行される。このように、セクタＳＥＣ１−２を交互に使用して、データＤＡＴＡが保持される。なお、フラッシュメモリＦＬＡＳＨが３つ以上のセクタＳＥＣを有するとき、これ等セクタＳＥＣを順に使用して、データＤＡＴＡが格納される。
【００１９】
セクタＳＥＣ１−２の全ての領域は、初期状態において消去されており、空き領域になっている。各セクタＳＥＣ１−２において、例えば、データＤＡＴＡは、アドレスの先頭側の空き領域から順に書き込まれる。図１のセクタＳＥＣ２において、空白の記憶領域ＳＡは、空き領域を示している。この例では、先頭のアドレスは、図１の最も上の記憶領域ＳＡに割り当てられている。すなわち、図１の上側の記憶領域ＳＡのアドレスの値は小さく、下側の記憶領域ＳＡのアドレスの値は大きい。
【００２０】
フラッシュメモリ制御回路ＭＣＮＴは、新たなデータＤＡＴＡを識別子ＩＤとともに空き領域に書き込み、新しいデータＮＥＷであること示す値を対応する更新フラグＲＮＦに格納する。なお、消去状態の更新フラグＲＮＦがＮＥＷを示すとき、更新フラグＲＮＦへの書き込みは不要である。さらに、フラッシュメモリ制御回路ＭＣＮＴは、前から存在しているデータＤＡＴＡに対応する更新フラグＲＮＦをＮＥＷからＯＬＤ（古いデータ）に書き換える。これにより、１つの識別子ＩＤに対応する複数のデータＤＡＴＡがセクタＳＥＣ内に存在するときにも、データＤＡＴＡの新旧を区別できる。
【００２１】
例えば、新しいデータＮＥＷは論理１で示され、古いデータＯＬＤは論理０で示される。一般に、フラッシュメモリＦＬＡＳＨでは、消去状態が論理１であり、書き込み状態が論理０である。このため、更新フラグＲＮＦはＮＥＷからＯＬＤに変更可能である。各記憶領域ＳＡの更新フラグＲＮＦがＮＥＷからＯＬＤに書き換えられることで、識別子ＩＤ毎にデータＤＡＴＡが更新される。
【００２２】
図１のフラッシュメモリＦＬＡＳＨ内部の矢印は、セクタＳＥＣ１の全ての記憶領域ＳＡにデータＤＡＴＡが書き込まれた後、新しいデータＤＡＴＡを次のセクタＳＥＣ２に移行する状態を示している。すなわち、フラッシュメモリ制御回路ＭＣＮＴは、有効なセクタＳＥＣ１が満杯になったときに、更新フラグＲＮＦにＮＥＷが格納されているデータＤＡＴＡを、最も新しいデータＤＡＴＡとしてセクタＳＥＣ２にコピーする。この際、フラッシュメモリ制御回路ＭＣＮＴは、セクタＳＥＣ１内でＮＥＷを示すデータＤＡＴＡをアドレスの先頭から検索し、図に矢印で示したように識別子ＩＤとともにセクタＳＥＣ２の先頭から順に書き込む。
【００２３】
太い矢印は、セクタＳＥＣ１で一度も更新されていないデータＤＡＴＡのセクタＳＥＣ２への移行を示す。細い矢印は、セクタＳＥＣ１で少なくとも１回更新されたデータＤＡＴＡのセクタＳＥＣ２への移行を示す。この例では、矢印で示すように、ＮＥＷを示すデータＤＡＴＡを、アドレスの小さい順に次のセクタＳＥＣ２に移行する例を示している。しかし、更新頻度の低いデータＤＡＴＡからアドレスの小さい順に次のセクタＳＥＣ２に移行してもよい。このとき、識別子ＩＤ＝９のデータＤＡＴＡは、識別子ＩＤ＝６のデータＤＡＴＡより先にセクタＳＥＣ２にコピーされる。
【００２４】
また、フラッシュメモリ制御回路ＭＣＮＴは、一度も更新されていないデータＤＡＴＡの識別子ＩＤの番号（太い矢印で示した識別子ＩＤ）をセクタＳＥＣ２の付加領域ＡＡに書き込む。一度も更新されていないデータＤＡＴＡは、セクタＳＥＣ１内に同じ識別子ＩＤが１つしか存在しないことを確認することで判定できる。この後、フラッシュメモリ制御回路ＭＣＮＴは、セクタＳＥＣ１を無効とし、セクタＳＥＣ２を有効とする。無効なセクタＳＥＣ１に格納されている情報は、次にデータＤＡＴＡがセクタＳＥＣ２から移行される前に消去される。データＤＡＴＡを読み出す処理については、図２で説明する。
【００２５】
図２は、図１に示したシステムＳＹＳにおいて、セクタＳＥＣ２からセクタＳＥＣ１にデータＤＡＴＡを移行する例を示している。この例では、セクタＳＥＣ２が有効になった後、識別子ＩＤが”８、６、３、７、５、９、２”のデータＤＡＴＡがセクタＳＥＣ２に書き込まれ、更新される。識別子ＩＤが”７”のデータＤＡＴＡを除く他のデータＤＡＴＡは、セクタＳＥＣ１からの移行による古いデータＤＡＴＡがセクタＳＥＣ２に既に格納されている。古いデータＤＡＴＡの更新フラグＲＮＦは、ＮＥＷからＯＬＤに設定される。これにより、更新されないデータＤＡＴＡは、アドレスの小さい記憶領域ＳＡに残り、更新されたデータＤＡＴＡは、アドレスの大きい記憶領域ＳＡに移っていく。
【００２６】
フラッシュメモリ制御回路ＭＣＮＴは、セクタＳＥＣ２が有効な期間に、付加領域ＡＡを参照することで更新頻度の低いデータを判断できる。具体的には、フラッシュメモリ制御回路ＭＣＮＴは、セクタＳＥＣ２からデータＤＡＴＡを読み出すとき、読み出すデータＤＡＴＡの識別子ＩＤが付加領域ＡＡに存在するか否かを判断する。読み出すデータＤＡＴＡの識別子ＩＤが付加領域ＡＡに存在するとき、フラッシュメモリ制御回路ＭＣＮＴは、セクタＳＥＣ２の先頭からＮＥＷを示す識別子ＩＤを検索して、データＤＡＴＡを読み出す。
【００２７】
読み出すデータＤＡＴＡの識別子ＩＤが付加領域ＡＡに存在しないとき、フラッシュメモリ制御回路ＭＣＮＴは、セクタＳＥＣ２の末尾からＮＥＷが割り付けられた識別子ＩＤを検索して、データＤＡＴＡを読み出す。付加領域ＡＡに存在しない識別子ＩＤに対応するデータＤＡＴＡは、更新されてアドレスが相対的に大きい記憶領域ＳＡに格納されている。このため、アドレスの大きい記憶領域ＳＡから検索する方が、読み出すデータＤＡＴＡの識別子ＩＤを早く見つけることができる。
【００２８】
このように、データＤＡＴＡを読み出すときの検索の順序（方向）を更新頻度に応じて切り替えることで、検索時間を短縮でき、データの読み出し効率を向上できる。換言すれば、更新頻度が低く、先頭側のアドレス領域に格納されているデータＤＡＴＡの読み出し順序を、更新頻度が高く末尾側のアドレス領域に格納されているＤＡＴＡの読み出し順序と逆にすることで、検索時間を短縮でき、データの読み出し効率を向上できる。
【００２９】
例えば、更新頻度の低いデータＤＡＴＡは、プロフィール等の基本情報である。基本情報は、住所やメールアドレス、サービスの契約プランなどの固有情報である。また、更新頻度の低いデータＤＡＴＡは、不定期に更新される情報であり、電気料金等の単価やメンテナンスを受けた日付などである。一方、更新頻度の高いデータＤＡＴＡは、サービスの使用量、使用電力量やリアルタイムに取得される記録などである。
【００３０】
セクタＳＥＣ２が満杯になったときに、図１と同様に、ＮＥＷを示すデータＤＡＴＡは、セクタＳＥＣ１に移行される。この際、付加領域ＡＡに格納されている識別子ＩＤのうち、ＯＬＤが存在しないデータＤＡＴＡは、セクタＳＥＣ２において一度も更新されていないと判断される。すなわち、２回目以後のデータＤＡＴＡの移行処理では、付加領域ＡＡを参照することで、一度も更新されていないデータを迅速に検索できる。
【００３１】
移行処理では、一度も更新されていないデータＤＡＴＡの識別子ＩＤ＝１、４、１０は、セクタＳＥＣ１の付加領域ＡＡに書き込まれる。次に、識別子ＩＤ＝１、４、１０のデータＤＡＴＡがセクタＳＥＣ１の先頭側から順に書き込まれる。残りのＮＥＷを示すデータＤＡＴＡは、識別子ＩＤとともにセクタＳＥＣ１に書き込まれる。そして、セクタＳＥＣ２からセクタＳＥＣ１へのデータＤＡＴＡの移行は完了し、セクタＳＥＣ２が無効にされ、セクタＳＥＣ１が有効にされる。セクタＳＥＣ２に格納されている情報は次回のデータＤＡＴＡの移行処理が始まる前に消去される。
【００３２】
以上、この実施形態では、更新頻度が低いデータＤＡＴＡを、アドレスの先頭側から順に読み出すことで、データＤＡＴＡの検索時間を短縮でき、データの読み出し効率を向上できる。特に、更新されなかったデータＤＡＴＡの識別子ＩＤを付加領域ＡＡに格納することで、更新頻度が低いデータＤＡＴＡを迅速に検索できる。また、更新頻度が低く先頭側のアドレス領域に格納されているデータＤＡＴＡの読み出し順序と、更新頻度が高く末尾側のアドレス領域に格納されているＤＡＴＡの読み出し順序とを逆にすることで、検索時間の平均値を短縮でき、データの読み出し効率を向上できる。
【００３３】
図３は、別の実施形態におけるシステムＳＹＳの例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。システムＳＹＳ（ユーザシステム）は、例えば、携帯機器等のマイクロコンピュータシステムの少なくとも一部を構成する。システムＳＹＳは、シリコン基板上に複数のマクロが集積されて形成されてもよく、パッケージ基板上に複数のチップを搭載して形成されてもよい。
【００３４】
例えば、システムＳＹＳは、ＣＰＵ（コントローラ）、ＲＯＭ、ＲＡＭ、フラッシュメモリ制御回路ＭＣＮＴおよびフラッシュメモリＦＬＡＳＨを有している。ＣＰＵ、ＲＯＭ、ＲＡＭおよびフラッシュメモリ制御回路ＭＣＮＴは、システムバスＳＢＵＳにより互いに接続されている。フラッシュメモリ制御回路ＭＣＮＴとフラッシュメモリＦＬＡＳＨは専用のバスにより互いに接続されている。なお、フラッシュメモリ制御回路ＭＣＮＴの機能をＣＰＵに持たせて、フラッシュメモリ制御回路ＭＣＮＴを介することなくＣＰＵによりフラッシュメモリＦＬＡＳＨを直接アクセスしてもよい。
【００３５】
ＣＰＵは、ＲＯＭ、ＲＡＭにアクセスするとともに、フラッシュメモリ制御回路ＭＣＮＴを介してフラッシュメモリＦＬＡＳＨにアクセスし、システム全体の動作を制御する。フラッシュメモリＦＬＡＳＨは、ＣＰＵからの指示により動作するフラッシュメモリ制御回路ＭＣＮＴからのアクセス要求に応じて、書き込み動作、読み出し動作および消去動作を実行する。特に限定されないが、フラッシュメモリＦＬＡＳＨは、４つのセクタＳＥＣ（ＳＥＣ１−ＳＥＣ４）を有している。
【００３６】
例えば、ＲＯＭは、ＣＰＵが実行するプログラムＰＧＭを格納している。プログラムＰＧＭは、図５から図１０に示すデータ処理方法を実施するためのプログラムを含んでいる。なお、システムＳＹＳが動作するとき、プログラムＰＧＭをＲＯＭからＲＡＭに転送し、ＲＡＭ上のプログラムＰＧＭをＣＰＵにより実行してもよい。また、図５から図１０に示すデータ処理方法の一部は、フラッシュメモリ制御回路ＭＣＮＴにより実施されてもよい。さらに、フラッシュメモリＦＬＡＳＨをフラッシュメモリ制御回路ＭＣＮＴを介することなくＣＰＵに直接接続してもよい。このとき、システムＳＹＳの最小構成は、ＣＰＵとフラッシュメモリＦＬＡＳＨであり、ＣＰＵが実行するプログラムは、例えば、ＣＰＵに内蔵されるＲＯＭ領域に格納される。
【００３７】
図４は、図３に示したフラッシュメモリＦＬＡＳＨに格納されるデータＤＡＴＡの例を示している。セクタＳＥＣ１−４の構成は同じため、セクタＳＥＣ１について説明する。また、図１と同じ要素については、詳細な説明は省略する。
【００３８】
セクタＳＥＣ１は、図１に示した記憶領域ＳＡおよび付加領域ＡＡに加えて、ヘッダＨＥＡＤ、移行処理時のデータＤＡＴＡの移行数ｍを記憶する領域および更新されていないデータＤＡＴＡの数（未更新数ｎ）を記憶する領域を有している。付加領域ＡＡには、直前に無効にされたセクタＳＥＣにおいて更新されなかったデータＤＡＴＡの識別子ＩＤを示す非更新情報Ｄｉ（ｉは識別子の番号）が格納される。なお、付加領域ＡＡは図１に示す様に固定された個数が格納できてもよいが、未更新数ｎの個数だけ作成されてもよい。後者の場合、記憶領域ＳＡの先頭アドレスは未更新数ｎから算出することができるため、記憶領域ＳＡは問題なく扱える。移行数ｍおよび未更新数ｎについては、図５および図６で説明する。
【００３９】
例えば、ヘッダＨＥＡＤには、そのセクタＳＥＣが有効か無効かを示す有効フラグ、データＤＡＴＡの移行により消去が必要であることを示す消去必要フラグ、および消去が完了していることを示す消去完了フラグ等が格納される。例えば、有効フラグは２ビットを有し、２進数で”１０”のときに有効状態を示し、”００”のときに無効状態を示し、”１１”のときに消去状態を示す。有効状態の有効フラグは、そのセクタＳＥＣが使用中であることを示す。例えば、消去必要フラグは１ビットを有し、２進数で”１”のとき消去が不要なことを示し、”０”のとき消去が必要なことを示す。例えば、消去完了フラグは、１ビットを有し、２進数で”１”のとき消去が完了していることを示し、”０”のとき消去が完了していないことを示す。
【００４０】
図５は、図４に示したセクタＳＥＣ１にデータＤＡＴＡを書き込む例を示している。図５において、空白で示した記憶領域ＳＡは、消去状態であることを示している。図５に示した例は、他のセクタＳＥＣ(例えば、ＳＥＣ４)満杯になり、他のセクタＳＥＣからセクタＳＥＣ１にデータＤＡＴＡが移行され、セクタＳＥＣ１が有効になった後の動作を示している。
【００４１】
例えば、セクタＳＥＣ４からセクタＳＥＣ１にデータＤＡＴＡが移行されたとき、識別子ＩＤ＝３、１、６、４、２、５のデータＤＡＴＡは、セクタＳＥＣ４が有効なときに更新されたデータである。したがって、図５（Ａ）では、更新されていないデータＤＡＴＡの数を示す未更新数ｎは”０”に設定され、非更新情報Ｄｉは付加領域ＡＡに書き込まれていない。付加領域ＡＡの”Ｆ”は、２進数の”１１１１”を示し、非更新情報Ｄｉが書き込まれていない消去状態を示す。なお、付加領域ＡＡの各々は、５ビット以上が割り当てられてもよい。セクタＳＥＣ１が有効にされたときに、６つのデータＤＡＴＡが格納されているため、移行処理時のデータＤＡＴＡの移行数ｍは”６”に設定される。
【００４２】
次に、図５（Ｂ）に示すように、セクタＳＥＣ１に識別子ＩＤ＝３のデータＤＡＴＡが書き込まれる。新たなデータＤＡＴＡは、空き領域のうち、最もアドレスが小さい記憶領域ＳＡに、識別子ＩＤとともに書き込まれる。すなわち、新たなデータＤＡＴＡは、セクタＳＥＣ４から移行されてセクタＳＥＣ１に格納されたデータＤＡＴＡの後に格納される。
【００４３】
新たなデータＤＡＴＡがセクタＳＥＣ１に書き込まれるときに、同じ識別子ＩＤを有するデータＤＡＴＡが記憶領域ＳＡに格納されているか否かを検索する。この例では、識別子ＩＤ＝３のデータＤＡＴＡが先頭の記憶領域ＳＡに既に格納されている。このため、先頭の記憶領域ＳＡの更新フラグＲＮＦがＮＥＷからＯＬＤに変更される。なお、更新フラグＲＮＦのＮＥＷは、論理１（消去状態）で示される。このため、新たなデータＤＡＴＡを空き領域に書き込むとき、更新フラグＲＮＦにＮＥＷを書き込む必要はない。
【００４４】
次に、図５（Ｃ）に示すように、識別子ＩＤ＝１０、３の新たなデータＤＡＴＡが、空白の記憶領域ＳＡに順次に書き込まれる。識別子ＩＤ＝３のデータＤＡＴＡは、記憶領域ＳＡに既に存在する。このため、既に存在する識別子ＩＤ＝３のデータＤＡＴＡに対応する更新フラグＲＮＦがＯＬＤに変更される。この後、図５（Ｄ）に示すように、新たなデータＤＡＴＡがアドレスの大きい側に順に書き込まれていく。
【００４５】
図６は、図４に示したセクタＳＥＣ１が満杯になった後に次のセクタＳＥＣ２にデータを移行する例を示している。図５（Ｄ）の状態からデータＤＡＴＡが１つ書き込まれるとセクタＳＥＣ１は満杯になる。なお、実際には、各セクタＳＥＣ１−４は、例えば数百個の記憶領域ＳＡを有している。
【００４６】
まず、セクタＳＥＣ１に格納されている移行数ｍだけ、先頭アドレスから順に更新フラグＲＮＦが読み出される。次に、ｍ個の更新フラグＲＮＦのうち、ＮＥＷが格納されている更新フラグＲＮＦに対応する識別子ＩＤが、次のセクタＳＥＣ２の付加領域ＡＡに非更新情報Ｄｉとして書き込まれる。このとき、付加領域ＡＡに書き込んだ識別子ＩＤの数（この例では”３”）は、新たな未更新数ｎとして次のセクタＳＥＣ２に書き込まれる。
【００４７】
また、セクタＳＥＣ１内でＮＥＷが格納されている記憶領域ＳＡの識別子ＩＤとデータＤＡＴＡとが、次のセクタＳＥＣ２の記憶領域ＳＡに順に書き込まれる。セクタＳＥＣ２に書き込んだデータＤＡＴＡの数（この例では”１０”）が、新たな移行数ｍとしてセクタＳＥＣ２に書き込まれる。そして、セクタＳＥＣ１からセクタＳＥＣ２へのデータＤＡＴＡの移行が完了する。
【００４８】
図７は、有効なセクタＳＥＣ２からデータＤＡＴＡを読み出すときの検索方法の例を示している。なお、この例では、セクタＳＥＣ２の付加領域ＡＡにおける３番目の非更新情報Ｄｉ（識別子ＩＤ＝２）は、新たなデータＤＡＴＡが書き込まれたため”０”にクリアされている。”０”は識別子ＩＤとして無効であることを示すが、以後誤って判定されないために意図して無効な識別子ＩＤが書き込まれている。また、図７では、セクタＳＥＣ２が満杯状態になっているが、データＤＡＴＡは、全ての記憶領域ＳＡにデータＤＡＴＡが格納されていなくても読み出し可能である。
【００４９】
まず、データＤＡＴＡを読み出す前に、未更新数ｎの値が読み出される。読み出すデータＤＡＴＡに対応する識別子ＩＤが、付加領域ＡＡに格納されたｎ個の非更新情報Ｄｉのいずれかと一致するとき、ｉ番目の非更新情報Ｄｉが読み出される。そして、読み出した非更新情報Ｄｉにより示される識別子ＩＤに対応するデータＤＡＴＡが、アドレスの小さい側の記憶領域ＳＡから読み出される（前方検索）。
【００５０】
具体的には、例えば、識別子ＩＤ＝４は、付加領域ＡＡの２番目の非更新情報Ｄｉとして格納されている。このため、識別子ＩＤ＝４のデータＤＡＴＡを読み出すとき、先頭から２番目の記憶領域ＳＡに格納されているデータＤＡＴＡが読み出される。一方、付加領域ＡＡに格納されていない識別子ＩＤに対応するデータＤＡＴＡは、更新頻度が高いと判断され、アドレスの大きい記憶領域ＳＡから検索して読み出される（後方検索）。
【００５１】
図８は、図６に示したセクタＳＥＣ２が満杯になった後に次のセクタＳＥＣ３にデータを移行する例を示している。セクタＳＥＣ２の状態は、図７と同じである。基本的な動作は、図６と同じである。
【００５２】
まず、移行数ｍに対応する数の更新フラグＲＮＦのうち、ＮＥＷが格納されている更新フラグＲＮＦに対応する識別子ＩＤが、セクタＳＥＣ３の付加領域ＡＡに非更新情報Ｄｉとして書き込まれる。新たな未更新数ｎ（この例では”４”）が、セクタＳＥＣ３に書き込まれる。セクタＳＥＣ２内のＮＥＷに対応する識別子ＩＤとデータＤＡＴＡとが、次に有効になるセクタＳＥＣ３の記憶領域ＳＡに順に書き込まれる。新たな移行数ｍ（この例では”１０”）が、セクタＳＥＣ３に書き込まれる。そして、セクタＳＥＣ２からセクタＳＥＣ３へのデータＤＡＴＡの移行が完了する。
【００５３】
図９は、図６および図８において、次のセクタＳＥＣにデータＤＡＴＡを移行する手順の例を示している。図９に示した手順は、ＣＰＵが実行するプログラム、あるいは、フラッシュメモリ制御回路ＭＣＮＴの動作により実現される。
【００５４】
まず、ステップＳ１００において、アドレスを示すカウンタ値ｒの初期値が”１”に設定され、内部カウンタ値ｉおよび未更新数ｎの初期値が”０”にクリアされる。カウンタ値ｒは、図４等で上から下に向けて昇順に並ぶ記憶領域ＳＡの位置（番号）を示している。
【００５５】
ステップＳ１０２において、カウンタ値ｒが最大値ｍａｘを超えているか否かが判定される。最大値ｍａｘは、最も大きいアドレスの値を示し、セクタＳＥＣ内で最もアドレスの大きい記憶領域ＳＡを示す。カウンタ値ｒが最大値ｍａｘを超えているとき、すなわち、全ての記憶領域ＳＡが検索されたとき、処理はステップＳ１１８に移行する。カウンタ値ｒが最大値ｍａｘ以下のとき、すなわち、検索されていない記憶領域ＳＡがあるとき、処理はステップＳ１０４に移行する。
【００５６】
ステップＳ１０４において、ｒ番目の記憶領域ＳＡのデータＤＡＴＡが更新されているかどうかが判定される。データＤＡＴＡがＮＥＷのとき処理はステップＳ１０６に移行する。データＤＡＴＡがＮＥＷでないとき、すなわちＯＬＤのとき、処理はステップＳ１１６に移行する。
【００５７】
ステップＳ１０６において、内部カウンタ値ｉが”１”増加される。ステップＳ１０８において、カウンタ値ｒが移行数ｍを超えているか否かが判定される。カウンタ値ｒが移行数ｍ以下のとき、対応するデータＤＡＴＡが一度も更新されなかったと判断され、処理はステップＳ１１０に移行する。カウンタ値ｒが移行数ｍを超えているとき、対応するデータＤＡＴＡが少なくとも１回更新されたと判断され、処理はステップＳ１１４に移行する。
【００５８】
ステップＳ１１０において、付加領域ＡＡに格納される更新されなかったデータＤＡＴＡの数を示す未更新数ｎが”１”増加される。次に、ステップＳ１１２において、次のセクタＳＥＣの付加領域ＡＡにおいて、識別子ＩＤの番号がｉ番目の非更新情報Ｄｉとして書き込まれる。
【００５９】
ステップＳ１１４において、次のセクタＳＥＣのｉ番目の記憶領域ＳＡにデータＤＡＴＡと識別子ＩＤが書き込まれる。次に、ステップＳ１１６において、アドレスを示すカウンタ値rが”１”増加され、処理はステップＳ１０２に戻る。
【００６０】
一方、ステップＳ１１８において、全ての記憶領域ＳＡが検索されたとき、求められた未更新数ｎが、次のセクタＳＥＣに書き込まれる。次に、ステップＳ１２０において、現在有効なセクタＳＥＣから次に有効になるセクタＳＥＣへのデータＤＡＴＡの移行数ｍを示すカウンタ値ｉ（すなわち、ＮＥＷを示すデータＤＡＴＡの数）が、次のセクタＳＥＣに書き込まれる。そして、図６および図８に示したように、次のセクタＳＥＣへのデータの移行が完了する。
【００６１】
図１０は、図７において、有効なセクタＳＥＣからデータＤＡＴＡを読み出すときの検索方法の手順の例を示している。図１０に示した手順は、ＣＰＵが実行するプログラム、あるいは、フラッシュメモリ制御回路ＭＣＮＴの動作により実現される。
【００６２】
まず、ステップＳ２００において、読み出すデータＤＡＴＡの識別子ＩＤが認識される。次に、ステップＳ２０２において、セクタＳＥＣから未更新数ｎが読み出される。次に、ステップＳ２０４において、内部カウンタ値ｉが”１”に設定される。
【００６３】
ステップＳ２０６において、内部カウンタ値ｉが未更新数ｎを超えているか否かが判定される。内部カウンタ値ｉが未更新数ｎを超えているとき、すなわち、読み出すデータＤＡＴＡの更新頻度が高いと判定されたとき、図７に示した後方検索をするために、処理はステップＳ２１２に移行する。内部カウンタ値ｉが未更新数ｎ以下のとき、すなわち、読み出すデータＤＡＴＡの更新頻度が低い可能性があるとき、処理はステップＳ２０８に移行する。
【００６４】
ステップＳ２０８において、識別子ＩＤが、ｉ番目の非更新情報Ｄｉとして付加領域ＡＡに格納されているか否かが判定される。識別子ＩＤがｉ番目の非更新情報Ｄｉとして格納されているとき、すなわち、識別子ＩＤのデータＤＡＴＡの更新頻度が低いことが判明したとき、処理はステップＳ２２０に移行する。識別子ＩＤがｉ番目の非更新情報Ｄｉとして格納されていないとき、処理はステップＳ２１０に移行する。ステップＳ２１０において、内部カウンタ値ｉが”１”増加され、処理はステップＳ２０６に戻る。
【００６５】
一方、ステップＳ２１２において、後方検索をするために、内部カウンタ値ｉが最大値ｍａｘに設定される。最大値ｍａｘは、最も大きいアドレスの値を示し、セクタＳＥＣ内で最もアドレスの大きい記憶領域ＳＡを示す。次に、ステップＳ２１４において、ｉ番目の識別子ＩＤが読み出される。次に、ステップＳ２１６において、読み出すデータＤＡＴＡの識別子ＩＤがｉ番目の識別子ＩＤと一致するか否かが判定される。読み出すデータＤＡＴＡの識別子ＩＤがｉ番目の識別子ＩＤと一致するとき、処理はステップＳ２２０に移行する。読み出すデータＤＡＴＡの識別子ＩＤがｉ番目の識別子ＩＤと異なるとき、処理はステップＳ２１８に移行する。
【００６６】
ステップＳ２１８において、次の後方検索を実施するために、アドレスを示す内部カウンタ値ｉが”１”減少され、処理はステップＳ２１４に戻る。ステップＳ２２０において、セクタＳＥＣ内での読み出すデータＤＡＴＡの位置が判明したため、ｉ番目のデータＤＡＴＡが読み出される。そして、読み出し処理が完了する。
【００６７】
以下に、データＤＡＴＡの読み出し処理における検索効率について考察する。まず、前提条件を示す。
（１）全ての識別子ＩＤの数は５０個とし、更新頻度の低い識別子ＩＤの数（すなわち、付加領域ＡＡに格納された識別子ＩＤの数）は１０個とする。
（２）セクタＳＥＣに格納されている検索対象のデータＤＡＴＡの数は１００個とする。
（３）更新頻度の低くないデータＤＡＴＡ（すなわち、付加領域ＡＡに格納されていない識別子ＩＤに対応するデータＤＡＴＡ）を読み出すときの検索回数の平均は２０．５回とする。ここで、更新頻度の低くないデータＤＡＴＡは、アドレスが最も大きい側の４０個の記憶領域ＳＡに格納されていると仮定する。このとき、データＤＡＴＡの最小検索回数は１回であり、最大検索回数は４０回であり、その平均は２０．５回である。
【００６８】
上記の前提条件より、更新頻度の低いデータＤＡＴＡの最小検索回数は１回であり、最大検索回数は１０回であり、その平均は５．５回である。このため、更新頻度の低いデータＤＡＴＡ（すなわち、付加領域ＡＡに格納された識別子ＩＤに対応するデータＤＡＴＡ）が読み出される確率をＰ（％）とすると、データＤＡＴＡを読み出すときの平均検索回数は、式（１）で示される。
5.5×P/100＋20.5×(100-P)/100＝20.5−(15×P)/100  ‥‥（１）
式（１）では、例えば、Ｐ＝１０％のとき、平均検索回数は１９回になり、Ｐ＝２０％のとき、平均検索回数は１７．５回になる。
【００６９】
これに対して、更新頻度の低いデータＤＡＴＡを後方検索のみにより検索するとき、最小検索回数は９１回であり、最大検索回数は１００回であり、その平均は９５．５回である。このため、後方検索のみによりデータＤＡＴＡを読み出すときの検索するときの平均検索回数は、式（２）で示される。
95.5×P/100＋20.5×(100-P)/100＝20.5＋(75×P)/100  ‥‥（２）
式（２）では、例えば、Ｐ＝１０％のとき、平均検索回数は２８回になり、Ｐ＝２０％のとき、平均検索回数は３５．５回になる。したがって、本実施形態を適用することにより、後方検索のみを使用するときに比べて、平均検索回数を約３２％（Ｐ＝１０％）または約５１％（Ｐ＝２０％）削減できる。
【００７０】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、ヘッダＨＥＡＤに有効フラグ、消去必要フラグ、消去完了フラグを設けることで、有効なデータＤＡＴＡが記憶されている有効なセクタＳＥＣを容易に検出できる。
【００７１】
なお、上述した実施形態では、有効なセクタＳＥＣから次のセクタＳＥＣにデータＤＡＴＡを移行するときに、ＮＥＷを示すデータＤＡＴＡを次のセクタＳＥＣに順にコピーする例について述べた。しかしながら、データＤＡＴＡを次のセクタＳＥＣにコピーするときに、識別子ＩＤを番号順に並び替え、識別子ＩＤが昇順または降順にされたデータＤＡＴＡを次のセクタに順に書き込んでもよい。これにより、読み出すデータＤＡＴＡを検索するときに、検索する領域を段階的に２つに分けながら検索するバイナリサーチを実施できる。この結果、読み出すデータＤＡＴＡの検索回数をさらに削減できる。具体的には、上述した前提条件において、更新頻度の低いデータＤＡＴＡの検索回数の平均を３．６回にできる。これを式（１）に当てはめると、Ｐ＝２０％のとき、平均検索回数は１７．１回になる。
【００７２】
上述した実施形態は、フラッシュメモリＦＬＡＳＨに格納されるデータＤＡＴＡのデータ処理方法について説明した。しかし、上述した実施形態は、データの書き込みを所定のサイズの記憶領域毎に行い、データの消去を複数の記憶領域で一括して行う他の不揮発性半導体メモリに適用してもよい。
【００７３】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
複数のセクタを有するフラッシュメモリにおけるデータ処理方法において、
前記複数のセクタは少なくとも第１セクタと第２セクタを含み、
前記フラッシュメモリを制御するフラッシュメモリ制御回路は、前記第１セクタのデータを前記第２セクタに移行するとき、前記第１セクタにおいて更新されなかったデータを前記第２セクタの先頭から配置するとともに、前記更新されなかったデータの識別子を前記第２セクタに付加すること
を特徴とするデータ処理方法。
（付記２）
前記第２セクタに格納された前記第１セクタで更新されなかったデータの後に、前記第１セクタで更新されたデータが格納されること
を特徴とする付記１に記載のデータ処理方法。
（付記３）
前記フラッシュメモリ制御回路は、前記更新されなかったデータのデータ数を前記第２セクタに付加すること
を特徴とする付記１または付記２に記載のデータ処理方法。
（付記４）
前記フラッシュメモリからデータを読み出すとき、
読み出すデータの識別子と前記更新されなかったデータの識別子とを比較し、
前記読み出すデータの識別子が前記更新されなかったデータの識別子に一致するとき、前記読み出すデータの検索は前記第２セクタの前方から行われること
を特徴とする付記１乃至付記３の何れか一に記載のデータ処理方法。
（付記５）
前記フラッシュメモリからデータを読み出すとき、
読み出すデータの識別子と前記更新されなかったデータの識別子とを比較し、
前記読み出すデータの識別子が前記更新されなかったデータの識別子に一致しないとき、前記読み出すデータの検索は前記第２セクタの後方から行われること
を特徴とする付記１乃至付記４の何れか一に記載のデータ処理方法。
（付記６）
前記第１セクタには消去のフラグが設定され、
前記第２セクタには使用中であることを示すフラグが設定されること
を特徴とする付記１乃至付記５の何れか一に記載のデータ処理方法。
（付記７）
前記フラッシュメモリ制御回路は、前記更新されなかったデータの識別子を前記第２セクタに付加すること
を特徴とする付記１乃至付記３の何れか一に記載のデータ処理方法。
（付記８）
前記更新されなかったデータが更新された場合には前記付加されたデータの識別子は無効化されること
を特徴とする付記７に記載のデータ処理方法。
（付記９）
コンピュータによって実行されるとともに前記コンピュータが読み取り可能な記録媒体に格納されるプログラムにおいて、
第１セクタと第２セクタとを有するフラッシュメモリに読み出すデータの識別子が供給され、
前記読み出すデータの識別子と前記第１セクタで更新されなかったデータの識別子と比較し、
前記識別子が一致するときは、前記読み出すデータを前記第２セクタの前方から検索し、
前記識別子が一致しないときは、前記読み出すデータを前記第２セクタの後方ら検索すること
を特徴とするプログラム。
（付記１０）
前記第１セクタで更新されなかったデータは、前記第２セクタに付加されること
を特徴とする付記９に記載のプログラム。
（付記１１）
前記第１セクタのデータを前記第２セクタに移行するときに、前記第１セクタで更新されなかったデータが前記第２セクタの前方から前記第２セクタに格納されること
を特徴とする付記９または付記１０に記載のプログラム。
（付記１２）
前記第２セクタに格納された前記第１セクタで更新されなかったデータの後に、前記第１セクタで更新されたデータが格納されること
を特徴とする付記１１に記載のプログラム。
（付記１３）
前記第１セクタにおいて更新されなかったデータの識別子を前記第２セクタに付加し、
前記第２セクタにおいて前記更新されなかったデータが更新されたときは前記付加されたデータの識別子を無効化すること
を特徴とする付記９乃至付記１２の何れか一に記載のプログラム。
（付記１４）
ＣＰＵと、
少なくとも第１セクタと第２セクタとを含むフラッシュメモリと、
前記ＣＰＵによって制御されるフラッシュメモリ制御回路と
を含み、
前記フラッシュメモリ制御回路は、
前記ＣＰＵからのデータ読み出しの指示に基づいて、
前記読み出すデータの識別子と前記第１セクタで更新されなかったデータの識別子と比較し、
前記識別子が一致するときは、前記読み出すデータを前記第２セクタの前方から検索し、
前記識別子が一致しないときは、前記読み出すデータを前記第２セクタの後方ら検索すること
を特徴とするシステム。
（付記１５）
前記フラッシュメモリ制御回路は
前記第１セクタのデータを前記第２セクタに移行するときに、前記第１セクタで更新されなかったデータを前記第２セクタの前方から前記第２セクタに格納すること
を特徴とする付記１４に記載のシステム。
（付記１６）
前記フラッシュメモリ制御回路は、
前記第２セクタに格納された前記第１セクタで更新されなかったデータの後に、前記第１セクタで更新されたデータを格納すること
を特徴とする付記１５に記載のシステム。
（付記１７）
前記第１セクタは、前記ＣＰＵからの消去に指示に基づいて消去される状態にあること
を特徴とする付記１４乃至付記１６の何れか一に記載のシステム。
（付記１８）
前記フラッシュメモリ制御回路は、
前記第１セクタにおいて更新されなかったデータの識別子を前記第２セクタに付加し、
前記第２セクタにおいて前記更新されなかったデータが更新されたときは前記付加されたデータの識別子を無効化すること
を特徴とする付記１４乃至付記１８の何れか一に記載のシステム。
【００７４】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【００７５】
ＡＡ‥付加領域；ＤＡＴＡ‥データ；ＦＬＡＳＨ‥フラッシュメモリ；ＨＥＡＤ‥ヘッダ；ＩＤ‥識別子；ｍ‥移行数；ＭＣＮＴ‥フラッシュメモリ制御回路；ｎ‥未更新数；ＰＧＭ‥プログラム；ＲＮＦ‥更新フラグ；ＳＡ‥記憶領域；ＳＥＣ‥セクタ；ＳＹＳ‥システム
【図１】
0005520098.tif 000002
【図２】
0005520098.tif 000003
【図３】
0005520098.tif 000004
【図４】
0005520098.tif 000005
【図５】
0005520098.tif 000006
【図６】
0005520098.tif 000007
【図７】
0005520098.tif 000008
【図８】
0005520098.tif 000009
【図９】
0005520098.tif 000010
【図１０】
0005520098.tif 000011