(57)【要約】【課題】記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアに破損が起こった場合でも、自装置を正常に機能させることが可能な、ファームウェアの書き換え方法、及び、ファームウェアの読み込み方法を提供する。【解決手段】書き換えデータに含まれるカーネルプログラムのデータによってＦｌａｓＲＯＭ８の第１カーネル領域Ｆ−Ｋ１及び第２カーネル領域Ｆ−Ｋ２を書き換え、第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラムをＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１に読み込みつつサムチェックを行い、当該カーネルプログラムが正常でない場合には、第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムを第１カーネル領域ＳＤ−Ｋ１に読み込む。【選択図】図２
2008040924.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアの書き換えデータによる書き換え方法であって、
前記書き換えデータに含まれるカーネルプログラムを前記記憶装置の記憶領域の第１カーネル領域に書き込むステップ（Ａ）と、
前記書き換えデータに含まれるカーネルプログラムを前記記憶装置の記憶領域の第２カーネル領域に書き込むステップ（Ｂ）とを含むことを特徴とするファームウェアの書き換え方法。
【請求項２】
前記記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムが正常であるか否かを判断するステップ（Ｃ）と、
前記記憶装置の記憶領域の第２カーネル領域に記憶されているカーネルプログラムが正常であるか否かを判断するステップ（Ｄ）とをさらに含み、
前記記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムが正常でない場合に、前記ステップ（Ｂ）に先立って前記ステップ（Ａ）を実行し、前記記憶装置の記憶領域の第２カーネル領域に記憶されているカーネルプログラムが正常でない場合に、前記ステップ（Ａ）に先立って前記ステップ（Ｂ）を実行することを特徴とする請求項１に記載のファームウェアの書き換え方法。
【請求項３】
前記ステップ（Ｃ）及び前記ステップ（Ｄ）において、カーネルプログラムに含まれる誤り検出データに基づいてカーネルプログラムが正常であるか否かを判断することを特徴とする請求項２に記載のファームウェアの書き換え方法。
【請求項４】
副記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアの主記憶装置への読み込み方法であって、
前記副記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムを前記主記憶装置に読み込みつつ、当該カーネルプログラムに含まれる誤り検出データに基づいて当該カーネルプログラムが正常であるか否かを判断するステップ（Ａ）と、
前記ステップ（Ａ）において、前記副記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムが正常でないと判断した場合に、前記副記憶装置の記憶領域の第２カーネル領域に記憶されているカーネルプログラムを前記主記憶装置に読み込むステップ（Ｂ）とを備えることを特徴とするファームウェアの読み込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファームウェアの書き換え方法、及び、ファームウェアの読み込み方法に関し、詳しくは、記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアの書き換え方法、及び、読み込み方法に関するものである。
【背景技術】
【０００２】
自装置のファームウェアを、ファームウェアのデータの種類別に分割してＦｌａｓｈＲＯＭの個々の記憶領域にそれぞれ記憶し、ファームウェアのデータの種類の単位で、ＦｌａｓｈＲＯＭに記憶されているファームウェアを書き換えてバージョンアップするデータ処理装置が発明されている（例えば、特許文献１）。特許文献１に係るデータ処理装置では、データの種類別に分割されたファームウェアのそれぞれに誤り検出データを埋め込み、この誤り検出データを使用してサムチェックを行うことにより、書き換えたファームウェアの誤り検出をファームウェアのデータの種類の単位で行うことができる。
【特許文献１】特開２００５−２７５８４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、特許文献１に記載のデータ処理装置は、書き換えたファームウェアの誤りを検出するのみであり、ファームウェアの誤りに対処することができなかった。したがって、例えば、特許文献１に記載のデータ処理装置を備えた複合機において、データ処理装置のファームウェアの書き換え中の電源断などによってファームウェアのカーネルプログラムに破損（誤り）が起こった場合には、当該データ処理装置を使用する複合機の機能は動作不能となり、機能の復旧のためには複合機のサービスマンに頼るほかなかった。
【０００４】
本発明は、かかる課題に鑑みてなされたものであり、記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアに破損が起こった場合でも、自装置を正常に機能させることが可能な、ファームウェアの書き換え方法、及び、ファームウェアの読み込み方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、請求項１のファームウェアの書き換え方法は、記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアの書き換えデータによる書き換え方法であって、前記書き換えデータに含まれるカーネルプログラムを前記記憶装置の記憶領域の第１カーネル領域に書き込むステップ（Ａ）と、前記書き換えデータに含まれるカーネルプログラムを前記記憶装置の記憶領域の第２カーネル領域に書き込むステップ（Ｂ）とを含むことを特徴としている。
【０００６】
このファームウェアの書き換え方法においては、記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアの書き換えデータによる書き換え方法であって、ステップ（Ａ）で、書き換えデータに含まれるカーネルプログラムを記憶装置の記憶領域の第１カーネル領域に書き込み、ステップ（Ｂ）で、書き換えデータに含まれるカーネルプログラムを記憶装置の記憶領域の第２カーネル領域に書き込む。
【０００７】
このようなファームウェアの書き換え方法によれば、記憶装置の記憶領域の第１カーネル領域と第２カーネル領域が個別に書き換えられるので、書き換えデータによるカーネルプログラムの書き換え中に停電などが起こり、当該ファームウェア（カーネルプログラム）によって機能する装置に電源断が発生してカーネルプログラムが破損した場合でも、第１カーネル領域のカーネルプログラムと第２カーネル領域のカーネルプログラムとが一度に破損することがないので、当該ファームウェア（カーネルプログラム）によって機能する装置を、第１カーネル領域に記憶されているカーネルプログラムと第２カーネル領域に記憶されているプログラムとのうちの正常なカーネルプログラムによって正常に機能させることができる。
【０００８】
また、記憶装置の記憶領域に重複して書き込まれるのは、カーネルプログラムのみである。したがって、ファームウェアの全体を一括して書き込まねばならず、電源断に対処するために、ファームウェアの全体を重複して記憶装置の記憶領域に書き込む方法に比べて、書込みに要する時間を短縮し、記憶装置の記憶資源を節約することができる。
【０００９】
請求項２に記載のファームウェアの書き換え方法は、請求項１に記載のファームウェアの書き換え方法であって、前記記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムが正常であるか否かを判断するステップ（Ｃ）と、前記記憶装置の記憶領域の第２カーネル領域に記憶されているカーネルプログラムが正常であるか否かを判断するステップ（Ｄ）とをさらに含み、前記記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムが正常でない場合に、前記ステップ（Ｂ）に先立って前記ステップ（Ａ）を実行し、前記記憶装置の記憶領域の第２カーネル領域に記憶されているカーネルプログラムが正常でない場合に、前記ステップ（Ａ）に先立って前記ステップ（Ｂ）を実行することを特徴としている。
【００１０】
このファームウェアの書き換え方法においては、ステップ（Ｃ）で記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムが正常であるか否かを判断し、ステップ（Ｄ）で記憶装置の記憶領域の第２カーネル領域に記憶されているカーネルプログラムが正常であるか否かを判断する。そして、記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムが正常でない場合に、ステップ（Ｂ）に先立ってステップ（Ａ）を実行し、記憶装置の記憶領域の第２カーネルプログラムに記憶されているカーネルプログラムが正常でない場合に、ステップ（Ａ）に先立ってステップ（Ｂ）を実行する。
【００１１】
このようなファームウェアの書き換え方法によれば、第１カーネル領域に記憶されているカーネルプログラムが電源断による破損などにより正常でない場合には、第２カーネル領域に記憶されているカーネルプログラムに先立って第１カーネル領域に記憶されているカーネルプログラムの書き換えを行い、第２カーネル領域に記憶されているカーネルプログラムが正常でない場合には、第１カーネル領域に記憶されているカーネルプログラムに先立って第２カーネル領域に記憶されているカーネルプログラムの書き換えを行う。したがって、第１カーネル領域のカーネルプログラムと第２カーネル領域のカーネルプログラムとのどちらかが正常でない状態で、第１カーネル領域のカーネルプログラム及び第２カーネル領域のカーネルプログラムの書き換えを行う場合に電源断などが再び発生した場合でも、第１カーネル領域又は第２カーネル領域のどちらかに正常なカーネルプログラムが存在することになるので、当該正常なカーネルプログラムを実行することによって当該ファームウェア（カーネルプログラム）によって機能する装置を正常に機能させることができる。
【００１２】
請求項３に記載のファームウェアの書き換え方法は、請求項２に記載のファームウェアの書き換え方法であって、前記ステップ（Ｃ）及び前記ステップ（Ｄ）において、カーネルプログラムに含まれる誤り検出データに基づいてカーネルプログラムが正常であるか否かを判断することを特徴としている。
【００１３】
このファームウェアの書き換え方法においては、ステップ（Ｃ）及びステップ（Ｄ）において、カーネルプログラムに含まれる誤り検出データに基づいてカーネルプログラムが正常であるか否かが判断される。したがって、カーネルプログラムのデータのみを用いて簡便にカーネルプログラムが正常であるか否かを判断することができる。
【００１４】
上記課題を達成するために、請求項４に記載のファームウェアの読み込み方法は、副記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアの主記憶装置への読み込み方法であって、前記副記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムを前記主記憶装置に読み込みつつ、当該カーネルプログラムに含まれる誤り検出データに基づいて当該カーネルプログラムが正常であるか否かを判断するステップ（Ａ）と、前記ステップ（Ａ）において、前記副記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムが正常でないと判断した場合に、前記副記憶装置の記憶領域の第２カーネル領域に記憶されているカーネルプログラムを前記主記憶装置に読み込むステップ（Ｂ）とを備えることを特徴としている。
【００１５】
このファームウェアの読み込み方法においては、ステップ（Ａ）で、ＦｌａｓｈＲＯＭなどの副記憶装置の記憶領域の第１カーネル領域に記載されているカーネルプログラムをＳＤＲＡＭなどの主記憶装置に読み込みつつ、当該カーネルプログラムに含まれる誤り検出データに基づいて当該カーネルプログラムが正常であるか否かを判断し、ステップ（Ｂ）で、ステップ（Ａ）において、副記憶装置の記憶領域の第１カーネル領域に記載されているカーネルプログラムが正常でないと判断した場合に、副記憶装置の記憶領域の第２カーネル領域に記憶されているカーネルプログラムを主記憶装置に読み込む。
【００１６】
このようなファームウェアの読み込み方法によれば、副記憶装置の記憶領域の第１カーネル領域に記憶されているカーネルプログラムと第２カーネル領域に記憶されているカーネルプログラムとのうち、正常なカーネルプログラムが主記憶装置に読み込まれる。したがって、ファームウェアの書き換え中に、当該ファームウェアによって機能する装置に電源断などが起こり、副記憶装置の記憶領域の第１カーネル領域のカーネルプログラム又は第２カーネル領域のカーネルプログラムのどちらかが破損などして正常でない場合でも、当該ファームウェア（カーネルプログラム）によって機能する装置を正常に機能させることができる。
【００１７】
また、副記憶装置の記憶領域の第１カーネル領域及び第２カーネル領域に記憶されているカーネルプログラムを読み出して、主記憶装置の記憶領域の第１カーネル領域又は第２カーネル領域に書き込みつつ、順次にサムチェックのための演算を行うので、カーネルプログラムの読み込みにかかる時間を短縮することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明のファームウェアの書き換え方法、及び、ファームウェアの読み込み方法を実行するデータ処理装置を例として、本発明の実施の形態について説明する。図１に示すように、データ処理装置１は、コピー機能、スキャナ機能、ＰＣプリント機能などを備える複合機２の本体に組み込まれており、複合機２の本体、及び、ネットワークインターフェースコントローラ３と通信可能に接続されている。データ処理装置１は、ＬＡＮ４上のクライアントＰＣ５（Personal Computer）から送信された印刷用のＰＤＬ（Page Description Language）データを、ネットワークインターフェースコントローラ３を介して受信し、受信したＰＤＬデータに所定のデータ処理を行って複合機２の本体に転送する。
【００１９】
クライアントＰＣ５は、一般的な機能を備えたＰＣであり、ユーザが作成した文書などのデータをＰＤＬデータに変換し、当該ＰＤＬデータを、ＬＡＮ４を介して複合機２のネットワークインターフェースコントローラ３に送信する。なお、ここで使用されるＰＤＬ（ページ記述言語）は特に限定されるものではないが、例えばＰＣＬ（Printer Control Language）などを用いることができる。また、後述するが、データ処理装置１が自装置１のファームウェアをアップデートするための書き換えデータもこのクライアントＰＣ５から送信される。
【００２０】
ネットワークインターフェースコントローラ３は、複合機２の本体がＬＡＮ４上のクライアントＰＣ５との間で各種データを送受信する際に、そのデータの送受信を制御するものである。具体的には、クライアントＰＣ５から受信したＰＤＬデータや書き換えデータをデータ処理装置１に転送し、複合機２で読取られた原稿の画像データなどをＬＡＮ４上のクライアントＰＣ５に送信する。
【００２１】
一方、ネットワークインターフェースコントローラ３から転送されたＰＤＬデータに所定のデータ処理を行って複合機２の本体に転送するデータ処理装置１は、図示するように、制御部（ＭＰＵ：Microprocessing Unit）６、インターフェース回路７、ＦｌａｓｈＲＯＭ（Read Only Memory）８、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）９、及び、データ処理回路１０を備えたものであって、各部６乃至１０は、バス１１によって通信可能に接続されている。
【００２２】
制御部６は、ＦｌａｓｈＲＯＭ８に記憶されているファームウェアの各種プログラムに従って、このデータ処理装置１を構成する各部を制御する。インターフェース回路７は、ネットワークインターフェースコントローラ３から転送されたＰＤＬデータや書き換えデータを受信するものである。また、インターフェース回路７が受信したＰＤＬデータは、データ処理回路１０において所定のデータ処理が施された後に複合機２の本体に転送される。
【００２３】
ＦｌａｓｈＲＯＭ８は、制御部６によってデータ処理装置１の各部が制御されるためのファームウェアを記憶するフラッシュメモリであり、図２に示すようにブート領域Ｆ−Ｂ、第１カーネル領域Ｆ−Ｋ１、第２カーネル領域Ｆ−Ｋ２、一般プログラム領域Ｆ−Ｐ、及び、フォント領域Ｆ−Ｆの５つの記憶領域に論理的に分割されている。ＳＤＲＡＭ９は、制御部６の主メモリ、ワークエリアなどとして機能し、プログラム領域ＳＤ−Ｐ及び、データ領域ＳＤ−Ｄの２つの記憶領域に論理的に分割されている。
【００２４】
ＦｌａｓｈＲＯＭ８のブート領域Ｆ−Ｂは、システム起動時に実行されるブートプログラムを記憶している記憶領域である。第１カーネル領域Ｆ−Ｋ１及び、第２カーネル領域Ｆ−Ｋ２は、カーネルプログラムを記憶している記憶領域である。カーネルプログラムには、自装置１と複合機２の本体との間の通信の初期化、自己書き換え（バージョンアップ）、ジョブ管理、データ管理、タスク管理などを行うための制御プログラムや初期パラメータ、受信した書き換えデータによりＦｌａｓｈＲＯＭ８のファームウェアをアップデート（書き換え）するための書き換えコード、ファームウェアをアップデートした後に書き換えが正常に行われたか否かを検査するためのデータチェックコードなどが含まれる。一般プログラム領域Ｆ−Ｐは、データ処理装置１が各種処理動作を行うための一般プログラムを記憶している記憶領域であり、例えば、インターフェース回路７が受信したＰＤＬデータに所定のデータ処理を行うためのデータ処理プログラムなどを記憶している。フォント領域Ｆ−Ｆは、フォントデータを記憶している記憶領域である。
【００２５】
また、ＦｌａｓｈＲＯＭ８のこれらの各記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆのサイズは、それぞれ常に一定の値となるように設定されており、ここではブート領域Ｆ−Ｂが８ｋＢ（キロバイト）、第１カーネル領域Ｆ−Ｋ１、及び、第２カーネル領域Ｆ−Ｋ２がそれぞれ２４８ｋＢ、一般プログラム領域Ｆ−Ｐが２８１６ｋＢ、フォント領域Ｆ−Ｆが５１２０ｋＢに設定されている。このように、データ処理装置１のファームウェアは、データの種類別に分割されて異なるサイズの記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆにそれぞれ記憶されているが、これらの各記憶領域の全体にプログラムやフォントデータが記憶されているわけではなく、プログラムやフォントデータに適当なデータサイズの空きデータ、すなわち１６進数で「００」又は「ＦＦ」の値を持つ空きデータが付加されたデータがそれぞれ対応する記憶領域に記憶されている。例えば、２８１６ｋＢの一般プログラム領域Ｆ−Ｐの場合、実際に使用する一般プログラム全体のデータサイズが２６００ｋＢであれば、これに２１６ｋＢの空きデータが付加された一般プログラム領域Ｆ−Ｐのサイズと等しい２８１６ｋＢのデータが該一般プログラム領域Ｆ−Ｐに記憶されている。なお、これらの各記憶領域に記憶されているデータは、各記憶領域毎に個別に外部から受信した書き換えデータによって書き換えることが可能である。ＦｌａｓｈＲＯＭ８に記憶されているファームウェアは、書き換えデータによって、例えば、第１カーネル領域Ｆ−Ｋ１及び、第２カーネル領域Ｆ−Ｋ２のデータのみを書き換えたり、一般プログラム領域Ｆ−Ｐとフォント領域Ｆ−Ｆのデータのみを書き換えたりすることが可能である。
【００２６】
一方、ＳＤＲＡＭ９のプログラム領域ＳＤ−Ｐは、制御部６によってＦｌａｓｈＲＯＭ８に記憶されている各種データを制御部６で実行するために一時的に読み込む領域である。ＳＤＲＡＭ９のプログラム領域ＳＤ−Ｐのうち、ＦｌａｓｈＲＯＭ８のブート領域Ｆ−Ｂに記憶されているブートプログラムを読み込む領域をブート領域ＳＤ−Ｂ、第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラム、又は、第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムを読み込む領域を第１カーネル領域ＳＤ−Ｋ１、第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムを読み込む領域を第２カーネル領域ＳＤ−Ｋ２、一般プログラム領域Ｆ−Ｐに記憶されている一般プログラムを読み込む領域を一般プログラム領域ＳＤ−Ｐ、フォント領域Ｆ−Ｆに記憶されているフォントデータを読み込む領域をフォント領域ＳＤ−Ｆとそれぞれ呼ぶ。
【００２７】
制御部６は、システム起動時にＦｌａｓｈＲＯＭ８のブート領域Ｆ−ＢのブートプログラムをＳＤＲＡＭ９のプログラム領域ＳＤ−Ｐに読み込み、プログラム領域ＳＤ−Ｐに読み込まれたブートプログラムに基づいて、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラム、第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラム、一般プログラム領域Ｆ−Ｐに記憶されている一般プログラム、フォント領域Ｆ−Ｆに記憶されているフォントデータをそれぞれＳＤＲＡＭ９のプログラム領域ＳＤ−Ｐに読み込む。制御部６は、このようにしてＦｌａｓｈＲＯＭ８の各記憶領域のデータをＳＤＲＡＭ９のプログラム領域ＳＤ−Ｐにロードし、ロードしたプログラムを必要に応じて実行することにより、例えば、外部から受信したＰＤＬデータに所定のデータ処理を行って複合機２の本体に転送したり、外部から受信した書き換えデータにより自身のファームウェアをアップデートしたりすることができる。ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄは、各種データを一時的に格納する領域であり、ネットワークインターフェースコントローラ３によって転送されたＰＤＬデータや書き換えデータ、複合機２の本体から受信した画像データなどを一時的に格納する。
【００２８】
データ処理回路１０は、インターフェース回路７が受信したＰＤＬデータに所定のデータ処理を施すものであり、具体的にはインターフェース回路７が受信したＰＤＬデータを解析して複合機２の本体で処理可能な画像データに展開した後、その画像データをＭＭＲ（Modified Modified Read）方式で符号化（エンコード）する。このようにしてデータ処理回路１０において所定のデータ処理が施された画像データは、インターフェース回路７によって複合機２の本体へと転送される。なお、ここで使用する符号化方式は、複合機２の本体において復号が可能な方式であればＭＭＲ方式に限定されるものではなく、例えば、ＭＨ（Modified Huffman）、ＭＲ（Modified Read）、ＪＢＩＧ（Joint Bi-level Image Group）方式などの他の符号化方式を使用してもよい。また、ここでは、画像データの転送速度などを考慮して展開した画像データをＭＭＲ方式で符号化して転送しているが、展開した画像データを符号化することなくそのまま複合機２の本体に転送するようにしてもよい。
【００２９】
一方、データ処理装置１から転送された画像データの印刷処理を行う複合機２の本体は、制御部（ＭＰＵ）２１、ＲＯＭ（Read Only Memory）２２、ＲＡＭ（Random Access Memory）２３、原稿読取部２４、コーデック（ＣＯＤＥＣ：Coder and Decoder）２５、画像メモリ２６、記録部２７、操作部２８、及び、表示部２９を備えており、各部２１乃至２９は、バス３０によって通信可能に接続されている。
【００３０】
制御部２１は、ＲＯＭ２２に記憶されているプログラムに従って、この複合機２を構成する各部を制御する。ＲＯＭ２２は、前記プログラムを記憶している。ＲＡＭ２３は、制御部２１の主メモリ、ワークエリアなどとして機能し、予め登録された各種設定情報などを記憶している。原稿読取部２４は、例えば、ＣＣＤ（Charge Coupled Device）などのイメージセンサによって原稿の画像データを読取る。
【００３１】
コーデック２５は、画像データの符号化及び、復号（デコード）を行うものであり、原稿読取部２４で読取られた原稿の画像データをＭＨ、ＭＲ、ＭＭＲ、ＪＢＩＧ方式などにより符号化し、符号化されている画像データを復号する。なお、データ処理装置１から転送された画像データは、このコーデック２５において復号される。画像メモリ２６は、コーデック２５によって符号化された原稿の画像データ、データ処理装置１から転送された画像データなどを格納する。
【００３２】
記録部２７は、原稿読取部２４において読取られた原稿の画像データ、データ処理装置１から転送された画像データなどの画像を用紙に記録するものであり、この記録部２７における記録方式としては、例えば、電子写真方式を用いることができる。データ処理装置１から転送された画像データは、画像メモリ２６に一旦格納された後、コーデック２５によって復号され、この記録部２７においてその画像が用紙に記録される。
【００３３】
操作部２８は、図示しないが原稿読取部２４に原稿の読取開始を指示するためのスタートキー、コピー部数などを入力するためのテンキー、各種設定を行うためのカーソルキーなど、表示部２９と連動した各種操作キーを備えている。表示部２９は、各種の設定状態や複合機２の動作状態などを文字や図形などで表示する液晶表示装置（ＬＣＤ：Liquid Crystal Display）や、点灯又は消灯で表示するＬＥＤランプなどを備えている。
【００３４】
以上に説明したように構成された複合機２に対して、ＬＡＮ４上のクライアントＰＣ５からＰＤＬデータが送信されると、当該ＰＤＬデータはネットワークインターフェースコントローラ３によってデータ処理装置１に転送される。そして、ＰＤＬデータは、データ処理装置１において展開されて所定の符号化方式で符号化された後、複合機２の本体へと転送されて当該複合機２の本体においてその画像が用紙に記録される。また、クライアントＰＣ５は、複合機２において印刷すべきＰＤＬデータの他に、データ処理装置１のＦｌａｓｈＲＯＭ８に記憶されているファームウェアの全体又は一部をアップデートするための書き換えデータを複合機２に対して送信する。
【００３５】
データ処理装置１は、ＦｌａｓｈＲＯＭ８の各記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆに記憶されているファームウェアの全体、すなわち、記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆのデータの全てをアップデートすることは当然に可能であるが、一部の記憶領域のデータのみをアップデートすることも可能である。ＦｌａｓｈＲＯＭ８の各記憶領域の一部のみのアップデートを行う場合には、クライアントＰＣ５から、ＦｌａｓｈＲＯＭ８の記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆのうち、書き換えが必要な記憶領域に対応する書き換えデータのみを送信する。
【００３６】
以下、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１及び第２カーネル領域Ｆ−Ｋ２のデータのみをアップデートするための書き換えデータ（以下、「Ｋ領域用書き換えデータ」という。）を例としてクライアントＰＣ５から送信される書き換えデータについて、図３に基づいて説明する。このＫ領域用書き換えデータは、図３に示すようにＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１及び第２カーネル領域Ｆ−Ｋ２に記憶されているデータと同様に、カーネルプログラムのデータに適当なデータサイズの空きデータとから構成されており、そのデータサイズは第１カーネル領域Ｆ−Ｋ１又は第２カーネル領域Ｆ−Ｋ２のサイズと等しい２４８ｋＢである。このように、書き換え用のカーネルプログラムに適当なサイズの空きデータを付加することにより、カーネルプログラムのデータサイズが変動したとしても、常に第１カーネル領域Ｆ−Ｋ１又は第２カーネル領域Ｆ−Ｋ２のサイズと同じデータサイズのＫ領域用書き換えデータをデータ処理装置１に送信することができる。
【００３７】
このようにして作成されたＫ領域用書き換えデータがデータ処理装置１に送信された場合、データ処理装置１は、Ｋ領域用書き換えデータを受信した後、一旦ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに格納する。そして、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１及び第２カーネル領域２のカーネルプログラムをデータ領域ＳＤ−Ｄに格納したＫ領域用書き換えデータで書き換える。この書き換えに際して、書き換えを行う前に書き換えデータが正常であるか否かを判断し、書き換えを行った後に書き換えられたデータが正常であるか否かを判断する。このデータが正常であるか否かの判断では、所定の誤り検出データ作成手順に基づいて演算処理を行ってデータ検査を実行する。具体的には、データ処理装置１の制御部６は、チェックサム（Check Sum）によるデータ検査（サムチェック）を行う。そのため、クライアントＰＣ５から送信される書き換えデータには、書き換えデータを構成する各データを数値として加算し、その総和の値から一定の計算をして求めた誤り検出データ（以下、「チェッカ」という。）が埋め込まれている。
【００３８】
この書き換えデータに埋め込まれる１個のチェッカで表すことのできるデータの領域サイズをＮとすると、領域サイズＮは任意に設定することができるが、領域サイズＮを無限大に設定した場合、いかなるデータサイズの書き換えデータであっても埋め込まれるチェッカの個数は１個である。しかし、データ処理装置１においてサムチェックを行う場合に、書き換えデータのどの部分において書き換えエラーが発生したかを特定できるようにするため、ここでは一例としてＮの値は１０２４ｋＢに設定されている。そして、書き換えデータのデータサイズをＭとすると、書き換えデータのデータサイズＭが領域サイズＮ以下である場合にはその書き換えデータに１個のチェッカを埋め込み、データサイズＭが領域サイズＮを越える場合には領域サイズＮに基づいてその書き換えデータを複数の部分領域に分割し、各部分領域毎にチェッカの値を算出し、書き換えデータの後端に算出した複数のチェッカを埋め込む。
【００３９】
そこで、書き換えデータにチェッカを埋め込む場合、まず予め設定されている領域サイズＮと送信すべき書き換えデータのデータサイズＭから埋め込むチェッカの個数でもある部分領域数ｃを算出する。図３に示すように、書き換えデータがＫ領域用書き換えデータである場合には、書き換えデータのデータサイズＭが２４８ｋＢであり、領域サイズＮの値である１０２４ｋＢ以下であるため、部分領域数ｃは「１」でありこの書き換えデータには１個のチェッカが埋め込まれる。
【００４０】
次に、算出した部分領域数ｃに基づいて各部分領域のデータを加算してサム値を算出する。なお、ここでは、部分領域数ｃは１であるため、書き換えデータを複数の部分領域に分割することなく２４８ｋＢのデータサイズの書き換えデータを部分領域としてデータに対してサム値Ｓ１を算出する。具体的には、２４８ｋＢのＫ領域用書き換えデータを構成する全データを数値として先頭部分から加算してその総和を算出する。このようにして全てのデータの総和からサム値Ｓ１を算出することができるが、ここでは１個のチェッカのデータサイズｂが２バイトであり、書き換えデータの最後の２バイトにチェッカを埋め込むため、最後の２バイトに元々あった値ｖ１をサム値Ｓ１から差引く。そして、このようにして求めたＳ１−ｖ１を反転させた値−（Ｓ１−ｖ１）をチェッカの値として書き換えデータの最後の２バイトに埋め込む。なお、ここでは、Ｋ領域用書き換えデータの最後の２バイトに元々あった値ｖ１を−（Ｓ１−ｖ１）の値のチェッカに書き換えているが、チェッカに書き換える部分のｖ１の値は空きデータの値であるため、チェッカを埋め込んだとしても書き換えデータの内容（ここでは、カーネルプログラム）が変化することはない。すなわち、書き換えデータの内容に影響を与えることなくチェッカを埋め込むことができる。
【００４１】
以上に説明したように、書き換えデータのデータサイズＭが１個のチェッカで表すことのできる領域サイズＮ以下である場合には、書き換えデータには１個のチェッカが埋め込まれる。一方、データサイズＭが領域サイズＮを越える場合には、書き換えデータには複数のチェッカが埋め込まれる。例えば、図４に例示するように書き換えデータが、ＦｌａｓｈＲＯＭ８の一般プログラム領域のデータを書き換えるためのＰ領域用書き換えデータである場合、そのデータサイズＭは２８１６ｋＢであり、領域サイズＮの値である１０２４ｋＢを越えており、部分領域数ｃは３となる。そして、算出した部分領域数ｃに対応する部分領域を図４に示すように、部分領域Ｘ、部分領域Ｙ、及び、部分領域Ｚのように設定する。ここでは、複数の部分領域のうち、最初の部分領域である部分領域Ｘが端数を受け持つように部分領域Ｘのデータサイズを７６８ｋＢに設定し、部分領域Ｙ、及び、部分領域Ｚのデータサイズを領域サイズＮと等しい１０２４ｋＢに設定する。
【００４２】
このようにして、部分領域Ｘ乃至Ｚを設定した後、まず部分領域Ｘについてサム値を算出するが、サム値を算出して各部分領域毎にチェッカを埋め込むと、各部分領域、ここでは部分領域Ｘ、及び、部分領域Ｙのデータの内容が変化してしまう。そこで、部分領域Ｘ乃至Ｚのチェッカは、空きデータが付加されている最後の部分領域Ｚの後端に埋め込む。具体的には、部分領域Ｘと部分領域Ｙについて、それぞれ算出した各領域のサム値をそのまま反転させてチェッカとして埋め込む。すなわち、図４に示すように、７６８ｋＢの部分領域Ｘの全データの総和であるサム値Ｓ２を算出し、これを反転させた−Ｓ２の値を部分領域Ｘのチェッカとして部分領域Ｚにおけるチェッカ領域の先頭に埋め込む。ここで、チェッカ領域の先頭は、１個のチェッカのデータサイズｂと、書き換えデータのデータサイズＭと、部分領域数（チェッカの個数）ｃとに基づいて、Ｍ−ｃ×ｂの関係式から算出することができる。
【００４３】
このようにして部分領域Ｘのチェッカを埋め込んだ後、部分領域Ｙについても同様にサム値Ｓ３を算出し、算出したサム値をそのまま反転させた値−Ｓ３を部分領域Ｙのチェッカとして部分領域Ｚにおける部分領域Ｘのチェッカの次の２バイトに埋め込む。そして、最後の部分領域である部分領域Ｚのサム値Ｓ４から求めたチェッカを部分領域Ｚの最後の２バイトに埋め込むが、この部分領域Ｚには、前記部分領域Ｘ及び、Ｙのチェッカと部分領域Ｚのチェッカの３個のチェッカを埋め込むためのチェッカ領域が存在するため、部分領域Ｚの全データの総和であるサム値Ｓ４からチェッカ領域に元々存在したデータ、すなわち、書き換えデータの最後の６バイト分のデータの総和であるｖ２を部分領域を設定した段階で算出しておき、サム値Ｓ４から差引く。そして、これを反転させた値−（Ｓ４−ｖ２）を部分領域Ｚのチェッカとして部分領域Ｚの最後の２バイトに埋め込む。
【００４４】
以上に説明したように、実データに適当なデータサイズの空きデータが付加された書き換えデータに、該書き換えデータのデータサイズＭに基づいて１又は複数のチェッカが埋め込まれるが、ブート領域Ｆ−Ｂのデータを書き換えるためのＢ領域用書き換えデータ及び、フォント領域Ｆ−Ｆのデータを書き換えるためのＦ領域用書き換えデータについても同様に書き換えデータを作成してチェッカを埋め込むことができる。そして、このようにチェッカが埋め込まれた後、書き換えが必要な記憶領域の書き換えデータのみがクライアントＰＣ５から送信される。例えば、一般プログラム領域Ｆ−Ｐのデータのみ書き換えが必要な場合には、Ｐ領域用書き換えデータのみからなる２８１６ｋＢの書き換えデータが送信され、第１カーネル領域Ｆ−Ｋ１及び第２カーネル領域Ｆ−Ｋ２、並びに、一般プログラム領域Ｆ−Ｐのデータについて書き換えが必要な場合には、Ｋ領域用書き換えデータとＰ領域用書き換えデータとからなる３０６４ｋＢの書き換えデータがクライアントＰＣ５から送信される。
【００４５】
次に、以上に説明したようにチェッカを用いて書き換えデータが正常であるか否かを判断するデータ検査の方法について説明する。以下においては、書き換えデータによって書き換えられた後のＦｌａｓｈＲＯＭ８の記憶領域のデータが正常であるか否かを判断するデータ検査の場合について説明するが、書き換え前に一旦ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータが正常であるか否かを判断するデータ検査の場合も同様にして実行できる。
【００４６】
まず、書き換えデータによる自装置１のファームウェアの書き換え処理が終了した後、書き換えた記憶領域のサイズＭ及び、１個のチェッカで表すことができる領域サイズＮからサムチェックを行う対象領域の部分領域数ｃを算出し、部分領域を設定する。ここで、対象領域は、ＦｌａｓｈＲＯＭ８の記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆのうちの書き換えデータに書き換えた記憶領域であり、複数の記憶領域に対して書き換えを行った場合には、まず、その複数の記憶領域のうちのいずれか１つの記憶領域を対象領域してサムチェックを行う。上述したように、対象領域のデータ（書き換えデータ）には、サムチェックを行う部分領域の数と等しい数のチェッカが埋め込まれている。書き換えたＦｌａｓｈＲＯＭ８の記憶領域のサイズＭと該記憶領域のデータを書き換えた書き換えデータのデータサイズは等しいため、対象領域のデータを書き換えた書き換えデータのデータサイズについてもＭで表すことができる。
【００４７】
例えば、図５に示すように対象領域が２８１６ｋＢの一般プログラム領域Ｆ−Ｐである場合には、対象領域のサイズ、すなわち一般プログラム領域Ｆ−Ｐを書き換えたＰ領域用書き換えデータのデータサイズＭが１個のチェッカで表すことができる領域サイズＮ（１０２４ｋＢ）を越えており、部分領域数ｃは３である。そして、図４と同様に一般プログラム領域Ｆ−Ｐを７６８ｋＢの部分領域Ｘ、１０２４ｋＢの部分領域Ｙ、１０２４ｋＢの部分領域Ｚの３つの部分領域を設定する。なお、ここでも複数の部分領域のうち、先頭の部分領域が端数を受け持つように各部分領域のサイズが設定される。
【００４８】
そして、対象領域におけるチェッカ領域からチェッカを読み出す。対象領域におけるチェッカ領域の先頭アドレスＤは、対象領域の先頭アドレスをＡ、対象領域（書き換えた記憶領域）のサイズＭ、チェッカの個数（部分領域数）ｃ、１個のチェッカのデータサイズｂに基づいて、Ｄ＝Ａ＋Ｍ−ｃ×ｂの関係式から算出することができる。この関係式からチェッカ領域の先頭アドレスＤを算出してチェッカの位置を特定し、その先頭アドレスＤ以降のデータをチェッカの値として読み出す。ここで、図５に示す一般プログラム領域Ｆ−Ｐの場合には、部分領域Ｘのチェッカと部分領域Ｙのチェッカと部分領域Ｚのチェッカの３つのチェッカの値を読み出すことができる。なお、１個のチェッカで表すことができる領域サイズＮと１個のチェッカのデータサイズｂは、第１カーネル領域Ｆ−Ｋ１又は第２カーネル領域Ｆ−Ｋ２に記憶されているデータチェックコードによって予め設定されている。１個のチェッカで表すことができる領域サイズＮと１個のチェッカのデータサイズｂは、書き換えデータにチェッカを埋め込む際の領域サイズとデータサイズに等しい値がそれぞれ設定されており、例えば、領域サイズＮが１０２４ｋＢ、データサイズｂが２バイトである。
【００４９】
次に、部分領域の先頭アドレスとサイズに基づいてサム値を計算する。例えば、一般プログラム領域Ｆ−Ｐのように、３つの部分領域が設定されている場合、まず、部分領域Ｘの先頭アドレス、すなわち、対象領域の先頭アドレスＡから７６８ｋＢの部分領域Ｘの全データを数値として加算してサム値を計算する。そして、計算したサム値とチェッカの値の和がゼロになるか否かを判断する。サム値とチェッカの値の和がゼロである場合には、部分領域に誤りはないと判断し、ゼロでない場合には部分領域に誤りがあると判断する。すべての部分領域（部分領域Ｘ，Ｙ，Ｚ）についてサムチェックを行い、すべての部分領域に誤りがない場合に、当該対象領域のデータが正常であると判断する。
【００５０】
以下に、図６及び図７を用いて、クライアントＰＣ５から送信された書き換えデータに基づいてデータ処理装置１のＦｌａｓｈＲＯＭ８に記憶されているファームウェアをアップデート（書き換え）する場合に、データ処理装置１の制御部６が実行する処理（ファームウェアの書き換え方法）について説明する。データ処理装置１の制御部６は、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１又は第２カーネル領域Ｆ−Ｋ２からＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１に読み込まれたカーネルプログラムに従って処理を実行する。ＦｌａｓｈＲＯＭ８に記憶されているファームウェアは、ブート領域Ｆ−Ｂ、第１カーネル領域Ｆ−Ｋ１、第２カーネル領域Ｆ−Ｋ２、一般プログラム領域Ｆ−Ｐ、フォント領域Ｆ−Ｆ毎にそれぞれ単独でアップデート（書き換え）可能であるが、以下には、第１カーネル領域Ｆ−Ｋ１、第２カーネル領域Ｆ−Ｋ２、一般プログラム領域Ｆ−Ｐ、フォント領域Ｆ−Ｆをアップデート（書き換え）する場合について説明する。なお、図６及び図７に示す各処理の実行順序は図示するものに限定されるものではなく、処理の実行順序を変更しても本発明を実現できる場合には適宜に変更してもよい。
【００５１】
まず、制御部６は、クライアントＰＣ５から送信され、一時的にＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータの正当性のチェックを行う（Ｓ１０１）。この正当性のチェックでは、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されているデータが書き換えデータであるか否かのチェックと書き換えデータが正常であるか否かのチェックを行う。ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラム、及び、第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムには、図８に示すような、書き換えデータのデータサイズとＦｌａｓｈＲＯＭ８の各記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆとを対応付けたテーブルが含まれている。したがって、制御部６は、受信してＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されているデータのデータサイズが図８に示すデータサイズのいずれかであるか否かによって、受信したデータが書き換えデータであるか否かを判断することができる。例えば、受信した書き換えデータのデータサイズが２４８ｋＢであれば、書き換えデータは第１カーネル領域Ｆ−Ｋ１及び第２カーネル領域Ｆ−Ｋ２のデータを書き換えるためのＫ領域用書き換えデータであると判断し、また、受信した書き換えデータのデータサイズが７９３６ｋＢであれば、書き換えデータは一般プログラム領域Ｆ−Ｐのデータを書き換えるためのＰ領域用書き換えデータとフォント領域Ｆ−Ｆのデータを書き換えるためのＦ領域用書き換えデータであると判断する。受信した書き換えデータが正常であるか否かは、上述したチェッカを用いたサムチェックによってチェックする。
【００５２】
そして、書き換えデータが正当であるか否かを判断する（Ｓ１０２）。受信したデータが書き換えデータであり、かつ、書き換えデータが正常である場合に書き換えデータが正当であると判断する。書き換えデータが正当でないと判断すると（Ｓ１０２：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、書き換えデータが正当であると判断すると（Ｓ１０２：ＹＥＳ）、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に現時点で記憶されているカーネルプログラムが正常であるか（破損しているか）否かのチェックを行い（Ｓ１０３）、チェックの結果に基づいて当該カーネルプログラムが正常であるか否かを判断する（Ｓ１０４）。カーネルプログラムが正常であるか否かのチェックは、上述したチェッカを用いたサムチェックによって行う。
【００５３】
第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラムが正常でないと判断すると（Ｓ１０４：ＮＯ）、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータからカーネルプログラムの書き換えデータを読み出し、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１を書き換える（Ｓ１０５）。そして、チェッカを用いたサムチェックによりＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に書き込まれたカーネルプログラムが正常であるか否かをチェックし（Ｓ１０６）、当該カーネルプログラムが正常であるか否かを判断する（Ｓ１０７）。
【００５４】
ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に書き込まれたカーネルプログラムが正常でないと判断すると（Ｓ１０７：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、当該カーネルプログラムが正常であると判断すると（Ｓ１０７：ＹＥＳ）、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータから一般プログラムの書き換えデータを読み出し、ＦｌａｓｈＲＯＭ８の一般プログラム領域Ｆ−Ｐを書き換える（Ｓ１０８）。そして、チェッカを用いたチェックサムによりＦｌａｓｈＲＯＭ８の一般プログラム領域Ｆ−Ｐに書き込まれた一般プログラムが正常であるか否かをチェックし（Ｓ１０９）、当該一般プログラムが正常であるか否かを判断する（Ｓ１１０）。
【００５５】
ＦｌａｓｈＲＯＭ８の一般プログラム領域Ｆ−Ｐに書き込まれた一般プログラムが正常でないと判断すると（Ｓ１１０：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、当該一般プログラムが正常であると判断すると（Ｓ１１０：ＹＥＳ）、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータからフォントデータの書き換えデータを読み出し、ＦｌａｓｈＲＯＭ８のフォント領域Ｆ−Ｆを書き換える（Ｓ１１１）。そして、チェッカを用いたサムチェックによりＦｌａｓｈＲＯＭ８のフォント領域Ｆ−Ｆに書き込まれたフォントデータが正常であるか否かをチェックし（Ｓ１１２）、当該フォントデータが正常であるか否かを判断する（Ｓ１１３）。
【００５６】
ＦｌａｓｈＲＯＭ８のフォント領域Ｆ−Ｆに書き込まれたフォントデータが正常でないと判断すると（Ｓ１１３：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、当該フォントデータが正常であると判断すると（Ｓ１１３：ＹＥＳ）、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータからカーネルプログラムの書き換えデータを読み出し、ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２を書き換える（Ｓ１１４）。そして、チェッカを用いたサムチェックによりＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に書き込まれたカーネルプログラムが正常であるか否かをチェックし（Ｓ１１５）、当該カーネルプログラムが正常であるか否かを判断する（Ｓ１１６）。当該カーネルプログラムが正常でないと判断すると（Ｓ１１６：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、当該カーネルプログラムが正常であると判断すると（Ｓ１１６：ＹＥＳ）、ファームウェアの書き換え処理を終了する。
【００５７】
ステップＳ１０４において、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に現時点で記憶されているカーネルプログラムが正常であると判断すると（Ｓ１０４：ＹＥＳ）、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータから一般プログラムの書き換えデータを読み出し、ＦｌａｓｈＲＯＭ８の一般プログラム領域Ｆ−Ｐを書き換える（Ｓ１１７）。そして、チェッカを用いたサムチェックによりＦｌａｓｈＲＯＭ８の一般プログラム領域Ｆ−Ｐに書き込まれた一般プログラムが正常であるか否かをチェックし（Ｓ１１８）、当該一般プログラムが正常であるか否かを判断する（Ｓ１１９）。
【００５８】
ＦｌａｓｈＲＯＭ８の一般プログラム領域Ｆ−Ｐに書き込まれた一般プログラムが正常でないと判断すると（Ｓ１１９：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、当該一般プログラムが正常であると判断すると（Ｓ１１９：ＹＥＳ）、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータからフォントデータの書き換えデータを読み出し、ＦｌａｓｈＲＯＭ８のフォント領域Ｆ−Ｆを書き換える（Ｓ１２０）。そして、チェッカを用いたサムチェックによりＦｌａｓｈＲＯＭ８のフォント領域Ｆ−Ｆに書き込まれたフォントデータが正常であるか否かをチェックし（Ｓ１２１）、当該フォントデータが正常であるか否かを判断する（Ｓ１２２）。
【００５９】
ＦｌａｓｈＲＯＭ８のフォント領域Ｆ−Ｆに書き込まれたフォントデータが正常でないと判断すると（Ｓ１２２：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、当該フォントデータが正常であると判断すると（Ｓ１１２：ＹＥＳ）、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータからカーネルプログラムの書き換えデータを読み出し、ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２を書き換える（Ｓ１２３）。そして、チェッカを用いたサムチェックによりＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に書き込まれたカーネルプログラムが正常であるか否かをチェックし（Ｓ１２４）、当該カーネルプログラムが正常であるか否かを判断する（Ｓ１２５）。
【００６０】
ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に書き込まれたカーネルプログラムが正常でないと判断すると（Ｓ１２５：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、当該カーネルデータが正常であると判断すると（Ｓ１２５：ＹＥＳ）、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄに記憶されている書き換えデータからカーネルプログラムの書き換えデータを読み出し、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１を書き換える（Ｓ１２６）。そして、チェッカを用いたサムチェックによりＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に書き込まれたカーネルプログラムが正常であるか否かをチェックし（Ｓ１２７）、当該カーネルプログラムが正常であるか否かを判断する（Ｓ１２８）。当該カーネルプログラムが正常でないと判断すると（Ｓ１２８：ＮＯ）、所定のエラー処理を行う（Ｓ１２９）。一方、当該カーネルプログラムが正常であると判断すると（Ｓ１２８：ＹＥＳ）、ファームウェアの書き換え処理を終了する。
【００６１】
このように、データ処理装置１では、ファームウェアを、データの種類別に分割してＦｌａｓｈＲＯＭ８の各記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆに記憶し、書き換えデータによってファームウェアをアップデートする際には、ＦｌａｓｈＲＯＭ８の各記憶領域Ｆ−Ｂ、Ｆ−Ｋ１、Ｆ−Ｋ２、Ｆ−Ｐ、及び、Ｆ−Ｆ毎にデータの書き換えを行う。そして、書き換えデータに含まれるカーネルプログラムを、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１と第２カーネル領域Ｆ−Ｋ２との２箇所に書き込む。このような方法によってファームウェアのアップデート（書き換え）を行うと、アップデート中の停電などによりデータ処理装置１に電源断が発生した場合でも、第１カーネル領域Ｆ−Ｋ１のカーネルプログラムと第２カーネル領域Ｆ−Ｋ２のカーネルプログラムとが一度に破損することを防止することができる。つまり、例えば、第１カーネル領域Ｆ−Ｋ１のカーネルプログラムの書き換えを行った後に、第２カーネル領域Ｆ−Ｋ２のカーネルプログラムの書き換えを行う場合において、第１カーネル領域Ｆ−Ｋ１のカーネルプログラムの書き換え中に電源断が発生して当該カーネルプログラムが破損した際には、第２カーネル領域Ｆ−Ｋ２にアップデート前の古いカーネルプログラムが記憶されているので当該カーネルプログラムを実行することによってデータ処理装置１を正常に機能させることができる。また、第２カーネル領域Ｆ−Ｋ２のカーネルプログラムの書き換え中に電源断が発生して当該カーネルプログラムが破損した際には、第１カーネル領域Ｆ−Ｋ１にアップデートされた新たなカーネルプログラムが記憶されているので当該カーネルプログラムを実行することによってデータ処理装置１を正常に機能させることができる。
【００６２】
また、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１のカーネルプログラム及び第２カーネル領域Ｆ−Ｋ２のカーネルプログラムの書き換えを行う際に、第１カーネル領域Ｆ−Ｋ１のカーネルプログラムが破損しているか（正常であるか）否かを判断し、破損している場合には、第２カーネル領域Ｆ−Ｋ２のカーネルプログラムの書き換えに先立って第１カーネル領域Ｆ−Ｋ１のカーネルプログラムの書き換えを行う。また、第２カーネル領域Ｆ−Ｋ２のカーネルプログラムが損傷している場合（図６のステップ１０４の判断におけるＹＥＳの場合に含まれる）には、第１カーネル領域Ｆ−Ｋ１のカーネルプログラムの書き換えに先立って第２カーネル領域Ｆ−Ｋ２のカーネルプログラムの書き換えを行う。したがって、第１カーネル領域Ｆ−Ｋ１のカーネルプログラムと第２カーネル領域Ｆ−Ｋ２のカーネルプログラムとのどちらかが破損している状態で、第１カーネル領域Ｆ−Ｋ１のカーネルプログラム及び第２カーネル領域Ｆ−Ｋ２のカーネルプログラムの書き換えを行う場合に電源断が再び発生した場合でも、第１カーネル領域Ｆ−Ｋ１又は第２カーネル領域Ｆ−Ｋ２のどちらかに正常なカーネルプログラムが存在することとなるので、当該正常なカーネルプログラムを実行することによってデータ処理装置１を正常に機能させることができる。
【００６３】
次に、図９を用いて、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラム、及び、第２カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラムを実行するためにＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１及び第２カーネル領域ＳＤ−Ｋ２に読み込む場合に、データ処理装置１の制御部６が実行する処理（ファームウェアの読み込み方法）について説明する。データ処理装置１の制御部６は、ＦｌａｓｈＲＯＭ８のブート領域Ｆ−ＢからＳＤＲＡＭ９のブート領域ＳＤ−Ｂに読み込まれたブートプログラムに従って処理を実行する。なお、図９に示す各処理の実行順序は図示するものに限定されるものではなく、処理の実行順序を変更しても本発明を実現できる場合には適宜に変更してもよい。
【００６４】
まず、データ処理装置１に電源が投入されると、ＦｌａｓｈＲＯＭ８のブート領域Ｆ−Ｂに記憶されているブートプログラムがＳＤＲＡＭ９のブート領域ＳＤ−Ｂに読み込まれ、実行される（Ｓ２０１）。次に、制御部６は、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラムをＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１に読み込みつつ、当該カーネルプログラムが正常であるか否かをチェックする（Ｓ２０２）。このカーネルプログラムが正常であるか否かのチェックは、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１のチェッカ領域に記憶されているチェッカに基づくサムチェックによって行われる。つまり、制御部６は、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１からカーネルプログラムのデータを順次に読み出して第１カーネル領域ＳＤ−Ｋ１に書き込みつつ、第１カーネル領域Ｆ−Ｋ１から読み出した各データを数値として加算し、サムチェックのための総和を求める。そして、サムチェックの結果に基づいて、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラム、すなわち、ＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１に読み込まれたカーネルプログラムが正常であるか否かを判断する（Ｓ２０３）。
【００６５】
ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラムが正常であると判断すると（Ｓ２０３：ＹＥＳ）、次に、ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムをＳＤＲＡＭ９の第２カーネル領域ＳＤ−Ｋ２に読み込みつつ、当該カーネルプログラムが正常であるか否かをチェックする（Ｓ２０４）。このカーネルプログラムが正常であるか否かのチェックは、ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２のチェッカ領域に記憶されているチェッカに基づくサムチェックによって行われる。そして、サムチェックの結果に基づいて、ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラム、すなわち、ＳＤＲＡＭ９の第２カーネル領域ＳＤ−Ｋ２に読み込まれたカーネルプログラムが正常であるか否かを判断する（Ｓ２０５）。
【００６６】
ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムが正常でないと判断すると（Ｓ２０５：ＮＯ）、第２カーネル領域Ｆ−Ｋ２のカーネルプログラムが正常であるか否かを記憶するためのＦ−Ｋ２エラーフラグをオン状態にし（Ｓ２０６）、ファームウェア（カーネルプログラム）の読み込み処理を終了する。このＦ−Ｋ２エラーフラグは、例えば、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄなどに設けられた１バイトのデータであり、Ｆ−Ｋ２エラーフラグの最下位ビットを「１」にすることによってフラグがオン状態となる。一方、第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムが正常であると判断すると（Ｓ２０５：ＹＥＳ）、ファームウェア（カーネルプログラム）の読み込み処理を終了する。
【００６７】
ステップＳ２０３において、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラムが正常でないと判断すると（Ｓ２０３：ＮＯ）、次に、ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムをＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１に読み込みつつ、当該カーネルプログラムが正常であるか否かをチェックする（Ｓ２０７）。このカーネルプログラムが正常であるか否かのチェックは、ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２のチェッカ領域に記憶されているチェッカに基づくサムチェックによって行われる。そして、サムチェックの結果に基づいて、ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラム、すなわち、ＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１に読み込まれたカーネルプログラムが正常であるか否かを判断する（Ｓ２０８）。
【００６８】
ＦｌａｓｈＲＯＭ８の第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムが正常であると判断すると（Ｓ２０８：ＹＥＳ）、第１カーネル領域Ｆ−Ｋ１のカーネルプログラムが正常であるか否かを記憶するためのＦ−Ｋ１エラーフラグをオン状態にし（Ｓ２０９）、ファームウェア（カーネルプログラム）の読み込み処理を終了する。このＦ−Ｋ１エラーフラグは、例えば、ＳＤＲＡＭ９のデータ領域ＳＤ−Ｄなどに設けられた１バイトのデータであり、Ｆ−Ｋ１エラーフラグの最下位ビットを「１」にすることによってフラグがオン状態となる。
【００６９】
一方、第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムが正常でないと判断すると（Ｓ２０８：ＮＯ）、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラム（破損している）を、ＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１に読み込み（Ｓ２１０）、Ｆ−Ｋ１エラーフラグ及びＦ−Ｋ２エラーフラグをともにオン状態として（Ｓ２１１）、ファームウェア（カーネルプログラム）の読み込み処理を終了する。なお、データ処理装置１では、上述したようなファームウェアの書き換え方法を採用しているので、第１カーネル領域Ｆ−Ｋ１のカーネルプログラムと第２カーネル領域Ｆ−Ｋ２のカーネルプログラムのどちらかは正常であり、ステップＳ２０８において、第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムが正常でない（ＮＯ）と判断され、ステップＳ２１０及びステップＳ２１１に処理が進むことは想定され難い。
【００７０】
このように、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラムと第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムとのうちの破損していない正常なカーネルプログラムがＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１に読み込まれるので、ファームウェアのアップデート（書き換え）中の電源断などにより、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１のカーネルプログラム又は第２カーネル領域Ｆ−Ｋ２のカーネルプログラムのどちらかが破損などして正常でない場合でも、データ処理装置１を正常に機能させることができる。
【００７１】
また、ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１及び第２カーネル領域Ｆ−Ｋ２に記憶されているカーネルプログラムを読み出して、ＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１又は第２カーネル領域ＳＤ−Ｋ２に書き込みつつ、順次にサムチェックのための演算を行うので、カーネルプログラムなどの読み込みにかかる時間を短縮することができる。
【００７２】
以上に説明したように、データ処理装置１において実行されるファームウェアの書き換え方法、及び、ファームウェアの読み込み方法によれば、ファームウェアのアップデート（書き換え）中に電源断などが発生してカーネルプログラムが破損した場合でも、正常に自装置１を機能させることができる。
【００７３】
なお、本発明の実施形態は上述の形態に限らず、本発明の技術的思想の範囲内において種々に変更してもよい。
【産業上の利用可能性】
【００７４】
本発明は、記憶装置の個々の記憶領域にデータの種類別に分割して記憶されているファームウェアの書き換え方法、及び、読み込み方法に適用可能である。
【図面の簡単な説明】
【００７５】
【図１】本発明のファームウェアの書き換え方法、及び、ファームウェアの読み込み方法を実行するデータ処理装置の構成例を示したブロック図である。
【図２】ＦｌａｓｈＲＯＭとＳＤＲＡＭの記憶領域を説明する説明図である。
【図３】第１カーネル領域Ｆ−Ｋ１及び第２カーネル領域Ｆ−Ｋ２のデータを書き換えるためのＫ領域用書き換えデータを説明する説明図である。
【図４】一般プログラム領域Ｆ−Ｐのデータを書き換えるためのＰ領域用書き換えデータを説明する説明図である。
【図５】一般プログラム領域Ｆ−Ｐのデータに対して行われるサムチェックを説明する説明図である。
【図６】クライアントＰＣ５から送信された書き換えデータに基づいてデータ処理装置１のＦｌａｓｈＲＯＭ８に記憶されているファームウェアを書き換える場合に、データ処理装置１の制御部６が実行する処理（ファームウェアの書き換え方法）について説明するフローチャートである。
【図７】図６のフローチャートに続くフロー図である。
【図８】書き換えデータのデータサイズと書き換えデータによって書き換えるべき記憶領域との関係を記憶したテーブルを示す説明図である。
【図９】ＦｌａｓｈＲＯＭ８の第１カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラム、及び、第２カーネル領域Ｆ−Ｋ１に記憶されているカーネルプログラムを実行するためにＳＤＲＡＭ９の第１カーネル領域ＳＤ−Ｋ１及び第２カーネル領域ＳＤ−Ｋ２に読み込む場合に、データ処理装置１の制御部６が実行する処理（ファームウェアの読み込み方法）について説明するフローチャートである。
【符号の説明】
【００７６】
１        データ処理装置
６        制御部（ＭＰＵ）
７        インターフェース回路
８        ＦｌａｓｈＲＯＭ
９        ＳＤＲＡＭ
Ｆ−Ｂ    ブート領域
Ｆ−Ｋ１  第１カーネル領域
Ｆ−Ｋ２  第２カーネル領域
Ｆ−Ｐ    一般プログラム領域
Ｆ−Ｆ    フォント領域
【図１】
2008040924.tif 000003
【図２】
2008040924.tif 000004
【図３】
2008040924.tif 000005
【図４】
2008040924.tif 000006
【図５】
2008040924.tif 000007
【図６】
2008040924.tif 000008
【図７】
2008040924.tif 000009
【図８】
2008040924.tif 000010
【図９】
2008040924.tif 000011