(57)【要約】【課題】フラッシュＲＯＭのデータ記録状態を確実に検査する。【解決手段】フラッシュＲＯＭの各セクタの先頭部および終端部に特定コード（コード１，２）を格納する。フラッシュＲＯＭのデータ書き換えはセクタごとに行われ、データ内容をワークメモリにコピーして書き換えた後、フラッシュＲＯＭのデータ内容を消去してワークメモリから書き込む。各セクタの先頭部および終端部に格納されたコードが特定コードと一致するか否かを判定することで、記録されたデータが正常か否かを迅速に検査する。【選択図】図３
2006331148.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリに記憶されたデータが正常か否かを検査する方法であって、
データ書き込み時に前記フラッシュメモリを構成するセクタの先頭部と終端部に特定コードを付加し、
前記データ書き込み後に前記先頭部と終端部のコードを読み出し、
読み出したコードがいずれも前記特定コードと一致する場合に前記フラッシュメモリに記憶されたデータが正常であると判定し、前記読み出したコードの少なくともいずれかが前記特定コードと一致しない場合に前記データが異常であると判定する
ことを特徴とするデータの検査方法。
【請求項２】
請求項１記載の方法において、さらに、
前記フラッシュメモリに記憶されたデータは、少なくとも第１部分及び第２部分に分割されて記憶され、
前記第１部分及び第２部分の所定アドレスに前記データ共通の固有コードがそれぞれ付加され、
前記データ書き込み後に前記所定アドレスのコードを読み出し、
読み出したコードがいずれも前記データ共通の固有コードである場合に前記フラッシュメモリに記憶された第１部分及び第２部分は正常であると判定し、前記読み出したコードの少なくともいずれかが前記データ共通の固有コードでない場合に前記第１部分及び第２部分のいずれかが異常であると判定する
ことを特徴とするデータの検査方法。
【請求項３】
フラッシュメモリに記憶されたプログラムデータが正常か否かを検査する装置であって、
前記フラッシュメモリの各セクタの先頭領域及び終端領域にそれぞれ格納されたコードを読み出す読出手段と、
前記コードがいずれも特定コードと一致するか否かを判定し、一致しない場合に所定の復旧処理を実行し、一致する場合に前記プログラムのサムチェック処理を実行する実行手段と、
を有することを特徴とするデータの検査装置。
【請求項４】
請求項３記載の装置において、
前記プログラムデータは複数部分に分割されて記憶され、
前記読出手段は、前記複数部分のそれぞれの所定アドレスに格納され、前記プログラムデータに対して一義的に設定された固有コードを読み出し、
前記実行手段は、前記固有コードが互いに一致するか否かを判定し、一致しない場合に前記所定の復旧処理を実行し、前記コード及び前記固有コードがいずれも一致する場合に前記プログラムのサムチェック処理を実行する
ことを特徴とするデータの検査装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ検査方法及び装置に関し、特にフラッシュメモリに記憶されたデータの正当性を検査する技術に関する。
【背景技術】
【０００２】
従来より、フラッシュＲＯＭ等のフラッシュメモリに記憶されたデータが正常か否かの検査方法として、サムチェック（ｓｕｍ  ｃｈｅｃｋ）が用いられている。サムチェックは、フラッシュＲＯＭの特定範囲のデータを加算し、あるいは特定の演算式を用いて演算し、その結果を特定範囲以外の領域に格納しておき、電源投入時に上記の演算を再度行って格納済みの演算結果と比較することで、正常に記憶されたデータであるか否かを判定するものである。
【０００３】
しかしながら、サムチェックでは、フラッシュメモリの容量が増大するに従って演算結果を得るまでの時間も増大することとなり、正常か否かの判定に時間を要する問題がある。また、最近では、フラッシュメモリへのデータ書き込み中に電源が遮断されても、フラッシュメモリの内容を迅速に回復できるシステムが要求されている。
【０００４】
下記に示す特許文献には、フラッシュメモリにプログラムなどのデータをダウンロードした際、サムチェックのみで正しくダウンロードされたか否かを判定する技術では偶然の一致があるため誤判定が生じるおそれがあるとし、ダウンロードエリア内の所定の格納領域（メインプログラムの末尾）に特定データを書き込み、これが正しく格納されていない場合にはたとえサムチェックが正常であってもダウンロードが正常に行われなかったと判定する技術が開示されている。
【０００５】
【特許文献１】特開平１１−１５６７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記従来技術ではメインプログラムの末尾に特定のデータを格納するのみであるため、メインプログラムが正しく格納されていないと判定できたとしても、ダウンロードのどの段階でエラーが生じたのか等、よりきめ細かく異常検出を行うことができず、トラブルシューティングを効率的に実行することができない。
【０００７】
本発明の目的は、フラッシュメモリに記憶されたデータの状態を迅速かつ高精度に検査することができる方法及び装置を提供することにある。
【課題を解決するための手段】
【０００８】
本発明は、フラッシュメモリに記憶されたデータが正常か否かを検査する方法であって、データ書き込み時に前記フラッシュメモリを構成するセクタの先頭部と終端部に特定コードを付加し、前記データ書き込み後に前記先頭部と終端部のコードを読み出し、読み出したコードがいずれも前記特定コードと一致する場合に前記フラッシュメモリに記憶されたデータが正常であると判定し、前記読み出したコードの少なくともいずれかが前記特定コードと一致しない場合に前記データが異常であると判定することを特徴とする。
【０００９】
また、本発明は、フラッシュメモリに記憶されたプログラムデータが正常か否かを検査する装置であって、前記フラッシュメモリの各セクタの先頭領域及び終端領域にそれぞれ格納されたコードを読み出す読出手段と、前記コードがいずれも特定コードと一致するか否かを判定し、一致しない場合に所定の復旧処理を実行し、一致する場合に前記プログラムのサムチェック処理を実行する実行手段とを有することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、フラッシュメモリの各セクタの先頭部と終端部に格納された特定コードを検査することで、フラッシュメモリのデータ内容が正常か否かを迅速に検査できる。
【発明を実施するための最良の形態】
【００１１】
以下、図面に基づき本発明の実施形態について、光ディスク装置の駆動用プログラムを記憶するフラッシュＲＯＭを例にとり説明する。
【００１２】
図１に、本実施形態に係る光ディスク装置の全体構成図が示されている。光ディスク１０はスピンドルモータ（ＳＰＭ）１２により回転駆動される。スピンドルモータＳＰＭ１２は、ドライバ１４で駆動され、ドライバ１４はサーボプロセッサ３０により所望の回転速度となるようにサーボ制御される。
【００１３】
光ピックアップ１６は、レーザ光を光ディスク１０に照射するためのレーザダイオード（ＬＤ）や光ディスク１０からの反射光を受光して電気信号に変換するフォトディテクタ（ＰＤ）を含み、光ディスク１０に対向配置される。光ピックアップ１６はスレッドモータ１８により光ディスク１０の半径方向に駆動され、スレッドモータ１８はドライバ２０で駆動される。ドライバ２０は、ドライバ１４と同様にサーボプロセッサ３０によりサーボ制御される。また、光ピックアップ１６のＬＤはドライバ２２により駆動され、ドライバ２２はオートパワーコントロール回路（ＡＰＣ）２４により駆動電流が所望の値となるように制御される。ＡＰＣ２４は、光ディスク１０のテストエリア（ＰＣＡ）において実行されたＯＰＣ（Optimum Power Control）により選択された最適記録パワーとなるようにドライバ２２の駆動電流を制御する。
【００１４】
光ディスク１０に記録されたデータを再生する際には、光ピックアップ１６のＬＤから再生パワーのレーザ光が照射され、その反射光がＰＤで電気信号に変換されて出力される。光ピックアップ１６からの再生信号はＲＦ回路２６に供給される。ＲＦ回路２６は、再生信号からフォーカスエラー信号やトラッキングエラー信号を生成し、サーボプロセッサ３０に供給する。サーボプロセッサ３０は、これらのエラー信号に基づいて光ピックアップ１６をサーボ制御し、光ピックアップ１６をオンフォーカス状態及びオントラック状態に維持する。
【００１５】
光ピックアップ１６は、光ディスク１０のグルーブに対して記録／再生を行う。光ディスク１０には螺旋状にグルーブが形成されている。また、ＲＦ回路２６は、再生信号に含まれるアドレス信号をアドレスデコード回路２８に供給する。アドレスデコード回路２８はアドレス信号から光ディスク１０のアドレスデータを復調し、サーボプロセッサ３０やシステムコントローラ３２に供給する。
【００１６】
ＲＦ回路２６は、再生ＲＦ信号を２値化回路３４に供給する。２値化回路３４は、再生信号を２値化し、得られた信号をエンコード／デコード回路３６に供給する。エンコード／デコード回路３６では、２値化信号を復調及びエラー訂正して再生データを得、当該再生データをインタフェースＩ／Ｆ４０を介してパーソナルコンピュータなどのホスト装置に出力する。なお、再生データをホスト装置に出力する際には、エンコード／デコード回路３６はバッファメモリ３８に再生データを一旦蓄積した後に出力する。
【００１７】
光ディスク１０にデータを記録する際には、ホスト装置からの記録すべきデータはインターフェースＩ／Ｆ４０を介してエンコード／デコード回路３６に供給される。エンコード／デコード回路３６は、記録すべきデータをバッファメモリ３８に格納し、当該記録すべきデータをエンコードして変調データとしてライトストラテジ回路４２に供給する。ライトストラテジ回路４２は、変調データを所定の記録ストラテジに従ってマルチパルス（パルストレーン）に変換し、記録データとしてドライバ２２に供給する。記録データによりパワー変調されたレーザ光は光ピックアップ１６のＬＤから照射されて光ディスク１０にデータが記録される。データを記録した後、光ピックアップ１６は再生パワーのレーザ光を照射して当該記録データを再生し、ＲＦ回路２６に供給する。ＲＦ回路２６は再生信号を２値化回路３４に供給し、２値化されたデータはエンコード／デコード回路３６に供給される。エンコード／デコード回路３６は、変調データをデコードし、バッファメモリ３８に記憶されている記録データと照合する。ベリファイの結果はシステムコントローラ３２に供給される。システムコントローラ３２はベリファイの結果に応じて引き続きデータを記録するか、あるいは交替処理を実行するかを決定する。
【００１８】
光ディスク装置は、以上のようなデータ記録／再生動作を行うが、動作に必要なプログラム及び各種パラメータはシステムコントローラ３２内のフラッシュＲＯＭに記憶される。プログラムは適宜バージョンアップされてフラッシュＲＯＭに書き込まれる。フラッシュＲＯＭでは、指定アドレスだけのデータを書き換えるのではなく、そのアドレスを含むセクタ単位でデータを書き換える。具体的には、フラッシュＲＯＭのセクタのデータを一旦ＲＡＭに待避（コピー）させ、ＲＡＭにおいてデータを書き換えた後、データをフラッシュＲＯＭの該当セクタに書き込むことでプログラムの書き換えを実現する。図には、システムコントローラ３２内にフラッシュＲＯＭ及びプログラム書き換え時に用いられるワーク用のＲＡＭが示されている。
【００１９】
図２に、システムコントローラ３２内のフラッシュＲＯＭの構成を示す。フラッシュＲＯＭは複数のセクタから構成され、図においてはＳＡ０，ＳＡ１，ＳＡ２の３つのセクタを例示している。ＳＡ０のアドレス領域は０ｘ０００００−０ｘ０ＦＦＦＦ（すなわち、１６進で０００００〜０ＦＦＦＦ）であり、ＳＡ１のアドレス領域は０ｘ１００００−０ｘ１ＦＦＦＦ、ＳＡ２のアドレス領域は０ｘ２００００〜０ｘ２ＦＦＦＦである。各セクタは６４ＫＢ単位で構成される。ＳＡ０には、ブートプログラムと正常判定処理プログラムが組み込まれており、電源投入時にＳＡ０の０ｘ０００００からプログラムが動作する。電源投入後、ブートプログラムおよび正常判定処理プログラムが起動し、フラッシュＲＯＭのＳＡ１およびＳＡ２に記憶されたプログラムデータが正常か否かを判定する。
【００２０】
図３に、ＳＡ１およびＳＡ２のデータ構造を示す。ＳＡ１に関しては、ＳＡ１の中間アドレス領域の０ｘ１０００４−０ｘ１ＦＦＦＢにはプログラムデータが格納される。一方、ＳＡ１の先頭部のアドレス領域０ｘ１００００−０ｘ１０００３には特定のコード（コード１：図ではｃｏｄｅ１）が格納され、かつ、ＳＡ１の終端部のアドレス領域の０ｘ１ＦＦＦＣ−０ｘ１ＦＦＦＦに特定のコード（コード２：図ではｃｏｄｅ２）が格納される。コード１及びコード２はＳＡ１に格納されるプログラムデータの内容とは独立に設定され、例えば「ＧＯＯＤ」なる文字のＡＳＣＩＩコードとすることができる。コード１とコード２は同一とすることが好適であるが、異なるコードとしてもよい。ＳＡ２に関してもＳＡ１と同様であり、ＳＡ２のアドレス領域の０ｘ２０００４−０ｘ２ＦＦＦＢにはプログラムデータが格納され、ＳＡ２の先頭部のアドレス領域の０ｘ２００００−０ｘ２０００３には特定のコード（コード１）が格納され、ＳＡ２の終端部のアドレス領域の０ｘ２ＦＦＦＣ−０ｘ２ＦＦＦＦには特定コード（コード２）が格納される。ＳＡ２の特定コード１，２は、ＳＡ１の特定コード１，２とそれぞれ同一である。
【００２１】
電源投入後、ＳＡ０に格納されたブートプログラム及び正常判定処理プログラムが起動し、ＳＡ１の先頭部および終端部に格納されたコード、及びＳＡ２の先頭部および終端部に格納されたコードを読み出し、これらが特定コード、つまり予め定めたＡＳＣＩＩコードの「ＧＯＯＤ」に一致するか否かを判定することでプログラムデータが正常か否かを判定する。すなわち、正常に記憶されていれば各セクタの先頭部と終端部には必ず「ＧＯＯＤ」なる特定コードが格納されているはずであるから、「ＧＯＯＤ」以外のコードが格納されている場合には各セクタに記憶されたデータは正常ではないと判定する。
【００２２】
以下、システムコントローラ３２内のフラッシュＲＯＭのプログラムデータを書き換える処理を例にとり、プログラムの正常／異常判定処理を説明する。
【００２３】
図４に、フラッシュＲＯＭにおけるＳＡ１の書き換え処理フローチャートを示す。フラッシュＲＯＭでは、ＳＲＡＭやＤＲＡＭと異なり、指定アドレスを直接書き換えることはできず、常にセクタ単位での書き換えとなる。具体的には、まず、ＳＡ１に格納されているデータ内容を全てワークＲＡＭにコピーする（Ｓ１０１）。そして、ワークＲＡＭにコピーされたデータに対して指定アドレスの書き換えを実行する（Ｓ１０２）。例えば、コピーデータのアドレス０ｘ１０００４に相当するデータを書き換える。コピーデータを書き換えた後、フラッシュＲＯＭのＳＡ１をセクタ単位で消去（イレース）する（Ｓ１０３）。最後に、書き換えられたワークＲＡＭに存在するデータ内容を消去後のＳＡ１に書き込む（Ｓ１０４）。以上のようにして、フラッシュＲＯＭのＳＡ１のデータ書き換えが完了する。データ書き換えが完了した時点では、ＳＡ１の先端部と終端部には「ＧＯＯＤ」のコードが書き込まれている。
【００２４】
一連の書き換え処理において、異常ステータスとして電源遮断が生じた場合を想定する。まず、Ｓ１０１あるいはＳ１０２のステップで電源遮断が生じた場合、フラッシュＲＯＭのＳＡ１の内容自体に変化がなく、したがって電源遮断が生じても影響がない。このとき、ＳＡ１の先頭部および終端部のコードはいずれも「ＧＯＯＤ」であるため正常と正しく判定される。
【００２５】
次に、Ｓ１０３のステップで電源遮断が生じると、その消去過程の進み具合に応じて先頭部あるいは終端部のコードが変化する。すなわち、ＳＡ１の先頭部から消去が行われるものとすると、消去の途中では先頭部のコードが「０ｘＦＦＦＦＦＦＦＦ」で終端部は「ＧＯＯＤ」のままであり、消去完了後であれば、先頭部および終端部のいずれも「０ｘＦＦＦＦＦＦＦＦ」となっている。もちろん、消去ステップを一括消去で実行してもよく、この場合には先頭部および終端部ともに「０ｘＦＦＦＦＦＦＦＦ」となる。いずれの場合においても、先頭部および終端部の少なくともいずれかは「ＧＯＯＤ」と異なるコードとなるため、電源遮断という異常が生じたと正しく判定できる。
【００２６】
Ｓ１０４のステップで電源遮断が生じた場合、先頭部は「ＧＯＯＤ」となっているが、終端部において未だ消去時の状態のままであるため「０ｘＦＦＦＦＦＦＦＦ」となっており、先頭部および終端部がともに「ＧＯＯＤ」である条件を満たさないため異常と正しく判定できる。なお、Ｓ１０４のステップの完了後は先頭部および終端部のいずれも「ＧＯＯＤ」となるから、正常と正しく判定できる。
【００２７】
以上まとめると、システムコントローラ３２あるいは内蔵ＣＰＵは、フラッシュＲＯＭのプログラムデータが正常か否かを以下のように判定できる。
（１）先端部及び終端部のコードがともに「ＧＯＯＤ」：
フラッシュＲＯＭのプログラムデータは正常
（２）先端部及び終端部のコードがいずれも「ＧＯＯＤ」ではない：
Ｓ１０３の処理完了後に異常が発生
（３）先端部のみが「ＧＯＯＤ」でない：
Ｓ１０３の処理の途中で異常が発生
（４）終端部のみが「ＧＯＯＤ」でない：
Ｓ１０４の処理の途中で異常が発生
【００２８】
このように、フラッシュＲＯＭのデータの書き換え処理において、任意のタイミングで電源遮断が生じて書き換えが正しく実行されなかった場合であっても本実施形態では異常発生を正しく検出することができる。また、特定コード１，２がセクタの先頭部および終端部に格納されるため、いずれの部分のコードが特定コードに一致しないかを判定することで電源遮断等の異常が一連の書き換え処理のどの段階で生じたのかも判定することが可能である。したがって、異常が検出されて所定の復旧プログラムを実行する場合でも、フラッシュＲＯＭのどの部分、あるいは一連の書き換え処理のどのステップから復旧させるべきかを容易に判定することができる。
【００２９】
なお、フラッシュＲＯＭの書き換えは、上記のようにフラッシュＲＯＭの内容をワークＲＡＭにコピーして実行するものであり、フラッシュＲＯＭよりワークＲＡＭの容量が大きい場合にはフラッシュＲＯＭの全てのデータをワークＲＡＭにコピーすることが可能であるが、最近ではフラッシュＲＯＭの容量が順次増大し、フラッシュＲＯＭの容量がワークＲＡＭの容量以上となる場合も生じる場合がある。このような場合、フラッシュＲＯＭのデータを一括してワークＲＡＭにコピーすることができないため、フラッシュＲＯＭのプログラムデータを予め複数に分割し、分割された各プログラムデータ毎に順次、ワークＲＡＭにコピーし、書き換えし、再書き込みする必要が生じる。このように、フラッシュＲＯＭのプログラムを分割する場合（分割された２つのプログラムをそれぞれトップとボトムと称する）、トップおよびボトムの特定アドレスにトップとボトムに共通のユニークコードを付加しておくことが望ましい。
【００３０】
すなわち、トップを書き換えた状態で電源遮断や再起動などが実行されると、トップの各セクタの先頭部および終端部には特定コード「ＧＯＯＤ」が格納されているため正常と判定され、ボトムについても同様に正常と判定されてしまう（ボトムについては書き換えが完了していないため、本来であれば異常と判定しなければならない）。トップおよびボトムの特定アドレス（先頭部あるいは終端部のいずれかでよい）に共通のユニークコードを格納しておき、起動時にこれら二つのユニークコードが一致するかを検査することでトップおよびボトムが同一バージョンのプログラムデータであるか否かを容易かつ迅速に検査することができる。ユニークコードは、例えばプログラムデータを作成した日付データと時間データを利用することができる。
【００３１】
図５に、本実施形態の全体処理フローチャートを示す。まず、電源投入すると、システムコントローラ３２のＣＰＵが正常判定プログラムを実行し、フラッシュＲＯＭの各セクタの先頭部および終端部に格納されたコードを読み出して、これらが特定のコード「ＧＯＯＤ」と一致するか否かを判定する（Ｓ２０１）。一致しない（ＮＧ）と判定された場合、ＣＰＵはこの時点でフラッシュＲＯＭのプログラムデータは異常と判定し、ブート用にＩ／Ｏやタイマ，割り込み等を初期化し（Ｓ２０６）、ワークＲＡＭ（ＳＲＡＭ）のクリア及び初期化を行って（Ｓ２０７）、ブートプログラムを起動させて復旧処理を実行する。一方、Ｓ２０１で一致する（ＧＯＯＤ）と判定された場合、次にＣＰＵは分割されたプログラムの特定アドレスに付加されたユニークコードを読み出して互いに一致するか否かを判定する（Ｓ２０２）。トップのユニークコードとボトムのユニークコードが一致しない（ＮＧ）と判定された場合、同様にフラッシュＲＯＭのプログラムデータが異常であると判定して復旧処理に移行する。Ｓ２０１及びＳ２０２のいずれかでＮＧと判定された場合、サムチェックを実行することなく直ちに復旧処理に移行している点に留意されたい。サムチェックの演算時間を省略し、迅速にフラッシュＲＯＭのプログラムデータを復旧できる。
【００３２】
先頭部および終端部に格納されたコードが特定コードと一致し、かつ、分割されたプログラムのそれぞれに付加されたユニークコードも一致すると判定された場合、ＣＰＵは通常の処理に移行すべく初期化を行った後（Ｓ２０３，Ｓ２０４）、サムチェック処理に移行する（Ｓ２０５）。サムチェックの結果、演算結果が一致しない（ＮＧ）と判定された場合、同様にプログラムが異常と判定して復旧処理に移行する。
【００３３】
本実施形態では光ディスク装置の駆動プログラムを例にとり説明したが、本発明はこれに限定されず任意の装置あるいはシステムのフラッシュメモリに適用できる。
【図面の簡単な説明】
【００３４】
【図１】実施形態に係る光ディスク装置の全体構成図である。
【図２】フラッシュＲＯＭのセクタ構成図である。
【図３】フラッシュＲＯＭの各セクタの先頭部および終端部に格納される特定コード説明図である。
【図４】図３に示されたセクタＳＡ１の書き換え処理フローチャートである。
【図５】実施形態の全体処理フローチャートである。
【符号の説明】
【００３５】
１０  光ディスク，３２  システムコントローラ。
【図１】
2006331148.tif 000003
【図２】
2006331148.tif 000004
【図３】
2006331148.tif 000005
【図４】
2006331148.tif 000006
【図５】
2006331148.tif 000007