(57)【要約】【課題】フラッシュメモリにおいてデータ消失を発生し難くすることができるフラッシュメモリのデータ消失防止装置及びフラッシュメモリのデータ消失防止方法を提供する。【解決手段】フラッシュメモリ６の対をなす２ブロックのうちの一方を、通常のデータ書き込み時において用いるローテーションブロックとして使用し、もう一方を、ローテーションブロックと同じデータを書き込みミラーブロックとして使用する。そして、使用中のローテーションブロックに書き込みエラーが発生した際には、その後のデータ読み書きをミラーブロックにおいて実行し、書き込みエラー発生後のデータ読み書きを継続する。また、電源再投入後の初期化時、ミラーブロックに書き込んだデータ群をローテーションブロックにコピーし、ミラーを再構築する。【選択図】図２
2010176201.tif 000002
【特許請求の範囲】
【請求項１】
データ書き換え可能な不揮発性メモリとしてフラッシュメモリを使用し、アプリケーションからの書き込み指令によりドライバが前記フラッシュメモリにデータ書き込みを行う際、当該フラッシュメモリのメモリ領域を構築しつつデータ消去単位となっている複数のブロックを、順番にローテーションして使用しながらデータの読み書きを実行するフラッシュメモリのデータ消失防止装置において、
組として設定した２つの前記ブロックのうちの一方を、前記ローテーションにおいて用いるローテーションブロックとして使用し、もう一方を当該ローテーションブロックのミラーブロックとして使用するミラーリング処理手段と、
前記フラッシュメモリに対する前記ドライバのアクセスに対して異常があるか否かを監視する監視手段と、
前記監視手段で前記異常を確認した際に、前記ミラーブロックを使用して前記データの読み書きを継続させる保護実行手段と
を備えたことを特徴とするフラッシュメモリのデータ消失防止装置。
【請求項２】
前記保護実行手段は、
前記監視手段で前記異常を確認した際、前記ミラーブロックで前記データの読み書きを継続するデータ処理継続手段と、
前記異常によって破壊されたミラーリングを再構築するミラー再構築手段と
を備えたことを特徴とする請求項１に記載のフラッシュメモリのデータ消失防止装置。
【請求項３】
前記ミラー再構築手段は、前記ミラーリングの再構築中にアプリケーションから新たなデータの書き込み指令を受け付けた際には、前記再構築を一時中断して、空いた前記メモリ領域に当該データを書き込むことにより、ミラーリング再構築中のデータ書き込みが可能となっていることを特徴とする請求項２に記載のフラッシュメモリのデータ消失防止装置。
【請求項４】
データ書き換え可能な不揮発性メモリとしてフラッシュメモリを使用し、アプリケーションからの書き込み指令によりドライバが前記フラッシュメモリにデータ書き込みを行う際、当該フラッシュメモリのメモリ領域を構築しつつデータ消去単位となっている複数のブロックを、順番にローテーションして使用しながらデータの読み書きを実行するフラッシュメモリのデータ消失防止方法において、
組として設定した２つの前記ブロックのうちの一方を、前記ローテーションにおいて用いるローテーションブロックとして使用し、もう一方を当該ローテーションブロックのミラーブロックとして使用し、前記フラッシュメモリに対する前記ドライバのアクセスに対して異常があるか否かを監視手段で監視し、前記監視手段で前記異常を確認した際に、前記ミラーブロックを使用して前記データの読み書きを継続させることを特徴とするフラッシュメモリのデータ消失防止方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ書き換え可能な不揮発性メモリの一種であるフラッシュメモリに係り、詳しくはそのデータ消失防止装置及びデータ消失防止方法に関する。
【背景技術】
【０００２】
従来、装置や機器の動作を統括管理するコンピュータには、動作の際に必要となる各種データの格納先として種々のメモリが搭載されている。このメモリの一種としては、例えば各種データの電気的消去及び書き込みが可能なメモリとして不揮発性メモリが使用され、この不揮発性メモリには、例えば図７に示すようなフラッシュメモリ（Flash Read Only Memory：特許文献１参照）８１が広く使用されている。フラッシュメモリ８１は、データ書き込み先であるメモリ領域が複数（図７ではＡ〜Ｄの４つ）のブロック８２〜８５の集合体により構築され、このブロック単位ごとにデータ消去可能となっている。なお、これらブロック８２〜８５は、データ消去単位であることから、イレーズブロックとも呼ばれている。フラッシュメモリ８１に対するデータ読み書きは、アプリケーション８６からの指令に従って作動するドライバ８７によって管理される。
【０００３】
ところで、フラッシュメモリ８１以外の他のメモリ種であるEEPROM（Electrically Erasable PROM）やSRAM（Static Random Access Memory）には、同じアドレス上にデータを逐次書き込むことができる上書き機能があるので、データ書き込み済みのアドレスにデータ書き込み指令が出されても、このアドレスに逐次データ書き込みが可能である。しかし、前述したフラッシュメモリ８１は、その特性として、データ書き込み済みのアドレス上に新たなデータを書き込む際には、ブロック全体を一旦消去してからでないと、この作業を実行することができないという制限がある。
【０００４】
よって、この種のフラッシュメモリ８１では、データ書き込みに際して、図８及び図９に示すようにＡ〜Ｄのブロック８２〜８５をローテーションして使用する。このとき、まずフラッシュメモリ８１に新規データを書き込む際には、図８に示すように、ドライバ８７は使用ブロック（図８ではＡブロック８２）の空き領域にデータを順次書き増ししていく。そして、Ａブロック８２に空き領域がなくなると、図９に示すように、各データ（図９ではＩＤ１〜ＩＤ３）におけるその最新値を次の使用ブロックであるＢブロック８３にコピーし、このＢブロック８３を新たなデータ書き込み先として使用し、使用ブロックに空き領域が無くなる度に、この作業を順次繰り返すことでデータ書き込みが行われる。また、空き領域がなくなった使用済みブロックは、次のローテーションが回ってくるまでにデータが消去される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２４３３４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、種々の要因によって、図１０に示すようにドライバ８７に使用ブロックへの書き込みエラーが発生すると、それ以降においてドライバ８７は使用ブロックにデータ書き込みを実行することができなくなる。これにより、仮にドライバ８７はアプリケーション８６から新規データを受け付けても、この新規データをフラッシュメモリ８１に書き込む動作をとることができず、結果としてこれがデータ消失という問題に繋がっていた。また、このデータ消失という問題は、使用ブロックに書き込んでおいたデータが、エラー動作したドライバ８７によって消去されてしまうことも広義として含み、要はフラッシュメモリ８１に対する正常なデータ保持が可能な新たな対策が要望されていた。
【０００７】
本発明の目的は、フラッシュメモリにおいてデータ消失を発生し難くすることができるフラッシュメモリのデータ消失防止装置及びフラッシュメモリのデータ消失防止方法を提供することにある。
【課題を解決するための手段】
【０００８】
前記問題点を解決するために、本発明では、データ書き換え可能な不揮発性メモリとしてフラッシュメモリを使用し、アプリケーションからの書き込み指令によりドライバが前記フラッシュメモリにデータ書き込みを行う際、当該フラッシュメモリのメモリ領域を構築しつつデータ消去単位となっている複数のブロックを、順番にローテーションして使用しながらデータの読み書きを実行するフラッシュメモリのデータ消失防止装置において、組として設定した２つの前記ブロックのうちの一方を、前記ローテーションにおいて用いるローテーションブロックとして使用し、もう一方を当該ローテーションブロックのミラーブロックとして使用するミラーリング処理手段と、前記フラッシュメモリに対する前記ドライバのアクセスに対して異常があるか否かを監視する監視手段と、前記監視手段で前記異常を確認した際に、前記ミラーブロックを使用して前記データの読み書きを継続させる保護実行手段とを備えたことを要旨とする。
【０００９】
この構成によれば、フラッシュメモリがメモリ領域として持つ複数のブロックを２つずつに区分けし、各々の組において一方のブロックをデータ読み書きに用いるローテーションブロックとして使用し、他方のブロックをローテーションブロックのミラーブロックとして使用する。そして、フラッシュメモリに対するドライバのアクセス、即ち使用中のローテーションブロックに対してアクセス異常が発生した際には、異常が発生してしまったローテーションブロックのミラーブロックを使用することにより、データ読み書きを継続する。このため、もし仮に使用ローテーションブロックに異常が発生しても、ミラーブロックを用いてデータ読み書きを継続することが可能となるので、データ読み書きが継続できずにデータが消失してしまう状況を生じ難くすることが可能となる。
【００１０】
本発明では、前記保護実行手段は、前記監視手段で前記異常を確認した際、前記ミラーブロックで前記データの読み書きを継続するデータ処理継続手段と、前記異常によって破壊されたミラーリングを再構築するミラー再構築手段とを備えたことを要旨とする。
【００１１】
この構成によれば、ローテーションブロックでのデータ読み書き異常時に同ブロックのミラーブロックでデータ読み書きを継続した際には、データ処理の継続は可能となるものの、ローテーションブロックとミラーブロックとの間のミラーリングが破壊された状況に陥る。しかし、本構成では、ミラーリングが破壊された際には、ミラー再構築手段によって２ブロック間のミラーリングが再構築されるので、この後、ローテーションブロックでデータの読み書きを実行する動作に戻っても、正常なデータ読み書きを問題なく実行可能となる。
【００１２】
本発明では、前記ミラー再構築手段は、前記ミラーリングの再構築中にアプリケーションから新たなデータの書き込み指令を受け付けた際には、前記再構築を一時中断して、空いた前記メモリ領域に当該データを書き込むことにより、ミラーリング再構築中のデータ書き込みが可能となっていることを要旨とする。
【００１３】
この構成によれば、破壊されたミラーリングを再構築している際に、仮に新たなデータ書き込みを受け付けても、再構築を一旦中断してデータ書き込みを優先して実行することにより、これに対応することが可能となる。
【００１４】
本発明では、データ書き換え可能な不揮発性メモリとしてフラッシュメモリを使用し、アプリケーションからの書き込み指令によりドライバが前記フラッシュメモリにデータ書き込みを行う際、当該フラッシュメモリのメモリ領域を構築しつつデータ消去単位となっている複数のブロックを、順番にローテーションして使用しながらデータの読み書きを実行するフラッシュメモリのデータ消失防止方法において、組として設定した２つの前記ブロックのうちの一方を、前記ローテーションにおいて用いるローテーションブロックとして使用し、もう一方を当該ローテーションブロックのミラーブロックとして使用し、前記フラッシュメモリに対する前記ドライバのアクセスに対して異常があるか否かを監視手段で監視し、前記監視手段で前記異常を確認した際に、前記ミラーブロックを使用して前記データの読み書きを継続させることを要旨とする。
【発明の効果】
【００１５】
本発明によれば、フラッシュメモリにおいてデータ消失を発生し難くすることができる。
【図面の簡単な説明】
【００１６】
【図１】一実施形態における車内運転席の外観を示す斜視図。
【図２】コンピュータのソフトウェア構成を含めた概略構成を示すブロック図。
【図３】ブロックにデータが書き込まれるときの動作推移を示す説明図。
【図４】ブロックからデータを読み取るときの具体例を示す説明図。
【図５】ブロックに書き込みエラーが発生したときの状態を示す説明図。
【図６】ミラーリングを再構築するときの動作推移を示す説明図。
【図７】従来におけるコンピュータの概略構成を示すブロック図。
【図８】フラッシュメモリのブロックにデータを書き込むときの動作を示す説明図。
【図９】フラッシュメモリのブロックからデータを消去するときの動作を示す説明図。
【図１０】書き込みエラーが発生したときの状態を示す説明図。
【発明を実施するための形態】
【００１７】
以下、本発明を具体化したフラッシュメモリのデータ消失防止装置及びフラッシュメモリのデータ消失防止方法の一実施形態を図１〜図６に従って説明する。
図１に示すように、車両１には、ステアリングホイール２の操舵角を検出する操舵角検出装置３が設けられている。この操舵角検出装置３には、同装置３のセンサ部品（例えば、磁気式センサ）としてステアリングアングルセンサ４と、操舵角検出装置３のコントロールユニットとしてコンピュータ５とが設けられている。コンピュータ５は、ステアリングアングルセンサ４から取得するセンサ出力値を基に、ステアリングホイール２の操舵角を演算し、この演算した操舵角（演算舵角値）を、必要とする他の車載機器に車内ＬＡＮ（Local Area Network）を介して出力する。
【００１８】
図２に示すように、コンピュータ５には、各種データを書き込むためのメモリとしてフラッシュメモリ（Flash ROM）６が設けられている。フラッシュメモリ６は、自身のメモリ領域に対するデータの書き換えが可能な不揮発性メモリの一種であって、背景技術でも述べたように、データ消去単位として区分けされた複数（本例はＡ〜Ｆの６つ）のブロック７〜１２からなる。即ち、この種のフラッシュメモリ６は、自身のメモリ領域に書き込んだデータが書き換え可能であるものの、データ消去はブロック単位でしか実行することができない特性を持ったメモリである。なお、これらブロック７〜１２は、フラッシュメモリ６のメモリ領域を均等に区分することにより、同じ記憶容量をとる。なお、Ａブロック７、Ｃブロック９及びＥブロック１１がブロック（ローテーションブロック）を構成する。
【００１９】
本例のフラッシュメモリ６では、データ書き込みに際して、Ａ〜Ｆのブロック７〜１２のうち１つ飛びのＡ，Ｃ，Ｅの３つのブロック７，９，１１をデータ書込先としてローテーションして使用する。ここで、これら３つのローテーションブロック７，９，１１のうち、最初に使用するブロックを例えばＡブロック７とすると、まずはＡブロック７をデータ書き込み先として、操舵角検出装置３に関係する各種データを書き込んでいく。なお、このときにＡブロック７に書き込まれるデータとしては、例えば車両１のイグニッションスイッチ（エンジンスイッチ）がイグニッションオン位置（IG ON位置）に操作されてエンジンが始動したときの時刻（ＩＤ１データ）や、イグニッションスイッチがオンしている間の時間（ＩＤデータ２）や、ステアリングアングルセンサ４のセンサ出力値（ＩＤ３データ）等がある。
【００２０】
ところで、フラッシュメモリ６にデータを書き込む際、フラッシュメモリ６の特性として、データ書き込み済みのアドレスにデータを上書きすることができない。このため、フラッシュメモリ６は、新規書き込みデータを受け付けた際、使用中のＡブロック７において、その空き領域に受け付けデータを順次書き増ししていく動作をとる。そして、書込領域が一杯になると、使用ブロックを次使用ブロック（本例はＣブロック９）に切り換え、ＩＤ１〜ＩＤ３の各データの最新値をＣブロック９に書き込みつつ、データの書き込みをＣブロック９で継続し、ブロックに空き領域が無くなる度にこの動作を繰り返すことにより、データ書き込みを実行する。なお、データ書き込みが一杯になったブロックは、次ローテーションが回ってくるまでの間に、データ書き込みやデータ読み取りを実行していない手の空いたときにデータ消去が実行される。
【００２１】
図２に示すように、コンピュータ５には、同コンピュータ５を動作させるソフトウェアとして、操舵角検出装置３を動作させるための専用ソフトウェアであるアプリケーション１３と、このアプリケーション１３とＯＳ（Operating System）との間の中間的な立場で機能するミドルウェア１４と、フラッシュメモリ６を動作させるためのソフトウェアであるドライバ１５と設けられている。アプリケーション１３は、自身に入力される各種情報やデータに基づき、ミドルウェア１４を介してドライバ１５に動作指令を出力することにより、コンピュータ５を動作させる。また、アプリケーション１３は、ドライバ１５が複数存在する場合、これらドライバ１５を統括管理することが可能となっている。
【００２２】
ドライバ１５は、アプリケーション１３からミドルウェア１４を介して動作指令を受け付けると、この動作指令に従って動いて、フラッシュメモリ６（ブロック７〜１２）へのデータ書き込み、データ読み取り、データ消去等の各種処理を実行する。このとき、ドライバ１５は、アプリケーション１３からの動作指令をトリガとして受け付け、アプリケーション１３が他動作を実行していても、この動作指令に基づく動作をアプリケーション１３の動作状態に依らず実行する。また、ドライバ１５によるブロック７〜１２のデータ消去は、前述したようにドライバ１５がデータ書き込みやデータ読み取りを行っていないときの手の空いたときに実行される。
【００２３】
また、本例の場合、ローテーションの１つ飛ばしとしたＢ，Ｄ，Ｆのブロック８，１０，１２は、各々組をなすブロックに書き込まれたデータ群をミラーリングするミラーブロックとして使用されている。ミラーブロックである本例のブロック８，１０，１２は、組をなすローテーションブロックに書き込まれるデータと同じデータが、同じアドレス順で書き込まれるブロックである。本例においては、Ｂブロック８がＡブロック７のミラーブロックであり、Ｄブロック１０がＣブロック９のミラーブロックであり、Ｆブロック１２がＥブロック１１のミラーブロックである。なお、Ｂブロック８、Ｄブロック１０、Ｆブロック１２がブロック（ミラーブロック）を構成する。
【００２４】
ドライバ１５には、フラッシュメモリ６に対してミラーリングを実行するミラーリング処理部１６が設けられている。ミラーリング処理部１６は、フラッシュメモリ６のメモリ領域を論理的に２分割することにより、同じ構成のローテーションブロックがフラッシュメモリ６内に２つ生成されるように機能する。即ち、ミラーリング処理部１６は、複数のブロック７〜１２を２つずつ組として設定し、これら各々の組において、一方のブロックを実際のデータ読み書きに用いるローテーションブロック（本例はブロック７，９，１１）として使用し、他方のブロックをミラーリングに用いるミラーブロック（本例はブロック８，１０，１２）として使用する。なお、ミラーリング処理部１６がミラーリング処理手段に相当する。
【００２５】
各ブロック７〜１２の最後尾には、自ブロックのミラーリング状態がどのような状態にあるのかを書き表す管理領域Ｅが用意されている。この管理領域Ｅには、自ブロックのミラーリング状態がどのような状態にあるのかを通知する管理情報１７が書き込まれている。管理情報１７としては、例えばミラーリング状態が正常であることをドライバ１５に通知するミラー状態正常通知や、ミラーリング状態が異常であることをドライバ１５に通知するミラー状態異常通知等がある。
【００２６】
また、ドライバ１５には、使用ローテーションブロックに対してデータ消失の有無を確認するデータ消失有無確認部１８が設けられている。本例のデータ消失有無確認部１８は、ドライバ１５が使用ローテーションブロックにデータ書き込みを実行している際、このデータ書き込みが正常に実行できているか否かを確認することにより、使用中のローテーションブロックに対する書き込みエラーの有無を確認し、例えば書き込み先のアドレスを見失うなどした際には、書き込みエラーが発生したと認識する。データ消失有無確認部１８は、書き込みエラーを確認した際、管理情報１７をそれまでのミラー状態正常通知からミラー状態異常通知に更新する。なお、データ消失有無確認部１８が監視手段に相当する。
【００２７】
ドライバ１５には、データ消失有無確認部１８がローテーションブロックで書き込みエラーを検出した際、そのエラー検出以降のデータ書き込みや読み込みを、組をなすミラーブロックにおいて実行するデータ処理継続部１９が設けられている。例えば、データ処理継続部１９は、Ａブロック７でデータ書き込みを実行している際に、このＡブロック７で書き込みエラーが発生したことを確認すると、Ａブロック７のミラーブロックであるＢブロック８で続きのデータ書き込みやデータ読み取りを実行する。なお、データ処理継続部１９が保護実行手段、データ処理継続手段を構成する。
【００２８】
また、ドライバ１５には、使用中のローテーションブロックに書き込みエラーが発生した際、これと対応するミラーブロックで保持したデータ群を使用して、ミラーリングを再構築するミラー再構築部２０が設けられている。本例のミラー再構築部２０は、例えばコンピュータ５の電源投入時等の管理情報１７の読み取りタイミングにおいて管理情報１７を確認しにいき、管理情報１７からミラー状態異常を受け付けると、ミラーブロックに書き込んでおいたデータ群を、それと組をなすローテーションブロックにコピーすることにより、ミラーリングを再構築する。なお、ミラー再構築部２０が保護実行手段、ミラー再構築手段を構成する。
【００２９】
次に、本例のコンピュータ５（ドライバ１５）が実行するミラーリングの動作を図３〜図６を用いて説明する。
例えば、ドライバ１５がアプリケーション１３からデータ書き込み指令を受け付けて、フラッシュメモリ６に対して新規にデータ書き込みを実行する場合、図３に示すように、ドライバ１５は最先使用であるＡブロック７の先頭から順にデータを書き込んでいく。なお、以降の説明においては、ドライバ１５がＡブロック７に順次書き込んでいくデータ（即ち、ＩＤ１〜ＩＤ３の各種データ）を、便宜上、データ書き込み順に第１データＤ１、第２データＤ２…と記載する。
【００３０】
このとき、ミラーリング処理部１６は、Ａブロック７に書き込んだデータと同一のデータ内容を持つもの（即ち、第１データＤ１）を、Ａブロック７のミラーブロックであるＢブロック８に先頭から同じアドレス順で書き込み、このＡブロック７をＢブロック８によってミラーリングする。このとき、ミラーリング処理部１６は、Ｂブロック８にＡブロック７と同じ第１データＤ１を正常に書き込めたことを確認すると、ミラー状態が正常であると認識して、Ａブロック７の末尾に設けた管理情報１７としてミラー状態正常通知を記録しつつ、これもミラーリングして、同様のミラー状態正常通知をＢブロック８の最後尾に記録する。そして、ドライバ１５がＡブロック７に順に第２データＤ２、第３データＤ３、第４データＤ４…を書き込む動作をとると、ミラーリング処理部１６はこれらと同一のデータをＢブロック８に同じアドレス順で順次書き込んでいく。
【００３１】
このデータ書き込み時、ドライバ１５がアプリケーション１３からデータ読み取り指令を受け付けると、ドライバ１５はこの指令に従ってフラッシュメモリ６からのデータ読み取りを実行する。このとき、フラッシュメモリ６のデータ読み取りは、図４に示すように、ローテーションブロックであるＡブロック７のみから実行する。これにより、データ読み取りは、Ａブロック７及びＢブロック８の両方からデータを読む動作はとらないので、データ読み込みの処理時間が短く済む。
【００３２】
ところで、図５に示すように、例えばＡブロック７のフォーマットに不具合が発生してしまっている場合など、データ書き込みの環境下に異常が発生すると、ドライバ１５はアプリケーション１３から書き込みデータを受け付けても、これをＡブロック７に書き込むことができず、書き込みエラーが発生してしまう。このような書き込みエラー発生以降は、ローテーションブロックであるＡブロック７にデータ書き込みを継続できず、これが結果としてデータ消失に繋がる懸念がある。
【００３３】
しかし、本例の場合は、書き込みエラーの発生有無がデータ消失有無確認部１８で監視されている。そして、データ消失有無確認部１８は、例えばドライバ１５がＡブロック７に書き込み動作に入ったにも拘わらず、一定時間を経ても書き込みが完了できないことを確認すると、ローテーションブロックに書き込みエラーが発生したと認識する。このとき、データ消失有無確認部１８は、書き込みエラーを確認した際、管理情報１７をそれまでのミラー状態正常通知からミラー状態異常通知に更新する。なお、ブロック７〜１２は全体を一括でしか消去できないので、ミラー状態異常通知は管理領域Ｅの空き領域に書き増しされることでミラーブロックに書き加えられる。
【００３４】
また、データ処理継続部１９は、データ消失有無確認部１８で書き込みエラーを検出すると、これ以降はＡブロック７の代わりに、Ａブロック７のミラーブロックであるＢブロック８でデータの読み書きを継続する。そして、これ以降はＡブロック７を放置してデータ読み書きのローテーションから外し、Ｂブロック８をローテーションブロックとして使用する。即ち、Ｂブロック８での書き込みが一杯になると、これ以降はＢブロック８→Ｄブロック１０→Ｆブロック１２の順でブロックがローテーション使用され、Ｆブロック１２に空き容量が無くなると、書き込み先がＢブロック８に復帰して、以上の動作が繰り返される。
【００３５】
ここで、コンピュータ５の電源がオフされた後に電源が再投入されると、ミラー再構築部２０は、破壊されたミラーを再構築すべく、ミラーブロックの最後尾に書き込まれた管理情報１７を確認しにいく。なお、このように電源再投入後の初期化時にミラー再構築を実行するのは、この初期化の際にブロック末尾の管理情報１７を確認しにいく動作をドライバ１５がとるためである。ミラー再構築部２０は、この管理情報１７の確認の際、ミラー状態正常通知を読み取ると、ミラーリングは破壊されていないと認識し、ミラー再構築の動作は実行しない。
【００３６】
一方、ミラー再構築部２０は、管理情報１７の確認の際、ミラー状態異常通知を読み取ると、ミラーリングが破壊されていると認識し、図６に示す手順に沿って、破壊されたミラーの再構築に入る。このとき、フラッシュメモリ６はブロック単位でしかデータ消去できないので、まずミラー再構築部２０はＡブロック７を消去する。Ａブロック７の消去後、ミラー再構築部２０はＢブロック８に保持してあるデータ内容を、そのまま全てＡブロック７に書き込み、即ちコピーする。即ち、ミラー再構築部２０は、ミラーブロックに書き込まれているデータ群を、アドレスが先のものから順番にローテーションブロックにコピーしていく動作を実行する。
【００３７】
なお、このコピーはＡブロック７にＢブロック８のデータを順に書き込んでいくという時間を要する動作であるので、コピー途中に新たなデータ書き込み指令をアプリケーション１３から受け付ける場合もある。このとき、ミラー再構築部２０は、そのときに実行しているミラー再構築を一旦中断して、Ａブロック７及びＢブロック８の両方において空いている領域に、新規データ（図６では第５データＤ５）の書き込み、書き込み終了後にミラー再構築を続きから実行するように動作する。また、ミラー再構築部２０は、ミラー再構築の際にアプリケーション１３からデータ読み取り指令を受け付ける場合もあるが、このときもミラー再構築を一旦中断して、これに対応する。
【００３８】
そして、全てのデータのコピーが終了すると、ミラー再構築部２０はＡブロック７及びＢブロック８の両方の管理領域Ｅに対し、その空き領域にミラー状態正常の通知を書き込んで、管理情報１７を更新し、ミラー状態が正常であることを記録する。これにより、電源再投入以降は、通常通りにＡブロック７、Ｃブロック９、Ｅブロック１１がローテーションされて、データの読み書きが実行される。なお、ここではＡブロック７及びＢブロック８のミラーリングについて説明したが、Ｃブロック９及びＤブロック１０のミラーリングと、Ｅブロック１１及びＦブロック１２のミラーリングの両方とも動作は同じであるので、説明は省略する。
【００３９】
さて、本例においては、組をなす２つのブロックの一方をローテーションブロック、他方をミラーブロックとして使用することで、各々のローテーションブロックごとにデータをミラーリングするようにした。このため、例えばローテーションブロックに書き込みエラーが発生しても、これ以降のデータ書き込みはミラーブロックで継続されるので、データの書き漏らしが発生せず、結果としてデータの消失が防がれる。また、電源再投入後の初期化時に、ミラーが再構築されるので、ローテーションブロックを正規データが書き込まれた状態に復旧することが可能となるので、以降の動作も問題なく継続実行することが可能となる。
【００４０】
本実施形態の構成によれば、以下に記載の効果を得ることができる。
（１）通常のデータ読み書きに使用するローテーションブロックと同じブロックをミラーブロックとして設け、使用中のローテーションブロックに書き込みエラーが発生した際には、これ以降はミラーブロックを使用してデータ読み書きを継続する。このため、ローテーションブロックに書き込みエラーが発生したとしても、データ書き込みを継続できずにデータが消失する状況を生じ難くすることができる。
【００４１】
（２）ミラーリングが破壊された際、電源投入後の初期化時にミラーリングの再構築が実行されるので、ローテーションブロックとミラーブロックとが同じデータ内容をとる元の状態にこれら２ブロックを復帰させることができる。
【００４２】
（３）ミラーリングの再構築を実行している際に、新たなデータ書き込み指令がアプリケーション１３から受け付けたときには、ミラーリングを一時中断して、新たなデータ書き込みを実行する。このため、ミラーリング再構築中に、新たなデータ書き込みの要求が発生しても、問題なくこれに対応することができる。
【００４３】
（４）フラッシュメモリ６からデータを読み取る際には、２つの対のブロックのうちローテーションブロックからのみデータ読み取りを実行する。このため、ローテーションブロックとミラーブロックとの両方からデータを読み取るという動作はとらないので、データ読み取りに時間を要さずに済む。
【００４４】
（５）ブロック７〜１２の最後尾に、ミラー状態を通知する管理情報１７を書き込み、この管理情報１７を確認することにより、ミラーリングが正常か否かを判断する。このため、ミラー状態が正常か否かの確認を、管理情報１７を見るという簡素な方式により実行することができる。
【００４５】
なお、実施形態はこれまでに述べた構成に限らず、以下の態様に変更してもよい。
・  データ消失の対応は、必ずしも書き込みエラーが発生した際にミラーブロックでデータ書き込みの継続を行い、初期化時においてミラーを再構築する方式をとることに限定されない。例えば、ドライバ１５が使用ブロックにおけるデータ消失を検出した際、それまでミラーブロックで保持しておいたデータを使用ブロックにコピーすることで、消去データを復旧するものでもよい。
【００４６】
・  アクセス異常の検出対象は、必ずしも書き込みエラーであることに限定されない。例えば、ドライバ１５がフラッシュメモリ６に対するアクセス先を見失っているか否かを見ることや、フラッシュメモリ６（ブロック７〜９）が空になっていることや、フラッシュメモリ６に書き込まれているデータそのものが化けてしまっていることを確認するものでもよい。
【００４７】
・  管理領域Ｅの位置は、必ずしもブロックの最後尾の領域に限らず、他の場所でもよい。
・  ミラーの再構築は、初期化時に限定されない。要は、管理情報１７を読み取りにいくタイミングであれば、その実行時期は特に限定されない。
【００４８】
・  フラッシュメモリ６に書き込まれるデータは、ＩＤ１〜ＩＤ３で示すイグニッションオン開始時刻、イグニッションオン実行時間、ステアリングアングルセンサのセンサ値に限定されず、操舵角検出装置３の動作時にやり取りされるデータであれば、どのようなものでもよい。
【００４９】
・  ミドルウェア１４は、必ずしも必要ではなく、これを省略してもよい。
・  フラッシュメモリ６のブロック数は、Ａ〜Ｆの計６つに限定されず、これ以外の数をとるものでもよい。
【００５０】
・  データ書き込みの最先使用ブロックは、必ずしもＡブロック７に限定されず、Ｃブロック９やＥブロック１１でもよい。
・  アクセス保護の機能を持つ本例のコンピュータ５は、必ずしも操舵角検出装置３に搭載されることに限らず、メモリとしてフラッシュメモリ６を持つコンピュータ５を備えたものであれば、特に限定されるものではない。
【００５１】
次に、上記実施形態及び別例から把握できる技術的思想について、それらの効果とともに以下に追記する。
（１）請求項１〜３のいずれかにおいて、前記ブロックには、当該ブロックの現在状態を通知する管理情報が書き込まれ、前記保護実行手段は、前記管理情報を確認することにより、前記ローテーションに用いるブロックにおける前記異常の有無を確認する。この構成によれば、例えば使用中のローテーションブロックにおける異常有無の確認を、管理情報を見るという簡素な方式により実行することが可能となる。
【００５２】
（２）請求項１〜３、前記技術的思想（１）のいずれかにおいて、前記アプリケーションからデータの読み取り指令を受け付けた際には、前記ローテーションブロック側のブロックからのみデータを読み取ることにより、データ読み取りを実行するデータ読取手段を備えた。この構成によれば、データ読み取りの際には、同じデータ群を保持する２つのブロックのうちローテーションブロック側からのみデータを読み取るので、データ読み取りの短時間化を図ることが可能となる。
【符号の説明】
【００５３】
６…フラッシュメモリ、７…ブロック（ローテーションブロック）を構成するＡブロック、８…ブロック（ミラーブロック）を構成するＢブロック、９…ブロック（ローテーションブロック）を構成するＣブロック、１０…ブロック（ミラーブロック）を構成するＤブロック、１１…ブロック（ローテーションブロック）を構成するＥブロック、１２…ブロック（ミラーブロック）を構成するＦブロック、１３…アプリケーション、１５…ドライバ、１６…ミラーリング処理手段としてのミラーリング処理部、１８…監視手段としてのデータ消失有無確認部、１９…保護実行手段、データ処理継続手段を構成するデータ処理継続部、２０…保護実行手段、ミラー再構築手段を構成するミラー再構築部。
【図１】
2010176201.tif 000003
【図２】
2010176201.tif 000004
【図３】
2010176201.tif 000005
【図４】
2010176201.tif 000006
【図５】
2010176201.tif 000007
【図６】
2010176201.tif 000008
【図７】
2010176201.tif 000009
【図８】
2010176201.tif 000010
【図９】
2010176201.tif 000011
【図１０】
2010176201.tif 000012