(57)【特許請求の範囲】
【請求項１】
ブートプログラムを格納し、メモリ空間を論理的に上位ビット領域と下位ビット領域とに２分割し、各ビット領域に同一データを格納する不揮発メモリと、
前記不揮発メモリの最上位アドレス信号を反転・非反転させて前記各ビット領域を論理的に入れ換え可能にする選択手段と、
前記選択手段の状態を検出する検出手段と、
電源ＯＮによるソフトウエア起動時に、前記選択手段が非反転を選択したことを前記検出手段が検出した場合は、通常のシステム起動を行い、前記選択手段が反転を選択したことを前記検出手段が検出した場合は、前記下位ビット領域の全データを前記上位ビット領域の全領域にコピーする制御手段とを設けたことを特徴とするリカバリー制御装置。
【請求項２】
ブートプログラムを格納し、メモリ空間を論理的に上位ビット領域と下位ビット領域とに２分割し、各ビット領域に同一データを格納した不揮発メモリと、
前記不揮発メモリの最上位アドレス信号を反転・非反転させて前記各ビット領域を論理的に入れ換え可能にする選択手段と、
前記選択手段の状態を検出する検出手段と、
電源ＯＮによるソフトウエア起動時に、前記選択手段が非反転を選択したことを前記検出手段が検出した場合は、通常のシステム起動を行い、前記選択手段が反転を選択したことを前記検出手段が検出した場合は、前記上位ビット領域を構成する全てのブロックと前記下位ビット領域を構成する全てのブロックについてブロック単位でＳＵＭ値を計算し、前記上位ビット領域のブロックと前記下位ビット領域のブロックのＳＵＭ値が一致しないとき、その下位ビット領域のブロックのデータを上位ビット領域のブロックにコピーする制御手段とを設けたことを特徴とするリカバリー制御装置。
【請求項３】
前記選択手段が反転を選択したことを前記検出手段が検出した場合に、前記制御手段に前記コピーを行わせるか、前記通常のシステム起動を行わせるかをユーザが選択して入力する入力手段を設けたことを特徴とする請求項１記載のリカバリー制御装置。
【請求項４】
前記選択手段が反転を選択したことを前記検出手段が検出した場合に、前記制御手段に前記ＳＵＭ値を用いたコピーを行わせるか、前記通常のシステム起動を行わせるかをユーザが選択して入力させる入力手段を設けたことを特徴とする請求項２記載のリカバリー制御装置。
【請求項５】
前記制御手段は、前記通常のシステム起動をした後、ＣＰＵ処理の負荷が軽い時にバックグラウンドで、前記上位ビット領域を構成する全てのブロックと下位ビット領域を構成する全てのブロックについてブロック単位でＳＵＭ値を計算し、前記上位ビット領域のブロックと前記下位ビット領域のブロックのＳＵＭ値が一致しないとき、内部エラーを記録すると共に、正規のＳＵＭ値を用いて上位ビット領域のブロックと下位ビット領域のブロックのどちらが正しいのかを判別し、正しい方のブロックのデータを誤った方のブロックにコピーすることを特徴とする請求項１又は２記載のリカバリー制御装置。
【請求項６】
前記制御手段は、前記通常のシステム起動時に、前記上位ビット領域と下位ビット領域のバージョンチェックを行い、下位ビット領域のバージョンが上位ビット領域より古いバージョンの場合、バックグラウンドで上位ビット領域のデータを下位ビット領域にコピーすることを特徴とする請求項１から５の何れか１項記載のリカバリー制御装置。
【請求項７】
パワーオンリセット解除後、前記制御手段から一定期間内にアクセスが無かった場合にアドレスを反転させると共に、リセット出力を発生する監視手段を設け、電源ＯＮによるソフトウエア起動時、前記制御手段が前記監視手段にアクセスするようになし、前記一定期間内に前記アクセスが無かった場合に、前記監視手段が前記不揮発メモリの前記最上位アドレス信号を反転させ、リセット出力を発生することにより、システムを起動することを特徴とする請求項１又は２記載のリカバリー制御装置。
【請求項８】
不揮発メモリにブートプログラムを格納し、メモリ空間を論理的に上位ビット領域と下位ビット領域とに２分割して各ビット領域に同一データを格納し、
前記不揮発メモリの最上位アドレス信号を反転・非反転させることにより、前記各ビット領域を論理的に入れ換え可能になし、
前記反転又は非反転の状態を検出するようになし、
電源ＯＮによるソフトウエア起動時に、前記非反転状態を検出した場合は、通常のシステム起動を行い、前記反転状態を検出した場合は、前記下位ビット領域の全データを前記上位ビット領域の全領域にコピーすることを特徴とするリカバリー制御方法。
【請求項９】
不揮発メモリにブートプログラムを格納し、メモリ空間を論理的に上位ビット領域と下位ビット領域とに２分割して各ビット領域に同一データを格納し、
前記不揮発メモリの最上位アドレス信号を反転・非反転させることにより、前記各ビット領域を論理的に入れ換え可能になし、
前記反転又は非反転の状態を検出するようになし、
電源ＯＮによるソフトウエア起動時に、前記非反転状態を検出した場合は、通常のシステム起動を行い、前記反転状態を検出した場合は、前記上位ビット領域を構成する全てのブロックと前記下位ビット領域を構成する全てのブロックについてブロック単位でＳＵＭ値を計算し、前記上位ビット領域のブロックと前記下位ビット領域のブロックのＳＵＭ値が一致しないとき、その下位ビット領域のブロックのデータを上位ビット領域のブロックにコピーすることを特徴とするリカバリー制御方法。
【請求項１０】
前記反転状態を検出した場合に、前記コピーを行わせるか、前記通常のシステム起動を行わせるかをユーザに選択させることを特徴とする請求項８記載のリカバリー制御方法。
【請求項１１】
前記反転状態を選択したことを検出した場合に、前記ＳＵＭ値を用いたコピーを行わせるか、前記通常のシステム起動を行わせるかをユーザに選択させることを特徴とする請求項９記載のリカバリー制御方法。
【請求項１２】
前記通常のシステム起動をした後、ＣＰＵ処理の負荷が軽い時にバックグラウンドで、前記上位ビット領域を構成する全てのブロックと下位ビット領域を構成する全てのブロックについてブロック単位でＳＵＭ値を計算し、前記上位ビット領域のブロックと前記下位ビット領域のブロックのＳＵＭ値が一致しないとき、内部エラーを記録すると共に、正規のＳＵＭ値を用いて上位ビット領域のブロックと下位ビット領域のブロックのどちらが正しいのかを判別し、正しい方のブロックのデータを誤った方のブロックにコピーすることを特徴とする請求項８又は９記載のリカバリー制御方法。
【請求項１３】
前記通常のシステム起動時に、前記上位ビット領域と下位ビット領域のバージョンチェックを行い、下位ビット領域のバージョンが上位ビット領域より古いバージョンの場合、バックグラウンドで上位ビット領域のデータを下位ビット領域にコピーすることを特徴とする請求項８から１２の何れか１項記載のリカバリー制御方法。
【請求項１４】
パワーオンリセット解除後、ＣＰＵから一定期間内にアクセスが無かった場合にアドレスを反転させると共に、リセット出力を発生するようになし、電源ＯＮによるソフトウエア起動時、前記一定期間内に前記アクセスが無かった場合に、前記不揮発メモリの前記最上位アドレス信号を反転させ、リセット出力を発生することにより、システムを起動することを特徴とする請求項８又は９記載のリカバリー制御方法。
【請求項１５】
請求項８から１４の何れか１項に記載されたリカバリー制御方法をコンピュータに実行させるプログラム。
【請求項１６】
請求項１５記載のプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像形成装置等において、フラッシュＲＯＭ等の不揮発メモリに保存されるブートプログラムの破壊時のリカバリー制御装置、制御方法、この制御方法をコンピュータが実行するためのプログラム及びこのプログラムを記憶した記憶媒体に関するものである。
【背景技術】
【０００２】
近年、画像形成装置のコントローラのソフトウェアは、電気的に消去・書換え可能なフラッシュＲＯＭに格納されることがほとんどである。これは、製品の正式ソフトウェアがリリースされ、製品が製造された後でも、バグフィックスや機能拡張等の新たなソフトウェアがリリースされる機会が多く、製品上でソフトウェアの書換えが可能であることの優位性に後押しされて普及したものと考えられる。
なお、本発明によるリカバリー制御装置に関する従来技術が提案されている（例えば、特許文献１，２，３参照）。
【特許文献１】特開平８−６９３７６号公報
【特許文献２】特開２００７−１２２１５１号公報
【特許文献３】特開２００５−３３９２７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、上記のような理由で"お客様先"のようなフィールドにおいても、ソフトウェアの書換え作業が行われる機会が多く、書換え中の停電や不用意な電源ＯＦＦ等により書換えに失敗するという事故が発生することがあった。その場合、書換え失敗によりソフトウェアのブートエリアが壊れてしまうと、以降は電源ＯＮを行っても立ち上げることができず、また、ソフトの再書込みもできなくなる。そのような場合、コントローラボード自体の交換、もしくはソフトウェアを書込んであるフラッシュＲＯＭに貼り替える以外に手段はなく、マシンのデッドタイムの増大に至る結果となる。
また、ソフトの暴走によるブートエリア書換えや、フラッシュＲＯＭ自体のデータ化け等の可能性も皆無ではなく、そのような事態が発生すると、ソフトウェアの書換え失敗と同様、電源ＯＮを行っても立ち上げることができず、また、ソフトの再書込みもできなくなる。また、ユーザでは修復不可能なことが一般的であり、サービスマンによる修復まで機器が使用できなくなり、マシンのデッドタイムの増大に至る結果となる。
【０００４】
特許文献１で提案されるＢＩＯＳの書き換え制御回路は、フラッシュＲＯＭの最上位アドレス信号を反転させる切り替え回路を有し、論理的にフラッシュＲＯＭの空間を２分割する。このようにすることで、ＢＩＯＳの更新時、ＢＩＯＳ基本部が書込まれている方は残したまま、もう一方にＢＩＯＳ基本部の書込みを行うため、仮に書込みに失敗しても元々書込まれていたＢＩＯＳ基本部は残っているので、起動を行うことが可能で、再書込みも可能となる。しかし、２分割したブロックに書込むデータは、ＢＩＯＳ基本部、ＢＩＯＳ拡張部と別体で本発明のように２重化ではなく、本発明とは特に関係はない。
【０００５】
また、特許文献２で提案されるブート制御装置およびブート制御方法は、ブートプログラムが書込まれているフラッシュＲＯＭを２個設け、２つのフラッシュＲＯＭを完全に２重化する。一方のフラッシュＲＯＭからのシステムの起動時、所定の時間が経過しても正常に起動しない場合には、もう一方のフラッシュＲＯＭから起動を開始することで、ブートプログラムが破壊されていても起動することを可能としている。この技術は２つのフラッシュＲＯＭにて２重化しており、また、正常に立ち上がったかどうかの判断や、修復の是非にはユーザの意思が介在せず、本発明とは別の技術である。
特許文献３は、画像形成装置で用いられるカード型メモリに関するものであり、本発明とは関係がない。
本発明は、上記のような問題を解決するもので、ブートプログラム破壊時におけるマシンのデッドタイムを軽減することを目的とする。
【課題を解決するための手段】
【０００６】
請求項１の発明によるリカバリー制御装置は、ブートプログラムを格納し、メモリ空間を論理的に上位ビット領域と下位ビット領域とに２分割し、各ビット領域に同一データを格納する不揮発メモリと、前記不揮発メモリの最上位アドレス信号を反転・非反転させて前記各ビット領域を論理的に入れ換え可能にする選択手段と、前記選択手段の状態を検出する検出手段と、電源ＯＮによるソフトウェア起動時に、前記選択手段が非反転を選択したことを前記検出手段が検出した場合は、通常のシステム起動を行い、前記選択手段が反転を選択したことを前記検出手段が検出した場合は、前記下位ビット領域の全データを前記上位ビット領域の全領域にコピーする制御手段とを設けたことを特徴とすものである。
【０００７】
請求項２の発明によるリカバリー制御装置は、ブートプログラムを格納し、メモリ空間を論理的に上位ビット領域と下位ビット領域とに２分割し、各ビット領域に同一データを格納した不揮発メモリと、前記不揮発メモリの最上位アドレス信号を反転・非反転させて前記各ビット領域を論理的に入れ換え可能にする選択手段と、前記選択手段の状態を検出する検出手段と、電源ＯＮによるソフトウェア起動時に、前記選択手段が非反転を選択したことを前記検出手段が検出した場合は、通常のシステム起動を行い、前記選択手段が反転を選択したことを前記検出手段が検出した場合は、前記上位ビット領域を構成する全てのブロックと前記下位ビット領域を構成する全てのブロックについてブロック単位でＳＵＭ値を計算し、前記上位ビット領域のブロックと前記下位ビット領域のブロックのＳＵＭ値が一致しないとき、その下位ビット領域のブロックのデータを上位ビット領域のブロックにコピーする制御手段とを設けたことを特徴とするものである。
【０００８】
請求項３の発明によるリカバリー制御装置は、請求項１において、前記選択手段が反転を選択したことを前記検出手段が検出した場合に、前記制御手段に前記コピーを行わせるか、前記通常のシステム起動を行わせるかをユーザが選択して入力する入力手段を設けたことを特徴とするものである。
【０００９】
請求項４の発明によるリカバリー制御装置は、請求項２において、前記選択手段が反転を選択したことを前記検出手段が検出した場合に、前記制御手段に前記ＳＵＭ値を用いたコピーを行わせるか、前記通常のシステム起動を行わせるかをユーザが選択して入力させる入力手段を設けたことを特徴とするものである。
【００１０】
請求項５の発明によるリカバリー制御装置は、請求項１又は２において、前記制御手段は、前記通常のシステム起動をした後、ＣＰＵ処理の負荷が軽い時にバックグラウンドで、前記上位ビット領域を構成する全てのブロックと下位ビット領域を構成する全てのブロックについてブロック単位でＳＵＭ値を計算し、前記上位ビット領域のブロックと前記下位ビット領域のブロックのＳＵＭ値が一致しないとき、内部エラーを記録すると共に、正規のＳＵＭ値を用いて上位ビット領域のブロックと下位ビット領域のブロックのどちらが正しいのかを判別し、正しい方のブロックのデータを誤った方のブロックにコピーすることを特徴とするものである。
【００１１】
請求項６の発明によるリカバリー制御装置は、請求項１から５において、前記制御手段は、前記通常のシステム起動時に、前記上位ビット領域と下位ビット領域のバージョンチェックを行い、下位ビット領域のバージョンが上位ビット領域より古いバージョンの場合、バックグラウンドで上位ビット領域のデータを下位ビット領域にコピーすることを特徴とするものである。
【００１２】
請求項７の発明によるリカバリー制御装置は、請求項１又は２において、パワーオンリセット解除後、前記制御手段から一定期間内にアクセスが無かった場合にアドレスを反転させると共に、リセット出力を発生する監視手段を設け、電源ＯＮによるソフトウェア起動時、前記制御手段が前記監視手段にアクセスするようになし、前記一定期間内に前記アクセスが無かった場合に、前記監視手段が前記不揮発メモリの前記最上位アドレス信号を反転させ、リセット出力を発生することにより、システムを起動することを特徴とするものである。
【００１３】
請求項８の発明によるリカバリー制御方法は、不揮発メモリにブートプログラムを格納し、メモリ空間を論理的に上位ビット領域と下位ビット領域とに２分割して各ビット領域に同一データを格納し、前記不揮発メモリの最上位アドレス信号を反転・非反転させることにより、前記各ビット領域を論理的に入れ換え可能になし、前記反転又は非反転の状態を検出するようになし、電源ＯＮによるソフトウェア起動時に、前記非反転状態を検出した場合は、通常のシステム起動を行い、前記反転状態を検出した場合は、前記下位ビット領域の全データを前記上位ビット領域の全領域にコピーすることを特徴とするものである。
【００１４】
請求項９の発明によるリカバリー制御方法は、不揮発メモリにブートプログラムを格納し、メモリ空間を論理的に上位ビット領域と下位ビット領域とに２分割して各ビット領域に同一データを格納し、前記不揮発メモリの最上位アドレス信号を反転・非反転させることにより、前記各ビット領域を論理的に入れ換え可能になし、前記反転又は非反転の状態を検出するようになし、電源ＯＮによるソフトウェア起動時に、前記非反転状態を検出した場合は、通常のシステム起動を行い、前記反転状態を検出した場合は、前記上位ビット領域を構成する全てのブロックと前記下位ビット領域を構成する全てのブロックについてブロック単位でＳＵＭ値を計算し、前記上位ビット領域のブロックと前記下位ビット領域のブロックのＳＵＭ値が一致しないとき、その下位ビット領域のブロックのデータを上位ビット領域のブロックにコピーすることを特徴とするものである。
【００１５】
請求項１０の発明によるリカバリー制御方法は、請求項８において、前記反転状態を検出した場合に、前記コピーを行わせるか、前記通常のシステム起動を行わせるかをユーザに選択させることを特徴とするものである。
【００１６】
請求項１１の発明によるリカバリー制御方法は、請求項９において、前記反転状態を選択したことを検出した場合に、前記ＳＵＭ値を用いたコピーを行わせるか、前記通常のシステム起動を行わせるかをユーザに選択させることを特徴とするものである。
【００１７】
請求項１２の発明によるリカバリー制御方法は、請求項１０において、前記通常のシステム起動をした後、ＣＰＵ処理の負荷が軽い時にバックグラウンドで、前記上位ビット領域を構成する全てのブロックと下位ビット領域を構成する全てのブロックについてブロック単位でＳＵＭ値を計算し、前記上位ビット領域のブロックと前記下位ビット領域のブロックのＳＵＭ値が一致しないとき、内部エラーを記録すると共に、正規のＳＵＭ値を用いて上位ビット領域のブロックと下位ビット領域のブロックのどちらが正しいのかを判別し、正しい方のブロックのデータを誤った方のブロックにコピーすることを特徴とするものである。
【００１８】
請求項１３の発明によるリカバリー制御方法は、請求項８から１２において、前記通常のシステム起動時に、前記上位ビット領域と下位ビット領域のバージョンチェックを行い、下位ビット領域のバージョンが上位ビット領域より古いバージョンの場合、バックグラウンドで上位ビット領域のデータを下位ビット領域にコピーすることを特徴とするものである。
【００１９】
請求項１４の発明によるリカバリー制御方法は、請求項８又は９において、パワーオンリセット解除後、ＣＰＵから一定期間内にアクセスが無かった場合にアドレスを反転させると共に、リセット出力を発生するようになし、電源ＯＮによるソフトウェア起動時、前記一定期間内に前記アクセスが無かった場合に、前記不揮発メモリの前記最上位アドレス信号を反転させ、リセット出力を発生することにより、システムを起動することを特徴とするものである。
【００２０】
請求項１５の発明によるプログラムは請求項８から１４の何れかに記載されたリカバリー制御方法をコンピュータに実行させるものである。
【００２１】
請求項１６の発明によるコンピュータ読み取り可能な記憶媒体は、請求項１５記載のプログラムを記憶したものである。
【発明の効果】
【００２２】
本発明によれば、不揮発メモリを論理的に２分割すると共に、分割した各領域を完全に２重化することにより、ソフトのバージョンアップやメモリのデータ化け等が発生した場合に選択手段を切り替えることにより、破壊されている領域に他方の領域からコピーすることで修復を行うができるので、マシンのデッドタイムを短縮することができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施の形態を図面と共に説明する。
図１は第１の実施の形態によるリカバリー制御装置を示す。
図１において、ＣＰＵ１、スイッチＳＷ及びＮＯＲ回路３は、ブートプログラムが格納された不揮発メモリとしてのフラッシュＲＯＭ２のブート時のリカバリー動作を制御する。この回路は、フラッシュＲＯＭ２の最上位アドレス信号（この例では4MB容量、×16bitデータ幅なので、Ａ２１）を、スイッチＳＷにより反転・非反転を選択できるように構成されている。
【００２４】
図２（ａ）に示すように、フラッシュＲＯＭ２のメモリ空間は、論理的に上位ビット領域と下位ビット領域の２つの領域に分割されている。分割した２つの領域の一方をBoot Block４と称し、他方をRecovery Block５と称するものとする。本実施の形態では、このBoot Block４とRecovery Block５とを完全に同一データとすることで２重化している。
上記構成によれば、フラッシュＲＯＭ２の最上位アドレス信号をスイッチＳＷを切り替えることにより、各ビット領域を論理的に入れ換えることができる。
【００２５】
最上位アドレス信号が反転・非反転どちらの状態であるかをＣＰＵ１に認識させるために、ＣＰＵ１のＩＯポートに、ＳＷからの反転・非反転選択信号BOOT_RESCUEを入力する構成とする。ＳＷオンによるアドレス信号反転時をRescueモード、ＳＷオフによる非反転時をNormalモードとする。
【００２６】
図３は上記構成よる起動時の動作を示すフローチャートである。
主電源ＯＮによる起動時、ブートベクタよりブートが開始される（ステップＳ１、以下ステップ略）。ＳＷがオフの時はフラッシュＲＯＭ２の最上位アドレス信号Ａ２１は非反転なので、Boot Block４よりブートが開始される。ＳＷがオンの時はＡ２１が反転されるため、Recovery Block５よりブートが開始される。ブートが開始されると、ＣＰＵ１は上記選択信号BOOT_RESCUEをリードし、判断する（Ｓ２、Ｓ３）。BOOT_RESCUEが１であれば、通常のシステム起動（Normalモード）であると判断し、通常のシステム起動処理を実行する。
【００２７】
BOOT_RESCUEが０の場合は、ソフトの書き換えミス等、フラッシュＲＯＭ２に何らかの問題が発生したので、ユーザやサービスマン等がＳＷを操作してRecoveryモードを要求していると判断する。この場合はRecovery Block５のデータをBoot Block４に全てコピーする（Ｓ４）。コピーが正常に終了すると、Boot Block４の修復が完了する。そこでＳＷをオフし、電源ＯＮにより正常な起動が実行される。
図２（ｂ）にＳＷオン・オフによるBoot Block４とRecovery Block５の関係を示す。
【００２８】
本実施の形態によれば、フラッシュＲＯＭ２のソフトウェアの書換え失敗、ソフトウェアの暴走、フラッシュＲＯＭ２自体のデータ化け等によってBootエリアが破壊された時は、ユーザがＳＷを操作することにより、自動的にRecovery Block５のデータがBoot Block４にコピーされるので、破壊されたBootエリアを自動的にリカバリーすることができる。このため、サービスマンを呼んで対応を待つ間のデッドタイムを短縮することができる。
【００２９】
図４は第２の実施の形態による起動時の動作を示すフローチャートである。尚、回路構成は図１と同じである。
このフローチャートにおいても、主電源ＯＮによるブート時（Ｓ１１）に、BOOT_RESCUEをリードし、NormalモードかRecoveryモードかを判断する（Ｓ１２、Ｓ１３）。第１の実施の形態と同様に、Normalモードであれば、通常のシステム起動を行い、Recoveryモードであれば、Boot Block４のリカバリー処理要求と判断する。
【００３０】
フラッシュＲＯＭ２は複数の細かいブロックで構成され、ブロック単位で消去、書換えが可能に構成されている。本実施の形態では、第１の実施の形態のようにRecovery Block５の全領域コピーではなく、細かいブロック単位でコピーを行う。
即ち、BOOT_RESCUE=0のとき（Ｓ１４）、Boot Block４、Recovery Block５の各先頭ブロックから各ブロックのＳＵＭ値をそれぞれ計算して（Ｓ１５）、比較する（Ｓ１６）。不一致が発生した場合は、Recovery Block５のそのブロックのデータをBoot Block４の対応するブロックにコピーする（Ｓ１７）。全てのブロックに対してBoot Block４とRecovery Block５について同様の比較を行い（Ｓ１８、Ｓ１９、Ｓ１５）、最後のブロックまで処理が終了すると、Boot Block４のリカバリー処理を完了する。そこでＳＷをオフし、電源ＯＮにより正常に起動することができる。
【００３１】
本実施の形態によれば、さらに全領域のコピーではなく、破壊されたブロックのみコピーを行うことにより、第１の実施の形態の動作より短い所要時間でBootエリアが自動的にリカバリーされるため、サービスマンを呼んで対応を待つ間のデッドタイムをさらに短縮することができる。
【００３２】
図５は第３の実施の形態による起動時の動作を示すフローチャートである。回路構成は図１と同じである。
このフローチャートにおいても、第１，２の実施の形態と同様に、主電源ＯＮによるブート時にBOOT_RESCUEをリードし、NormalモードかRecoveryモードかを判断する（Ｓ２１、Ｓ２２、Ｓ２３）。Normalモードであれば通常のシステム起動を行う。
【００３３】
Recoveryモードであれば、Boot Block４のリカバリー処理要求と判断する。リカバリー処理としては、まずユーザに処理の選択を入力させる。即ち、Boot Block４のリカバリーを行うか、それとも通常のシステム起動を行うかを選択させる（Ｓ２４）。Boot Block４のリカバリー処理を要求されなかった場合は（Ｓ２５、Ｎｏ）、通常のシステム起動を行い、機器を使用可能な状態に立ち上げる。このような要求は、時間のかかるリカバリー処理ではなく、とにかく早く機器を使用したいというユーザによる要求や、後にクレームとしてメーカに挙げるため異常状態を保存をしつつ、機器は使用したいというユーザによる要求が考えられる。
【００３４】
一方、Boot Block４のリカバリー処理を要求された場合は（Ｓ２５、Ｙｅｓ）、Recovery Block５のデータをBoot Block４にコピーする（Ｓ２６）。正常にコピーが終了するとBoot Block４の修復を完了し、ＳＷをオフし電源ＯＮにより正常に起動される。
【００３５】
本実施の形態によれば、第１の実施の形態の効果に加え、さらに、リカバリーを行うよりとにかくすぐに機器を使用したいというユーザの要求や、後にクレームとしてメーカに挙げるために異常状態を保存しつつ、機器は使用したいというユーザの要求に対応することができる。
【００３６】
図６は第４の実施の形態による起動時の動作を示すフローチャートである。回路構成は図１と同じである。
このフローチャートにおいても、第１〜３の実施の形態と同様に、主電源ＯＮによるブート時にBOOT_RESCUEをリードし、NormalモードかRecoveryモードかを判断する（Ｓ３１、Ｓ３２、Ｓ３３）。Normalモードであれば通常のシステム起動を行う。
【００３７】
Recoveryモードであれば、Boot Block４のリカバリー処理要求と判断する。リカバリー処理としては、ユーザに処理の選択を入力させる。即ち、Boot Block４のリカバリーを行うか、それとも通常のシステム起動を行うかを選択させる（Ｓ３４）。Boot Block４のリカバリー処理を要求されなかった場合は（Ｓ３３、Ｎｏ）、通常のシステム起動を行い、機器を使用可能な状態に立ち上げる。
【００３８】
一方、Boot Block４のリカバリー処理を要求された場合は（Ｓ３３、Ｙｅｓ）、第２の実施の形態とリカバリー処理と同様、Recovery Blockの全領域コピーではなく、細かいブロック単位でコピーを行う。即ち、BOOT_RESCUE=0のとき（Ｓ３６）、Boot Block４、Recovery Block５の各先頭ブロックから各ブロックのＳＵＭ値をそれぞれ計算して（Ｓ３７）、比較する（Ｓ３８）。不一致が発生した場合は、Recovery Block５のそのブロックのデータをBoot Block４の対応するブロックにコピーする（Ｓ３９）。全てのブロックに対してBoot Block４とRecovery Block５について同様の比較を行い（Ｓ４０、Ｓ４１、Ｓ３７）、最後のブロックまで処理が終了すると、Boot Block４のリカバリー処理は完了する。そこでＳＷをオフし、電源ＯＮにより正常に起動することができる。
【００３９】
本実施の形態によれば、第３の実施の形態の効果に加え、さらに全領域のコピーではなく、破壊されたブロックのみコピーを行うことにより、第３の実施の形態による動作より短い所要時間でBootエリアが自動的にリカバリーされるため、デッドタイムを短縮することができる。
【００４０】
図７は第５の実施の形態による起動時の動作を示すフローチャートである。回路構成は図１と同じである。
このフローチャートにおいても、第１〜４の実施の形態と同様に、主電源ＯＮによるブート時にBOOT_RESCUEをリードし、NormalモードかRecoveryモードかを判断する（Ｓ５１、Ｓ２、Ｓ５３）。そして、Recoveryモードであると判断した場合は、上記第１〜４の実施の形態の何れかに示すリカバリー処理を行う。
【００４１】
一方、Normalモードであると判断した場合、通常のシステム起動を行い、機器を使用可能な状態に起動した後、ＣＰＵ１の処理の負荷が軽い時にバックグラウンドでBoot Block、Recovery Blockの整合性をチェックする。
【００４２】
即ち、BOOT_RESCUE=0のとき（Ｓ５４）、両ブロックの先頭ブロックよりＳＵＭ値を計算し比較する（Ｓ５６）。ＳＵＭ値が一致した場合は次のブロックに処理が移行し（Ｓ５７）、ＳＵＭ値が一致しなかった場合は内部エラーを記録する（Ｓ５８）。エラーの記録は、電源ＯＦＦ／ＯＮしても消失されないような不揮発性メモリ（NVRAM）や、ハードディスクへの書込みを行うことにより、後にサービスマン等により両ブロックの不一致が発生し、リカバリー処理が行われたことを認知することができる。
【００４３】
エラーを記録後、Boot Block４、Recovery Block５のリカバリー処理を開始する。まず、当該ブロックの正規のＳＵＭ値を読み出す（Ｓ５９）。ここで、各ブロック毎に正規のＳＵＭ値がBoot Block４、Recovery Block５のそれぞれの領域に記録されていることが前提である。次に、読み出した正規のＳＵＭ値と先に計算したＳＵＭ値とをBoot Block４、Recovery Block５の順に比較し、計算したＳＵＭ値と読み出した正規のＳＵＭ値が一致した方を他方のブロックにコピーする（Ｓ６０、Ｓ６１又はＳ６２、Ｓ６３）。Boot Block４、Recovery Block５共に計算したＳＵＭ値と読み出した正規のＳＵＭ値が不一致の場合は（Ｓ６２、Ｎｏ）、エラー発生を表示し（Ｓ６４）、処理を終了する。以上の動作は、Ｓ５７、Ｓ６５、Ｓ５５、Ｓ５６により最後のブロックまで行われる。
【００４４】
本実施の形態によれば、ソフトウェアの暴走やフラッシュＲＯＭ自体のデータ化け等の発生がRecovery Block５や、Boot Block４であってもBootエリア外に発生した場合にも、自動的に破壊されたブロックの修復が行われるため、デッドタイムを短縮することができる。
【００４５】
図８は第６の実施の形態による起動時の動作を示すフローチャートである。回路構成は図１と同じである。
第１〜５の実施の形態と同様に、主電源ＯＮによるブート時にBOOT_RESCUEをリードし、NormalモードかRecoveryモードかを判断し（Ｓ７１、Ｓ７２、Ｓ７３）、Recoveryモードであると判断した場合、第１〜４の実施の形態の何れかのリカバリー処理を行う。
【００４６】
一方、Normalモードであると判断した場合は、通常のシステム起動を行い、機器を使用可能な状態に起動した後、ＣＰＵ１の処理の負荷が軽い時にバックグラウンドでBoot Block４、Recovery Block５に書込まれているソフトウェアのバージョンを読出し（Ｓ７４）、比較する（Ｓ７５）。Boot Block４に書込まれているソフトバージョンとRecovery Blockに書込まれているソフトバージョンが一致している場合は、Recovery Blockの更新処理は不要と判断し、通常の処理を継続する。
【００４７】
一方、Recovery Block５に書込まれているソフトバージョンの方がBoot Blockに書込まれているソフトバージョンよりも古い場合は、Recovery Block５の更新処理が必要と判断し、Boot Block４の全領域をRecovery Blockにコピーする（Ｓ７６）。コピーが正常に終了すると通常の処理を継続する。
上記の制御を行うことで、サービスマン等によりソフトのバージョンアップ作業においてBoot Block、Recovery Blockを意識する必要が排除され、また、サービスマンによるソフトのバージョンアップはBoot Blockのみに処置すればよく、作業時間を短縮することができる。
【００４８】
本実施の形態によれば、フラッシュＲＯＭを上位・下位に完全に２重化する場合、２つのブロックでバージョンの不一致が発生した場合や、サービスマンによるソフトバージョンアップ時に２重化している両方のブロックをバージョンアップしなければならず、作業時間の増大を招くという問題が発生するが、２重化している二つのブロックにバージョン不一致が発生しても自動的に一致させ、また、サービスマンがバージョンアップ時に行う作業をBoot Blockのみのバージョンアップとすることが可能となり、作業時間の短縮を図ることができる。
【００４９】
図９は第７の実施の形態によるブート制御装置を示すブロック図であり、図１と対応する部分には同一番号を付して重複する説明は省略する。
本実施の形態は、図１の回路構成に監視回路６を追加したものである。監視回路６は、パワーオンリセット回路７によるパワーオンリセット解除後、ＣＰＵ１から一定期間アクセスがなければフラッシュＲＯＭ２への最上位アドレスを反転させると共に、リセット出力を行うものである。
【００５０】
図１０に監視回路の構成例を示す。
この監視回路７は、フラッシュＲＯＭ２への最上位アドレス信号を反転／非反転させるアドレス反転回路（ADDRESS反転回路）８、タイマ（TIMER）９、それらを制御する制御部１０と、監視回路７自体をリセットするパワーオンリセット器１１からなる。inv／noninv#信号はアドレスの反転／非反転を制御する信号で、初期値はnoninv（非反転）である。また、start信号はタイマの起動信号、clear信号は、タイマのストップ#とクリア、timeup信号は所定の時間が経過したことを示す信号である。
【００５１】
上記構成による監視回路６の動作について説明する。
パワーオンリセット回路６によるパワーオンリセット解除後、タイマ９を起動する。タイマ８からtimeup信号がアサートする前にＣＰＵ１からACCESS信号のアサートがあった場合は、タイマ９を停止し、監視回路６の動作は停止する。
【００５２】
一方、タイマ９からtimeup信号がアサートするまでに、ＣＰＵ１からのACCESS信号アサートがなかった場合は、clear信号をアサートしてタイマ８を停止・クリアし、ADDRESS反転回路８へのinv／noninv#信号を制御（反転）することにより、フラッシュＲＯＭ２への最上位アドレス信号を反転すると同時にリセット信号をＣＰＵ１、監視回路６に出力する。このリセット出力は、システムのパワーオンリセット回路７にワイヤードＯＲしているため、監視回路６のリセット出力解除後、最上位アドレス信号を反転させた状態で起動を開始する。
【００５３】
以降の監視回路６の動作としては、システムのパワーオンリセット解除後と同様にタイマ９を起動し、time up前にACCESS信号のアサートがあった場合は、タイマ８を停止し、監視回路６の動作は終了する。また、time up前にACCESS信号のアサートがなかった場合についても、既にアドレス非反転と反転の両方を行っているため、監視回路６の動作を停止する。このとき、アドレスの反転・非反転共に正常に起動しなかったことを示すために、ＬＥＤ点灯等の出力信号を設けてもよい。
【００５４】
図１１は本実施の形態の動作を示すフローチャートである。
主電源ＯＮにてシステムのブートが開始され（Ｓ８１）、各デバイスの初期設定等が行われる。その後、監視回路７のACCESSポートに接続されているＣＰＵ１のＩＯポート２から出力されるACCESS信号をアサートする（Ｓ８２）。このような処理を行うことで、システムが正常に起動したことを監視回路６に認識させる。続いてBOOT_RESCUEをリードする（Ｓ８３）。ここでBOOT_RESCUEが０であれば（Ｓ８２、Ｎｏ）、Normalモードであると判断し、通常のシステム起動処理が行われる。監視回路６はACCESSポートへの信号アサートにより既に停止しており、システムは正常な起動状態となる。
【００５５】
BOOT_RESCUEが１であれば、既に監視回路６により一度アドレスを反転させて再起動が行われていることになり、Boot Block４にブートプログラムの破壊等、問題が発生していることになる。ソフト処理としては、特に監視回路６の挙動を意識する必要は無く、BOOT_RESCUEが１であることからRecoveryモードであると判断し、第１〜４の実施の形態の何れかのリカバリー処理を行えばよい（Ｓ８４）。
【００５６】
本実施の形態によれば、第１〜４の実施の形態で述べたBootエリアの破壊時、ユーザがスイッチＳＷを操作する必要がなく、自動的にRecoveryモードとして再起動することができるので、ユーザの負荷を低減させることができる。
【００５７】
本実施の形態によれば、パワーオンリセット入力とリセット出力、タイマ、アドレス反転回路とアドレス反転・非反転選択信号から成り、パワーオンリセット解除後、一定期間内にアクセスが無かった場合にアドレスを反転させリセット出力を発生する監視回路を６を設け、電源ＯＮによるソフトウェア起動時、必ず監視回路にアクセスする制御とすることで、何らかの問題でシステムが正常に起動しなかった場合、一定期間内に監視回路にアクセスでなくなり、自動的に監視回路がフラッシュＲＯＭの最上位アドレス信号を反転させ、リセット出力を発生させることでシステムを起動するように構成したので、第１〜４の実施の形態で述べたBootエリアの破壊時、ユーザがスイッチＳＷを操作する必要がなく、自動的にRecoveryモードとして再起動することができるので、ユーザの負荷を低減させることができる。
【００５８】
尚、上述した各実施の形態における各フローチャートに示す処理を、ＣＰＵ１が実行するためのプログラムは本発明によるプログラムを構成する。また、このプログラムを記録する記憶媒体は、本発明によるコンピュータ読み取り可能な記憶媒体を構成する。この記憶媒体としては、半導体記憶装置や光学的及び／又は磁気的な記憶装置等を用いることができる。このようなプログラム及び記憶媒体を、前述した実施の形態とは異なる構成の装置やシステム等で用い、そこのＣＰＵで上記プログラムを実行させることにより、本発明と実質的に同じ効果を得ることができる。
【００５９】
上記の実施形態によれば、さらに破壊されている全領域コピーするのではなく、破壊された一部をコピーすることにより、マシンのデッドタイムをさらに短縮することできる。
【００６０】
さらに、不揮発メモリのデータの破壊時、電源ＯＮによるソフトウェア起動時に、前記非反転状態を検出した場合は、通常のシステム起動を行い、前記反転状態を検出した場合は修復するか、それともそのままシステムを起動するかをユーザに選択させるようにしたので、時間のかかるリカバリーよりもすぐに機器を使用したいユーザの要求に応えることができる。
【００６１】
ユーザが修復を選択した場合に要する時間をさらに短くすることができ、マシンのデッドタイムをさらに短縮することができる。
【００６２】
通常に起動した場合でも２重化した両領域の比較を行うことで、書込まれているソフトの整合性をチェックすることができ不揮発メモリのデータ化け等が発生した場合でも自動的に修復が可能となり、システムの信頼性が向上する。
【００６３】
さらに通常に起動した場合に２重化した両ビット領域に書込まれているソフトのバージョンをチェックし、自動的に両ブロックのソフトバージョンを合わせるように処理されることで、サービスマンによるソフトのバージョンアップ作業は片方の領域のみに行うことで済み、サービスマンの作業時間の短縮を図ることができる。
【００６４】
さらに正常に起動しなかった場合に最上位アドレスを反転させ、リセットを発生させる監視手段を設けることで、何らかの問題でシステムが正常に起動しなかった場合でも、２重化した領域から自動的に起動するため、ユーザの負荷を低減させることができる。
【００６５】
また、本発明によるリカバリー制御方法をコンピュータを用いて行うことができる。
【図面の簡単な説明】
【００６６】
【図１】本発明の第１〜第６の実施の形態によるリカバリー制御装置を示す回路図である。
【図２】フラッシュＲＯＭの実施の形態を示す構成図である。
【図３】第１の実施の形態の動作を示すフローチャートである。
【図４】第２の実施の形態の動作を示すフローチャートである。
【図５】第３の実施の形態の動作を示すフローチャートである。
【図６】第４の実施の形態の動作を示すフローチャートである。
【図７】第５の実施の形態の動作を示すフローチャートである。
【図８】第６の実施の形態の動作を示すフローチャートである。
【図９】本発明の第７の実施の形態によるリカバリー制御装置を示す回路図である。
【図１０】図９における監視回路を示す構成図である。
【図１１】第７の実施の形態の動作を示すフローチャートである。
【符号の説明】
【００６７】
１    ＣＰＵ
２    フラッシュＲＯＭ
３    ＮＯＲ回路
ＳＷ    スイッチ
６    パワーオンリセット回路
７    監視回路
８    ADDRESS反転回路
９    タイマ
【図１】
0005072092.tif 000002
【図２】
0005072092.tif 000003
【図３】
0005072092.tif 000004
【図４】
0005072092.tif 000005
【図５】
0005072092.tif 000006
【図６】
0005072092.tif 000007
【図７】
0005072092.tif 000008
【図８】
0005072092.tif 000009
【図９】
0005072092.tif 000010
【図１０】
0005072092.tif 000011
【図１１】
0005072092.tif 000012