(57)【要約】【課題】  フラッシュメモリにデータを記録する技術において、記憶しているデータが消失する可能性をより低減させる。【解決手段】ブロック１のデータ消去時に、データの最新値が保存されているブロック２のブロックＩＤを、管理ブロックに書き込み、その後、ブロック１のデータ消去を行う。制御装置がリセットから復帰した後、使用中である旨のブロックステータスとなっているブロックが２個あった場合、当該２個のブロックのうち、管理ブロック中の上記ブロックＩＤを有するブロック（ブロック２）とは異なるブロック（ブロック１）のデータ消去を行う。【選択図】図７
2013003655.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリ（５）内において個々にデータ消去の単位となる複数のブロックのうち、使用中である旨のブロックステータス情報を保持しているブロックに対して追記方式でデータの書き込みを行う制御装置であって、
前記複数のブロックのうち第１のブロックのデータ消去時に、消去対象の前記第１のブロックを特定可能な区別用データまたは前記複数のブロックのうちデータの最新値が保存されている第２のブロックを特定可能な区別用データを、不揮発性記憶媒体（５ａ）に書き込む消去前処理手段（１１０）と、
前記消去前処理手段（１１０）によって前記区別用データが記録された後、前記第１のブロックのデータ消去を行う消去手段（１２０）と、
前記制御装置がリセットから復帰した後、使用中である旨のブロックステータス情報を保持しているブロックが前記複数のブロック中で２個あったことに基づいて、前記不揮発性記憶媒体（５ａ）中の前記区別用データを参照する参照手段（２３０）と、
使用中である旨のブロックステータス情報を保持している前記２個のブロックのうち、前記参照手段（２４０）が参照した前記区別用データによれば消去対象となっている前記第１のブロックのデータ消去を行うか、または、前記参照手段（２４０）が参照した前記区別用データによればデータの最新値が保存されている前記第２のブロック以外のブロックのデータ消去を行う消去手段（２４０）と、を備えた制御装置。
【請求項２】
フラッシュメモリ（５）内でエリア毎に複数個設けられて個々にデータ消去の単位となる複数のブロックのうち、各エリアにおいて使用中である旨のブロックステータス情報を保持しているブロックに対して追記方式でデータの書き込みを行う制御装置であって、
複数のブロックのうち第１のブロックの消去時に、消去対象の前記第１のブロックを特定可能な区別用データ、または、前記第１のブロックと同じ第１のエリアに属する他のブロックのうちデータの最新値が保存されている第２のブロックを特定可能な区別用データを、不揮発性記憶媒体（５ａ）に書き込む消去前処理手段（１１０）と、
前記消去前処理手段（１１０）によって前記区別用データが記録された後、前記第１のブロックを消去する消去手段（１２０）と、
前記制御装置がリセットから復帰した後、使用中である旨のブロックステータス情報を保持しているブロックが前記第１のエリア内に２個あったことに基づいて、前記不揮発性記憶媒体（５ａ）中の前記区別用データを参照する参照手段（２３０）と、
使用中である旨のブロックステータス情報を保持している前記第１のエリア内の前記２個のブロックのうち、前記参照手段（２４０）が参照した前記区別用データによれば消去対象となっている前記第１のブロックのデータ消去を行うか、または、前記参照手段（２４０）が参照した前記区別用データによればデータの最新値が保存されている前記第２のブロック以外のブロックのデータ消去を行う消去手段（２４０）と、を備えた制御装置。
【請求項３】
前記不揮発性記憶媒体（５ａ）は、フラッシュメモリにおいてデータ消去の単位となる管理ブロックであり、
前記消去前処理手段（１１０）によって前記区別用データが記録された後、前記管理ブロックにこれ以上区別用データを書き込む空き領域がない場合、前記複数のブロックのうち１つのブロックに、所定の管理ブロック消去中データを書き込む管理ブロック消去前処理手段（１５０）と、
前記管理ブロック消去前処理手段（１５０）によって前記管理ブロック消去中データが書き込まれた後、前記管理ブロックのデータ消去を行う管理ブロック消去手段（１６０、２６０）と、
前記管理ブロック消去手段が前記管理ブロックのデータ消去を行った後、前記管理ブロック消去中データを無効化する管理ブロック消去中データ無効化手段（１７０、２７０）と、
前記管理ブロック消去手段（１６０）は、前記制御装置がリセットから復帰した後、前記１つのブロックに前記管理ブロック消去中データが記録されていることに基づいて、前記管理ブロックのデータ消去を行うことを特徴とする請求項１または２に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリにデータの書き込みを行う制御装置に関するものである。
【背景技術】
【０００２】
従来、データ消去の最小単位となるブロックを複数有するフラッシュメモリに対して追記方式でデータの読み出しおよび書き込みを行う制御装置が知られている。
【０００３】
フラッシュメモリでは、データ書き込みの最小単位のサイズ（例えば数バイト）に比べ、データ消去の最小単位（ブロック）のサイズが大きく（例えば数キロバイト）、また一旦書き込んだアドレスにデータを再書き込みするにはブロック全体の消去が必要になる。そこで、フラッシュメモリの使用にあたってはデータの記憶領域を固定せず、データを追記方式で管理することが多い。追記方式では、あるデータの値を更新する際には、ブロックの空き領域に当該データの最新の値を追記するようになっている。また、各ブロックには、当該消去対象ブロックのブロックステータス情報を記録する領域があり、複数のブロックのうち、使用中である旨のブロックステータス情報を有するブロックに、データの書き込みが行われるようになっている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−２８１７９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載のような方法でフラッシュメモリを使用することで、既存のＥＥＰＲＯＭと同様にデータの読み出しおよび書き込みを行うことができる。しかし、特許文献１に記載のような方法では、電源が瞬断した際に、ＥＥＰＲＯＭと同様に保存したデータが消失する場合が発生する。
【０００６】
また、フラッシュメモリはＥＥＰＲＯＭよりも容量が大きいため、より多くのデータを保存することができる。従って、今後、今までは保存していなかったデータ、例として、データが消失すると、制御装置が提供する機能全体への影響が大きいデータ等、を保存する場合が想定される。その際は、データの消失の可能性を従来よりも低減させることが必要とされる。
【０００７】
本発明は上記点に鑑み、フラッシュメモリにデータを記録する技術において、保存しているデータが消失する可能性をより低減させることを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するための請求項１に記載の発明は、フラッシュメモリ（５）内において個々にデータ消去の単位となる複数のブロックのうち、使用中である旨のブロックステータス情報を保持しているブロックに対して追記方式でデータの書き込みを行う制御装置であって、前記複数のブロックのうち第１のブロックのデータ消去時に、消去対象の前記第１のブロックを特定可能な区別用データまたは前記複数のブロックのうちデータの最新値が保存されている第２のブロックを特定可能な区別用データを、不揮発性記憶媒体（５ａ）に書き込む消去前処理手段（１１０）と、前記消去前処理手段（１１０）によって前記区別用データが記録された後、前記第１のブロックのデータ消去を行う消去手段（１２０）と、前記制御装置がリセットから復帰した後、使用中である旨のブロックステータス情報を保持しているブロックが前記複数のブロック中で２個あったことに基づいて、前記不揮発性記憶媒体（５ａ）中の前記区別用データを参照する参照手段（２３０）と、
使用中である旨のブロックステータス情報を保持している前記２個のブロックのうち、前記参照手段（２４０）が参照した前記区別用データによれば消去対象となっている前記第１のブロックのデータ消去を行うか、または、前記参照手段（２４０）が参照した前記区別用データによればデータの最新値が保存されている前記第２のブロック以外のブロックのデータ消去を行う消去手段（２４０）と、を備えた制御装置である。
【０００９】
また、請求項２に記載の発明は、フラッシュメモリ（５）内でエリア毎に複数個設けられて個々にデータ消去の単位となる複数のブロックのうち、各エリアにおいて使用中である旨のブロックステータス情報を保持しているブロックに対して追記方式でデータの書き込みを行う制御装置であって、複数のブロックのうち第１のブロックの消去時に、消去対象の前記第１のブロックを特定可能な区別用データ、または、前記第１のブロックと同じ第１のエリアに属する他のブロックのうちデータの最新値が保存されている第２のブロックを特定可能な区別用データを、不揮発性記憶媒体（５ａ）に書き込む消去前処理手段（１１０）と、前記消去前処理手段（１１０）によって前記区別用データが記録された後、前記第１のブロックを消去する消去手段（１２０）と、前記制御装置がリセットから復帰した後、使用中である旨のブロックステータス情報を保持しているブロックが前記第１のエリア内に２個あったことに基づいて、前記不揮発性記憶媒体（５ａ）中の前記区別用データを参照する参照手段（２３０）と、使用中である旨のブロックステータス情報を保持している前記第１のエリア内の前記２個のブロックのうち、前記参照手段（２４０）が参照した前記区別用データによれば消去対象となっている前記第１のブロックのデータ消去を行うか、または、前記参照手段（２４０）が参照した前記区別用データによればデータの最新値が保存されている前記第２のブロック以外のブロックのデータ消去を行う消去手段（２４０）と、を備えた制御装置である。
【００１０】
請求項１、２のように、第１のブロックのデータ消去時に、前処理として上記のような区別データを不揮発性記憶媒体（５ａ）に書き込んでおき、その後にデータ消去を行うようにする。そして、制御装置がリセットから復帰した後、使用中である旨のブロックステータス情報を保持しているブロックが２個あったことに基づいて、この区別用データを参照することで、消去対象の第１のブロックまたはデータの最新値が保存されている第２のブロックを特定できるので、上記２個のブロックのうち、区別用データによれば消去対象となっているブロックのデータ消去するか、区別用データによればデータの最新値が保存されているブロックではない方のブロックのデータ消去を行う。これにより、リセット前に消去しようとしていたブロックの消去が完了するので、使用中である旨のブロックステータス情報を保持しているブロックが、データの最新値が保存されている第２のブロック１個になり、どのブロックにデータの最新値が保存されているのかがわかるようになる。したがって、フラッシュメモリにデータを記録する技術において、記憶しているデータが消失する可能性をより低下させることができる。
【００１１】
また、請求項３に記載の発明は、請求項１または２に記載の制御装置において、前記不揮発性記憶媒体（５ａ）は、フラッシュメモリにおいてデータ消去の単位となる管理ブロックであり、前記消去前処理手段（１１０）によって前記区別用データが記録された後、前記管理ブロックにこれ以上区別用データを書き込む空き領域がない場合、前記複数のブロックのうち１つのブロックに、所定の管理ブロック消去中データを書き込む管理ブロック消去前処理手段（１５０）と、前記管理ブロック消去前処理手段（１５０）によって前記管理ブロック消去中データが書き込まれた後、前記管理ブロックのデータ消去を行う管理ブロック消去手段（１６０、２６０）と、前記管理ブロック消去手段が前記管理ブロックのデータ消去を行った後、前記管理ブロック消去中データを無効化する管理ブロック消去中データ無効化手段（１７０、２７０）と、前記管理ブロック消去手段（１６０）は、前記制御装置がリセットから復帰した後、前記１つのブロックに前記管理ブロック消去中データが記録されていることに基づいて、前記管理ブロックのデータ消去を行うことを特徴とする。このようにすることで、管理ブロックのデータ消去時にリセットが発生した場合も、リセットから復帰した後にデータ消去できるようになる。
【００１２】
なお、上記および特許請求の範囲における括弧内の符号は、特許請求の範囲に記載された用語と後述の実施形態に記載される当該用語を例示する具体物等との対応関係を示すものである。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１実施形態に係るマイクロコントローラ１の構成図である。
【図２】アプリケーションソフト、フラッシュドライバソフト、フラッシュコントローラ６、フラッシュメモリ５の階層構成の概念図である。
【図３】データ消去前のブロック１、２、管理ブロックの内容を示す図である。
【図４】ブロックのデータ消去時の処理を示すフローチャートである。
【図５】区別用データ記録後のブロック１、２、管理ブロックの内容を示す図である。
【図６】区別用データ無効化後のブロック１、２、管理ブロックの内容を示す図である。
【図７】ブロック１のデータ消去が中断したときのブロック１、２、管理ブロックの内容を示す図である。
【図８】リセットから復帰した後に実行する処理のフローチャートである。
【図９】管理ブロック消去中データをブロック２に記録したときのブロック１、２、管理ブロックの内容を示す図である。
【図１０】管理ブロック消去中データを無効化したときのブロック１、２、管理ブロックの内容を示す図である。
【図１１】管理ブロックのデータ消去が中断したときのブロック１、２、管理ブロックの内容を示す図である。
【発明を実施するための形態】
【００１４】
以下、本発明の一実施形態について説明する。図１に、本実施形態に係るマイクロコントローラ１（本発明の制御装置の一例に相当する）の構成を示す。このマイクロコントローラ１は、車両に搭載され、Ｉ／Ｏ２、ＲＯＭ３、ＲＡＭ４、フラッシュメモリ５、フラッシュコントローラ６、ＣＰＵ７等を備えている。
【００１５】
Ｉ／Ｏ２は、マイクロコントローラ１の外部の装置と信号の授受を行うためのインターフェース装置である。ＲＯＭ３は、ＣＰＵ７が実行するための各種プログラム等があらかじめ記憶された不揮発性の記憶媒体である。ＲＡＭ４は、ＣＰＵ７の作業用のメモリ領域である。
【００１６】
フラッシュメモリ５は、データ消去の最小単位となるブロックを複数個有して構成されている。各ブロックのサイズは数キロバイト（例えば、４キロバイト）であり、１つのブロック内のあるデータを消去するには、そのブロック全体のデータを消去する（すなわち、そのブロック全体のビットを１にとする）必要がある。しかし、１つのブロック内にある特定のビットを１から０に書き替える場合は、それよりも小さい単位（例えば２バイト単位、４バイト単位）でデータを書き換えることができる。
【００１７】
これら複数個のブロックのそれぞれは、複数（Ｍ個）のエリアのいずれかに属するようになっている。例えば、図１の例では、ブロック１、２がエリア１に属し、ブロック３、４がエリア２に属している。１つのエリアに属するブロックの数は、２の場合もあれば、３以上の場合もある。どのブロックがどのエリアに属するかの情報は、あらかじめＲＯＭ３に記録されている。
【００１８】
エリアは、フラッシュメモリ５に書き込むレコードの記録先を、そのレコードが含むデータの種別に応じて仕分けするために設けられた領域である。例えば、ドアの開閉回数、エンジンの開閉回数等の、値が変化する頻度（すなわち、更新の頻度）が高い種別のデータは、エリア２に記録し、ソフトのバージョン等の、値が変化する頻度が低い種別のデータは、エリア１に記録する等の区分けを行う。どの種別のデータがどのエリアに記録されるかの情報は、データＩＤとエリアとの対応関係を示すエリア対応テーブルとして、ＲＯＭ３に記録されている。
【００１９】
各エリア内において、同じエリアに属する複数のブロックは、ＣＰＵ７およびフラッシュコントローラ６によって、１番目のブロックが使用され、１番目のブロックの使用が終了すると次に２番目のブロックが使用されるという風に、順番に書き込みに使用されるようになっている。
【００２０】
複数のブロックのそれぞれは、一部の領域がブロックステータス領域として使用され、他の領域がデータ領域を有している。各ブロックステータス領域にはブロックステータス情報が記録されるようになっており、ブロックステータス情報は、当該ブロックが使用中のブロックであるか使用済みのブロックであるか未使用のブロックであるかを判別することができる。各ブロックは、ＣＰＵ７およびフラッシュコントローラ６によって、当該ブロックの使用を始める際に、使用中である旨のブロックステータス情報がブロックステータス領域に書き込まれる。また、使用中のブロック（使用中である旨のブロックステータス情報を有するブロック）のデータ領域には、先頭のアドレスから順にレコードが順次記録されるようになっている。そして、当該ブロックが更にレコードを書き込む空き領域がない満杯状態になった場合、使用済みである旨のブロックステータス情報がブロックステータス領域に書き込まれる。また、当該ブロックのデータ消去を行うことで、当該ブロックのブロックステータス情報は、未使用である旨のブロックステータス情報となる。
【００２１】
なお、レコードのデータサイズは、固定でも可変でもよいが、本実施形態では固定とする。また、レコードのデータサイズは、典型的には数十バイト程度の長さである。したがって、典型的には、１つのブロック内には、数十個〜数百個程度のレコードが記録可能である。
【００２２】
また、フラッシュメモリ５は、どのエリアにも属さないブロックとして、管理ブロック５ａを１つ有している。この管理ブロックは、他のブロック同様、データ消去の最小単位であり、また、レコードが記録可能となっている。この管理ブロック５ａには、後述するように、各エリアのブロックのデータ消去直前に、そのエリアでデータの最新値が記録されているブロックの情報が書き込まれるようになっている。
【００２３】
フラッシュコントローラ６は、ＣＰＵ７の制御に従ってフラッシュメモリ５内の各ブロックに対してデータの読み出しおよび書き込みを行う周知の装置である。具体的には、ＣＰＵ７から特定のブロックの特定のアドレスのデータの読み出し指令を受けると、当該アドレスに記録されたデータの内容をフラッシュメモリ５から読み出し、読み出した内容をＣＰＵ７に出力する。
【００２４】
また、ＣＰＵ７から特定のブロックの特定のアドレスに特定のデータの書き込むよう書き込み指令を受けると、フラッシュメモリ５の当該ブロックの当該アドレス位置へ、当該特定のデータを書き込む。また、ＣＰＵ７からブロックの消去命令を受けると、フラッシュメモリ５の当該ブロックの全データの消去を行う。
【００２５】
ＣＰＵ７は、ＲＯＭ３に記録されたプログラムを実行することで、種々の処理を実現し、その処理において、必要に応じ、Ｉ／Ｏ２を用いて外部と信号の授受を行い、ＲＯＭ３からデータを読み出し、ＲＡＭ４を作業領域として用い、フラッシュコントローラ６に上記のような各種指令を出力することで、フラッシュメモリ５へのデータの読み出しおよび書き込みを行う。
【００２６】
以下、簡単のため、ＣＰＵ７がフラッシュコントローラ６に読み出し指令を出力し、その読み出し指令に従ってフラッシュコントローラ６がフラッシュメモリ５のブロックからデータを読み出してＣＰＵ７に出力する作動については、単に、ＣＰＵ７がフラッシュメモリ５のブロックからデータを読み出すと記載する。また、簡単のため、ＣＰＵ７がフラッシュコントローラ６に書き込み指令を出力し、その書き込み指令に従ってフラッシュコントローラ６がフラッシュメモリ５のブロックにデータを書き込む作動については、単に、ＣＰＵ７がフラッシュメモリ５のブロックにデータを書き込むと記載する。
【００２７】
図１に示すように、ＲＯＭ３には、ＣＰＵ７が実行するプログラムとして、フラッシュドライバソフト、および、複数のアプリケーションソフトが格納されている。図２に、アプリケーションソフト、フラッシュドライバソフト、フラッシュコントローラ６、フラッシュメモリ５の階層構成を概念的に示す。
【００２８】
ＣＰＵ７は、これらアプリケーションソフトを実行することで、例えば、Ｉ／Ｏ２を介してドア開閉センサから信号を受け取って車両のドアの開閉を検出し、車両のエンジンの始動を検知するセンサから信号を受け取ってエンジンＥＣＵの始動を検出する。
【００２９】
これらのようなアプリケーションを実行したときの処理により、フラッシュメモリ５にデータを記録する必要が発生する場合がある。例えば、エンジンを始動した回数を、その回数が変化する度にフラッシュメモリ５に記録する必要が発生し、ドアを開閉した回数を、その回数が変化する度にフラッシュメモリ５に記録する必要が発生する。
【００３０】
このように、ＣＰＵ７がアプリケーションソフトの実行において書き込みデータの書き込みの必要が発生すると、書き込みデータの書き込み要求をＲＡＭ４またはＣＰＵ７のレジスタに出力する（書き込む）。この書き込み要求は、書き込みデータの種別を示すデータＩＤ（例えば、エンジンを始動した回数か、ドアを開閉した回数かの別）と、書き込みデータの値とを含むデータである。
【００３１】
すると、ＣＰＵ７は、書き込み要求が出力されたことに基づいて、フラッシュドライバソフトの実行を開始し、その実行処理において、書き込み要求中のデータＩＤに基づいて、書き込み先のエリアを決定し、当該エリア中で、使用中の旨のブロックステータス情報が記録されているブロックを特定し、特定したブロックに書き込みデータの値を記録するため、フラッシュコントローラ６に必要な指令を出力する。これにより、フラッシュコントローラ６によって書き込みデータがレコードとしてブロックのデータ領域に追記方式で記録される。
【００３２】
ここで、追記方式について説明する。追記方式では、あるデータＩＤのデータの値が、すでにブロックのある領域に記録されており、新たに当該データの値を更新するときには、当該領域に新たな値を上書き記録するのではなく、当該ブロックの空き領域に当該データの最新値を追加記録する。
【００３３】
以下では、簡単のため、ＣＰＵ７が、ある特定のアドレスにデータを書き込む書き込み指令をフラッシュコントローラ６に出力する処理を、単に、ＣＰＵ７が、ブロックの特定のアドレスにデータを書き込むと記載する。また同様に、ＣＰＵ７が、ある特定のアドレスからデータを読み出す読み出し指令をフラッシュコントローラ６に出力し、フラッシュコントローラ６から当該データを取得する処理を、単に、ＣＰＵ７が、ある特定のアドレスからデータを読み出すと記載する。
【００３４】
以下、上記のような構成のマイクロコントローラ１の具体的な作動例について説明する。本例では、ブロック１およびブロック２のみを有するエリア１に、あるデータＩＤのデータの値を書き込む作動について説明するが、他のエリアにデータの値を書き込む場合も同様の作動を行う。
【００３５】
まず、ＣＰＵ７は、あるデータの値をエリア１に書き込むとき、エリア１内のブロック１、２に保存されているブロックステータス情報を参照し、使用中である旨のブロックステータス情報を有しているブロックに、データの値およびデータＩＤを有するレコードを追記方式で書き込む。通常、使用中である旨のブロックステータス情報を有するブロックは、１つのエリア内で１つだけであり、同じエリア中の他のブロックのブロックステータス情報は未使用か使用済みとなっている。
【００３６】
本例では、エリア１に属するブロック２が使用中である旨のブロックステータス情報を有しているとする。この場合、データの値が更新される度、最新の値がブロック２に順次追加されてく。そして、ブロック２にこれ以上レコードを記録できない満杯状態になると（図３参照）、ＣＰＵ７は、ブロック１（第１のブロックの一例に相当する）のデータ消去を行うため、フラッシュドライバソフトの処理の一部として、図４に示す処理を実行する。
【００３７】
まずステップ１１０では、消去の前処理として、データの最新値が記録されているブロック２（第２のブロックの一例に相当する）のブロックＩＤと当該ブロック２が属するエリア１のエリアＩＤとの組を、区別用データとして、管理ブロックの空き領域に書き込む。ブロックＩＤは、フラッシュメモリ５中のブロックを一意に区別するために各ブロックに割り当てられた識別子であり、エリアＩＤは、フラッシュメモリ５中のエリアを一意に区別するために各エリアに割り当てられた識別子である。この際、区別用データには、当該区別用データが有効である旨のデータも含める（図５参照）。
【００３８】
続いてステップ１２０では、消去対象のブロック１のデータ消去を実行する。具体的には、フラッシュコントローラ６にブロック１の消去命令を出力する。これにより、フラッシュコントローラ６は、ブロック１のデータ消去を行い、データ消去が完了したら、その旨をＣＰＵ７に通知する。
【００３９】
フラッシュコントローラ６からデータ消去完了の通知を受けた後、ＣＰＵ７は、ステップ１３０に進んで、直前のステップ１１０で管理ブロックに書き込んだ区別用データを無効化する（図６参照）。具体的には、当該区別用データ中で、当該区別用データが有効である旨のデータを、無効である旨のデータに書き換える。なお、ブロックのある領域に値を一旦書き込んでも、その値を構成するビット列のうち一部を１から０に書き替えるような１→０タイプの書き換えは可能であり、上記のような有効である旨のデータから無効である旨のデータへの書き換えは、そのような１→０タイプの書き換えである。
【００４０】
続いてステップ１４０では、管理ブロックが満杯状態になっているか否か、すなわち、管理ブロックに新たに区別用データを書き込む空き領域が無いかあるかを判定する。本例では、図６に示すように、まだ管理ブロックに空き領域があるので、管理ブロックが満杯状態でないと判定して図４の処理を終了する。
【００４１】
このような図４の処理により、ブロック１のデータ消去が実現する。その後ＣＰＵ７は、ブロック２に記録されている各種データの最新値をブロック１にコピーし、ブロック２のブロックステータス領域のブロックステータス情報を、使用済みである旨のブロックステータス情報に書き換える（これも１→０タイプの書き換えである）と共に、ブロック１のブロックステータス領域に、使用中である旨のブロックステータス情報を書き込む。これにより、以後ブロック１に、エリア１用のデータの最新値が順次記録されていく。
【００４２】
ここで、図４のステップ１２０でブロック１のデータ消去を行っている途中に、マイクロコントローラ１がリセットした場合について説明する。リセットの原因は、マイクロコントローラ１の暴走、マイクロコントローラ１の外部からのリセット要求、ＣＰＵ７が実行しているプログラムによるソフトウェアリセット要求、マイクロコントローラ１への電力供給の瞬断等、様々である。
【００４３】
マイクロコントローラ１がリセットした場合、ブロック１のデータ消去が中断してしまうので、ブロック１の記憶領域は、完全に消去された状態（全ビットが１となっている状態）ではなく、中途半端に消去された状態になっている。
【００４４】
あるブロックのデータ消去が途中で終わってしまった場合に、そのブロック内のデータ構成がどのようなっているかは、消去前のデータ構成、中断のタイミング、フラッシュコントローラ６によるデータ消去の手順（例えば、フラッシュコントローラ６がランダムな順序で当該ブロックの各ビットを１にするようなものであってもよい）等によって様々である。したがって、場合によっては、図７に示すように、データ消去が中断したブロック１のブロックステータス領域のブロックステータス情報が、使用中である旨のブロックステータス情報に、たまたま変化してしまう場合がある。
【００４５】
この方法でフラッシュメモリを使用すれば、既存のＥＥＰＲＯＭと同等の性能を提供することが可能になると共に、ＥＥＰＲＯＭと同様にデータが消失する場合がある。そして、フラッシュメモリはＥＥＰＲＯＭよりも多くのデータを保存することができるため、今までは保存していなかった消失してはいけないデータを保存する場合が想定される。その際は、データの消失の可能性を従来よりも低減させることが望ましい。
【００４６】
本実施形態では、この課題を解消するため、マイクロコントローラ１がリセットから復帰したときに、ＣＰＵ７が、図８に示す処理を実行するようになっている。
【００４７】
この図８の処理においてＣＰＵ７は、まずステップ２１０で、全エリアに渡って、使用中である旨のブロックステータス情報を有するブロックを検索する。続いてステップ２１０で、その検索結果に従って、使用中である旨のブロックステータス情報を有するブロックが１エリア内に２個以上あるようなエリアが存在するか否かを判定する。存在しないと判定した場合、ステップ２３０、２４０をバイパスしてステップ２５０に進む。
【００４８】
図７の例の場合、エリア１が、使用中である旨のブロックステータス情報を有するブロックを２つ（ブロック１とブロック２）を有していると判定し、ステップ２３０に進む。ステップ２３０では、管理ブロック中に記録された区別用データを参照する。
【００４９】
管理ブロック中に複数個の区別用データが記録されている場合は、最後に記録された区別用データを参照するようになっていてもよいし、有効である（すなわち、無効になっていない）区別用データを参照するようになっていてもよい。ブロックの消去は２ブロック以上同時に行うことはほとんどないので、管理ブロックには、有効である区別用データは１つしかないことがほとんどである。図７の例では、ブロック２のブロックＩＤと、エリア１のエリアＩＤを有する区別用データを参照する。
【００５０】
続いてステップ２４０では、参照した区別用データに基づいて消去対象のブロックを特定する。参照した区別用データに基づいて消去対象のブロックを特定する方法は、以下の通りである。区別用データには、図４のステップ１１０の説明で述べた通り、ブロック１のデータ消去の時点でデータの最新値が記録されているブロック２のブロックＩＤが記録されている。また、図７に示した通り、使用中である旨のブロックステータス情報を有しているのは、当該ブロック２と、データ消去が中断してしまったブロック１である。
【００５１】
したがって、ＣＰＵ７は、エリア１内で使用中である旨のブロックステータス情報を有している２個のブロック１、２のうち、参照した区別用データに含まれるブロックＩＤのブロック２ではない方のブロック１を、消去対象のブロックとして特定する。
【００５２】
更にステップ２４０では、特定した消去対象のブロック１の消去命令をフラッシュコントローラ６に出力する。これにより、フラッシュコントローラ６は、当該消去対象のブロック１のデータ消去を行い、データ消去が完了したら、その旨をＣＰＵ７に通知する。また更にステップ２４０では、ステップ２３０で参照した区別用データを、図４のステップ１３０と同じ方法で、無効化する。この結果、ブロック１のデータ構成は、図７に示すような中途半端な消去状態から、図６に示すような完全に消去された状態に復帰する。
【００５３】
このように、ブロック１のデータ消去時に、前処理として上記のような区別データを管理ブロック５ａに書き込んでおき、その後にデータ消去を行うようにする。そして、制御装置がリセットから復帰した後、使用中である旨のブロックステータス情報を保持しているブロックが２個あったことに基づいて、この区別用データを参照することで、データの最新値が保存されているブロック２を特定できるので、上記２個のブロックのうち、区別用データによればデータの最新値が保存されているブロックではない方のブロックのデータ消去を行う。これにより、リセット前に消去しようとしていたブロックの消去が完了するので、使用中である旨のブロックステータス情報を保持しているブロックが、データの最新値が保存されているブロック２の１個になり、どのブロックにデータの最新値が保存されているのかがわかるようになる。そして、当該データの値が必要になるときには、ブロック２からデータの最新値を読み出すことができる。
【００５４】
ブロック１のデータ消去が完了した旨の通知をフラッシュコントローラ６から受けたＣＰＵ７は、続いてステップ２５０に進み、あらかじめ定められた所定のエリア（本例ではエリア１とする）内で使用中のブロック（使用中の旨のブロックステータス情報を有するブロック）に、管理ブロック消去中データが含まれているか否かを判定する。図６の例では、ブロック２に管理ブロック消去中データが含まれていないので、図８の処理を終了する。管理ブロック消去中データについては後述する。
【００５５】
なお、ステップ２４０でブロックのデータ消去を行った場合は、図８の処理の終了後、消去を行ったブロック１に対し、ブロック２に記録されている各種データの最新値をブロック１にコピーし、さらに、コピー元のブロック２のブロックステータス情報を、使用済みである旨のブロックステータス情報に書き換え、また、コピー先のブロック１のブロックステータス領域に、使用中である旨のブロックステータス情報を書き込み込む。これにより、以後ブロック１に、エリア１用のデータの最新値が順次記録されていく。
【００５６】
次に、図４のステップ１１０の処理の結果、管理ブロックが満杯状態になった場合について説明する。この場合は、ステップ１３０でいずれかのブロック（管理ブロック以外）の消去完了後に、図４のステップ１４０で、管理ブロックが満杯状態になったと判定し、ステップ１５０に進む。
【００５７】
ステップ１５０では、管理ブロック消去の前処理として、図９に示すように、あらかじめ定められた所定のエリア（本例ではエリア１とする）のブロック１、２のうち、使用中のブロック（使用中の旨のブロックステータス情報を有するブロック）であるブロック２の空き領域に、管理ブロック消去中データを記録する。なお、管理ブロック消去中データは、当該管理ブロック消去中データが有効である旨の有効データを含む。
【００５８】
続いてステップ１６０では、管理ブロックのデータ消去を実行する。具体的には、フラッシュコントローラ６に管理ブロックの消去命令を出力する。これにより、フラッシュコントローラ６は、管理ブロックのデータ消去を行い、データ消去が完了したら、その旨をＣＰＵ７に通知する。
【００５９】
フラッシュコントローラ６からデータ消去完了の通知を受けた後、ＣＰＵ７は、ステップ１７０に進んで、直前のステップ１５０で管理ブロックに書き込んだ管理ブロック消去中データを無効化する（図１０参照）。具体的には、当該区別用データ中で、当該区別用データが有効である旨のデータを、無効である旨のデータに書き換える（これも１→０タイプの書き換えである）。ステップ１７０の後、図４の処理が終了する。
【００６０】
ここで、図４のステップ１６０で管理ブロックのデータ消去を行っている途中に、マイクロコントローラ１がリセットした場合について説明する。
【００６１】
マイクロコントローラ１がリセットした場合、図１１に例示するように、管理ブロックのデータ消去が途中で中断してしまうので、管理ブロックの記憶領域は、完全に消去された状態ではなく、中途半端に消去された状態になっている。
【００６２】
このような中途半端に消去された状態を解消するため、リセットから復帰後にＣＰＵ７実行する図８の処理では、ステップ２５０で、あらかじめ定められた所定のエリア１内で使用中のブロック２に、管理ブロック消去中データが含まれていると判定し、続いてステップ２６０に進む。
【００６３】
ステップ２６０では、管理ブロックのデータ消去を実行する。具体的には、フラッシュコントローラ６に管理ブロックの消去命令を出力する。これにより、フラッシュコントローラ６は、管理ブロックのデータ消去を行い、データ消去が完了したら、その旨をＣＰＵ７に通知する。
【００６４】
フラッシュコントローラ６からデータ消去完了の通知を受けた後、ＣＰＵ７は、ステップ２７０に進んで、上記管理ブロック消去中データを、図４のステップ１７０と同じ方法で無効化する。これにより、管理ブロックのデータ構成は、図１０の状態に復帰する。ステップ２７０の後、図８の処理は終了する。
【００６５】
このように、区別用データが記録された後、管理ブロックにこれ以上区別用データを書き込む空き領域がない場合、所定のエリアの使用中のブロック２に、所定の管理ブロック消去中データを書き込み、その後に、管理ブロックのデータ消去を行い、その後、管理ブロック消去中データを無効化する。そして、マイクロコントローラ１がリセットから復帰した後、上記ブロック２に管理ブロック消去中データが記録されていることに基づいて、管理ブロックのデータ消去を行い、その後、管理ブロック消去中データを無効化する。このようにすることで、管理ブロックのデータ消去時にリセットが発生した場合も、リセットから復帰した後にデータ消去できるようになる。
【００６６】
なお、上記実施形態においては、マイクロコントローラ１のＣＰＵ７が、ステップ１１０を実行することで消去前処理手段の一例として機能し、ステップ１２０を実行することで消去手段の一例として機能し、ステップ２３０を実行することで参照手段の一例として機能し、ステップ２４０を実行することで消去手段の一例として機能し、ステップ１５０を実行することで管理ブロック消去前処理手段の一例として機能し、ステップ１６０、２６０を実行することで管理ブロック消去手段の一例として機能し、ステップ１７０、２７０を実行することで管理ブロック消去中データ無効化手段の一例として機能する。
【００６７】
（他の実施形態）
以上、本発明の実施形態について説明したが、本発明の範囲は、上記実施形態のみに限定されるものではなく、本発明の各発明特定事項の機能を実現し得る種々の形態を包含するものである。例えば、以下のような形態も許容される。
【００６８】
（１）上記実施形態においては、フラッシュメモリ５中のブロックは複数のエリアのいずれかに振り分けられているが、フラッシュメモリ５は、必ずしもこのように複数のエリアにエリア分けされていなくてもよい。
【００６９】
（２）また、上記実施形態では、区別用データを記録する記憶媒体として、フラッシュメモリ５の管理ブロックを採用しているが、区別用データを記録する記憶媒体は、ＥＥＰＲＯＭでもよいし、他のフラッシュメモリ５以外のフラッシュメモリでもよい。つまり、区別用データを記録する記憶媒体は、不揮発性の記憶媒体なら、どのようなものであってもよい。なお、ＥＥＰＲＯＭを採用する場合、区別用データを無効にするためには、単純に当該区別用データを消去してもよい。
【００７０】
（３）上記実施形態では、ステップ１１０で管理ブロックに書き込む区別用データは、エリア１内でデータの最新値が保存されたブロック２のブロックＩＤを含むようになっており、ＣＰＵ７は、リセットから復帰時に、エリア１内で使用中の旨のブロックステータス情報を有する２つのブロック１、２のうち、当該区別用データ内の当該ブロックＩＤのブロック２ではない方のブロック１の消去を行うようになっている。
【００７１】
しかし、このようなものに限らず、本発明においては、ブロックステータス情報を有する２つのブロック１、２のうち、どちらが消去中でどちらがデータの最新値が保存されているかがわかればよい。
【００７２】
したがって、ステップ１１０で管理ブロックに書き込む区別用データは、エリア１内で消去対象のブロック１のブロックＩＤを含むようになっており、ＣＰＵ７は、リセットから復帰時に、エリア１内で使用中の旨のブロックステータス情報を有する２つのブロック１、２のうち、当該区別用データ内の当該ブロックＩＤのブロック１の消去を行うようになっていても、結果は同じことになる。
【００７３】
（４）上記実施形態では、ＣＰＵ７およびフラッシュコントローラ６がブロック１のデータ消去を行うのは、ブロック２が満杯状態になった場合であったが、ブロック１のデータ消去のタイミングは、必ずしもこのようなものに限られない。例えば、アプリケーションがブロック１の消去要求を出力したことに基づいて、ＣＰＵ７およびフラッシュコントローラ６がブロック１のデータ消去を行うようになっていてもよい。そして、そのようなデータ消去の場合でも、図３に示した処理を行うが、図３、図８の処理が終了したときにデータコピーは行わない。
【００７４】
（５）また、上記の実施形態において、ＣＰＵ７がプログラムを実行することで実現している各機能は、それらの機能を有するハードウェア（例えば回路構成をプログラムすることが可能なＦＰＧＡ）を用いて実現するようになっていてもよい。
【符号の説明】
【００７５】
１                マイクロコントローラ
２                Ｉ／Ｏ
３                ＲＯＭ
４                ＲＡＭ
５                フラッシュメモリ
５ａ              管理ブロック
６                フラッシュコントローラ
７                ＣＰＵ
【図１】
2013003655.tif 000003
【図２】
2013003655.tif 000004
【図３】
2013003655.tif 000005
【図４】
2013003655.tif 000006
【図５】
2013003655.tif 000007
【図６】
2013003655.tif 000008
【図７】
2013003655.tif 000009
【図８】
2013003655.tif 000010
【図９】
2013003655.tif 000011
【図１０】
2013003655.tif 000012
【図１１】
2013003655.tif 000013