(57)【要約】不揮発性メモリ（２）の記憶領域を第１および第２のブロック（２０Ａ），（２０Ｂ）に分け、各ブロック（２０Ａ），（２０Ｂ）にデータを連続して書き込む一方、上記記憶領域からデータを読み出すメモリコントローラ（１）であって、上記第１のブロック（２０Ａ）にデータを書き込む第１の書き込み部（１２Ａ）と、第１の書き込み部（１２Ａ）によるデータの書き込み動作が完了すると、少なくとも電源断によって電源電圧が上記記憶領域へのデータの書き込みができなくなる電圧値に低下するまでの時間と略同一の待ち時間が経過した後、上記第２のブロック（２０Ｂ）にデータを書き込む第２の書き込み部（１２Ｂ）とを備えたことを特徴とする。
2004066157.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリの記憶領域を第１および第２のブロックに分け、各ブロックにデータを連続して書き込む一方、上記記憶領域からデータを読み出すメモリコントローラであって、
上記第１のブロックにデータを書き込む第１の書き込み手段と、
上記第１の書き込み手段によるデータの書き込み動作が完了すると、少なくとも電源断によって電源電圧が上記記憶領域へのデータの書き込みができなくなる電圧値に低下するまでの時間と略同一の待ち時間が経過した後、上記第２のブロックにデータを書き込む第２の書き込み手段と、
を備えたことを特徴とする、メモリコントローラ。
【請求項２】
上記第１および第２のブロックの各々にデータを書き込む際、エラー検出用のチェックコードを生成するチェックコード生成手段を有し、上記第１および第２の書き込み手段は、それぞれ上記第１および第２のブロックに上記チェックコードも書き込む、請求項１に記載のメモリコントローラ。
【請求項３】
上記記憶領域からデータを読み出すとき、上記第１および第２のブロックごとに、記憶されたデータと上記チェックコードとに基づきエラーを検出するエラー検出手段と、上記第１のブロックからデータと上記チェックコードとを読み出し、上記エラー検出手段でエラーが検出されなければ、上記第１のブロックから読み出したデータを出力する一方、エラーが検出されれば、さらに上記第２のブロックからデータと上記チェックコードとを読み出し、上記エラー検出手段でエラーが検出されなければ、上記第２のブロックから読み出したデータを出力する読み出し手段とを有する、請求項２に記載のメモリコントローラ。
【請求項４】
上記読み出し手段は、上記第１および第２のブロックの双方でエラーが検出された場合、予め記憶されたデフォルトデータを出力する、請求項３に記載のメモリコントローラ。
【請求項５】
上記記憶領域に記憶されるデータはバイナリーデータからなり、上記第１の書き込み手段は、対象となるデータをそのまま上記第１のブロックに書き込む一方、上記第２の書き込み手段は、上記第１の書き込み手段により上記第１のブロックに書き込まれたデータの各ビットの２値を反転したデータを生成して上記第２のブロックに書き込む、請求項１に記載のメモリコントローラ。
【請求項６】
上記記憶領域からデータを読み出すとき、上記第１および第２のブロックの双方に記憶された互に対応関係にあるデータについて排他的論理和を演算する排他的論理和演算手段と、上記第１および第２のブロックの双方から互に対応関係にあるデータの値を読み出し、上記排他的論理和演算手段により上記排他的論理和を演算して得られた結果が１の場合、上記第１または第２のブロックから読み出したデータを出力する読み出し手段とを有する、請求項５に記載のメモリコントローラ。
【請求項７】
上記読み出し手段は、上記排他的論理和演算手段により上記排他的論理和を演算して得られた結果が０の場合、予め記憶されたデフォルトデータを出力する、請求項６に記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】  本発明は、たとえばＥＥＰＲＯＭなどの不揮発性メモリにアクセスするメモリコントローラに関する。
【背景技術】  不揮発性のＥＥＰＲＯＭに対するアクセス手順は、揮発性のＲＡＭなどに対するアクセス手順とは異なり、データ書き込み中の電源断などによってデータが破壊されてもできる限り有効なデータを読み出すことができるように、ある程度冗長化されている。
たとえば、特開平９−２９３０２８号公報に示されるようなアクセス手順がある。これは、ＥＥＰＲＯＭにデータを書き込む際、そのデータ（バックアップデータ）とビットを反転させたミラーデータとの組を第１の記憶領域に書き込み、それに続いて同じバックアップデータとミラーデータとの組を所定番地隔てた第２の記憶領域にも書き込む。これによれば、ＥＥＰＲＯＭからデータを読み出す際、最初に第１の記憶領域のバックアップデータとミラーデータとを比較し、比較結果からエラーを検出すると、さらに第２の記憶領域のバックアップデータとミラーデータとを比較する。第２の記憶領域におけるデータが正常な場合、この第２の記憶領域に記憶されたデータを読み出して出力することができる。
他のアクセス手順としては、特開平５−１４３４６８号公報に示される方法がある。これは、ＥＥＰＲＯＭに第１および第２の記憶領域（メモリエリア）を設け、最初に第１の記憶領域にデータと誤り訂正符号とを書き込み、そのデータを更新する際には、次に第２の記憶領域に更新データと誤り訂正符号とを書き込む。さらに次のデータ更新時には、第１の記憶領域のデータと誤り訂正符号とを書き換え、同様に次のデータ更新時には、第２の記憶領域のデータと誤り訂正符号とを書き換える。つまり、第１および第２の記憶領域に交互にデータを書き込んでいく。これによれば、ＥＥＰＲＯＭからデータを読み出す際、たとえば第２の記憶領域から最新のデータとともに誤り訂正符号を読み出し、その誤り訂正符号を照合した結果、読み出した最新データにエラーがあると、それより以前に更新された旧データを第１の記憶領域から読み出して出力することができる。
しかしながら、上記したように第１および第２の記憶領域に対して順次あるいは交互にデータを書き込む方法では、連続的にデータを書き込む最中であって第１から第２の記憶領域へとデータの書き込み場所が移る際に電源が断たれると、第１および第２の記憶領域の双方で書き込みエラーを生じるおそれがある。その理由は、電源を断っても電源電圧が急激に降下することなく徐々に降下していき、暫くはフェードアウト効果により書き込み動作が続くためである。そのため、電源断時に第１および第２の記憶領域に分けて書き込んでいた同じデータや新旧２つのデータについては、双方ともに書き込みエラーになり、電源復旧後に正常なデータとして読み出すことができない可能性があった。
【発明の開示】
本発明の目的は、第１から第２の記憶領域へとデータを書き込んでいる最中に電源断があっても、できる限り有効なデータを読み出すことができるメモリコントローラを提供することにある。
本発明によれば、不揮発性メモリの記憶領域を第１および第２のブロックに分け、各ブロックにデータを連続して書き込む一方、上記記憶領域からデータを読み出すメモリコントローラであって、上記第１のブロックにデータを書き込む第１の書き込み手段と、上記第１の書き込み手段によるデータの書き込み動作が完了すると、少なくとも電源断によって電源電圧が上記記憶領域へのデータの書き込みができなくなる電圧値に低下するまでの時間と略同一の待ち時間が経過した後、上記第２のブロックにデータを書き込む第２の書き込み手段とを備えたことを特徴とする、メモリコントローラが提供される。
好ましい実施の形態としては、上記第１および第２のブロックの各々にデータを書き込む際、エラー検出用のチェックコードを生成するチェックコード生成手段を有し、上記第１および第２の書き込み手段は、それぞれ上記第１および第２のブロックに上記チェックコードも書き込む構成とすることすることができる。
好ましい実施の形態としては、上記記憶領域からデータを読み出すとき、上記第１および第２のブロックごとに、記憶されたデータと上記チェックコードとに基づきエラーを検出するエラー検出手段と、上記第１のブロックからデータと上記チェックコードとを読み出し、上記エラー検出手段でエラーが検出されなければ、上記第１のブロックから読み出したデータを出力する一方、エラーが検出されれば、さらに上記第２のブロックからデータと上記チェックコードとを読み出し、上記エラー検出手段でエラーが検出されなければ、上記第２のブロックから読み出したデータを出力する読み出し手段とを有する構成とすることができる。
好ましい実施の形態としては、上記読み出し手段は、上記第１および第２のブロックの双方でエラーが検出された場合、予め記憶されたデフォルトデータを出力する構成とすることができる。
好ましい実施の形態としては、上記記憶領域に記憶されるデータはバイナリーデータからなり、上記第１の書き込み手段は、対象となるデータをそのまま上記第１のブロックに書き込む一方、上記第２の書き込み手段は、上記第１の書き込み手段により上記第１のブロックに書き込まれたデータの各ビットの２値を反転したデータを生成して上記第２のブロックに書き込む構成とすることができる。
好ましい実施の形態としては、上記記憶領域からデータを読み出すとき、上記第１および第２のブロックの双方に記憶された互に対応関係にあるデータについて排他的論理和を演算する排他的論理和演算手段と、上記第１および第２のブロックの双方から互に対応関係にあるデータの値を読み出し、上記排他的論理和演算手段により上記排他的論理和を演算して得られた結果が１の場合、上記第１または第２のブロックから読み出したデータを出力する読み出し手段とを有する構成とすることができる。
好ましい実施の形態としては、上記読み出し手段は、上記排他的論理和演算手段により上記排他的論理和を演算して得られた結果が０の場合、予め記憶されたデフォルトデータを出力する構成とすることができる。
本発明のその他の特徴および利点は、図面を参照して以下に行う詳細な説明から、より明らかとなるであろう。
【図面の簡単な説明】  図１は、本発明の一実施形態を示すブロック図である。
図２は、電源電圧とデータを書き込むタイミングとの関係を説明するためのタイミングチャートである。
図３は、書き込み処理を示すフローチャートである。
図４は、読み出し処理を示すフローチャートである。
図５は、本発明の他の実施形態を示すブロック図である。
図６は、他の実施形態による書き込み処理を示すフローチャートである。
図７は、他の実施形態による読み出し処理を示すフローチャートである。
【発明を実施するための最良の形態】  図１は、本発明の一実施形態を示すブロック図である。この実施形態は、パソコン用の液晶表示装置を例としている。液晶表示装置は、ＯＳＤ（オンスクリーンディスプレイ）機能として画面の明るさやコントラストなどの調整項目を画面上にオーバーラップ表示するためのＭＰＵ１、ＯＳＤ調整項目に関する調整データを保持するＥＥＰＲＯＭ２、ＭＰＵ１の実行プログラムを格納するＲＯＭ２００、液晶画面を制御するＬＣＤ制御回路３、およびＯＳＤ調整用スイッチ４などを備えている。ＭＰＵ１、ＥＥＰＲＯＭ２、およびＲＯＭ２００は、内部バスを介して相互に接続されている。ＭＰＵ１には、図に示さないインターフェイス回路などを介してＬＣＤ制御回路３やＯＳＤ調整用スイッチ４が接続されている。
ＭＰＵ１は、入出力制御部１０、チェックコード生成部１１、第１および第２の書き込み部１２Ａ，１２Ｂ、読み出し部１３、およびエラー検出部１４といったメモリコントローラとしての機能ブロックを有する。ＥＥＰＲＯＭ２の記憶領域は、上記調整データを読み書き可能なアドレス空間として、第１のブロック２０Ａと第２のブロック２０Ｂの２つのブロックを有する。ＲＯＭ２００には、あらかじめＯＳＤ調整項目に関するデフォルトデータが書き込まれている。
ＬＣＤ制御回路３は、ＭＰＵ１から入出力制御部１０を介して出力される制御信号によって液晶画面の状態を変化させたり、画面上にＯＳＤ調整項目をオーバーラップ表示させる。ＯＳＤ調整用スイッチ４は、ＯＳＤ調整項目の値をユーザが変更したり入力するための操作手段として用いられる。ＯＳＤ調整用スイッチ４の操作情報（ＯＳＤ調整項目に関するデータ）は、入出力制御部１０を介してＭＰＵ１に入力される。ＭＰＵ１に入力されたＯＳＤ調整項目に関するデータ（調整データ）は、第１の書き込み部１２ＡによってＥＥＰＲＯＭ２の第１のブロック２０Ａに書き込まれ、第２の書き込み部１２ＢによってＥＥＰＲＯＭ２の第２のブロック２０Ｂに書き込まれる。ＯＳＤ調整項目に関するデータのＥＥＰＲＯＭ２への書き込み制御については後述する。
ＭＰＵ１の入出力制御部１０は、ＭＰＵ１とＬＣＤ制御回路３およびＯＳＤ調整用スイッチ４との間の信号の入出力を制御する。チェックコード生成部１１は、上記調整データを第１および第２のブロック２０Ａ，２０Ｂに書き込む際にその調整データと他のデータとを用いてチェックサムを算出するものである。
第１の書き込み部１２Ａは、第１のブロック２０Ａに調整データの値を書き込むとともに、チェックコード生成部１１で算出されたチェックサムを書き込む。第２の書き込み部１２Ｂは、上記第１の書き込み部１２Ａによる第１のブロック２０Ａへの調整データの値とチェックサムの書き込み動作の完了後、後述する待ち時間を経た後、第１の書き込み部１２Ａが第１のブロック２０Ａに書き込んだのと同じ調整データの値とチェックサムとを第２のブロック２０Ｂに書き込む。つまり、第１および第２のブロック２０Ａ，２０Ｂには、通常は同じ調整データが保持される。
読み出し部１３は、ＥＥＰＲＯＭ２から調整データの値とチェックサムを読み出すものである。エラー検出部１４は、読み出し部１３により第１および第２のブロック２０Ａ，２０Ｂごとに読み出された調整データの値からチェックサムを算出し、このチェックサム（以下、現チェックサムという。）と読み出し部１３により第１および第２のブロック２０Ａ，２０Ｂごとに読み出されたチェックサム（以下、元チェックサムという。）を比較し、算出した現チェックサムが読み出した元チェックサムに一致しない場合にエラーと判断し、両チェックサムが一致した場合は、正常と判断するものである。
読み出し部１３は、最初に第１のブロック２０Ａに保持された全ての調整データの値とチェックサムとを読み出し、エラー検出部１４によりその調整データの値が正常であると判断されると、その調整データの値は入出力制御部１０を介してＬＣＤ制御回路３に入力される。一方、エラー検出部１４によりその調整データの値にエラーがあると判断されると、読み出し部１３は、次に第２のブロック２０Ｂに保持された全ての調整データの値とチェックサムとを読み出し、エラー検出部１４によりその調整データの値が正常であると判断されると、その調整データの値が入出力制御部１０を介してＬＣＤ制御回路３に入力される。一方、エラー検出部１４によりさらにその調整データの値にエラーがあると判断されると、読み出し部１３は、最終的にＲＯＭ２００からデフォルトデータを読み出し、そのデフォルトデータを入出力制御部１０を介してＬＣＤ制御回路３に入力する。そして、ＬＣＤ制御回路３は、入力された調整データに基づいて液晶表示画面の明るさやコントラストなどを自動調整する。
これにより、たとえば液晶表示装置の電源投入直後は、ＥＥＰＲＯＭ２の記憶内容に応じた調整レベルの表示画面が形成される。また、ユーザがＯＳＤ調整用スイッチ４を操作した直後には、表示画面上に明るさやコントラストなどといったＯＳＤ調整項目がオーバーラップ表示される。
図２は、電源電圧とデータを書き込むタイミングとの関係を説明するためのタイミングチャートである。電源電圧Ｖｃｃは、通常は実線で示すように一定レベルに保たれる。ＭＰＵ１は、電源電圧Ｖｃｃが一定レベルにある間、調整データを第１のブロック２０Ａに書き込み、それから待ち時間ＷＴを経た後、同じ調整データを第２のブロック２０Ｂに書き込む。連続して別の調整データを書き込む必要があるときは、同様に待ち時間ＷＴを経た後にその別の調整データを第１のブロック２０Ａに書き込み、さらに待ち時間ＷＴを経た後、その別の調整データと同じ調整データを第２のブロック２０Ｂに書き込む。
ところで、電源電圧Ｖｃｃは、電源オフなどによってその供給が不意に断たれてしまうことがある。このとき、電源電圧Ｖｃｃは、急激に降下することなく図２に破線で示すように徐々に降下していき、暫くはフェードアウト効果により書き込み動作が可能とされる。具体的に言うと、電源電圧Ｖｃｃが書き込み保証レベルＶｓを下回るまでは、わずかながらも書き込み動作が正常に行われ、書き込み保証レベルＶｓから書き込み不可レベルＶｆに至るまでは、書き込み動作が不安定とされ、最終的に書き込み不可レベルＶｆを下回って電源電圧Ｖｃｃが０になると、書き込み動作が全く行われない。このように電源電圧Ｖｃｃが通常の一定レベルから０に至るまでの時間をフェードアウト時間と呼び、フェードアウト時間のうち、電源電圧Ｖｃｃが書き込み保証レベルＶｓから０に変化するまでの時間内に書き込まれたデータはエラーになってしまう。
そのため、第１のブロック２０Ａから第２のブロック２０Ｂに移る際の待ち時間ＷＴは、フェードアウト時間を考慮して電源電圧Ｖｃｃが書き込み保証レベルＶｓから書き込み不可レベルＶｆに至るまでの時間ｔより若干長いｔ＋αに設定されている。このような待ち時間ＷＴは、シミュレーションなどによってあらかじめ決定され、その時間長ｔ＋αは、たとえばミリ秒オーダの概ねフェードアウト時間と同等の長さとされる。
なお、電源断時に電源電圧Ｖｃｃが書き込み保証レベルＶｓから書き込み不可レベルＶｆに至るまでの時間ｔを測定するハードウェア回路をあらかじめ組み込んでおき、電源断が発生する毎にそのときの電源電圧が書き込み保証レベルＶｓから書き込み不可レベルＶｆに至る時間ｔを測定し、その測定結果を用いて次の電源断が発生したときの待ち時間ＷＴを設定するようにしても良い。この場合、製品製造時に設定される最初の待ち時間ＷＴはデフォルト値となる。
一例として図２に示すように、第１のブロック２０Ａから第２のブロック２０Ｂへと調整データの書き込み場所が移る際に電源が断たれると、その時点で第１のブロック２０Ａに書き込んでいた調整データについてはエラーの可能性がある。その一方、第２のブロック２０Ｂに第１のブロック２０Ａに書き込んだ調整データと同じ調整データを書き込もうとする際には、もはや待ち時間ＷＴが経過していることでデータを書き込むことができない。そのため、第２のブロック２０Ｂには、電源断以前に書き込まれた既存の旧調整データがそのまま保持される。
電源復旧後、たとえばユーザがＯＳＤ調整用スイッチ４を操作すると、最初に第１のブロック２０Ａから全ての調整データとチェックサムとが読み出され、読み出した全ての調整データから現チェックサムが算出される。このとき、第１のブロック２０Ａには、書き込みエラーに該当する調整データが含まれるため、読み出した元チェックサムと現チェックサムとを照合すると、チェックサムが一致しないとの結果が得られる。すると、次に第２のブロック２０Ｂから全ての調整データとチェックサムとが読み出され、読み出した全ての調整データから再び現チェックサムが算出される。このとき、第２のブロック２０Ｂには、電源断以前の内容ではあるものの全て正常な調整データが含まれるため、読み出した元チェックサムと現チェックサムとを照合すれば、チェックサムが一致する。そして、第２のブロック２０Ｂから読み出された全ての調整データのうち、ＯＳＤ調整用スイッチ４の操作に応じた所要の調整データがＬＣＤ制御回路３に出力される。これにより、電源断時に変更しようとしていたＯＳＤ調整項目の内容とは異なるものの、電源断以前のＯＳＤ調整項目の内容がオーバーラップ表示される。
図３は、書き込み処理を示すフローチャート、図４は、読み出し処理を示すフローチャートである。図３に示すように、ＭＰＵ１は、ユーザのＯＳＤ調整用スイッチ４の操作によってＥＥＰＲＯＭ２に対する調整データの書き込み要求を受けると（Ｓ１）、その書き込むべき調整データの値を含めて第１のブロック２０Ａにおけるチェックサムを計算し直す（Ｓ２）。
その後、ＭＰＵ１は、必要な調整データの値とチェックサムとを第１のブロック２０Ａに書き込む（Ｓ３）。なお、このときの手順としては、必要な調整データの値を第１のブロック２０Ａに書き込んだ後、第１のブロック２０Ａにおけるチェックサムを計算し直して書き込むようにしても良い。
第１のブロック２０Ａへの書き込み動作完了後、さらに所定の待ち時間ＷＴを経た後（Ｓ４）、ＭＰＵ１は、第１のブロック２０Ａに書き込んだのと同じ調整データの値とチェックサムとを第２のブロック２０Ｂに書き込む（Ｓ５）。なお、このときの手順でも、必要な調整データの値を第２のブロック２０Ｂに書き込んだ後、第２のブロック２０Ｂにおけるチェックサムを計算し直して書き込むようにしても良い。
つまり、書き込み処理が正常に実行される限り、第１および第２のブロック２０Ａ，２０Ｂには、同じ内容の調整データが書き込まれる。その一方、図３に例示するように、第１のブロック２０Ａへの書き込み動作中から待ち時間ＷＴが経過するまでの間に電源断が生じると（ステップＳ３からステップＳ４の間の電源断の部分を参照）、第１のブロック２０Ａに対しては書き込みエラーのおそれがあるものの、第２のブロック２０Ｂへの書き込み動作が行われない。その結果、第１のブロック２０Ａには、書き込みエラーとなった調整データが含まれ、第２のブロック２０Ｂには、書き込み処理前の正常な調整データが含まれる。また、特に図示しないが、第１のブロック２０Ａへの書き込み動作を正常に終えた後、第２のブロック２０Ｂへの書き込み動作中に電源断が生じると、第１のブロック２０Ａには、正常に書き込まれた最新の調整データが含まれ、第２のブロック２０Ｂには、書き込みエラーとなった調整データが含まれる。要するに、電源断による書き込みエラーは、第１および第２のブロック２０Ａ，２０Ｂのいずれか一方でしか生じ得ず、第１および第２のブロック２０Ａ，２０Ｂの双方で発生するおそれはほとんどない。ただし、電源断以外の誤動作などでは第１および第２のブロック２０Ａ，２０Ｂの双方で書き込みエラーが生じることもある。
図４に示すように、ＭＰＵ１は、ユーザのＯＳＤ調整用スイッチ４の操作によって調整データの読み出し要求を受けると（Ｓ１１）、必要な調整データを含めて全ての調整データの値とチェックサムとを第１のブロック２０Ａから読み出す（Ｓ１２）。
ＭＰＵ１は、読み出した全ての調整データの値を基にチェックサムを算出する（Ｓ１３）。
ＭＰＵ１は、読み出した元チェックサムと算出した現チェックサムと照合し（Ｓ１４）、チェックサムの値が一致する場合（Ｓ１５：ＹＥＳ）、読み出した全ての調整データから必要な調整データを抽出し、その調整データの値をＬＣＤ制御回路３に出力する（Ｓ１６）。
Ｓ１５において、チェックサムの値が異なる場合（Ｓ１５：ＮＯ）、ＭＰＵ１は、第２のブロック２０Ｂから全ての調整データの値とチェックサムとを読み出す（Ｓ１７）。
ＭＰＵ１は、第２のブロック２０Ｂから読み出した全ての調整データの値を基にチェックサムを再び算出する（Ｓ１８）。
ＭＰＵ１は、読み出した元チェックサムと算出した現チェックサムと照合し（Ｓ１９）、チェックサムの値が一致する場合（Ｓ２０：ＹＥＳ）、第２のブロック２０Ｂの全ての調整データから必要な調整データを抽出し、その調整データの値をＬＣＤ制御回路３に出力する（Ｓ１６）。
Ｓ２０において、チェックサムの値が異なる場合（Ｓ２０：ＮＯ）、ＭＰＵ１は、最終的にＲＯＭ２００から必要な調整データに相当するデフォルトデータを読み出し、そのデフォルトデータの値をＬＣＤ制御回路３に出力して読み出し処理を終える（Ｓ２１）。
したがって、この実施形態によれば、第１のブロック２０Ａから第２のブロック２０Ｂへと書き込み場所が移る際もしくは第２のブロック２０Ｂから第１のブロック２０Ａへと書き込み場所が移る際に電源断があっても、第１および第２のブロック２０Ａ，２０Ｂの双方で書き込みエラーになるおそれはない。仮に第１のブロック２０Ａに対する書き込み動作がエラーになっても、電源復旧後には、第２のブロック２０Ｂから電源断以前に書き込まれた正常な旧データを読み出すことができ、できる限り最新のデータを読み出すことができる。もちろん、第２のブロック２０Ｂに対する書き込み動作中に電源断となり、第２のブロック２０Ｂで書き込みエラーとなっても、電源復旧後には、第１のブロック２０Ａから電源断直前に正常に書き込まれた最新データを読み出すことができる。
次に、他の実施形態について説明する。
図５は、本発明の他の実施形態を示すブロック図である。なお、先述の実施形態と同様の点については、その説明を省略する。
他の実施形態に係るＭＰＵ５は、入出力制御部５０、第１および第２の書き込み部５２Ａ，５２Ｂ、読み出し部５３、および排他的論理和演算部５４といったメモリコントローラとしての機能ブロックを有する。ＥＥＰＲＯＭ２の記憶領域は、先述した実施形態と同様に第１および第２の２つのブロック２０Ａ，２０Ｂに分けられている。ＲＯＭ２００には、あらかじめＯＳＤ調整項目に関するデフォルトデータが書き込まれている。
ＭＰＵ１における第１の書き込み部５２Ａは、所要の調整データのビット値をそのまま第１のブロック２０Ａに書き込む。第２の書き込み部５２Ｂは、上記第１の書き込み部５２Ａによる書き込み動作の完了後、先述した実施形態と同様に待ち時間ＷＴをさらに経た後、第１の書き込み部５２Ａが書き込んだのと同じ調整データのビット値を反転させて第２のブロック２０Ｂに書き込む。具体的には第１のブロック２０Ａに調整データとして、たとえば「０１０１」の４ビットデータを書き込んだとすると、第２のブロック２０Ｂにはこの４ビッドデータの各ビットを反転させた「１０１０」の４ビットデータが書き込まれる。すなわち、第１および第２のブロック２０Ａ，２０Ｂには、形式的には異なるものの同一対象に係る調整データのビット値が保持される。
読み出し部５３は、第１および第２のブロック２０Ａ，２０Ｂの双方から必要な調整データのビット値を読み出し、エラーがある場合に限り、最終的にＲＯＭ２００からデフォルトデータを読み出す。読み出されたデータについては、入出力制御部５０を介してＬＣＤ制御回路３に入力される。排他的論理和演算部５４は、第１および第２のブロック２０Ａ，２０Ｂから読み出された同一データの各ビット値について排他的論理和を演算し、その演算結果が０の場合にエラーと判断する。演算結果が１の場合には、正常と判断する。
このような他の実施形態でも、図２に示すようなタイミングで電源断が生じることがあるため、第１のブロック２０Ａから第２のブロック２０Ｂへと書き込み動作が移る際に待ち時間ＷＴを設けている。したがって、電源断時に第１あるいは第２のブロック２０Ａ，２０Ｂに書き込んでいた調整データについてはエラーの可能性があるものの、電源断以前に第１および第２のブロック２０Ａ，２０Ｂの双方に書き込まれた他の調整データについては、エラーもなく正常に保持される。
電源復旧後、たとえばユーザがＯＳＤ調整用スイッチ４を操作すると、第１および第２のブロック２０Ａ，２０Ｂの双方から同じ調整データのビット値が読み出され、それらのビット値について排他的論理和が演算される。このとき、第１および第２のブロック２０Ａ，２０Ｂのいずれか一方に書き込みエラーに該当する調整データが含まれると、排他的論理和の演算結果が０になる。すると、最終的にＲＯＭ２００からデフォルトデータが読み出されて両ブロック２０Ａ，２０Ｂに書き込まれ、その内容がＬＣＤ制御回路３に出力される。一方、電源断以前に正常に書き込まれた調整データについては、排他的論理和の演算結果を１としてたとえば第１のブロック２０Ａに書き込まれた内容がＬＣＤ制御回路３に出力される。これにより、電源断時に変更しようとしていたＯＳＤ調整項目についてはデフォルト値に戻るものの、電源断以前に変更されたＯＳＤ調整項目については、変更後の値がそのままオーバーラップ表示される。
図６は、他の実施形態による書き込み処理を示すフローチャート、図７は、他の実施形態による読み出し処理を示すフローチャートである。図６に示すように、ＭＰＵ５は、ＯＳＤ調整用スイッチ４の操作に応じてＥＥＰＲＯＭ２に対する調整データの書き込み要求を受けると（Ｓ３１）、その書き込むべき調整データのビット値をそのまま第１のブロック２０Ａに書き込む（Ｓ３２）。
第１のブロック２０Ａへの書き込み動作完了後、さらに所定の待ち時間ＷＴを経た後（Ｓ３３）、ＭＰＵ５は、第１のブロック２０Ａに書き込んだのと同じ調整データのビット値を反転させて第２のブロック２０Ｂに書き込む（Ｓ３４）。
さらに他の調整データについて書き込み要求が無ければ（Ｓ３５：ＮＯ）、ＭＰＵ１は、書き込み処理を終える。他の調整データについて書き込み要求がある場合（Ｓ３５：ＹＥＳ）、ＭＰＵ１は、Ｓ３２に戻る。
つまり、書き込み処理が正常に実行される限り、第１および第２のブロック２０Ａ，２０Ｂには、互いに反転したビット値からなる調整データが書き込まれる。その一方、図６に例示するように、第１のブロック２０Ａへの書き込み動作中から待ち時間ＷＴが経過するまでの間に電源断が生じると（ステップＳ３２からステップＳ３３の間の電源断の部分を参照）、第１のブロック２０Ａに対しては書き込みエラーのおそれがあるものの、第２のブロック２０Ｂへの書き込み動作が行われない。その結果、第１のブロック２０Ａには、書き込みエラーとなった調整データのビット値が含まれ、第２のブロック２０Ｂには、書き込み処理前の正常な調整データの反転ビット値が含まれる。また、特に図示しないが、第１のブロック２０Ａへの書き込み動作を正常に終えた後、第２のブロック２０Ｂへの書き込み動作中に電源断が生じると、第１のブロック２０Ａには、正常に書き込まれた最新の調整データのビット値が含まれ、第２のブロック２０Ｂには、書き込みエラーとなった同じ調整データの反転ビット値が含まれる。要するに、電源断による書き込みエラーは、そのときに書き込んでいた調整データに限られ、電源断以前に書き込んでいた調整データにエラーが含まれるおそれはほとんどない。
図７に示すように、ＭＰＵ１は、ユーザのＯＳＤ調整用スイッチ４の操作によって調整データの読み出し要求を受けると（Ｓ４１）、第１のブロック２０Ａから該当する調整データのビット値を読み出すとともに（Ｓ４２）、第２のブロック２０Ｂから該当する調整データのビット値（第１のブロック２０Ａから読み出される調整データを反転したビット値に相当。以下、反転ビット値という。）を読み出す（Ｓ４３）。
ＭＰＵ１は、読み出した調整データのビット値と反転ビット値を基に排他的論理和を演算する（Ｓ４４）。
ＭＰＵ１は、排他的論理和の演算結果が１の場合（Ｓ４５：ＹＥＳ）、第１のブロック２０Ａから読み出した調整データのビット値をＬＣＤ制御回路３に出力する（Ｓ４６）。このとき、第２のブロック２０Ｂから読み出した調整データの反転ビット値を更に反転させて出力するようにしても良い。
Ｓ４５において、排他的論理和の演算結果が０の場合（Ｓ４５：ＮＯ）、ＭＰＵ１は、最終的にＲＯＭ２００から必要な調整データに該当するデフォルトデータを読み出し、そのデフォルトデータの値をＬＣＤ制御回路３に出力して読み出し処理を終える（Ｓ４７）。
したがって、他の実施形態によれば、第１のブロック２０Ａから第２のブロック２０Ｂへと書き込み場所が移る際もしくは第２のブロック２０Ｂから第１のブロック２０Ａへと書き込み場所が移る際に電源断が生じた場合、そのときに書き込んでいた調整データについては、電源復旧後に第１および第２のブロック２０Ａ，２０Ｂの双方から読み出されるものの、それらのビット値の排他的論理和が０として求められることでデフォルトデータに戻ってしまう。その一方、電源断以前に書き込まれたその他の調整データについては、排他的論理和が１である限り正常なデータとして第１または第２のブロック２０Ａ，２０Ｂから読み出すことができるので、できる限り有効なデータを読み出すことができる。
また、先述した実施形態のようにチェックサムを書き込んでおく必要がないので、その分第１および第２のブロック２０Ａ，２０Ｂに多くのデータを書き込むことができる。
なお、本発明は、上記の各実施形態に限定されるものではない。
不揮発性メモリは、たとえばフラッシュ型のＥＥＰＲＯＭや、強誘電体メモリ（ＦｅＲＡＭ）あるいはマグネチックメモリ（ＭＲＡＭ）などでも良い。
本発明は、液晶表示装置に限らず、不揮発性メモリを利用するシステム全般に広く適用することができ、たとえばパーソナルコンピュータなどの内部システムにも適用することができる。
チェックコードとしては、チェックサムに代え、たとえば調整データごとにパリティビットやＣＲＣコード、ハミングコードやリードソロモンコードを付加するようにしても良い。
上記他の実施形態では、第１および第２のブロック２０Ａ，２０Ｂの双方において必要な調整データのビット値が書き換えられるが、書き換え前の旧データについては、そのまま第１および第２のブロック２０Ａ，２０Ｂに保持しておき、たとえば第２のブロック２０Ｂに対する書き換え動作が完了すると、旧データを破棄するようにしても良い。そうした場合、最新の調整データにエラーがあってもデフォルトデータを読み出す前に旧データを読み出すことができる。
もちろん、ＥＥＰＲＯＭ２の読み書き可能なアドレス空間を３以上のブロックに分け、各ブロックに同一データを書き込むとしても良い。その場合、書き込みブロックが変わる際には、上記実施形態と同様に待ち時間ＷＴを経た後でなければ次のブロックに書き込むことができないようにしておけば良い。
【図１】
2004066157.tif 000003
【図２】
2004066157.tif 000004
【図３】
2004066157.tif 000005
【図４】
2004066157.tif 000006
【図５】
2004066157.tif 000007
【図６】
2004066157.tif 000008
【図７】
2004066157.tif 000009
【手続補正書】
【提出日】平成17年1月14日(2005.1.14)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【書類名】    明細書
【特許請求の範囲】
【請求項１】不揮発性メモリの記憶領域を第１および第２のブロックに分け、各ブロックにデータを連続して書き込む一方、上記記憶領域からデータを読み出すメモリコントローラであって、
上記第１のブロックにデータを書き込む第１の書き込み手段と、
上記第１の書き込み手段によるデータの書き込み動作が完了すると、少なくとも電源断によって電源電圧が上記記憶領域へのデータの書き込みができなくなる電圧値に低下するまでの時間と略同一の待ち時間が経過した後、上記第２のブロックにデータを書き込む第２の書き込み手段と、
を備えたことを特徴とする、メモリコントローラ。
【請求項２】上記第１および第２のブロックの各々にデータを書き込む際、エラー検出用のチェックコードを生成するチェックコード生成手段を有し、上記第１および第２の書き込み手段は、それぞれ上記第１および第２のブロックに上記チェックコードも書き込む、請求項１に記載のメモリコントローラ。
【請求項３】上記記憶領域からデータを読み出すとき、上記第１および第２のブロックごとに、記憶されたデータと上記チェックコードとに基づきエラーを検出するエラー検出手段と、上記第１のブロックからデータと上記チェックコーとを読み出し、上記エラー検出手段でエラーが検出されなければ、上記第１のブロックから読み出したデータを出力する一方、エラーが検出されれば、さらに上記第２のブロックからデータと上記チェックコードとを読み出し、上記エラー検出手段でエラーが検出されなければ、上記第２のブロックから読み出したデータを出力する読み出し手段とを有する、請求項２に記載のメモリコントローラ。
【請求項４】上記読み出し手段は、上記第１および第２のブロックの双方でエラーが検出された場合、予め記憶されたデフォルトデータを出力する、請求項３に記載のメモリコントローラ。
【請求項５】上記記憶領域に記憶されるデータはバイナリーデータからなり、上記第１の書き込み手段は、対象となるデータをそのまま上記第１のブロックに書き込む一方、上記第２の書き込み手段は、上記第１の書き込み手段により上記第１のブロックに書き込まれたデータの各ビットの２値を反転したデータを生成して上記第２のブロックに書き込む、請求項１に記載のメモリコントローラ。
【請求項６】上記記憶領域からデータを読み出すとき、上記第１および第２のブロックの双方に記憶された互に対応関係にあるデータについて排他的論理和を演算する排他的論理和演算手段と、上記第１および第２のブロックの双方から互に対応関係にあるデータの値を読み出し、上記排他的論理和演算手段により上記排他的論理和を演算して得られた結果が１の場合、上記第１または第２のブロックから読み出したデータを出力する読み出し手段とを有する、請求項５に記載のメモリコントローラ。
【請求項７】上記読み出し手段は、上記排他的論理和演算手段により上記排他的論理和を演算して得られた結果が０の場合、予め記憶されたデフォルトデータを出力する、請求項６に記載のメモリコントローラ。
【発明の詳細な説明】
【０００１】
【技術分野】
本発明は、たとえばＥＥＰＲＯＭなどの不揮発性メモリにアクセスするメモリコントローラに関する。
【０００２】
【背景技術】
不揮発性のＥＥＰＲＯＭに対するアクセス手順は、揮発性のＲＡＭなどに対するアクセス手順とは異なり、データ書き込み中の電源断などによってデータが破壊されてもできる限り有効なデータを読み出すことができるように、ある程度冗長化されている。
【０００３】
たとえば、特開平９−２９３０２８号公報に示されるようなアクセス手順がある。これは、ＥＥＰＲＯＭにデータを書き込む際、そのデータ（バックアップデータ）とビットを反転させたミラーデータとの組を第１の記憶領域に書き込み、それに続いて同じバックアップデータとミラーデータとの組を所定番地隔てた第２の記憶領域にも書き込む。これによれば、ＥＥＰＲＯＭからデータを読み出す際、最初に第１の記憶領域のバックアップデータとミラーデータとを比較し、比較結果からエラーを検出すると、さらに第２の記憶領域のバックアップデータとミラーデータとを比較する。第２の記憶領域におけるデータが正常な場合、この第２の記憶領域に記憶されたデータを読み出して出力することができる。
【０００４】
他のアクセス手順としては、特開平５−１４３４６８号公報に示される方法がある。これは、ＥＥＰＲＯＭに第１および第２の記憶領域（メモリエリア）を設け、最初に第１の記憶領域にデータと誤り訂正符号とを書き込み、そのデータを更新する際には、次に第２の記憶領域に更新データと誤り訂正符号とを書き込む。さらに次のデータ更新時には、第１の記憶領域のデータと誤り訂正符号とを書き換え、同様に次のデータ更新時には、第２の記憶領域のデータと誤り訂正符号とを書き換える。つまり、第１および第２の記憶領域に交互にデータを書き込んでいく。これによれば、ＥＥＰＲＯＭからデータを読み出す際、たとえば第２の記憶領域から最新のデータとともに誤り訂正符号を読み出し、その誤り訂正符号を照合した結果、読み出した最新データにエラーがあると、それより以前に更新された旧データを第１の記憶領域から読み出して出力することができる。
【０００５】
しかしながら、上記したように第１および第２の記憶領域に対して順次あるいは交互にデータを書き込む方法では、連続的にデータを書き込む最中であって第１から第２の記憶領域へとデータの書き込み場所が移る際に電源が断たれると、第１および第２の記憶領域の双方で書き込みエラーを生じるおそれがある。その理由は、電源を断っても電源電圧が急激に降下することなく徐々に降下していき、暫くはフェードアウト効果により書き込み動作が続くためである。そのため、電源断時に第１および第２の記憶領域に分けて書き込んでいた同じデータや新旧２つのデータについては、双方ともに書き込みエラーになり、電源復旧後に正常なデータとして読み出すことができない可能性があった。
【０００６】
【発明の開示】
本発明の目的は、第１から第２の記憶領域へとデータを書き込んでいる最中に電源断があっても、できる限り有効なデータを読み出すことができるメモリコントローラを提供することにある。
【０００７】
本発明によれば、不揮発性メモリの記憶領域を第１および第２のブロックに分け、各ブロックにデータを連続して書き込む一方、上記記憶領域からデータを読み出すメモリコントローラであって、上記第１のブロックにデータを書き込む第１の書き込み手段と、上記第１の書き込み手段によるデータの書き込み動作が完了すると、少なくとも電源断によって電源電圧が上記記憶領域へのデータの書き込みができなくなる電圧値に低下するまでの時間と略同一の待ち時間が経過した後、上記第２のブロックにデータを書き込む第２の書き込み手段とを備えたことを特徴とする、メモリコントローラが提供される。
【０００８】
好ましい実施の形態としては、上記第１および第２のブロックの各々にデータを書き込む際、エラー検出用のチェックコードを生成するチェックコード生成手段を有し、上記第１および第２の書き込み手段は、それぞれ上記第１および第２のブロックに上記チェックコードも書き込む構成とすることすることができる。
【０００９】
好ましい実施の形態としては、上記記憶領域からデータを読み出すとき、上記第１および第２のブロックごとに、記憶されたデータと上記チェックコードとに基づきエラーを検出するエラー検出手段と、上記第１のブロックからデータと上記チェックコードとを読み出し、上記エラー検出手段でエラーが検出されなければ、上記第１のブロックから読み出したデータを出力する一方、エラーが検出されれば、さらに上記第２のブロックからデータと上記チェックコードとを読み出し、上記エラー検出手段でエラーが検出されなければ、上記第２のブロックから読み出したデータを出力する読み出し手段とを有する構成とすることができる。
【００１０】
好ましい実施の形態としては、上記読み出し手段は、上記第１および第２のブロックの双方でエラーが検出された場合、予め記憶されたデフォルトデータを出力する構成とすることができる。
【００１１】
好ましい実施の形態としては、上記記憶領域に記憶されるデータはバイナリーデータからなり、上記第１の書き込み手段は、対象となるデータをそのまま上記第１のブロックに書き込む一方、上記第２の書き込み手段は、上記第１の書き込み手段により上記第１のブロックに書き込まれたデータの各ビットの２値を反転したデータを生成して上記第２のブロックに書き込む構成とすることができる。
【００１２】
好ましい実施の形態としては、上記記憶領域からデータを読み出すとき、上記第１および第２のブロックの双方に記憶された互に対応関係にあるデータについて排他的論理和を演算する排他的論理和演算手段と、上記第１および第２のブロックの双方から互に対応関係にあるデータの値を読み出し、上記排他的論理和演算手段により上記排他的論理和を演算して得られた結果が１の場合、上記第１または第２のブロックから読み出したデータを出力する読み出し手段とを有する構成とすることができる。
【００１３】
好ましい実施の形態としては、上記読み出し手段は、上記排他的論理和演算手段により上記排他的論理和を演算して得られた結果が０の場合、予め記憶されたデフォルトデータを出力する構成とすることができる。
【００１４】
本発明のその他の特徴および利点は、図面を参照して以下に行う詳細な説明から、より明らかとなるであろう。
【００１５】
【発明を実施するための最良の形態】
図１は、本発明の一実施形態を示すブロック図である。この実施形態は、パソコン用の液晶表示装置を例としている。液晶表示装置は、ＯＳＤ（オンスクリーンディスプレイ）機能として画面の明るさやコントラストなどの調整項目を画面上にオーバーラップ表示するためのＭＰＵ１、ＯＳＤ調整項目に関する調整データを保持するＥＥＰＲＯＭ２、ＭＰＵ１の実行プログラムを格納するＲＯＭ２００、液晶画面を制御するＬＣＤ制御回路３、およびＯＳＤ調整用スイッチ４などを備えている。ＭＰＵ１、ＥＥＰＲＯＭ２、およびＲＯＭ２００は、内部バスを介して相互に接続されている。ＭＰＵ１には、図に示さないインターフェイス回路などを介してＬＣＤ制御回路３やＯＳＤ調整用スイッチ４が接続されている。
【００１６】
ＭＰＵ１は、入出力制御部１０、チェックコード生成部１１、第１および第２の書き込み部１２Ａ，１２Ｂ、読み出し部１３、およびエラー検出部１４といったメモリコントローラとしての機能ブロックを有する。ＥＥＰＲＯＭ２の記憶領域は、上記調整データを読み書き可能なアドレス空間として、第１のブロック２０Ａと第２のブロック２０Ｂの２つのブロックを有する。ＲＯＭ２００には、あらかじめＯＳＤ調整項目に関するデフォルトデータが書き込まれている。
【００１７】
ＬＣＤ制御回路３は、ＭＰＵ１から入出力制御部１０を介して出力される制御信号によって液晶画面の状態を変化させたり、画面上にＯＳＤ調整項目をオーバーラップ表示させる。ＯＳＤ調整用スイッチ４は、ＯＳＤ調整項目の値をユーザが変更したり入力するための操作手段として用いられる。ＯＳＤ調整用スイッチ４の操作情報（ＯＳＤ調整項目に関するデータ）は、入出力制御部１０を介してＭＰＵ１に入力される。ＭＰＵ１に入力されたＯＳＤ調整項目に関するデータ（調整データ）は、第１の書き込み部１２ＡによってＥＥＰＲＯＭ２の第１のブロック２０Ａに書き込まれ、第２の書き込み部１２ＢによってＥＥＰＲＯＭ２の第２のブロック２０Ｂに書き込まれる。ＯＳＤ調整項目に関するデータのＥＥＰＲＯＭ２への書き込み制御については後述する。
【００１８】
ＭＰＵ１の入出力制御部１０は、ＭＰＵ１とＬＣＤ制御回路３およびＯＳＤ調整用スイッチ４との間の信号の入出力を制御する。チェックコード生成部１１は、上記調整データを第１および第２のブロック２０Ａ，２０Ｂに書き込む際にその調整データと他のデータとを用いてチェックサムを算出するものである。
【００１９】
第１の書き込み部１２Ａは、第１のブロック２０Ａに調整データの値を書き込むとともに、チェックコード生成部１１で算出されたチェックサムを書き込む。第２の書き込み部１２Ｂは、上記第１の書き込み部１２Ａによる第１のブロック２０Ａへの調整データの値とチェックサムの書き込み動作の完了後、後述する待ち時間を経た後、第１の書き込み部１２Ａが第１のブロック２０Ａに書き込んだのと同じ調整データの値とチェックサムとを第２のブロック２０Ｂに書き込む。つまり、第１および第２のブロック２０Ａ，２０Ｂには、通常は同じ調整データが保持される。
【００２０】
読み出し部１３は、ＥＥＰＲＯＭ２から調整データの値とチェックサムを読み出すものである。エラー検出部１４は、読み出し部１３により第１および第２のブロック２０Ａ，２０Ｂごとに読み出された調整データの値からチェックサムを算出し、このチェックサム（以下、現チェックサムという。）と読み出し部１３により第１および第２のブロック２０Ａ，２０Ｂごとに読み出されたチェックサム（以下、元チェックサムという。）を比較し、算出した現チェックサムが読み出した元チェックサムに一致しない場合にエラーと判断し、両チェックサムが一致した場合は、正常と判断するものである。
【００２１】
読み出し部１３は、最初に第１のブロック２０Ａに保持された全ての調整データの値とチェックサムとを読み出し、エラー検出部１４によりその調整データの値が正常であると判断されると、その調整データの値は入出力制御部１０を介してＬＣＤ制御回路３に入力される。一方、エラー検出部１４によりその調整データの値にエラーがあると判断されると、読み出し部１３は、次に第２のブロック２０Ｂに保持された全ての調整データの値とチェックサムとを読み出し、エラー検出部１４によりその調整データの値が正常であると判断されると、その調整データの値が入出力制御部１０を介してＬＣＤ制御回路３に入力される。一方、エラー検出部１４によりさらにその調整データの値にエラーがあると判断されると、読み出し部１３は、最終的にＲＯＭ２００からデフォルトデータを読み出し、そのデフォルトデータを入出力制御部１０を介してＬＣＤ制御回路３に入力する。そして、ＬＣＤ制御回路３は、入力された調整データに基づいて液晶表示画面の明るさやコントラストなどを自動調整する。
【００２２】
これにより、たとえば液晶表示装置の電源投入直後は、ＥＥＰＲＯＭ２の記憶内容に応じた調整レベルの表示画面が形成される。また、ユーザがＯＳＤ調整用スイッチ４を操作した直後には、表示画面上に明るさやコントラストなどといったＯＳＤ調整項目がオーバーラップ表示される。
【００２３】
図２は、電源電圧とデータを書き込むタイミングとの関係を説明するためのタイミングチャートである。電源電圧Ｖｃｃは、通常は実線で示すように一定レベルに保たれる。ＭＰＵ１は、電源電圧Ｖｃｃが一定レベルにある間、調整データを第１のブロック２０Ａに書き込み、それから待ち時間ＷＴを経た後、同じ調整データを第２のブロック２０Ｂに書き込む。連続して別の調整データを書き込む必要があるときは、同様に待ち時間ＷＴを経た後にその別の調整データを第１のブロック２０Ａに書き込み、さらに待ち時間ＷＴを経た後、その別の調整データと同じ調整データを第２のブロック２０Ｂに書き込む。
【００２４】
ところで、電源電圧Ｖｃｃは、電源オフなどによってその供給が不意に断たれてしまうことがある。このとき、電源電圧Ｖｃｃは、急激に降下することなく図２に破線で示すように徐々に降下していき、暫くはフェードアウト効果により書き込み動作が可能とされる。具体的に言うと、電源電圧Ｖｃｃが書き込み保証レベルＶｓを下回るまでは、わずかながらも書き込み動作が正常に行われ、書き込み保証レベルＶｓから書き込み不可レベルＶｆに至るまでは、書き込み動作が不安定とされ、最終的に書き込み不可レベルＶｆを下回って電源電圧Ｖｃｃが０になると、書き込み動作が全く行われない。このように電源電圧Ｖｃｃが通常の一定レベルから０に至るまでの時間をフェードアウト時間と呼び、フェードアウト時間のうち、電源電圧Ｖｃｃが書き込み保証レベルＶｓから０に変化するまでの時間内に書き込まれたデータはエラーになってしまう。
【００２５】
そのため、第１のブロック２０Ａから第２のブロック２０Ｂに移る際の待ち時間ＷＴは、フェードアウト時間を考慮して電源電圧Ｖｃｃが書き込み保証レベルＶｓから書き込み不可レベルＶｆに至るまでの時間ｔより若干長いｔ＋αに設定されている。このような待ち時間ＷＴは、シミュレーションなどによってあらかじめ決定され、その時間長ｔ＋αは、たとえばミリ秒オーダの概ねフェードアウト時間と同等の長さとされる。
【００２６】
なお、電源断時に電源電圧Ｖｃｃが書き込み保証レベルＶｓから書き込み不可レベルＶｆに至るまでの時間ｔを測定するハードウェア回路をあらかじめ組み込んでおき、電源断が発生する毎にそのときの電源電圧が書き込み保証レベルＶｓから書き込み不可レベルＶｆに至る時間ｔを測定し、その測定結果を用いて次の電源断が発生したときの待ち時間ＷＴを設定するようにしても良い。この場合、製品製造時に設定される最初の待ち時間ＷＴはデフォルト値となる。
【００２７】
一例として図２に示すように、第１のブロック２０Ａから第２のブロック２０Ｂへと調整データの書き込み場所が移る際に電源が断たれると、その時点で第１のブロック２０Ａに書き込んでいた調整データについてはエラーの可能性がある。その一方、第２のブロック２０Ｂに第１のブロック２０Ａに書き込んだ調整データと同じ調整データを書き込もうとする際には、もはや待ち時間ＷＴが経過していることでデータを書き込むことができない。そのため、第２のブロック２０Ｂには、電源断以前に書き込まれた既存の旧調整データがそのまま保持される。
【００２８】
電源復旧後、たとえばユーザがＯＳＤ調整用スイッチ４を操作すると、最初に第１のブロック２０Ａから全ての調整データとチェックサムとが読み出され、読み出した全ての調整データから現チェックサムが算出される。このとき、第１のブロック２０Ａには、書き込みエラーに該当する調整データが含まれるため、読み出した元チェックサムと現チェックサムとを照合すると、チェックサムが一致しないとの結果が得られる。すると、次に第２のブロック２０Ｂから全ての調整データとチェックサムとが読み出され、読み出した全ての調整データから再び現チェックサムが算出される。このとき、第２のブロック２０Ｂには、電源断以前の内容ではあるものの全て正常な調整データが含まれるため、読み出した元チェックサムと現チェックサムとを照合すれば、チェックサムが一致する。そして、第２のブロック２０Ｂから読み出された全ての調整データのうち、ＯＳＤ調整用スイッチ４の操作に応じた所要の調整データがＬＣＤ制御回路３に出力される。これにより、電源断時に変更しようとしていたＯＳＤ調整項目の内容とは異なるものの、電源断以前のＯＳＤ調整項目の内容がオーバーラップ表示される。
【００２９】
図３は、書き込み処理を示すフローチャート、図４は、読み出し処理を示すフローチャートである。図３に示すように、ＭＰＵ１は、ユーザのＯＳＤ調整用スイッチ４の操作によってＥＥＰＲＯＭ２に対する調整データの書き込み要求を受けると（Ｓ１）、その書き込むべき調整データの値を含めて第１のブロック２０Ａにおけるチェックサムを計算し直す（Ｓ２）。
【００３０】
その後、ＭＰＵ１は、必要な調整データの値とチェックサムとを第１のブロック２０Ａに書き込む（Ｓ３）。なお、このときの手順としては、必要な調整データの値を第１のブロック２０Ａに書き込んだ後、第１のブロック２０Ａにおけるチェックサムを計算し直して書き込むようにしても良い。
【００３１】
第１のブロック２０Ａへの書き込み動作完了後、さらに所定の待ち時間ＷＴを経た後（Ｓ４）、ＭＰＵ１は、第１のブロック２０Ａに書き込んだのと同じ調整データの値とチェックサムとを第２のブロック２０Ｂに書き込む（Ｓ５）。なお、このときの手順でも、必要な調整データの値を第２のブロック２０Ｂに書き込んだ後、第２のブロック２０Ｂにおけるチェックサムを計算し直して書き込むようにしても良い。
【００３２】
つまり、書き込み処理が正常に実行される限り、第１および第２のブロック２０Ａ，２０Ｂには、同じ内容の調整データが書き込まれる。その一方、図３に例示するように、第１のブロック２０Ａへの書き込み動作中から待ち時間ＷＴが経過するまでの間に電源断が生じると（ステップＳ３からステップＳ４の間の電源断の部分を参照）、第１のブロック２０Ａに対しては書き込みエラーのおそれがあるものの、第２のブロック２０Ｂへの書き込み動作が行われない。その結果、第１のブロック２０Ａには、書き込みエラーとなった調整データが含まれ、第２のブロック２０Ｂには、書き込み処理前の正常な調整データが含まれる。また、特に図示しないが、第１のブロック２０Ａへの書き込み動作を正常に終えた後、第２のブロック２０Ｂへの書き込み動作中に電源断が生じると、第１のブロック２０Ａには、正常に書き込まれた最新の調整データが含まれ、第２のブロック２０Ｂには、書き込みエラーとなった調整データが含まれる。要するに、電源断による書き込みエラーは、第１および第２のブロック２０Ａ，２０Ｂのいずれか一方でしか生じ得ず、第１および第２のブロック２０Ａ，２０Ｂの双方で発生するおそれはほとんどない。ただし、電源断以外の誤動作などでは第１および第２のブロック２０Ａ，２０Ｂの双方で書き込みエラーが生じることもある。
【００３３】
図４に示すように、ＭＰＵ１は、ユーザのＯＳＤ調整用スイッチ４の操作によって調整データの読み出し要求を受けると（Ｓ１１）、必要な調整データを含めて全ての調整データの値とチェックサムとを第１のブロック２０Ａから読み出す（Ｓ１２）。
【００３４】
ＭＰＵ１は、読み出した全ての調整データの値を基にチェックサムを算出する（Ｓ１３）。
【００３５】
ＭＰＵ１は、読み出した元チェックサムと算出した現チェックサムと照合し（Ｓ１４）、チェックサムの値が一致する場合（Ｓ１５：ＹＥＳ）、読み出した全ての調整データから必要な調整データを抽出し、その調整データの値をＬＣＤ制御回路３に出力する（Ｓ１６）。
【００３６】
Ｓ１５において、チェックサムの値が異なる場合（Ｓ１５：ＮＯ）、ＭＰＵ１は、第２のブロック２０Ｂから全ての調整データの値とチェックサムとを読み出す（Ｓ１７）。
【００３７】
ＭＰＵ１は、第２のブロック２０Ｂから読み出した全ての調整データの値を基にチェックサムを再び算出する（Ｓ１８）。
【００３８】
ＭＰＵ１は、読み出した元チェックサムと算出した現チェックサムと照合し（Ｓ１９）、チェックサムの値が一致する場合（Ｓ２０：ＹＥＳ）、第２のブロック２０Ｂの全ての調整データから必要な調整データを抽出し、その調整データの値をＬＣＤ制御回路３に出力する（Ｓ１６）。
【００３９】
Ｓ２０において、チェックサムの値が異なる場合（Ｓ２０：ＮＯ）、ＭＰＵ１は、最終的にＲＯＭ２００から必要な調整データに相当するデフォルトデータを読み出し、そのデフォルトデータの値をＬＣＤ制御回路３に出力して読み出し処理を終える（Ｓ２１）。
【００４０】
したがって、この実施形態によれば、第１のブロック２０Ａから第２のブロック２０Ｂへと書き込み場所が移る際もしくは第２のブロック２０Ｂから第１のブロック２０Ａへと書き込み場所が移る際に電源断があっても、第１および第２のブロック２０Ａ，２０Ｂの双方で書き込みエラーになるおそれはない。仮に第１のブロック２０Ａに対する書き込み動作がエラーになっても、電源復旧後には、第２のブロック２０Ｂから電源断以前に書き込まれた正常な旧データを読み出すことができ、できる限り最新のデータを読み出すことができる。もちろん、第２のブロック２０Ｂに対する書き込み動作中に電源断となり、第２のブロック２０Ｂで書き込みエラーとなっても、電源復旧後には、第１のブロック２０Ａから電源断直前に正常に書き込まれた最新データを読み出すことができる。
【００４１】
次に、他の実施形態について説明する。
【００４２】
図５は、本発明の他の実施形態を示すブロック図である。なお、先述の実施形態と同様の点については、その説明を省略する。
【００４３】
他の実施形態に係るＭＰＵ５は、入出力制御部５０、第１および第２の書き込み部５２Ａ，５２Ｂ、読み出し部５３、および排他的論理和演算部５４といったメモリコントローラとしての機能ブロックを有する。ＥＥＰＲＯＭ２の記憶領域は、先述した実施形態と同様に第１および第２の２つのブロック２０Ａ，２０Ｂに分けられている。ＲＯＭ２００には、あらかじめＯＳＤ調整項目に関するデフォルトデータが書き込まれている。
【００４４】
ＭＰＵ５における第１の書き込み部５２Ａは、所要の調整データのビット値をそのまま第１のブロック２０Ａに書き込む。第２の書き込み部５２Ｂは、上記第１の書き込み部５２Ａによる書き込み動作の完了後、先述した実施形態と同様に待ち時間ＷＴをさらに経た後、第１の書き込み部５２Ａが書き込んだのと同じ調整データのビット値を反転させて第２のブロック２０Ｂに書き込む。具体的には第１のブロック２０Ａに調整データとして、たとえば「０１０１」の４ビットデータを書き込んだとすると、第２のブロック２０Ｂにはこの４ビッドデータの各ビットを反転させた「１０１０」の４ビットデータが書き込まれる。すなわち、第１および第２のブロック２０Ａ，２０Ｂには、形式的には異なるものの同一対象に係る調整データのビット値が保持される。
【００４５】
読み出し部５３は、第１および第２のブロック２０Ａ，２０Ｂの双方から必要な調整データのビット値を読み出し、エラーがある場合に限り、最終的にＲＯＭ２００からデフォルトデータを読み出す。読み出されたデータについては、入出力制御部５０を介してＬＣＤ制御回路３に入力される。排他的論理和演算部５４は、第１および第２のブロック２０Ａ，２０Ｂから読み出された同一データの各ビット値について排他的論理和を演算し、その演算結果が０の場合にエラーと判断する。演算結果が１の場合には、正常と判断する。
【００４６】
このような他の実施形態でも、図２に示すようなタイミングで電源断が生じることがあるため、第１のブロック２０Ａから第２のブロック２０Ｂへと書き込み動作が移る際に待ち時間ＷＴを設けている。したがって、電源断時に第１あるいは第２のブロック２０Ａ，２０Ｂに書き込んでいた調整データについてはエラーの可能性があるものの、電源断以前に第１および第２のブロック２０Ａ，２０Ｂの双方に書き込まれた他の調整データについては、エラーもなく正常に保持される。
【００４７】
電源復旧後、たとえばユーザがＯＳＤ調整用スイッチ４を操作すると、第１および第２のブロック２０Ａ，２０Ｂの双方から同じ調整データのビット値が読み出され、それらのビット値について排他的論理和が演算される。このとき、第１および第２のブロック２０Ａ，２０Ｂのいずれか一方に書き込みエラーに該当する調整データが含まれると、排他的論理和の演算結果が０になる。すると、最終的にＲＯＭ２００からデフォルトデータが読み出されて両ブロック２０Ａ，２０Ｂに書き込まれ、その内容がＬＣＤ制御回路３に出力される。一方、電源断以前に正常に書き込まれた調整データについては、排他的論理和の演算結果を１としてたとえば第１のブロック２０Ａに書き込まれた内容がＬＣＤ制御回路３に出力される。これにより、電源断時に変更しようとしていたＯＳＤ調整項目についてはデフォルト値に戻るものの、電源断以前に変更されたＯＳＤ調整項目については、変更後の値がそのままオーバーラップ表示される。
【００４８】
図６は、他の実施形態による書き込み処理を示すフローチャート、図７は、他の実施形態による読み出し処理を示すフローチャートである。図６に示すように、ＭＰＵ５は、ＯＳＤ調整用スイッチ４の操作に応じてＥＥＰＲＯＭ２に対する調整データの書き込み要求を受けると（Ｓ３１）、その書き込むべき調整データのビット値をそのまま第１のブロック２０Ａに書き込む（Ｓ３２）。
【００４９】
第１のブロック２０Ａへの書き込み動作完了後、さらに所定の待ち時間ＷＴを経た後（Ｓ３３）、ＭＰＵ５は、第１のブロック２０Ａに書き込んだのと同じ調整データのビット値を反転させて第２のブロック２０Ｂに書き込む（Ｓ３４）。
【００５０】
さらに他の調整データについて書き込み要求が無ければ（Ｓ３５：ＮＯ）、ＭＰＵ５は、書き込み処理を終える。他の調整データについて書き込み要求がある場合（Ｓ３５：ＹＥＳ）、ＭＰＵ５は、Ｓ３２に戻る。
【００５１】
つまり、書き込み処理が正常に実行される限り、第１および第２のブロック２０Ａ，２０Ｂには、互いに反転したビット値からなる調整データが書き込まれる。その一方、図６に例示するように、第１のブロック２０Ａへの書き込み動作中から待ち時間ＷＴが経過するまでの間に電源断が生じると（ステップＳ３２からステップＳ３３の間の電源断の部分を参照）、第１のブロック２０Ａに対しては書き込みエラーのおそれがあるものの、第２のブロック２０Ｂへの書き込み動作が行われない。その結果、第１のブロック２０Ａには、書き込みエラーとなった調整データのビット値が含まれ、第２のブロック２０Ｂには、書き込み処理前の正常な調整データの反転ビット値が含まれる。また、特に図示しないが、第１のブロック２０Ａへの書き込み動作を正常に終えた後、第２のブロック２０Ｂへの書き込み動作中に電源断が生じると、第１のブロック２０Ａには、正常に書き込まれた最新の調整データのビット値が含まれ、第２のブロック２０Ｂには、書き込みエラーとなった同じ調整データの反転ビット値が含まれる。要するに、電源断による書き込みエラーは、そのときに書き込んでいた調整データに限られ、電源断以前に書き込んでいた調整データにエラーが含まれるおそれはほとんどない。
【００５２】
図７に示すように、ＭＰＵ５は、ユーザのＯＳＤ調整用スイッチ４の操作によって調整データの読み出し要求を受けると（Ｓ４１）、第１のブロック２０Ａから該当する調整データのビット値を読み出すとともに（Ｓ４２）、第２のブロック２０Ｂから該当する調整データのビット値（第１のブロック２０Ａから読み出される調整データを反転したビット値に相当。以下、反転ビット値という。）を読み出す（Ｓ４３）。
【００５３】
ＭＰＵ５は、読み出した調整データのビット値と反転ビット値を基に排他的論理和を演算する（Ｓ４４）。
【００５４】
ＭＰＵ５は、排他的論理和の演算結果が１の場合（Ｓ４５：ＹＥＳ）、第１のブロック２０Ａから読み出した調整データのビット値をＬＣＤ制御回路３に出力する（Ｓ４６）。このとき、第２のブロック２０Ｂから読み出した調整データの反転ビット値を更に反転させて出力するようにしても良い。
【００５５】
Ｓ４５において、排他的論理和の演算結果が０の場合（Ｓ４５：ＮＯ）、ＭＰＵ５は、最終的にＲＯＭ２００から必要な調整データに該当するデフォルトデータを読み出し、そのデフォルトデータの値をＬＣＤ制御回路３に出力して読み出し処理を終える（Ｓ４７）。
【００５６】
したがって、他の実施形態によれば、第１のブロック２０Ａから第２のブロック２０Ｂへと書き込み場所が移る際もしくは第２のブロック２０Ｂから第１のブロック２０Ａへと書き込み場所が移る際に電源断が生じた場合、そのときに書き込んでいた調整データについては、電源復旧後に第１および第２のブロック２０Ａ，２０Ｂの双方から読み出されるものの、それらのビット値の排他的論理和が０として求められることでデフォルトデータに戻ってしまう。その一方、電源断以前に書き込まれたその他の調整データについては、排他的論理和が１である限り正常なデータとして第１または第２のブロック２０Ａ，２０Ｂから読み出すことができるので、できる限り有効なデータを読み出すことができる。
【００５７】
また、先述した実施形態のようにチェックサムを書き込んでおく必要がないので、その分第１および第２のブロック２０Ａ，２０Ｂに多くのデータを書き込むことができる。
【００５８】
なお、本発明は、上記の各実施形態に限定されるものではない。
【００５９】
不揮発性メモリは、たとえばフラッシュ型のＥＥＰＲＯＭや、強誘電体メモリ（ＦｅＲＡＭ）あるいはマグネチックメモリ（ＭＲＡＭ）などでも良い。
【００６０】
本発明は、液晶表示装置に限らず、不揮発性メモリを利用するシステム全般に広く適用することができ、たとえばパーソナルコンピュータなどの内部システムにも適用することができる。
【００６１】
チェックコードとしては、チェックサムに代え、たとえば調整データごとにパリティビットやＣＲＣコード、ハミングコードやリードソロモンコードを付加するようにしても良い。
【００６２】
上記他の実施形態では、第１および第２のブロック２０Ａ，２０Ｂの双方において必要な調整データのビット値が書き換えられるが、書き換え前の旧データについては、そのまま第１および第２のブロック２０Ａ，２０Ｂに保持しておき、たとえば第２のブロック２０Ｂに対する書き換え動作が完了すると、旧データを破棄するようにしても良い。そうした場合、最新の調整データにエラーがあってもデフォルトデータを読み出す前に旧データを読み出すことができる。
【００６３】
もちろん、ＥＥＰＲＯＭ２の読み書き可能なアドレス空間を３以上のブロックに分け、各ブロックに同一データを書き込むとしても良い。その場合、書き込みブロックが変わる際には、上記実施形態と同様に待ち時間ＷＴを経た後でなければ次のブロックに書き込むことができないようにしておけば良い。
【図面の簡単な説明】
【図１】
本発明の一実施形態を示すブロック図である。
【図２】
電源電圧とデータを書き込むタイミングとの関係を説明するためのタイミングチャートである。
【図３】
書き込み処理を示すフローチャートである。
【図４】
読み出し処理を示すフローチャートである。
【図５】
本発明の他の実施形態を示すブロック図である。
【図６】
他の実施形態による書き込み処理を示すフローチャートである。
【図７】
他の実施形態による読み出し処理を示すフローチャートである。                                                                      
【国際調査報告】
2004066157.tif 000010
2004066157.tif 000011