(57)【要約】【課題】ＥＥＰＲＯＭエミュレーションにおいてアクセス処理時間を低減すること。【解決手段】データ処理装置１は、フラッシュメモリ２０と、ＲＡＭ３０と、フラッシュメモリ２０及びＲＡＭ３０にアクセス可能なコントローラ１０とを備える。フラッシュメモリ２０には複数種のデータが記録され、ＲＡＭ３０には記録データ情報ＳＴＲが格納される。記録データ情報ＳＴＲは、複数種のデータの各々の最新データに関して、フラッシュメモリ２０中の先頭アドレスとデータ長を示す。コントローラ１０は、ＲＡＭ３０中の記録データ情報ＳＴＲを参照して、読み出し対象の種類の最新データをフラッシュメモリ２０から読み出す。【選択図】図２
2010020586.tif 000002
【特許請求の範囲】
【請求項１】
複数種のデータが記録されたフラッシュメモリと、
記録データ情報が格納されたＲＡＭと、
前記フラッシュメモリ及び前記ＲＡＭにアクセス可能なコントローラと
を備え、
前記記録データ情報は、前記複数種の各々の最新データに関して、前記フラッシュメモリ中の先頭アドレスとデータ長を示し、
前記コントローラは、前記記録データ情報を参照して、前記複数種のうち読み出し対象の種類の前記最新データを前記フラッシュメモリから読み出す
データ処理装置。
【請求項２】
請求項１に記載のデータ処理装置であって、
前記複数種の各々の前記最新データは、同じ種類の既存データを上書きすることなく、前記フラッシュメモリに追記されている
データ処理装置。
【請求項３】
請求項１に記載のデータ処理装置であって、
新たなデータを前記フラッシュメモリに書き込む際、前記コントローラは、既存データを上書きすることなく、前記フラッシュメモリ中の空き領域に前記新たなデータを書き込む
データ処理装置。
【請求項４】
請求項３に記載のデータ処理装置であって、
前記ＲＡＭには更に、前記フラッシュメモリ中の前記空き領域の先頭アドレスを示す空き領域情報が格納され、
前記コントローラは、前記空き領域情報を参照して、前記空き領域の先頭に前記新たなデータを書き込む
データ処理装置。
【請求項５】
請求項４に記載のデータ処理装置であって、
前記コントローラは、前記新たなデータを書き込んだ後、前記新たなデータの書き込み先とデータ長に基づいて、前記記録データ情報と前記空き領域情報を更新する
データ処理装置。
【請求項６】
請求項４又は５に記載のデータ処理装置であって、
前記フラッシュメモリの複数のブロックは、
前記空き領域の先頭が存在する第１ブロックと、
前記第１ブロックに続く第２ブロックと
を含み、
前記第１ブロック中の前記空き領域が前記新たなデータの書き込みに不足している場合、前記コントローラは、前記空き領域情報が示す前記空き領域の先頭アドレスを、前記第２ブロック中の前記空き領域の先頭アドレスに更新する
データ処理装置。
【請求項７】
フラッシュメモリと、
前記フラッシュメモリ中の空き領域の先頭アドレスを示す空き領域情報が格納されたＲＡＭと、
前記フラッシュメモリ及び前記ＲＡＭにアクセス可能なコントローラと
を備え、
新たなデータを前記フラッシュメモリに書き込む際、前記コントローラは、前記空き領域情報を参照して、前記空き領域の先頭に前記新たなデータを書き込む
データ処理装置。
【請求項８】
請求項７に記載のデータ処理装置であって、
前記コントローラは、前記新たなデータを書き込んだ後、前記新たなデータの書き込み先とデータ長に基づいて、前記空き領域情報を更新する
データ処理装置。
【請求項９】
請求項７又は８に記載のデータ処理装置であって、
前記フラッシュメモリの複数のブロックは、
前記空き領域の先頭が存在する第１ブロックと、
前記第１ブロックに続く第２ブロックと
を含み、
前記第１ブロック中の前記空き領域が前記新たなデータの書き込みに不足している場合、前記コントローラは、前記空き領域情報が示す前記空き領域の先頭アドレスを、前記第２ブロック中の前記空き領域の先頭アドレスに更新する
データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関し、特に、フラッシュメモリを備えるデータ処理装置に関する。
【背景技術】
【０００２】
マイコン等の半導体デバイスに搭載される不揮発性メモリとして、フラッシュメモリやＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）が知られている。フラッシュメモリとＥＥＰＲＯＭは、データ消去単位、書き換え可能回数、回路面積などの点で互いに異なっている。
【０００３】
例えば、データ消去単位は、フラッシュメモリの場合にはブロック単位であり、ＥＥＰＲＯＭの場合にはビット単位である。また、書き換え可能回数は、フラッシュメモリの場合には１００〜１０００回程度であり、ＥＥＰＲＯＭの場合には１万〜１０万回程度である。つまり、データ消去単位や書き換え可能回数の観点から言えば、ＥＥＰＲＯＭの方がフラッシュメモリよりも優れている。その一方、回路面積の観点から言えば、フラッシュメモリの方がＥＥＰＲＯＭよりもはるかに優れている。
【０００４】
そこで、半導体デバイスにフラッシュメモリとＥＥＰＲＯＭの両方を搭載し、記録データに応じてフラッシュメモリとＥＥＰＲＯＭを使い分けることが提案されている。例えば、データ量が多い場合や、書き換え頻度が低いデータの場合は、フラッシュメモリが使用される。一方、データ量が少ない場合や、書き換え頻度が高いデータの場合は、ＥＥＰＲＯＭが使用される。
【０００５】
しかしながら、半導体デバイスにフラッシュメモリとＥＥＰＲＯＭの両方を搭載することは、製造プロセスや製造コストの観点から言えば大きなデメリットである。そこで、半導体デバイスにフラッシュメモリだけを搭載し、そのフラッシュメモリの一部をＥＥＰＲＯＭのように扱う技術が提案されている（特許文献１、特許文献２参照）。フラッシュメモリの一部をＥＥＰＲＯＭのように使用する技術は、一般に、「ＥＥＰＲＯＭエミュレーション」と呼ばれている。
【０００６】
フラッシュメモリのメモリセルのデータを書き換える場合、そのメモリセルに記憶されているデータを消去してからでないと、新たなデータを書き込むことができない。但し、フラッシュメモリのデータ消去単位はブロック単位である。従って、通常のフラッシュメモリでは、あるブロック中のあるデータの書き換えは、当該ブロックの全てのデータを消去した後に行う必要がある。ＥＥＰＲＯＭエミュレーションでは、基本的にデータの書き換えは行われない。その代わり、新たなデータは、未だデータが書き込まれていない空き領域（未使用領域）に追加的に書き込まれていく。そして、割り当てられたブロックが一杯になった時点で、当該ブロックの記録データが一括消去される。これにより、ある１つのメモリセルに関する書き換え回数が減少し、見かけ上の書き換え可能回数がＥＥＰＲＯＭと同程度まで増加する。
【０００７】
ＥＥＰＲＯＭエミュレーションでは、空き領域に新たなデータを書き込むために、また、追記により累積したデータのうち最新データを読み出すために、特有のメモリアクセス方法が必要となる。以下、図１を参照して、特許文献１（特開２００６−２６０４６８）に記載されているメモリアクセス方法を説明する。
【０００８】
図１に示されるように、フラッシュメモリは、複数のブロックを有している。このうちブロックＢｌは、データ長格納領域として用いられる。データ長格納領域には、複数種のデータの識別子（ＩＤ１，ＩＤ２，ＩＤ３）とデータ長との対応関係を示す情報が格納されている。一方、ブロックＢｍ〜Ｂｎは、データを格納するデータ格納領域として用いられる。データ格納領域には、複数種のデータＤ１〜Ｄ３が、それぞれの識別子ＩＤ１〜ＩＤ３と共に格納される。ある１つのデータとその識別子が格納されている領域は、「セクション」と参照される。
【０００９】
データ格納領域へのアクセス時、「スキップ処理」が実施される。具体的には、まず、先頭セクションに格納されている識別子が読み出される。続いて、データ長格納領域に格納されている情報を参照することにより、読み出された識別子に対応付けられたデータ長が得られる。得られたデータ長だけアクセスアドレスを変化させることにより、先頭セクションに格納されているデータを読み出すことなく、次のセクションへのアクセスが可能となる。これがスキップ処理である。
【００１０】
スキップ処理を繰り返すことにより、データ格納領域中の空き領域の先頭を検出することが可能である。データ書き込み時には、検出された空き領域の先頭に新たなデータとその識別子が追記され、新たなセクションが形成される。データ読み出し時には、読み出し対象の種類のデータのうち、最新のもの（最も後ろのアドレスに格納されたもの）を読み出す必要がある。そのために、スキップ処理においてあるセクションから識別子が読み出されたとき、その識別子が読み出し対象の識別子に一致するかどうかの判定が行われる。一致する場合、読み出し対象アドレスが、当該セクションのアドレスに更新される。スキップ処理の繰り返しにより空き領域が検出されたとき、その時点で保持されている読み出し対象アドレスが、読み出し対象の最新データのアドレスを示す。従って、その読み出し対象アドレスに戻り、最新データが読み出される。
【００１１】
【特許文献１】特開２００６−２６０４６８号公報
【特許文献２】特開２００７−１７２２５９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本願発明者は、次の点に着目した。図１で示されたようにスキップ処理が行われる場合、アクセス対象の検出までに時間がかかる。特に、ブロックに多数のデータが既に書き込まれている場合、空き領域の検出までにスキップ処理を何度も繰り返す必要があり、このことはアクセス処理時間の増大を招く。また、空き領域の検出までの時間は、ブロックに既に書き込まれているデータ数に依存して変動する。すなわち、アクセス処理時間のばらつきが大きく、それを予測することができない。これは、システム設計を困難にする。
【課題を解決するための手段】
【００１３】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１４】
本発明の第１の観点において、データ処理装置（１）は、フラッシュメモリ（２０）と、ＲＡＭ（３０）と、フラッシュメモリ（２０）及びＲＡＭ（３０）にアクセス可能なコントローラ（１０）とを備える。フラッシュメモリ（２０）には複数種のデータが記録され、ＲＡＭ（３０）には記録データ情報（ＳＴＲ）が格納される。記録データ情報（ＳＴＲ）は、複数種のデータの各々の最新データに関して、フラッシュメモリ（２０）中の先頭アドレスとデータ長を示す。コントローラ（１０）は、ＲＡＭ（３０）中の記録データ情報（ＳＴＲ）を参照して、読み出し対象の種類の最新データをフラッシュメモリ（２０）から読み出す。
【００１５】
本発明の第２の観点において、データ処理装置（１）は、フラッシュメモリ（２０）と、ＲＡＭ（３０）と、フラッシュメモリ（２０）及びＲＡＭ（３０）にアクセス可能なコントローラ（１０）とを備える。ＲＡＭ（３０）には、フラッシュメモリ（２０）中の空き領域（５０）の先頭アドレス（ＡＤＤＦ）を示す空き領域情報（ＤＦＳ）が格納される。新たなデータをフラッシュメモリ（２０）に書き込む際、コントローラ（１０）は、ＲＡＭ（３０）中の空き領域情報（ＤＦＳ）を参照して、フラッシュメモリ（２０）中の空き領域（５０）の先頭に新たなデータを書き込む。
【発明の効果】
【００１６】
本発明によれば、ＥＥＰＲＯＭエミュレーションにおいて、読み出し対象の種類の最新データをフラッシュメモリから高速に読み出すことが可能となる。また、本発明によれば、ＥＥＰＲＯＭエミュレーションにおいて、新たなデータをフラッシュメモリに高速に書き込むことが可能となる。すなわち、アクセス処理時間が総じて低減される。また、スキップ処理が行われないため、アクセス処理時間のばらつきがなくなる。
【発明を実施するための最良の形態】
【００１７】
添付図面を参照して、本発明の実施の形態を説明する。
【００１８】
１．構成
図２は、本発明の実施の形態に係るデータ処理装置１の構成を示すブロック図である。データ処理装置１は、例えばマイコンである。データ処理装置１は、コントローラ１０、フラッシュメモリ２０、及びＲＡＭ（Random Access Memory）３０を備えている。
【００１９】
コントローラ１０は、ＣＰＵ（Central Processing Unit）とフラッシュメモリコントローラを含んでいる。コントローラ１０は、フラッシュメモリ２０及びＲＡＭ３０にアクセス可能である。コントローラ１０は、メモリアクセスプログラムを実行することにより、フラッシュメモリ２０及びＲＡＭ３０に対するデータ書き込み及びデータ読み出しを実行する。
【００２０】
フラッシュメモリ２０は、プログラムが格納されるプログラム領域２１と、ユーザデータが格納されるデータ保存領域２２とを有している。本実施の形態によれば、データ保存領域２２の少なくとも一部が、ＥＥＰＲＯＭエミュレーションに利用される。データ保存領域２２のうちＥＥＰＲＯＭエミュレーションに割り当てられる領域は、以下、「ＥＥＰＲＯＭ代替領域４０」と参照される。割り当てられるＥＥＰＲＯＭ代替領域４０は、予め決定され、固定される。
【００２１】
図３は、本実施の形態に係るフラッシュメモリ２０を概念的に示している。フラッシュメモリ２０は、複数のブロックＢ０，Ｂ１・・・を有している。１つのブロックのブロックサイズＢＬＳ及びアドレス範囲は、製品毎に予め決まっている。また、フラッシュメモリ２０のデータ消去単位は、ブロック単位である。
【００２２】
上述の通り、フラッシュメモリ２０の少なくとも一部が、ＥＥＰＲＯＭ代替領域４０として利用される。図３の例では、ブロックＢｍ〜ブロックＢｎがＥＥＰＲＯＭ代替領域４０として利用される（ｍ≦ｎ）。代替領域情報ＡＬＴは、このＥＥＰＲＯＭ代替領域４０の範囲を示す情報である。例えば、代替領域情報ＡＬＴは、ＥＥＰＲＯＭ代替領域４０の先頭ブロックＢｍと最終ブロックＢｎのブロック番号を示す。この代替領域情報ＡＬＴは、あるブロックＢａに格納されている。尚、ＥＥＰＲＯＭ代替領域４０は固定されるため、代替領域情報ＡＬＴを更新する必要はない。従って、代替情報領域ＡＬＴは、プログラム領域２１あるいはデータ保存領域２２のいずれに格納されてもよい。
【００２３】
ＥＥＰＲＯＭ代替領域４０に含まれる各ブロックは、状態フラグＳＴＡＴを有している。状態フラグＳＴＡＴは、当該ブロックの使用状態を示す情報であり、当該ブロックの先頭に記録される。状態フラグＳＴＡＴの種類としては、「有効」、「無効」、「未使用」、「使用禁止」が挙げられる。初期状態において、各ブロックの状態フラグＳＴＡＴは、「未使用」に設定されている。あるブロックに有効データが書き込まれる時、当該ブロックの状態フラグＳＴＡＴは「有効」に変更される。
【００２４】
ＥＥＰＲＯＭ代替領域４０において、データＤＡＴは先頭ブロックＢｍから順番に書き込まれていく。１つのブロック内では、状態フラグＳＴＡＴに続いて、データＤＡＴが順番に記録されていく。ＥＥＰＲＯＭ代替領域４０のうち、未だデータＤＡＴが書き込まれていない領域は、空き領域５０（未使用領域）である。空き領域５０の先頭アドレスは、以下、「空き領域先頭アドレスＡＤＤＦ」と参照される。
【００２５】
データＤＡＴはその種類に基づいて分類され、各データＤＡＴの種類は「識別子ＩＤ」により特定される。図３の例では、異なる３種類のデータＤＡＴ１、ＤＡＴ２、及びＤＡＴ３がＥＥＰＲＯＭ代替領域４０に記録されている。データＤＡＴ１、ＤＡＴ２、及びＤＡＴ３は、それぞれ、識別子ＩＤ１、ＩＤ２、及びＩＤ３により特定される。各データＤＡＴの識別子ＩＤは、例えば、ユーザによって決定され、管理される。
【００２６】
また、後に詳述されるように、ある種類の最新データＤＡＴが書き込まれるとき、同じ種類の既存データＤＡＴは、その最新データＤＡＴによって上書きされない。つまり、最新データＤＡＴは、同じ種類の既存データＤＡＴを上書きすることなく、ＥＥＰＲＯＭ代替領域４０の空き領域５０に追記されていく。従って、同種（同じ識別子ＩＤ）の複数のデータＤＡＴがＥＥＰＲＯＭ代替領域４０に存在し得る。例えば図３において、データＤＡＴ１−１とデータＤＡＴ１−２は、同じ種類（識別子ＩＤ１）のデータであるが、その内容が異なる。この場合、先頭により近いデータＤＡＴ１−１が古いデータＤＡＴ１であり、アドレスが後ろのデータＤＡＴ１−２が最新データである。
【００２７】
１つのデータＤＡＴは、当該データの種類を示す識別子ＩＤ、データ本体、及び当該データの終わりを示す終了フラグＦＬを含んでいる。例えば、図３に示されるように、データＤＡＴ１−２は、その識別子ＩＤ１、データ本体Ｄ１−２、及び終了フラグＥＬから構成されている。識別子ＩＤはデータＤＡＴの先頭に存在し、終了フラグＦＬはデータＤＡＴの最後に存在する。識別子ＩＤのサイズ及び終了フラグＦＬのサイズは、予め決まっている。データ長ＤＬは、データ本体（あるいはデータＤＡＴ全体）のサイズである。データ長ＤＬ１、ＤＬ２及びＤＬ３は、それぞれ、識別子ＩＤ１、ＩＤ２及びＩＤ３のデータ長である。
【００２８】
図４は、本実施の形態に係るＲＡＭ３０を概念的に示している。ＲＡＭ３０には、空き領域情報ＤＦＳ、最大識別子情報ＮＵＭ、及び記録データ情報ＳＴＲが格納される。これらの情報は、ＲＡＭ３０のユーザ領域、専用領域のどちらに格納されてもよい。
【００２９】
空き領域情報ＤＦＳは、ＥＥＰＲＯＭ代替領域４０中の空き領域先頭アドレスＡＤＤＦを示す。
【００３０】
最大識別子情報ＮＵＭは、識別子ＩＤのうち番号が最大である「最大識別子ＩＤｍａｘ」を示す。例えば、ＥＥＰＲＯＭ代替領域４０に３種類のデータＤＡＴ１、ＤＡＴ２、及びＤＡＴ３が記録されている場合、最大識別子ＩＤｍａｘは“ＩＤ３”である。最大識別子ＩＤｍａｘは、新種のデータＤＡＴが書き込まれる際に更新される場合がある。
【００３１】
記録データ情報ＳＴＲは、各々の種類（識別子ＩＤ）のデータＤＡＴに関して、最新データの先頭アドレスＡＤＤ及びデータ長ＤＬを示す。ここで、先頭アドレスＡＤＤとは、ＥＥＰＲＯＭ代替領域４０中で最新データＤＡＴ（あるいはそのデータ本体）が格納されている範囲の先頭のアドレスを意味する。図４において、記録データ情報ＳＴＲは、記録データ情報ＳＴＲ−１、ＳＴＲ−２、ＳＴＲ−３を含んでいる。記録データ情報ＳＴＲ−１は、識別子ＩＤ１のデータＤＡＴ１に関して、最新データの先頭アドレスＡＤＤ１とデータ長ＤＬ１を示している。記録データ情報ＳＴＲ−２は、識別子ＩＤ２のデータＤＡＴ２に関して、最新データの先頭アドレスＡＤＤ２とデータ長ＤＬ２を示している。記録データ情報ＳＴＲ−３は、識別子ＩＤ３のデータＤＡＴ３に関して、最新データの先頭アドレスＡＤＤ３とデータ長ＤＬ３を示している。好適には、ＲＡＭ３０における記録データ情報ＳＴＲの格納場所は、識別子ＩＤ毎に予め決められている。
【００３２】
本実施の形態では、以上に説明された情報を適宜利用することにより、ＥＥＰＲＯＭ代替領域４０への高速アクセスが実現される。以下、本実施の形態に係るアクセス処理を詳しく説明する。第２節では、初期化処理が説明される。第３節では、データ読み出し処理が説明される。第４節では、データ書き込み処理が説明される。
【００３３】
２．初期化処理
データ処理装置１の電源投入時、初期化処理が実施される。具体的には、フラッシュメモリ２０におけるデータＤＡＴの記録状態が検出され、上述の空き領域情報ＤＦＳ、最大識別子情報ＮＵＭ、及び記録データ情報ＳＴＲが作成される。作成された情報は、ＲＡＭ３０に格納される。すなわち、電源ＯＦＦの直前の状態が再現される。図５は、本実施の形態に係る初期化処理を示すフローチャートである。図６は、その初期化処理を概念的に示している。図５及び図６を参照して、初期化処理を説明する。
【００３４】
ステップＳ１：
まず、電源投入時のリセット信号に応答して、ＲＡＭ３０の初期化が行われる。
【００３５】
ステップＳ２：
次に、コントローラ１０は、フラッシュメモリ２０に格納されている代替領域情報ＡＬＴを読み出す。コントローラ１０は、代替領域情報ＡＬＴを参照することにより、ＥＥＰＲＯＭ代替領域４０の範囲を把握することができる。このＥＥＰＲＯＭ代替領域４０は、上述の空き領域情報ＤＦＳ、最大識別子情報ＮＵＭ、及び記録データ情報ＳＴＲを作成するために調査すべき範囲である。代替領域情報ＡＬＴが存在することにより、フラッシュメモリ２０中で調査すべき範囲を即座に知ることができると言える。すなわち、初期化処理の効率が向上する。
【００３６】
ステップＳ３：
次に、コントローラ１０は、ＥＥＰＲＯＭ代替領域４０中の有効ブロックを検出する。有効ブロックとは、有効データが書き込まれているブロックであり、状態フラグＳＴＡＴが“有効”に設定されているブロックである。従って、コントローラ１０は、各ブロックの状態フラグＳＴＡＴを順番に参照することにより、有効ブロックを検出することができる。
【００３７】
より詳細には、図６に示されるように、コントローラ１０は、最終ブロックＢｎから先頭ブロックＢｍに向かって有効ブロックを探索し、ＥＥＰＲＯＭ代替領域４０中の最後の有効ブロックを検出する。最終ブロックＢｎは、代替領域情報ＡＬＴに示されている。また、１つのブロックのブロックサイズＢＬＳは、予め決まっている。従って、コントローラ１０は、各ブロック内の詳細を読み出すことなく、各ブロックの状態フラグＳＴＡＴだけを飛ばし読みすることができる。その結果、ＥＥＰＲＯＭ代替領域４０中の最後の有効ブロック（例：ブロックＢｍ）が、素早く検出される。このように、各ブロックが状態フラグＳＴＡＴを有しているため、有効ブロックの検出を効率的に行うことが可能である。すなわち、初期化処理の効率が向上する。
【００３８】
ステップＳ４：
次に、コントローラ１０は、ステップＳ３で検出された最後の有効ブロックＢｍから、空き領域５０の先頭を検出する。具体的には、図６に示されるように、コントローラ１０は、有効ブロックＢｍの最終アドレスから先頭アドレスに向かって、データＤＡＴの終了フラグＦＬを探索する。最初に終了フラグＦＬが検出されるまでの領域は、空き領域５０である。そして、最初に検出された終了フラグＦＬに続く領域が、空き領域５０の先頭である。このようにして、コントローラ１０は、空き領域５０の先頭アドレスＡＤＤＦを簡単に検出することができる。コントローラ１０は、空き領域先頭アドレスＡＤＤＦを示す空き領域情報ＤＦＳを作成し、それをＲＡＭ３０に格納する。
【００３９】
ステップＳ５：
続いて、コントローラ１０は、空き領域先頭アドレスＡＤＤＦからＥＥＰＲＯＭ代替領域４０の先頭に向かって、データＤＡＴを順番に読み出す。具体的には、図６に示されるように、コントローラ１０は、各データＤＡＴの終了フラグＦＬを検出し、連続する２つの終了フラグＦＬの間の範囲を１つのデータＤＡＴとして特定する。識別子ＩＤのサイズと終了フラグＦＬのサイズは予め決まっているため、コントローラ１０は、読み出されたデータＤＡＴの識別子ＩＤ、データ長ＤＬ、及び先頭アドレスＡＤＤを認識することができる。
【００４０】
ステップＳ６：
データＤＡＴが１つ読み出されるたびに、コントローラ１０は、読み出されたデータＤＡＴの識別子ＩＤを確認する。もし、その識別子ＩＤが新種のＩＤであれば（ステップＳ６；Ｙｅｓ）、それは、読み出されたデータＤＡＴが当該識別子ＩＤの「最新データ」であることを意味する。この場合、処理は、次のステップＳ７に移行する。一方、識別子ＩＤが既に読み出されているものであれば（ステップＳ６；Ｎｏ）、それは、読み出されたデータＤＡＴが最新データよりも古いデータであることを意味する。この場合、処理は、ステップＳ９に移行する。
【００４１】
ステップＳ７：
新しい識別子ＩＤのデータＤＡＴが読み出された場合、そのデータＤＡＴは、当該識別子ＩＤの最新データである。従って、コントローラ１０は、当該識別子ＩＤに関する記録データ情報ＳＴＲを作成する。記録データ情報ＳＴＲは、当該識別子ＩＤの最新データの先頭アドレスＡＤＤ及びデータ長ＤＬを示す。コントローラ１０は、作成した記録データ情報ＳＴＲを、ＲＡＭ３０に格納する。
【００４２】
ステップＳ８：
最大識別子情報ＮＵＭが示す最大識別子ＩＤｍａｘは、最初、初期値（例：ＩＤ０）に設定される。新しい識別子ＩＤのデータＤＡＴが読み出されるたびに、コントローラ１０は、その新しい識別子ＩＤを現在の最大識別子ＩＤｍａｘと比較する。新しい識別子ＩＤが現在の最大識別子ＩＤｍａｘよりも大きい場合、コントローラ１０は、最大識別子ＩＤｍａｘを新しい識別子ＩＤで上書きする。すなわち、コントローラ１０は、最大識別子情報ＮＵＭを更新する。一方、新しい識別子ＩＤが現在の最大識別子ＩＤｍａｘ以下である場合、コントローラ１０は、最大識別子情報ＮＵＭの更新を行わない。
【００４３】
ステップＳ９：
読み出されたデータＤＡＴがＥＥＰＲＯＭ代替領域４０の先頭データではない場合（ステップＳ９；Ｎｏ）、処理はステップＳ５に戻り、次のデータＤＡＴが読み出される。つまり、コントローラ１０は、空き領域先頭アドレスＡＤＤＦからＥＥＰＲＯＭ代替領域４０の先頭に向かって、上述のステップＳ５〜Ｓ８を繰り返す。全てのデータＤＡＴが読み出されると（ステップＳ９；Ｙｅｓ）、初期化処理は終了する。
【００４４】
図６で示された有効ブロックＢｍの場合、初期化処理は次の通りである。まず、識別子ＩＤ２の最新データＤＡＴ２−２が読み出され、識別子ＩＤ２に関する記録データ情報ＳＴＲ−２が作成される。このとき、最大識別子ＩＤｍａｘは初期値からＩＤ２に更新される。次に、識別子ＩＤ３の最新データＤＡＴ３−１が読み出され、識別子ＩＤ３に関する記録データＳＴＲ−３が作成される。このとき、最大識別子ＩＤｍａｘはＩＤ２からＩＤ３に更新される。次に、識別子ＩＤ１の最新データＤＡＴ１−２が読み出され、識別子ＩＤ１に関する記録データＳＴＲ−１が作成される。このとき、最大識別子ＩＤｍａｘは更新されない。次に、識別子ＩＤ２の古いデータＤＡＴ２−１が読み出される。最後に、識別子ＩＤ１の古いデータＤＡＴ１−１が読み出される。このようにして、それぞれの識別子ＩＤの最新データに関する記録データＳＴＲ−１〜ＳＴＲ−３が作成される。また、最大識別子ＩＤｍａｘ＝ＩＤ３を示す最大識別子情報ＮＵＭが作成される。
【００４５】
以上に説明されたように、本実施の形態によれば、代替領域情報ＡＬＴ、状態フラグＳＴＡＴ、終了フラグＦＬ等を利用することにより、初期化処理を効率的に実施することが可能となる。
【００４６】
３．データ読み出し処理
次に、ＥＥＰＲＯＭ代替領域４０からのデータ読み出しを説明する。図７は、本実施の形態に係るデータ読み出し処理を示すフローチャートである。
【００４７】
まず、コントローラ１０は、読み出し対象である読み出しデータの識別子ＩＤを取得する（ステップＳ１０）。次に、コントローラ１０は、ＲＡＭ３０に格納されている記録データ情報ＳＴＲを参照して、読み出し対象の識別子ＩＤの最新データＤＡＴに関する先頭アドレスＡＤＤ及びデータ長ＤＬを取得する（ステップＳ１１）。次に、コントローラ１０は、その先頭アドレスＡＤＤを含む読み出しブロックの状態フラグＳＴＡＴを確認する（ステップＳ１２）。その状態フラグＳＴＡＴが“有効”であれば（ステップＳ１２；Ｙｅｓ）、コントローラ１０は、先頭アドレスＡＤＤ及びデータ長ＤＬに基づいて、読み出し対象の最新データＤＡＴ（読み出しデータ）を読み出しブロックから読み出す（ステップＳ１３）。一方、その状態フラグＳＴＡＴが“有効”でなければ（ステップＳ１２；Ｎｏ）、コントローラ１０は、異常状態処理（例：停止、エラー出力等）を行う（ステップＳ１４）。
【００４８】
例えば、読み出し対象の識別子ＩＤが“ＩＤ１”の場合、コントローラ１０は、ＲＡＭ３０に格納されている記録データ情報ＳＴＲ−１を参照する。記録データ情報ＳＴＲ−１は、識別子ＩＤ１の最新データＤＡＴ１−２の先頭アドレスＡＤＤ１及びデータ長ＤＬ１を示している。従って、コントローラ１０は、その先頭アドレスＡＤＤ１及びデータ長ＤＬ１に基づいて、最新データＤＡＴ１−２をＥＥＰＲＯＭ代替領域４０から即座に読み出すことができる。
【００４９】
以上に説明されたように、本実施の形態によれば、ＲＡＭ３０に格納されている記録データ情報ＳＴＲを参照することにより、読み出し対象の種類の最新データＤＡＴを高速に読み出すことが可能である。図１で示されたようなスキップ処理は必要ではない。ブロックに多数のデータＤＡＴが既に書き込まれている場合であっても、記録データ情報ＳＴＲを参照することにより、読み出し対象に直ぐにアクセスすることが可能である。すなわち、ＥＥＰＲＯＭエミュレーションにおけるアクセス処理時間が低減される。また、スキップ処理が行われないため、アクセス処理時間のばらつきがなくなる。これは、システム設計を容易にする。
【００５０】
４．データ書き込み処理
次に、ＥＥＰＲＯＭ代替領域４０へのデータ書き込みを説明する。図８は、本実施の形態に係るデータ書き込み処理を示すフローチャートである。図８に示されるように、データ書き込み処理は、ブロック残量判定処理（ステップＳ２０）、書き込み処理（ステップＳ３０）、及びコピー処理（ステップＳ４０）に大別される。
【００５１】
書き込み処理（ステップＳ３０）では、ＥＥＰＲＯＭ代替領域４０中の既存データは上書きされず、新たなデータは空き領域５０に追加的に書き込まれる。ここで、空き領域５０の先頭を有するブロックの残量がデータ書き込みに不足している場合、書き込み先を次のブロックに変更する必要がある。この処理を行うのが、ブロック残量判定処理（ステップＳ２０）である。コピー処理（ステップＳ４０）は、オプションであり、実施されても実施されなくてもよい。以下、各ステップを詳細に説明する。
【００５２】
４−１．ブロック残量判定処理（ステップＳ２０）
図９は、本実施の形態に係るステップＳ２０を示すフローチャートである。
【００５３】
ステップＳ２１：
コントローラ１０は、新規の書き込みデータのデータ長ＤＬを取得する。また、コントローラ１０は、ＲＡＭ３０に格納されている空き領域情報ＤＦＳを参照し、空き領域先頭アドレスＡＤＤＦを取得する。この空き領域先頭アドレスＡＤＤＦで示される空き領域５０の先頭が存在するブロックが、現在の書き込み先ブロックである。ブロックサイズＢＬＳや空き領域先頭アドレスＡＤＤＦに基づき、コントローラ１０は、現在の書き込み先ブロック中の空き領域５０の容量、すなわち、現在の書き込み先ブロックの残量を算出することができる。そして、コントローラ１０は、書き込みデータ長ＤＬと書き込み先ブロックの残量に基づいて、書き込みデータを現在の書き込み先ブロックに書き込めるか否かを判定する。つまり、コントローラ１０は、現在の書き込み先ブロックの残量が新たなデータの書き込みに不足しているか否かを判定する。
【００５４】
ステップＳ２２：
現在の書き込み先ブロックの残量が十分である場合（ステップＳ２２；Ｙｅｓ）、ステップＳ２０は終了し、処理はステップＳ３０に移行する。現在の書き込み先ブロックの残量が不足している場合（ステップＳ２２；Ｎｏ）、処理は、次のステップＳ２３に進む。
【００５５】
ステップＳ２３：
現在の書き込み先ブロックの残量が不足している場合、書き込み先ブロックを、次のブロックに変更する必要がある。但し、次のブロックもＥＥＰＲＯＭ代替領域４０に包含されている必要がある。そこで、コントローラ１０は、代替領域情報ＡＬＴを参照し、次のブロックがＥＥＰＲＯＭ代替領域４０に含まれていることを確認する。もし、次のブロックがＥＥＰＲＯＭ代替領域４０に含まれていない場合（ステップＳ２３；Ｎｏ）、コントローラ１０は、異常状態処理（例：停止、エラー出力等）を行う（ステップＳ２５）。次のブロックがＥＥＰＲＯＭ代替領域４０に含まれている場合（ステップＳ２３；Ｙｅｓ）、処理は、次のステップＳ２４に進む。
【００５６】
ステップＳ２４：
図１０に示されるように、コントローラ１０は、空き領域先頭アドレスＡＤＤＦを、現在の書き込み先ブロック（例：Ｂｍ）から、次のブロック（例：Ｂ（ｍ＋１））に移す。但し、次ブロックの先頭には、状態フラグＳＴＡＴが格納されている。従って、コントローラ１０は、状態フラグＳＴＡＴのサイズを考慮して、空き領域先頭アドレスＡＤＤＦを次ブロックの状態フラグＳＴＡＴに続くアドレスに更新する。言い換えれば、コントローラ１０は、空き領域先頭アドレスＡＤＤＦを、次ブロック中の空き領域５０の先頭アドレスに更新する。コントローラ１０は、空き領域先頭アドレスＡＤＤＦの更新を、ＲＡＭ３０中の空き領域情報ＤＦＳに反映させる。その後、処理はステップＳ３０に移行する。
【００５７】
４−２．書き込み処理（ステップＳ３０）
図１１は、本実施の形態に係るステップＳ３０を示すフローチャートである。
【００５８】
ステップＳ３１：
コントローラ１０は、ＲＡＭ３０に格納されている空き領域情報ＤＦＳを参照し、空き領域先頭アドレスＡＤＤＦを取得する。この空き領域先頭アドレスＡＤＤＦで示される空き領域５０の先頭が存在するブロックが、書き込み先ブロックである。
【００５９】
ステップＳ３２〜Ｓ３５：
コントローラ１０は、書き込み先ブロックの状態フラグＳＴＡＴを確認する。その状態フラグＳＴＡＴが“未使用”を示している場合（ステップＳ３２；Ｙｅｓ）、コントローラ１０は、状態フラグＳＴＡＴを“有効”に設定する（ステップＳ３３）。その後、処理は、ステップＳ３６に進む。状態フラグＳＴＡＴが“有効”を示している場合（ステップＳ３２；Ｎｏ、ステップＳ３４；Ｙｅｓ）、処理は、ステップＳ３６に進む。それ以外の場合、コントローラ１０は、異常状態処理（例：停止、エラー出力等）を行う（ステップＳ３５）。
【００６０】
ステップＳ３６：
コントローラ１０は、書き込み先ブロックの空き領域５０に、新規の書き込みデータＤＡＴ（識別子ＩＤ、データ本体、終了フラグＦＬ）を書き込む。より詳細には、コントローラ１０は、空き領域先頭アドレスＡＤＤＦで示される空き領域５０の先頭に、新規の書き込みデータＤＡＴを書き込む。すなわち、コントローラ１０は、既存データを新規のデータＤＡＴで上書きすることなく、新規のデータＤＡＴを空き領域５０に順番に追記していく。ある識別子ＩＤのデータＤＡＴが書き込まれるとき、同じ識別子ＩＤの既存データは書き換えられず、書き込まれたデータＤＡＴが当該識別子ＩＤの最新データとなる。
【００６１】
ステップＳ３７：
ステップＳ３６の後、コントローラ１０は、ＲＡＭ３０に格納されている情報の更新を行う。具体的には、図１２に示されるように、コントローラ１０は、空き領域情報ＤＦＳが示す空き領域先頭アドレスＡＤＤＦを、書き込みデータＤＡＴの分だけ更新する。空き領域先頭アドレスＡＤＤＦの更新量は、書き込みデータＤＡＴのデータ長ＤＬ、識別子ＩＤ及び終了フラグＦＬのサイズに基づいて算出可能である。
【００６２】
また、コントローラ１０は、書き込みデータＤＡＴの書き込み先（空き領域先頭アドレスＡＤＤＦ）及びデータ長ＤＬに基づいて、最新データの先頭アドレスＡＤＤ及びデータ長ＤＬを示す記録データ情報ＳＴＲを更新する。ここで更新されるのは、書き込みデータＤＡＴの識別子ＩＤに関連する記録データ情報ＳＴＲである。例えば、識別子ＩＤ１のデータＤＡＴ１が新たに書き込まれた場合、対応する記録データ情報ＳＴＲ−１（先頭アドレスＡＤＤ１、データ長ＤＬ１）が更新される。
【００６３】
書き込みデータＤＡＴが新しい種類である場合、新しい識別子ＩＤが割り当てられる。割り当てられる識別子ＩＤは、例えば、ユーザによって決定され、管理される。コントローラ１０は、その新しい識別子ＩＤに対応する新たな記録データ情報ＳＴＲを作成し、それをＲＡＭ３０に格納する。更に、新しい識別子ＩＤの番号が最大識別子ＩＤｍａｘの番号よりも大きければ、コントローラ１０は、最大識別子情報ＮＵＭが示す最大識別子ＩＤｍａｘを、その新しい識別子ＩＤで更新（上書き）する。
【００６４】
以上に説明されたように、本実施の形態によれば、ＲＡＭ３０に格納されている空き領域情報ＤＦＳを参照することにより、空き領域５０の先頭に即座にアクセスすることが可能である。従って、新規の書き込みデータＤＡＴをＥＥＰＲＯＭ代替領域４０に高速に書き込むことが可能となる。空き領域５０の先頭を検出するために、図１で示されたようなスキップ処理は必要ではない。ブロックに多数のデータＤＡＴが既に書き込まれている場合であっても、空き領域情報ＤＦＳを参照することにより、空き領域先頭アドレスＡＤＤＦに直ぐにアクセスすることが可能である。すなわち、ＥＥＰＲＯＭエミュレーションにおけるアクセス処理時間が低減される。また、スキップ処理が行われないため、アクセス処理時間のばらつきがなくなる。これは、システム設計を容易にする。
【００６５】
４−３．コピー処理（ステップＳ４０）
上述のステップＳ２０において書き込み先ブロックが次のブロックに変更された場合、元のブロックに記録されていたそれぞれの識別子ＩＤの最新データＤＡＴは、新しいブロックにコピーされてもよい。但し、このコピー処理はオプションであり、実施されなくてもよい。
【００６６】
図１３は、本実施の形態に係るステップＳ４０を示すフローチャートである。まず、コントローラ１０は、ループ処理に用いられる識別子ＩＤを“ＩＤ１”に設定する（ステップＳ４１）。次に、コントローラ１０は、設定された識別子ＩＤの最新データＤＡＴを、ＥＥＰＲＯＭ代替領域４０から読み出す（ステップＳ４２）。この読み出し処理は、上述のステップＳ１０〜Ｓ１３と同じである。次に、コントローラ１０は、読み出された最新データＤＡＴを、新しいブロックに書き込む（ステップＳ４３）。この書き込み処理は、上述のステップＳ３０と同じである。
【００６７】
次に、コントローラ１０は、現在の識別子ＩＤを、最大識別子情報ＮＵＭが示す最大識別子ＩＤｍａｘと比較する（ステップＳ４４）。現在の識別子ＩＤが最大識別子ＩＤｍａｘより小さい場合（ステップＳ４４；Ｎｏ）、コントローラ１０は、識別子ＩＤの番号を１だけ増加させる（ステップＳ４５）。その後、新しい識別子ＩＤに関して、上述のステップＳ４２、Ｓ４３が再度実行される。識別子ＩＤが最大識別子ＩＤｍａｘと等しくなった場合（ステップＳ４４；Ｙｅｓ）、それは、全ての識別子ＩＤの最新データＤＡＴが新しいブロックにコピーされたことを意味する。最後に、コントローラ１０は、コピー元ブロックの状態フラグＳＴＡＴを、“有効”から“無効”に変更する（ステップＳ４６）。
【００６８】
このようなコピー処理が実施される場合、最大識別子情報ＮＵＭが必要であるが、ＥＥＰＲＯＭ代替領域４０中の有効ブロックは１つだけとなる。一方、コピー処理が実施されない場合、最大識別子情報ＮＵＭは不要であるが、有効ブロックの数はどんどん増える。コピー処理を実施するか否かは、ユーザの要求に応じて適宜決定されるとよい。
【００６９】
５．まとめ
本実施の形態によれば、ＥＥＰＲＯＭエミュレーションにおいて、フラッシュメモリ２０に対する高速読み出し及び高速書き込みが実現される。つまり、ＥＥＰＲＯＭエミュレーションにおけるアクセス処理時間が総じて低減される。近年、環境に配慮した省エネ商品が要求されるようになってきている。省エネ商品を実現するには、動作時の消費電力を低減するだけでなく、処理を短時間に完了させ、消費電力の少ないスタンバイモードに素早く移行させることも必要である。つまり、データアクセスの高速化が重要である。この観点からも、本実施の形態に係る技術は有用である。
【００７０】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【図面の簡単な説明】
【００７１】
【図１】図１は、関連技術におけるＥＥＰＲＯＭエミュレーションを説明するための概念図である。
【図２】図２は、本発明の実施の形態に係るデータ処理装置の構成を示すブロック図である。
【図３】図３は、本実施の形態に係るフラッシュメモリに記録されるデータを示す概念図である。
【図４】図４は、本実施の形態に係るＲＡＭに格納される情報を示す概念図である。
【図５】図５は、本実施の形態に係る初期化処理を示すフローチャートである。
【図６】図６は、本実施の形態に係る初期化処理を説明するための概念図である。
【図７】図７は、本実施の形態に係るデータ読み出し処理を示すフローチャートである。
【図８】図８は、本実施の形態に係るデータ書き込み処理を示すフローチャートである。
【図９】図９は、本実施の形態に係るデータ書き込み処理のステップＳ２０を示すフローチャートである。
【図１０】図１０は、本実施の形態に係るデータ書き込み処理のステップＳ２０を説明するための概念図である。
【図１１】図１１は、本実施の形態に係るデータ書き込み処理のステップＳ３０を示すフローチャートである。
【図１２】図１２は、本実施の形態に係るデータ書き込み処理のステップＳ３０を説明するための概念図である。
【図１３】図１３は、本実施の形態に係るデータ書き込み処理のステップＳ４０を示すフローチャートである。
【符号の説明】
【００７２】
１    データ処理装置
１０    コントローラ
２０    フラッシュメモリ
３０    ＲＡＭ
４０    ＥＥＰＲＯＭ代替領域
５０    空き領域
ＡＬＴ  代替領域情報
ＡＤＤＦ  空き領域先頭アドレス
ＳＴＡＴ  状態フラグ
ＤＡＴ  データ
ＩＤ  識別子
ＩＤｍａｘ  最大識別子
ＦＬ  終了フラグ
ＤＬ  データ長
ＤＦＳ  空き領域情報
ＮＵＭ  最大識別子情報
ＳＴＲ  記録データ情報
【図１】
2010020586.tif 000003
【図２】
2010020586.tif 000004
【図３】
2010020586.tif 000005
【図４】
2010020586.tif 000006
【図５】
2010020586.tif 000007
【図６】
2010020586.tif 000008
【図７】
2010020586.tif 000009
【図８】
2010020586.tif 000010
【図９】
2010020586.tif 000011
【図１０】
2010020586.tif 000012
【図１１】
2010020586.tif 000013
【図１２】
2010020586.tif 000014
【図１３】
2010020586.tif 000015