(57)【要約】【課題】フラッシュメモリをＥＥＰＲＯＭのように扱うことができる半導体装置を提供すること。【解決手段】本発明に係る半導体装置１は、複数のブロックを有するフラッシュメモリ３と、そのフラッシュメモリ３にアクセス可能なコントローラ２，４とを備える。複数のブロックは、第１ブロック１０と第２ブロック２０を有する。第１ブロック１０は、複数種類のデータのそれぞれに関して、種類を示すＩＤとデータ長とを対応付けて格納する。第２ブロック２０は、複数の使用データを、それぞれのＩＤと共に格納する。書き込み・読み出し時、ＩＤとデータ長に基づいて、第２ブロック２０へのアクセスが行われる。【選択図】      図２
2006260468.tif 000002
【特許請求の範囲】
【請求項１】
複数のブロックを有するフラッシュメモリと、
前記フラッシュメモリにアクセス可能なコントローラと
を具備し、
前記複数のブロックは、
複数種類のデータのそれぞれに関して、種類を示す識別子とデータ長とを対応付けて格納する第１ブロックと、
複数の使用データを、前記複数の使用データのそれぞれの前記識別子と共に格納する第２ブロックと
を有する
半導体装置。
【請求項２】
請求項１に記載の半導体装置であって、
前記第２ブロックは、連続する複数のセクションを有し、
前記複数のセクションのそれぞれは、前記複数の使用データの１つと前記１つの使用データの前記識別子を格納する
半導体装置。
【請求項３】
請求項１に記載の半導体装置であって、
前記第２ブロックは、連続する複数のセクションを有し、
前記複数のセクションのそれぞれは、前記複数の使用データの１つと前記１つの使用データの前記識別子を格納し、
前記複数のセクションの各々において、前記識別子は先頭アドレスに格納され、前記１つの使用データは前記先頭アドレスに続くアドレスに格納される
半導体装置。
【請求項４】
請求項２に記載の半導体装置であって、
前記第２ブロックにアクセスする際、前記コントローラはスキップ処理を行い
前記スキップ処理において、前記コントローラは、
前記複数のセクションの中の第１セクションにアクセスし、
前記第１セクションに格納された前記識別子を読み出し、
前記第１ブロックを参照することによって、前記読み出された識別子に対応する前記データ長を取得し、
前記取得したデータ長に基づいて、前記第１セクションの次に位置する第２セクションにアクセスする
半導体装置。
【請求項５】
請求項３に記載の半導体装置であって、
前記第２ブロックにアクセスする際、前記コントローラはスキップ処理を行い
前記スキップ処理において、前記コントローラは、
前記複数のセクションの中の第１セクションの前記先頭アドレスにアクセスし、
前記第１セクションの前記先頭アドレスに格納された前記識別子を読み出し、
前記第１ブロックを参照することによって、前記読み出された識別子に対応する前記データ長を取得し、
前記取得したデータ長に基づいて、前記第１セクションの次に位置する第２セクションの前記先頭アドレスにアクセスする
半導体装置。
【請求項６】
請求項４又は５に記載の半導体装置であって、
前記第２ブロックに新たな使用データを書き込む際、
前記コントローラは、
前記スキップ処理を繰り返すことによって、前記第２ブロックのうちデータがイレースされている空き領域を検索し、
前記検索された空き領域に、前記新たな使用データと前記新たな使用データに対応する前記識別子を書き込むことによって、新たなセクションを形成する
半導体装置。
【請求項７】
請求項５に記載の半導体装置であって、
前記第２ブロックに新たな使用データを書き込む際、
前記コントローラは、
前記第２ブロックの先頭アドレスに格納された前記識別子を読み出し、前記スキップ処理を繰り返すことによって、前記第２ブロックのうちデータがイレースされている空き領域を検索し、
前記検索された空き領域に、前記新たな使用データと前記新たな使用データに対応する前記識別子を書き込むことによって、新たなセクションを形成する
半導体装置。
【請求項８】
請求項６又は７に記載の半導体装置であって、
前記複数のブロックは他の第２ブロックを更に有し、
前記第２ブロックがデータで満たされた場合、前記コントローラは、前記他の第２ブロックに前記新たな使用データを書き込む
半導体装置。
【請求項９】
請求項４乃至８のいずれかに記載の半導体装置であって、
前記第２ブロックから前記複数種類のデータのうち第１データを読み出す際、
前記コントローラは、
前記スキップ処理を繰り返し、
各々の前記スキップ処理において、前記読み出された識別子が前記第１データに対応する前記識別子である場合、該当するセクションのアドレスによって読み出し対象アドレスを更新し、
前記第２ブロックのうちデータがイレースされている空き領域にアクセスした時点での前記読み出し対象アドレスを参照して、前記第１データを読み出す
半導体装置。
【請求項１０】
請求項５又は７に記載の半導体装置であって、
前記第２ブロックから前記複数種類のデータのうち第１データを読み出す際、
前記コントローラは、
前記第２ブロックの先頭アドレスに格納された前記識別子を読み出し、前記スキップ処理を繰り返し、
各々の前記スキップ処理において、前記読み出された識別子が前記第１データに対応する前記識別子である場合、該当するセクションの前記先頭アドレスによって読み出し対象アドレスを更新し、
前記第２ブロックのうちデータがイレースされている空き領域にアクセスした時点での前記読み出し対象アドレスを参照して、前記第１データを読み出す
半導体装置。
【請求項１１】
請求項１乃至１０のいずれかに記載の半導体装置であって、
前記フラッシュメモリ及び前記コントローラは、１つのマイクロコンピュータチップに形成された
半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に関し、特に、フラッシュメモリを備える半導体装置に関する。
【背景技術】
【０００２】
近年、フラッシュメモリとＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）の両方が組み込まれている半導体装置が一般的になっている（例えば、特許文献１参照）。このようなフラッシュメモリとＥＥＰＲＯＭとの両方が組み込まれている半導体装置においては、記憶させる内容に応じて、フラッシュメモリとＥＥＰＲＯＭとが使い分けられていた。これは、フラッシュメモリにデータを書き込む場合、ブロック単位でデータを消去してからでないと、任意のデータが書き込めないためである。
【０００３】
【特許文献１】特開２００２−３３４０２４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、電子機器にフラッシュメモリとＥＥＰＲＯＭの両方を搭載することは、コストの観点からみれば大きなデメリットである。従って、フラッシュメモリをＥＥＰＲＯＭのように扱うことができる技術が望まれている。
【課題を解決するための手段】
【０００５】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【０００６】
本発明に係る半導体装置（１）は、複数のブロックを有するフラッシュメモリ（３）と、フラッシュメモリ（３）にアクセス可能なコントローラ（２，４）とを備える。複数のブロックは、第１ブロック（１０）と第２ブロック（２０）を有する。第１ブロック（１０）は、複数種類のデータ（Ｄ１〜Ｄ３）のそれぞれに関して、種類を示す識別子（ＩＤ１〜ＩＤ３）とデータ長とを対応付けて格納する。第２ブロック（２０）は、複数の使用データを、複数の使用データのそれぞれの識別子（ＩＤ１〜ＩＤ３）と共に格納する。また、第２ブロック（２０）は、連続する複数のセクション（２１〜２７）を有する。複数のセクション（２１〜２７）のそれぞれは、１つの使用データと、その１つの使用データの識別子を格納する。
【０００７】
第２ブロック（２０）にアクセスする際、コントローラ（２，４）は「スキップ処理」を行う。このスキップ処理において、コントローラ（２，４）は、複数のセクション（２１〜２７）の中の第１セクションにアクセスし、第１セクションに格納された識別子（ＩＤ）を読み出す。次に、コントローラ（２，４）は、第１ブロック（１０）を参照することによって、読み出された識別子（ＩＤ）に対応するデータ長を取得する。そして、コントローラ（２，４）は、取得したデータ長に基づいて、第１セクションの次に位置する第２セクションにアクセスする。
【０００８】
第２ブロック（２０）に新たな使用データを書き込む際、コントローラ（２，４）は、上記スキップ処理を繰り返すことによって、第２ブロック（２０）のうちデータがイレースされている空き領域（３０）を検索する。そして、コントローラ（２，４）は、検索された空き領域（３０）に、新たな使用データと新たな使用データに対応する識別子（ＩＤ）を書き込むことによって、新たなセクションを形成する。
【０００９】
一方、第２ブロック（２０）から複数種類のデータのうち第１データを読み出す際も、コントローラ（２，４）は、上記スキップ処理を繰り返す。各々のスキップ処理において、読み出された識別子（ＩＤ）が第１データに対応する識別子（ＩＤ）である場合、コントローラ（２，４）は、該当するセクションのアドレスによって読み出し対象アドレスを更新する。そして、コントローラ（２，４）は、第２ブロック（２０）のうちデータがイレースされている空き領域（３０）にアクセスした時点での読み出し対象アドレスを参照して、第１データを読み出す。
【００１０】
ＥＥＰＲＯＭの場合、あるユーザアプリケーションの使用データを扱うためには、１つのセクションだけ用いられればよい。つまり、あるセクションに使用データが格納され、その使用データが消去された後に、そのセクションに新たな使用データが書き込まれればよい。しかしながら、フラッシュメモリ（３）の場合、消去はブロック単位で行われるので、１つのセクションに格納されたデータだけを消去するわけにはいかない。
【００１１】
本発明によれば、あるセクションに格納されたデータが書き換えられる代わりに、新たなデータは、空き領域（３０）に追加的に書き込まれていく。また、読み出し動作時には、最も直近に書き込まれた読み出し対象データが読み出されている。ここで、セクション毎に使用データと共に格納される識別子（ＩＤ）が、効果的に利用されている。すなわち、セクション毎に格納された識別子を順番に参照することによって、最も後ろのアドレスに格納された読み出し対象データを見つけ出すことが可能となる。
【００１２】
このように、本発明によれば、１つのアプリケーション毎に、使用データが書き込まれ、また、読み出されている。つまり、フラッシュメモリ（３）の外から見れば、１つのアプリケーション毎に使用データが更新されているかのように見える。従って、本発明によれば、フラッシュメモリ（３，８）を、ＥＥＰＲＯＭのように扱うことが可能となる。
【発明の効果】
【００１３】
本発明に係る半導体装置によれば、フラッシュメモリをＥＥＰＲＯＭのように扱うことが可能となる。
【００１４】
本発明に係る半導体装置によれば、フラッシュメモリの書き換え可能回数が増加する。
【００１５】
本発明に係る半導体装置によれば、フラッシュメモリへのデータの書き込み時間が短縮される。
【発明を実施するための最良の形態】
【００１６】
添付図面を参照して、本発明による半導体装置を説明する。
【００１７】
１．構成
図１は、本発明に係る半導体装置の構成を示すブロック図である。半導体装置１は、ＣＰＵ２、フラッシュメモリ３、フラッシュコントローラ４、ＲＡＭ５、及び周辺マクロ６を備えている。フラッシュコントローラ４は、フラッシュメモリ３に対する読み書きを制御する。ＣＰＵ２は、ＲＡＭ５と周辺マクロ６にアクセス可能であり、また、フラッシュコントローラ４を介してフラッシュメモリ３にアクセス可能である。ユーザプログラムは、ＣＰＵ２により実行される。フラッシュメモリ３は、各種データやプログラムを格納するためのプログラム領域７に加えて、ＥＥＰＲＯＭ代替領域８を有している。本発明によれば、このＥＥＰＲＯＭ代替領域８が、ＥＥＰＲＯＭの代替として用いられる。
【００１８】
図２は、本発明に係る半導体装置１に搭載されたフラッシュメモリ３の構成を示す概念図である。図２に示されるように、フラッシュメモリ３は、複数のブロックＢ０、Ｂ１、Ｂ２・・・を有している。フラッシュメモリ３においては、この１つのブロックが消去単位となる。これら複数のブロックのうちいくつかのブロックが、本発明に係るＥＥＰＲＯＭ代替領域８として用いられる。具体的には、ＥＥＰＲＯＭ代替領域８は、データ長格納領域１０とデータ格納領域２０から構成されている。
【００１９】
データ長格納領域１０として、複数のブロックＢ０、Ｂ１・・・のうち少なくとも１つのブロックが用いられる。例えば図２において、ブロックＢｌがデータ長格納領域１０として用いられている。本発明において、複数のユーザプログラムのそれぞれに対応して複数種類のデータが用いられるとする。データ長格納領域１０としてのブロックＢｌは、それら複数種類のデータのそれぞれに関して、識別子とデータ長とを対応付けて格納している。つまり、ブロックＢｌは、複数種類のデータに関して、識別子とデータ長との対応関係を一括管理している。この識別子は、データの種類を識別するためのＩＤである。
【００２０】
以下の説明において、簡単のため、３種類のデータＤ１〜Ｄ３が用いられるとする。それらデータＤ１〜Ｄ３のそれぞれを識別するために、識別子ＩＤ１〜ＩＤ３が用いられるとする。また、３種類のデータＤ１〜Ｄ３のデータ長は、それぞれ２バイト、２バイト、４バイトであるとする。この時、図２に示されるように、データ長格納領域１０としてのブロックＢｌには、データＤ１の識別子（ＩＤ１）と、データＤ１のデータ長（２バイト）とが関連付けられて格納される。また、ブロックＢｌには、データＤ２の識別子（ＩＤ２）と、データＤ２のデータ長（２バイト）とが関連付けられて格納される。更に、ブロックＢｌには、データＤ３の識別子（ＩＤ３）と、データＤ３のデータ長（４バイト）とが関連付けられて格納される。
【００２１】
また、データ格納領域２０として、複数のブロックＢ０、Ｂ１・・・のうち少なくとも１つのブロックが用いられる。例えば図２において、ブロックＢｍ〜Ｂｎがデータ格納領域２０として用いられている。データ格納領域２０の各々のブロックは、複数のデータ（使用データ）を格納するために用いられる。ここで、各ブロックは、複数の使用データを、対応する上記識別子と共に格納する。
【００２２】
例として、図２には、ブロックＢｍの内容が示されている。この１つのブロックＢｍは、複数のセクション（２１〜２７・・・）に区分され得る。各セクションには、１つの使用データと、その使用データに対応する識別子が格納されている。例えば、セクション２１には、２バイトのデータＤ１−１と共に、データＤ１の識別子ＩＤ１が格納されている。セクション２２には、２バイトのデータＤ２−１と共に、データＤ２の識別子ＩＤ２が格納されている。セクション２３には、４バイトのデータＤ３−１と共に、データＤ３の識別子ＩＤ３が格納されている。セクション２４には、２バイトのデータＤ１−２と共に、データＤ１の識別子ＩＤ１が格納されている。セクション２５には、４バイトのデータＤ３−２と共に、データＤ３の識別子ＩＤ３が格納されている。セクション２６には、２バイトのデータＤ２−２と共に、データＤ２の識別子ＩＤ２が格納されている。セクション２７には、２バイトのデータＤ２−３と共に、データＤ２の識別子ＩＤ２が格納されている。
【００２３】
これら複数のセクション２１〜２７は、ブロックＢｍの先頭アドレスから順番に配置されている。すなわち、ブロックＢｍは連続する複数のセクションを有し、その複数のセクションのそれぞれは、１つの使用データ（Ｄ）と、その１つの使用データの識別子（ＩＤ）を格納している。また、図２に示されるように、各々のセクションにおいて、識別子（ＩＤ）は先頭アドレスに格納され、１つの使用データ（Ｄ）は先頭アドレスに続くアドレスに格納されると好適である。
【００２４】
以上に示されたデータ長格納領域１０とデータ格納領域２０が、本発明に係るＥＥＰＲＯＭ代替領域８を構成する。後に示されるように、データ長格納領域１０とデータ格納領域２０を用いることによって、フラッシュメモリ３中のＥＥＰＲＯＭ代替領域８を、ＥＥＰＲＯＭのように扱うことが可能となる。
【００２５】
尚、図１に示されたＣＰＵ２、フラッシュメモリ３、フラッシュコントローラ４、ＲＡＭ５、周辺マクロ６は、１チップ上に構成されていてもよい。その場合、半導体装置１は、マイクロコンピュータである。
【００２６】
２．動作
図１に示されたＣＰＵ２あるいはフラッシュコントローラ４によって、フラッシュメモリ３（ＥＥＰＲＯＭ代替領域８）に対する書き込み・読み出し動作が実行される。まず、既出の図１を参照することによって、書き込み・読み出し動作を概略的に説明する。
【００２７】
書き込み時、ユーザプログラムやそれによって設定された周辺マクロ６等から、ＣＰＵ２へトリガが入る。これにより、外部センサ値や周辺マクロ６の状態などが、ＲＡＭ５中の特定の領域に格納される。次に、ファームウェアやユーザプログラムにより、ＥＥＰＲＯＭ代替領域８中で、データが書き込まれる適当な位置が検索される。そして、フラッシュコントローラ４により、ＲＡＭ５の特定領域に格納されているデータが、フラッシュメモリ３のＥＥＰＲＯＭ代替領域８の適当な箇所に書き込まれる。データの書き込みが終了すると、フラッシュコントローラ４は、ＣＰＵ２に書き込みが終了したことを通知する。
【００２８】
読み出し時、ユーザプログラムやそれによって設定された周辺マクロ６等からトリガが入る。次に、ファームウェアやユーザプログラムにより、ＥＥＰＲＯＭ代替領域８中で、最新のデータが書き込まれている位置が検索される。そして、ＣＰＵ２が、フラッシュメモリ３のＥＥＰＲＯＭ代替領域８から、必要なデータを読み出す。
【００２９】
以下、本発明に係る書き込み動作および読み出し動作が詳細に説明される。
【００３０】
（書き込み動作）
図３は、本発明に係る書き込み動作を示すフローチャートである。また、図４は、書き込み動作の一例を示している。この例において、データ格納領域２０としてのブロックＢｍのセクション２１〜２４には、それぞれデータＤ１−１、データＤ２−１、データＤ３−１、及びデータＤ１−２が既に格納されているとする。また、セクション２４に続く領域には、データが書き込まれていないとする。そのセクション２４に続く領域は、空き領域（未書き込み領域）３０と参照される。このような状態のブロックＢｍに、新たなデータＤ３−２が書き込まれる場合を考える。
【００３１】
まず、ＣＰＵ２あるいはフラッシュコントローラ４（以下、コントローラと参照される）は、ブロックＢｍの先頭アドレス、すなわちセクション２１の先頭アドレスにアクセスする（ステップＳ１０）。そして、コントローラは、そのセクション２１の先頭アドレスに格納された識別子を読み込む（ステップＳ１１）。この時、そのセクション２１の先頭アドレスのデータは、イレース状態を示す“１”（“ＦＦＨ”）ではなく、データＤ１の識別子ＩＤ１である（ステップＳ１２；Ｎｏ）。
【００３２】
次に、コントローラは、データ長格納領域１０（図２参照）に格納されたデータ長テーブルを参照する。それにより、コントローラは、読み出された識別子ＩＤ１に対応するデータ長（２バイト）を取得する（ステップＳ１３）。次に、コントローラは、取得したデータ長（２バイト）に基づいて、次のセクション２２の先頭アドレス、すなわち３バイト先のアドレスにアクセスする（ステップＳ１４）。
【００３３】
続いて、コントローラは、セクション２２の先頭アドレスに格納された識別子を読み込む（ステップＳ１１）。そのセクション２２の先頭アドレスのデータは、データＤ２の識別子ＩＤ２である（ステップＳ１２；Ｎｏ）。よって、コントローラは、データ長格納領域１０を参照し、読み出された識別子ＩＤ２に対応するデータ長（２バイト）を取得する（ステップＳ１３）。そして、コントローラは、取得したデータ長（２バイト）に基づいて、次のセクション２３の先頭アドレス、すなわち３バイト先のアドレスにアクセスする（ステップＳ１４）。
【００３４】
以下、同様な処理が繰り返される。これら繰り返されるステップＳ１１〜Ｓ１４は、以下、「スキップ処理」と参照される。本発明に係るコントローラは、各セクションに格納された識別子（ＩＤ）と、データ長格納領域１０で一括管理されているデータ長とに基づいて、スキップ処理を繰り返し実行する。これにより、ブロックＢｍの先頭アドレスから、セクション２２、２３、２４の先頭アドレスに対して順番にアクセスが行われる。
【００３５】
コントローラは、セクション２４の先頭アドレスの次に、３バイト先のアドレスに格納されたデータを読み込む（ステップＳ１１）。この時、図４に示されるように、そのアドレスのデータは、イレース状態を示す“１”（“ＦＦＨ”）である（ステップＳ１２；Ｙｅｓ）。よって、コントローラは、そのアドレスが空き領域３０の先頭アドレスであると判定（認識）し、その空き領域３０に、新たなデータＤ３−２とその新たなデータＤ３−２の識別子ＩＤ３を書き込む（ステップＳ１５）。具体的には、コントローラは、空き領域３０の先頭アドレスに識別子ＩＤ３を書き込み、その先頭アドレスに続くアドレスに新たなデータＤ３−２（４バイト）を書き込む。
【００３６】
このように、本発明に係るコントローラは、「スキップ処理」を繰り返すことによって、データ格納領域２０のうちデータがイレースされている空き領域３０を検索する。そして、コントローラは、検索された空き領域３０に、新たなデータとその識別子を書き込む。これにより、新たなセクション２５が形成される。ブロックＢｍが使用データで一杯になった場合、コントローラは、データ格納領域２０の他のブロック（例えば、ブロックＢｎ）に、新たな使用データを書き込む。また、最新の格納データは、そのブロックＢｎにコピーされる。使用データで一杯になったブロックＢｍに対しては、一括消去が実行されればよい。
【００３７】
（読み出し動作）
図５は、本発明に係る読み出し動作を示すフローチャートである。また、図６は、読み出し動作の一例を示している。この例において、データ格納領域２０としてのブロックＢｍのセクション２１〜２５には、それぞれデータＤ１−１、データＤ２−１、データＤ３−１、データＤ１−２、データＤ３−２が格納されているとする。また、セクション２５に続く領域には、空き領域（未書き込み領域）３０であるとする。このような状態のブロックＢｍから、複数種類のデータのうち、データＤ１（読み出し対象データ）が読み出される場合を考える。
【００３８】
まず、コントローラは、ブロックＢｍの先頭アドレス、すなわちセクション２１の先頭アドレスにアクセスする（ステップＳ２０）。そして、コントローラは、そのセクション２１の先頭アドレスに格納された識別子を読み込む（ステップＳ２１）。この時、そのセクション２１の先頭アドレスのデータは、イレース状態を示す“１”（“ＦＦＨ”）ではなく、データＤ１の識別子ＩＤ１である（ステップＳ２２；Ｎｏ）。
【００３９】
次に、コントローラは、読み出された識別子が、読み出し対象データに対応する識別子であるかどうか判定する（ステップＳ２３）。この場合、読み出された識別子はＩＤ１であり、読み出し対象データはデータＤ１である。従って、コントローラは、読み出された識別子が、読み出し対象データの識別子であると判定する（ステップＳ２３；Ｙｅｓ）。そして、コントローラは、セクション２１の先頭アドレスを、「読み出し対象アドレス」として、ＲＡＭ５に格納する（ステップＳ２４）。
【００４０】
また、コントローラは、データ長格納領域１０（図２参照）に格納されたデータ長テーブルを参照する。それにより、コントローラは、読み出された識別子ＩＤ１に対応するデータ長（２バイト）を取得する（ステップＳ２５）。次に、コントローラは、取得したデータ長（２バイト）に基づいて、次のセクション２２の先頭アドレス、すなわち３バイト先のアドレスにアクセスする（ステップＳ２６）。
【００４１】
続いて、コントローラは、セクション２２の先頭アドレスに格納された識別子を読み込む（ステップＳ２１）。そのセクション２２の先頭アドレスのデータは、データＤ２の識別子ＩＤ２である（ステップＳ２２；Ｎｏ）。この場合、読み出された識別子ＩＤ２は、読み出し対象データＤ１の識別子ではない（ステップＳ２３；Ｎｏ）。よって、ステップＳ２４は実行されない。コントローラは、データ長格納領域１０を参照し、読み出された識別子ＩＤ２に対応するデータ長（２バイト）を取得する（ステップＳ２５）。そして、コントローラは、取得したデータ長（２バイト）に基づいて、次のセクション２３の先頭アドレス、すなわち３バイト先のアドレスにアクセスする（ステップＳ２６）。
【００４２】
以下、同様な処理が繰り返される。これら繰り返されるステップＳ２１〜Ｓ２６は、読み出し動作における「スキップ処理」である。本発明に係るコントローラは、各セクションに格納された識別子（ＩＤ）と、データ長格納領域１０で一括管理されているデータ長とに基づいて、スキップ処理を繰り返し実行する。各スキップ処理において、読み出された識別子が読み出し対象データＤ１の識別子かどうか判定される（ステップＳ２３）。これにより、コントローラは、アクセス中のセクションが読み出し対象データを格納しているかどうか認識することができる。例えば、セクション２４の先頭アドレスにアクセスした際、コントローラは、読み出された識別子ＩＤ１によって、そのセクション２４が読み出し対象データＤ１を格納していることを認識する。この場合、そのセクション２４の先頭アドレスによって、ＲＡＭ５に格納されている読み出し対象アドレスを更新する（ステップＳ２４）。
【００４３】
コントローラは、セクション２５の先頭アドレスの次に、５バイト先のアドレスに格納されたデータを読み込む（ステップＳ２１）。この時、図６に示されるように、そのアドレスのデータは、イレース状態を示す“１”（“ＦＦＨ”）である（ステップＳ２２；Ｙｅｓ）。よって、コントローラは、そのアドレスが空き領域３０の先頭アドレスであると判定（認識）する。この時点でＲＡＭ５に保持されている読み出し対象アドレスは、最新のデータＤ１（Ｄ１−２）が格納されているアドレスを指し示している。従って、コントローラは、現時点での読み出し対象アドレスを参照し、セクション２４から、最新の読み出し対象データであるデータＤ１−２を読み出す（ステップＳ２７）。
【００４４】
このように、本発明に係るコントローラは、「スキップ処理」を繰り返すことによって、データ格納領域２０のうちデータがイレースされている空き領域３０を検索する。また、このスキップ処理と同時に、コントローラは、読み出された識別子を参照することによって、読み出し対象アドレスを更新する。これにより、コントローラは、最新の読み出し対象データが格納されているセクションを見つけ出すことが可能となる。
【００４５】
３．効果
ＥＥＰＲＯＭの場合、あるユーザアプリケーションの使用データを扱うためには、１つのセクションだけ用いられればよい。つまり、あるセクションに使用データが格納され、その使用データが消去された後に、そのセクションに新たな使用データが書き込まれればよい。しかしながら、フラッシュメモリの場合、消去はブロック単位で行われるので、１つのセクションに格納されたデータだけを消去するわけにはいかない。
【００４６】
本発明によれば、あるセクションに格納されたデータが書き換えられる代わりに、新たなデータは、空き領域３０に追加的に書き込まれていく。また、上述の通り、読み出し動作時には、最も直近に書き込まれた読み出し対象データが読み出されている。ここで、セクション毎に使用データと共に格納される識別子（ＩＤ）が、効果的に利用されている。すなわち、セクション毎に格納された識別子を順番に参照することによって、最も後ろのアドレスに格納された読み出し対象データを見つけ出すことが可能となる。
【００４７】
このように、本発明によれば、１つのアプリケーション毎に、使用データが書き込まれ、また、読み出されている。つまり、フラッシュメモリ３の外から見れば、１つのアプリケーション毎に使用データが更新されているかのように見える。従って、本発明によれば、フラッシュメモリ３（ＥＥＰＲＯＭ代替領域８）を、ＥＥＰＲＯＭのように扱うことが可能となる。
【００４８】
また、本発明によれば、識別子とデータ長との対応関係が、データ長格納領域１０に格納されている。あるセクションから読み出された識別子に対応するデータ長を参照することによって、コントローラは、次のセクションに素早くアクセスすることができる。すなわち、識別子に基づく「スキップ処理」によって、データ格納領域２０へのアクセス処理を高速化することが可能となる。
【００４９】
ここで、使用データと共に識別子とデータ長を、“セクション毎”に格納する手法が考えられる。しかしながら、この手法によれば、各セクションのサイズがデータ長を示す情報分だけ大きくなってしまい、また、データ長を示す情報が冗長となる。本発明によれば、データ長格納領域１０が、識別子とデータ長との対応関係を、“一括して”管理している。従って、各セクションのサイズが縮小される。また、データ長を示す情報の冗長性が解消される。このように、本発明に係るフラッシュメモリ３において、１つのブロック中の領域が有効に利用されている。
【００５０】
１つのブロック中の領域が有効に利用されることにより、更に、次のような効果が得られる。本発明において、フラッシュメモリ３をＥＥＰＲＯＭのように扱うために、新たなデータは、空き領域３０に追加的に書き込まれていく。よって、各セクションのサイズが縮小されることは、１つのブロックが一杯になるまでのデータの書き込み回数が増加することを意味する。使用データで一杯になったブロックは、一括消去が行われた後、再度利用される。よって、多数の書き込み処理が行われる場合、あるブロックは繰り返し使用される。ここで、あるブロックが一杯になるまでの書き込み回数が増加すると、多数回の書き込みが行われる際のそのブロックの使用頻度は減少する。使用頻度が減少するため、データ格納領域２０におけるフラッシュメモリセルの寿命が延びる。すなわち、本発明によれば、フラッシュメモリの“書き換え可能回数”が増加する。
【００５１】
更に、本発明によれば、１種類のデータ毎に書き込みが行われる。データ更新のたびに全種類のデータを書き込む必要はない。従って、フラッシュメモリ３へのデータの書き込み時間が短縮される。また、上述の通り、１つのセクション毎にデータ長が格納される場合と比較して、各セクションのサイズは縮小している。これによっても、データの書き込み時間が短縮される。
【００５２】
本発明に係るフラッシュメモリ３が使用される場合、半導体装置１の信頼性が向上し、また使用可能なアプリケーションも増加する。
【図面の簡単な説明】
【００５３】
【図１】図１は、本発明に係る半導体装置の構成を示すブロック図である。
【図２】図２は、本発明に係る半導体装置に搭載されたフラッシュメモリの構成を示す概念図である。
【図３】図３は、本発明に係る半導体装置における書き込み動作を示すフローチャートである。
【図４】図４は、本発明に係る半導体装置における書き込み動作の一例を示す図である。
【図５】図５は、本発明に係る半導体装置における読み出し動作を示すフローチャートである。
【図６】図６は、本発明に係る半導体装置における読み出し動作の一例を示す図である。
【符号の説明】
【００５４】
１    半導体装置
２    ＣＰＵ
３    フラッシュメモリ
４    フラッシュコントローラ
５    ＲＡＭ
６    周辺マクロ
７    プログラム領域
８    ＥＥＰＲＯＭ代替領域
１０    データ長格納領域
２０    データ格納領域
２１〜２７  セクション
３０    空き領域
【図１】
2006260468.tif 000003
【図２】
2006260468.tif 000004
【図３】
2006260468.tif 000005
【図４】
2006260468.tif 000006
【図５】
2006260468.tif 000007
【図６】
2006260468.tif 000008