(57)【特許請求の範囲】
【請求項１】
ＣＰＵと、
起動時に前記ＣＰＵによって実行される判別プログラムが記憶された判別プログラム領域と、ブートプログラムが記憶されたブートプログラム領域と、第１のアプリケーションプログラムと更新プログラムとを記憶するためのアプリケーションプログラム領域と、第２のアプリケーションプログラムまたはブートプログラムを記憶するための共通領域とを有する不揮発性メモリと
を備えた情報処理装置であって、
前記ＣＰＵは、
ブートプログラムの更新時に、前記アプリケーションプログラム領域に記憶された更新プログラムに基づいて、新たなブートプログラムを取得し、前記共通領域に記憶された前記第２のアプリケーションプログラムを削除して前記取得した新たなブートプログラムの書き込みを行い、
起動時に、前記判別プログラムに基づいて、前記共通領域にブートプログラムが存在するか否かを判別し、前記共通領域にブートプログラムが存在すると判別したときは、該共通領域のブートプログラムを前記ブートプログラム領域に複製した後、前記共通領域に記憶された内容を消去し、前記ブートプログラム領域に複製されたブートプログラムを実行し、当該ブートプログラムを実行した後に前記アプリケーションプログラム領域に記憶された前記第１のアプリケーションプログラムを実行するように制御する
ことを特徴とする情報処理装置。
【請求項２】
前記ＣＰＵは、前記ブートプログラムの更新時に、前記共通領域に対する前記取得した新たなブートプログラムの書き込みを行なった後、更に、前記共通領域のブートプログラムを前記ブートプログラム領域に複製し、さらにその後、前記共通領域の内容を消去するように制御する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
ブートプログラムが前記共通領域に存在することを示す判別コードを格納するためのコード領域を前記共通領域の末尾に設け、
前記ＣＰＵは、前記判別プログラムに基づいて、前記コード領域に前記判別コードが存在するか否かに基づいて前記共通領域にブートプログラムが存在するか否かを判別するように制御する
ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
ブートプログラムが前記共通領域に存在することを示す判別コードを格納するためのコード領域を前記共通領域の先頭に設け、
前記ＣＰＵは、前記判別プログラムに基づいて、前記コード領域に前記判別コードが存在するか否かに基づいて前記共通領域にブートプログラムが存在するか否かを判別するように制御する
ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項５】
前記ＣＰＵは、ブートプログラムの更新時に、前記コード領域以外の前記共通領域に対して新たなブートプログラムの書き込みを行なった後、前記コード領域に前記判別コードを書き込むように制御する
ことを特徴とする請求項３または４に記載の情報処理装置。
【請求項６】
前記不揮発性メモリは、フラッシュメモリであり、
前記コード領域から読み出された値が、内容の消去されたフラッシュメモリから読み出される値と同一の場合に、前記コード領域に判別コードが存在しないと判定する
ことを特徴とする請求項３乃至５のいずれか１つに記載の情報処理装置。
【請求項７】
前記判別プログラム領域の先頭アドレスは、前記ＣＰＵが起動時に最初にプログラムコードをフェッチするアドレスである
ことを特徴とする請求項１乃至６のいずれか１つに記載の情報処理装置。
【請求項８】
不揮発性メモリに、ブートプログラムが記憶されたブートプログラム領域と、第１のアプリケーションプログラムと更新プログラムとを記憶するためのアプリケーションプログラム領域と、第２のアプリケーションプログラムまたはブートプログラムを記憶するための共通領域とを設けておき、
ブートプログラムの更新時に、前記アプリケーションプログラム領域に記憶された更新プログラムに基づいて、新たなブートプログラムを取得し、前記共通領域に記憶された前記第２のアプリケーションプログラムを削除して前記取得した新たなブートプログラムの書き込みを行い、
起動時に
前記共通領域にブートプログラムが存在するか否かを判別し、
前記共通領域にブートプログラムが存在すると判別したときは、該共通領域のブートプログラムを前記ブートプログラム領域に複製し、
前記複製後に、前記共通領域に記憶された内容を消去し、
前記消去後に、前記ブートプログラム領域に複製されたブートプログラムを実行し、
当該ブートプログラムを実行した後に前記アプリケーションプログラム領域に記憶された前記第１のアプリケーションプログラムを実行する
ことを特徴とするブートプログラムの書き換え方法。
【請求項９】
前記ブートプログラム領域のブートプログラムを更新する際に、
前記共通領域に対する前記取得した新たなブートプログラムを書き込み、
前記書き込み後に、更に、前記共通領域のブートプログラムを前記ブートプログラム領域に複製し、
前記複製後に、前記共通領域の内容を消去する
ことを特徴とする請求項８に記載のブートプログラムの書き換え方法。
【請求項１０】
ブートプログラムが前記共通領域に存在することを示す判別コードを格納するためのコード領域を前記共通領域の末尾に設けておき、
前記コード領域に前記判別コードが存在するか否かに基づいて前記共通領域にブートプログラムが存在するか否かを判別する
ことを特徴とする請求項８または９に記載のブートプログラムの書き換え方法。
【請求項１１】
ブートプログラムが前記共通領域に存在することを示す判別コードを格納するためのコード領域を前記共通領域の先頭に設けておき、
前記コード領域に前記判別コードが存在するか否かに基づいて前記共通領域にブートプログラムが存在するか否かを判別する
ことを特徴とする請求項８または９に記載のブートプログラムの書き換え方法。
【請求項１２】
ブートプログラムを更新する際に、
前記コード領域以外の前記共通領域に対して新たなブートプログラムを書き込み、
前記新たなブートプログラムの書き込み後に、前記コード領域に前記判別コードを書き込む
ことを特徴とする請求項１０または１１に記載のブートプログラムの書き換え方法。
【請求項１３】
前記不揮発性メモリは、フラッシュメモリであり、
前記コード領域から読み出された値が、内容の消去されたフラッシュメモリから読み出される値と同一の場合に、前記コード領域に判別コードが存在しないと判定する
ことを特徴とする請求項１０乃至１２のいずれか１つに記載のブートプログラムの書き換え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブートプログラムの書き換え方法およびブートプログラムの書き換えが行なわれる情報処理装置に係わり、特に、ブートプログラム書き換えのために専用に消費されるメモリ容量を低減するための技術に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）を使用した装置では、電源オン時やリセット時にＣＰＵが最初に実行する、ブートプログラムと呼ばれるソフトウェアプログラムを備えており、該ブートプログラムを実行することでシステムの基本的な初期化動作を行なうようになっている。
【０００３】
ブートプログラムはシステムを起動するための基本プログラムであることから、ブートプログラムの書き換え処理においては、書き換え中に電源断があっても、電源オン後にシステムが正常に起動されることを保証する必要がある。
【０００４】
そこで、このような電源断に対する保証を行なうために、ブートプログラムを格納するための不揮発メモリエリアを２つ設けておき、ブートプログラムの書き換え時には、使用していないエリアに対して新たなブートプログラムの書き込みを行ない、書き込み完了後に専用のアドレス変換回路を使用することで、以前のブートプログラムの格納エリアに対するアクセスが、新たなブートプログラムの格納エリアに対するアクセスとなるようにアドレス変換する方法が提案されている（たとえば、特許文献１参照。）。
【０００５】
また、不揮発メモリに、ブートプログラムを格納するための２つの格納エリアと、いずれの格納エリアのブートプログラムで起動すべきかを示す判別フラグの保存専用エリアとを設け、ブートプログラムの書き換え時には、使用していない格納エリアに対して新たなブートプログラムの書き込みを行ない、書き込み完了後に判別フラグの値を変更し、次回の起動時には判別フラグを参照して、どちらかの格納エリアにあるブートプログラムを起動する技術が開示されている（たとえば、特許文献２参照。）。
【０００６】
【特許文献１】特開２００１−２０９５４３号公報
【特許文献２】特開２００４−３５５３１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記の技術では、いずれもブートプログラムを格納するためのエリアを２つ有しており、不揮発メモリのメモリ消費量が増加してしまうという問題があった。
【０００８】
また、判別フラグの保存専用エリアを設ける書き換え方法においては、メモリの消費量がさらに増加してしまう。特に、フラッシュメモリのようにデータの書き換えがセクタ単位に制限されている不揮発メモリを使用する場合には、判別フラグを保存するために多くのメモリが消費されてしまうという問題があった。たとえば、幅１６ビットのフラッシュメモリを４個並列に使用して６４ビット幅でデータをアクセスするように構成した場合には、判別フラグ（たとえば、必要量１バイト）を保存するために４セクタ（たとえば、５１２キロバイト）が消費されてしまい、多くのメモリが無駄になっていた。
【０００９】
本発明は、上記の問題を解決しようとするものであり、電源断に対する動作保証を行ないつつ、書き換え専用に消費されるメモリ容量を削減することのできるブートプログラムの書き換え方法および情報処理装置を提供することを目的としている。
【課題を解決するための手段】
【００１０】
上記の目的は以下に示す各項の発明により達成される。
【００１１】
（１）ＣＰＵと、
起動時に前記ＣＰＵによって実行される判別プログラムが記憶された判別プログラム領域と、ブートプログラムが記憶されたブートプログラム領域と、第１のアプリケーションプログラムと更新プログラムとを記憶するためのアプリケーションプログラム領域と、第２のアプリケーションプログラムまたはブートプログラムを記憶するための共通領域とを有する不揮発性メモリと
を備えた情報処理装置であって、
前記ＣＰＵは、
ブートプログラムの更新時に、前記アプリケーションプログラム領域に記憶された更新プログラムに基づいて、新たなブートプログラムを取得し、前記共通領域に記憶された前記第２のアプリケーションプログラムを削除して前記取得した新たなブートプログラムの書き込みを行い、
起動時に、前記判別プログラムに基づいて、前記共通領域にブートプログラムが存在するか否かを判別し、前記共通領域にブートプログラムが存在すると判別したときは、該共通領域のブートプログラムを前記ブートプログラム領域に複製した後、前記共通領域に記憶された内容を消去し、前記ブートプログラム領域に複製されたブートプログラムを実行し、当該ブートプログラムを実行した後に前記アプリケーションプログラム領域に記憶された前記第１のアプリケーションプログラムを実行するように制御する
ことを特徴とする情報処理装置。
【００１２】
上記発明によれば、ブートプログラム格納用のメモリに、判別プログラムが記憶された判別プログラム領域と、ブートプログラムが記憶されたブートプログラム領域と、アプリケーションプログラムまたはブートプログラムを記憶するための共通領域とを設けておき、共通領域に新たなブートプログラムが存在するか否かをシステム起動時に調べ、存在するときは該共通領域にある新たなブートプログラムをブートプログラム領域に複製した後、共通領域の内容を消去し、その後、ブートプログラム領域に複製したブートプログラムが実行される。
【００１３】
すなわち、共通領域は、通常はアプリケーションプログラムの格納領域として使用されるが、ブートプログラムの書き換え時には、新たなブートプログラムを一時格納するためのエリアとして利用される。これにより、ブートプログラムの書き換え専用に消費されるメモリ容量が削減される。
【００１４】
なお、共通領域にブートプログラムが存在しないときは、ブートプログラム領域にあるブートプログラムがシステムの起動に使用される。従って、共通領域に対する新たなブートプログラムの書き込み途中で電源断した場合は、共通領域に新たなブートプログラムが存在しないと判断され、電源オン後はブートプログラム領域のブートプログラムでシステムが起動される。一方、共通領域のブートプログラムをブートプログラム領域に複製中に電源断があった場合は、共通領域にブートプログラムが存在しているので、電源オン後に複製処理が実行される。このようにブートプログラム書き換え中のいずれの時点で電源断があっても、電源オン後の動作が保証される。
【００１５】
（２）  前記ＣＰＵは、前記ブートプログラムの更新時に、前記共通領域に対する前記取得した新たなブートプログラムの書き込みを行なった後、更に、前記共通領域のブートプログラムを前記ブートプログラム領域に複製し、さらにその後、前記共通領域の内容を消去するように制御する
ことを特徴とする（１）に記載の情報処理装置。
【００１６】
上記発明では、ユーザからの更新指示などに基づいて更新プログラムが実行されると、まず、新たなブートプログラムを共通領域に書き込み、その後、共通領域のブートプログラムをブートプログラム領域に複製し、さらにその後、共通領域の内容を消去するというステップでブートプログラムの書き換えが行なわれる。なお、更新後はＣＰＵのリセットや電源オフ・オンが行なわれ、ブートプログラム領域にある書き換え後のブートプログラムがシステムの起動に使用される。また、更新プログラムによるブートプログラムの書き換え中に電源断があっても、電源オン後は判別プログラムが起動されるので、（１）で説明したように電源オン後の動作は保証される。
【００１７】
（３）ブートプログラムが前記共通領域に存在することを示す判別コードを格納するためのコード領域を前記共通領域の末尾に設け、
前記ＣＰＵは、前記判別プログラムに基づいて、前記コード領域に前記判別コードが存在するか否かに基づいて前記共通領域にブートプログラムが存在するか否かを判別するように制御する
ことを特徴とする（１）または（２）に記載の情報処理装置。
【００１８】
上記発明によれば、共通領域の末尾をコード領域に割り当て、該コード領域に所定の判別コードが存在するか否かに基づいて、共通領域にブートプログラムが存在するか否かが判別される。コード領域を共通領域の一部に設けることで、判別コード専用の格納領域を別途設ける必要がなくなり、メモリ消費量が削減される。また、共通領域の末尾にコード領域を配置することで、コード領域を除く共通領域が該コード領域で分断されずに連続した領域となり、アプリケーションプログラムやブートプログラムを格納する際の領域管理が容易になる。
【００１９】
（４）ブートプログラムが前記共通領域に存在することを示す判別コードを格納するためのコード領域を前記共通領域の先頭に設け、
前記ＣＰＵは、前記判別プログラムに基づいて、前記コード領域に前記判別コードが存在するか否かに基づいて前記共通領域にブートプログラムが存在するか否かを判別するように制御する
ことを特徴とする（１）または（２）に記載の情報処理装置。
【００２０】
上記発明によれば、共通領域の先頭をコード領域に割り当て、該コード領域に所定の判別コードが存在するか否かに基づいて、共通領域にブートプログラムが存在するか否かが判別される。コード領域を共通領域の一部に設けることで、判別コード専用の格納領域を別途設ける必要がなくなり、メモリ消費量が削減される。また、共通領域の先頭にコード領域を配置することで、コード領域を除く共通領域が該コード領域で分断されずに連続した領域となり、アプリケーションプログラムやブートプログラムの格納する際の領域管理が容易になる。
【００２１】
（５）  前記ＣＰＵは、ブートプログラムの更新時に、前記コード領域以外の前記共通領域に対して新たなブートプログラムの書き込みを行なった後、前記コード領域に前記判別コードを書き込むように制御する
ことを特徴とする（３）または（４）に記載の情報処理装置。
【００２２】
上記発明では、ユーザからの更新指示などに基づいて更新プログラムが実行されると、まず、新たなブートプログラムを共通領域に書き込み、その後、コード領域に判別コードを書き込み、共通領域のブートプログラムをブートプログラム領域に複製し、さらにその後、共通領域（コード領域を含む）の内容を消去するというステップでブートプログラムの更新が行なわれる。該順序で書き換えることにより、コード領域に判別コードが存在するときは共通領域に新たなブートプログラムが完全な形で存在することが保証され、コード領域に判別コードがないときはブートプログラム領域にブートプログラムが完全な形で存在することが保証される。
【００２７】
（６）前記不揮発性メモリは、フラッシュメモリであり、
前記コード領域から読み出された値が、内容の消去されたフラッシュメモリから読み出される値と同一の場合に、前記コード領域に判別コードが存在しないと判定する
ことを特徴とする（３）乃至（５）のいずれか１つに記載の情報処理装置。
【００２８】
フラッシメモリはデータを書き換える際に、一旦、データを消去する必要がある。従って、判別コードの不存在を示す値を、内容の消去されたフラッシメモリから読み出される値と異なる値に設定しておけば、ブートプログラムが格納されていた共通領域や一時記憶領域を消去した時点で同時に、コード領域の内容がブートプログラムの不存在を示す値になり、不存在を示す値に変更するためのタイムラグがなくなって、電源断への対応がより確実なものになる。
【００２９】
（７）前記判別プログラム領域の先頭アドレスは、前記ＣＰＵが起動時に最初にプログラムコードをフェッチするアドレスである
ことを特徴とする（１）乃至（６）のいずれか１つに記載の情報処理装置。      
【００３０】
（８）不揮発性メモリに、ブートプログラムが記憶されたブートプログラム領域と、第１のアプリケーションプログラムと更新プログラムとを記憶するためのアプリケーションプログラム領域と、第２のアプリケーションプログラムまたはブートプログラムを記憶するための共通領域とを設けておき、
ブートプログラムの更新時に、前記アプリケーションプログラム領域に記憶された更新プログラムに基づいて、新たなブートプログラムを取得し、前記共通領域に記憶された前記第２のアプリケーションプログラムを削除して前記取得した新たなブートプログラムの書き込みを行い、
起動時に
前記共通領域にブートプログラムが存在するか否かを判別し、
前記共通領域にブートプログラムが存在すると判別したときは、該共通領域のブートプログラムを前記ブートプログラム領域に複製し、
前記複製後に、前記共通領域に記憶された内容を消去し、
前記消去後に、前記ブートプログラム領域に複製されたブートプログラムを実行し、
当該ブートプログラムを実行した後に前記アプリケーションプログラム領域に記憶された前記第１のアプリケーションプログラムを実行する
ことを特徴とするブートプログラムの書き換え方法。
【００３１】
（９）前記ブートプログラム領域のブートプログラムを更新する際に、
前記共通領域に対する前記取得した新たなブートプログラムを書き込み、
前記書き込み後に、更に、前記共通領域のブートプログラムを前記ブートプログラム領域に複製し、
前記複製後に、前記共通領域の内容を消去する
ことを特徴とする（８）に記載のブートプログラムの書き換え方法。
【００３２】
（１０）ブートプログラムが前記共通領域に存在することを示す判別コードを格納するためのコード領域を前記共通領域の末尾に設けておき、
前記コード領域に前記判別コードが存在するか否かに基づいて前記共通領域にブートプログラムが存在するか否かを判別する
ことを特徴とする（８）または（９）に記載のブートプログラムの書き換え方法。
【００３３】
（１１）ブートプログラムが前記共通領域に存在することを示す判別コードを格納するためのコード領域を前記共通領域の先頭に設けておき、
前記コード領域に前記判別コードが存在するか否かに基づいて前記共通領域にブートプログラムが存在するか否かを判別する
ことを特徴とする（８）または（９）に記載のブートプログラムの書き換え方法。
【００３４】
（１２）ブートプログラムを更新する際に、
前記コード領域以外の前記共通領域に対して新たなブートプログラムを書き込み、
前記新たなブートプログラムの書き込み後に、前記コード領域に前記判別コードを書き込む
ことを特徴とする（１０）または（１１）に記載のブートプログラムの書き換え方法。
【００３７】
（１３）前記不揮発性メモリは、フラッシュメモリであり、
前記コード領域から読み出された値が、内容の消去されたフラッシュメモリから読み出される値と同一の場合に、前記コード領域に判別コードが存在しないと判定する
ことを特徴とする（１０）乃至（１２）のいずれか１つに記載のブートプログラムの書き換え方法。
【発明の効果】
【００３８】
本発明に係わる情報処理装置およびブートプログラムの書き換え方法によれば、ブートプログラムの書き換え専用に消費されるメモリ容量が削減されて、メモリを有効活用することができる。
【発明を実施するための最良の形態】
【００３９】
以下、図面に基づき本発明の実施の形態を説明する。
【００４０】
図１は、本発明の実施の形態に係わる情報処理装置１０の構成を示すブロック図である。情報処理装置１０は、ＣＰＵ１１と、メモリ１２と、フラッシュメモリ１３と、デバイスコントローラ１４とを、システムバス１５で接続して構成されている。
【００４１】
ＣＰＵ１１は、該情報処理装置１０の動作を統括制御する機能を果たし、フラッシュメモリ１３は、ＣＰＵ１１が実行する各種のプログラムを記憶するメモリである。フラッシュメモリ１３は、電気的に消去および書き換え可能な不揮発性のメモリである。フラッシュメモリ１３には、起動の際に用いるブートプログラムや後述する判別プログラム、アプリケーションプログラムなどが格納される。フラッシュメモリ１３に代えて他の種類の不揮発性メモリを使用してもよい。
【００４２】
メモリ１２は、ＣＰＵ１１がフラッシュメモリ１３に格納されているプログラムを実行する際のワークメモリとして使用される電気的に書き換え可能なメモリである。デバイスコントローラ１４は、書き換えに用いる新たなブートプログラムを外部のパーソナルコンピュータなどから取り込むための入出力インターフェースであり、たとえば、ＵＳＢ（Universal Serial Bus）やＩＥＥＥ（Institute of Electrical and Electronics Engineers）１２８４などに対応したものである。メモリ１２は、外部から受信した新たなブートプログラムを一時的に保存するための領域としても使用される。
【００４３】
図２（ａ）はフラッシュメモリ１３のメモリマッピングを示し、図２（ｂ）はメモリ１２のメモリマッピングを示している。図２（ａ）に示すように、フラッシュメモリ１３のアドレスＡから始まる領域２１は、後述する判別プログラムが予め格納された判別プログラム領域２１である。アドレスＢから始まるブートプログラム領域２２はブートプログラムが格納される領域である。アドレスＣから始まるアプリケーションプログラム領域２３は、各種のアプリケーションプログラムの格納に使用される領域である。アプリケーションプログラム領域２３には、ブートプログラムを更新するための後述する更新プログラムなどが記憶される。
【００４４】
アドレスＤから始まる共通領域２４は、アプリケーションプログラムの格納およびブートプログラムを格納するために使用される領域である。アドレスＥから始まるコード領域２４ａは、共通領域２４内の末尾の一部をなす領域であり、共通領域２４に新たなブートプログラムが完全な状態で存在していることを示す判別コードの格納領域として使用される。ここでは、コード領域２４ａとして共通領域２４の末尾の４バイトを割り当ててある。共通領域２４は、アプリケーションプログラム領域２３の後方に連続して配置されており、コード領域２４ａを除く部分は、アプリケーションプログラムを格納するときにはアプリケーションプログラム領域２３と一体となった連続領域として使用することができる。
【００４５】
情報処理装置１０の電源投入時やリセット実行時には、ＣＰＵ１１は、フラッシュメモリ１３のアドレスＡからプログラムコードをフェッチして実行するように設定されている。
【００４６】
なお、フラッシュメモリ１３は、その特性上、データの書き換えがセクタ単位に制限されているので、判別プログラム領域２１、ブートプログラム領域２２、アプリケーションプログラム領域２３、共通領域２４のそれぞれの境界がセクタの境界となるように設定してある。コード領域２４ａは、１つのセクタを専用に使用するものではなく、共通領域２４を構成する最終セクタ内の末尾の一部領域となっている。
【００４７】
また、図２（ｂ）に示すように、メモリ１２のアドレスＭＡから始まるバッファ領域２８は、デバイスコントローラ１４を通じて外部から入手した新たなブートプログラムが一時的に保存される領域である。
【００４８】
次に、ブートプログラムの書き換え動作について説明する。
【００４９】
図３は、更新プログラムによるブートプログラムの更新処理の流れを示している。また、図４、図５および図６は、ブートプログラムを更新するときのフラッシュメモリ１３の記憶内容の遷移を示している。更新プログラムは、情報処理装置１０が正常に立ち上がった後、図示省略の操作部やデバイスコントローラ１４を介して外部端末からブートプログラムの更新指示を受けた場合に実行される。
【００５０】
図４（ａ）は更新前のフラッシュメモリ１３の記憶内容を示している。ブートプログラム領域２２には現用のブートプログラムが格納されており、アプリケーションプログラム領域２３および共通領域２４（コード領域２４ａを除く）には、アプリケーションプログラムが格納されている。更新プログラムは、たとえば、アプリケーションプログラム領域２３に記憶されている。コード領域２４ａは消去状態になっている。フラッシュメモリ１３の特性から、消去状態のコード領域２４ａを読み出すと０ｘＦＦＦＦＦＦＦＦの値が読み出される。すなわち、内容の消去されたフラッシュメモリから読み出される値である０ｘＦＦＦＦＦＦＦＦは、コード領域２４ａに判別コードが存在しない状態を示す値として定義してある。
【００５１】
図３に戻ると、情報処理装置１０においては、ＣＰＵ１１が更新プログラムを実行することにより、以下の動作が行なわれる。まず、デバイスコントローラ１４を介してパーソナルコンピュータなどの外部機器から、書き換えるべき新たなブートプログラムを受信し、該新たなブートプログラムがメモリ１２のアドレスＭＡから始まるバッファ領域２８に一時的に保持される（ステップＳ１０１）。また、新たなブートプログラム全体の受信およびバッファ領域２８への保存が完了すると（ステップＳ１０２；Ｙ）、共通領域２４に記憶されている内容を消去する（ステップＳ１０３、図４（ｂ））。
【００５２】
共通領域２４の内容の消去が完了すると（ステップＳ１０４；Ｙ）、バッファ領域２８に保存してある新たなブートプログラムを共通領域２４に書き込み、複製する（ステップＳ１０５、図４（ｃ））。書き込みは共通領域２４の先頭アドレスＤから行なわれる。メモリ１２からフラッシュメモリ１３へのブートプログラムの複製の完了後、コード領域２４ａに対して判別コードを書き込む（ステップＳ１０６、図５（ｄ））。なお、新たなプログラムの格納に共通領域２４の最後のセクタが使用される場合は、該最後のセクタへ書き込む際に判別コードをコード領域２４ａに対して書き込む。判別コードの値は、消去状態のメモリ１２から読み出される値（０ｘＦＦＦＦＦＦＦＦ）とは異なる値になっている。
【００５３】
次に、ＣＰＵ１１は、ブートプログラム領域２２の内容を消去し（ステップＳ１０７、図５（ｅ））、該消去が完了すると（ステップＳ１０８；Ｙ）、共通領域２４に格納されている新たなブートプログラムをブートプログラム領域２２に複製する（ステップＳ１０９、図５（ｆ）、図６（ｇ））。その後、共通領域２４の内容を消去し（ステップＳ１１０、図６（ｈ））、消去が完了すると（ステップＳ１１１；Ｙ）、ＣＰＵ１１をリセット（ステップＳ１１２）して処理を終了する（エンド）。
【００５４】
上記の処理によれば、共通領域２４に新たなブートプログラムを格納する際に、それ以前に共通領域２４に格納されていたアプリケーションプログラムは消去されるが、通常、ブートプログラムを更新したときは、それに伴ってアプリケーションプログラムの更新やアプリケーションプログラムのアドレス配置を変更することが行なわれるので、ブートプログラムの更新時に共通領域２４の内容を消去しても支障はない。図６（ｉ）は、ブートプログラムの更新後、アプリケーションプログラム領域２３および共通領域２４にアプリケーションプログラムが改めて格納された状態の一例を示している。
【００５５】
次に、情報処理装置１０の電源投入時またはリセット時の動作を図７に基づいて説明する。
【００５６】
電源投入またはＣＰＵ１１に対するリセットが行なわれると（ステップＳ２０１）、ＣＰＵ１１は、判別プログラム領域２１の先頭アドレスＡからプログラムコードのフェッチを開始し、該判別プログラム領域２１に格納されている判別プログラムの実行を開始する（ステップＳ２０２）。ＣＰＵ１１が判別プログラムを実行することにより以下の動作が行なわれる。まず、コード領域２４ａの内容を読み出し（ステップＳ２０３）、読み出した値が０ｘＦＦＦＦＦＦＦＦか否かを判定する（ステップＳ２０４）。
【００５７】
コード領域２４ａから読み出した値が０ｘＦＦＦＦＦＦＦＦの場合は（ステップＳ２０４；Ｙ）、共通領域２４に新たなブートプログラムが存在しないと判断し、ＣＰＵ１１のプログラムカウンタをブートプログラム領域２２の先頭アドレスに変更し（ステップＳ２１０）、ブートプログラム領域２２に格納されている現行のブートプログラムを実行する（ステップＳ２１１）。該ブートプログラムによる起動処理が終了すると（エンド）、その後は、所定のアプリケーションプログラムが実行される。
【００５８】
なお、ブートプログラムによる起動処理の終了直後においては、共通領域２４内のアプリケーションプログラムがブートプログラム更新のために消去されている可能性がある。そこで、ブートプログラムの実行後最初に実行されるアプリケーションプログラムは、フラッシュメモリ１３のアプリケーションプログラム領域２３に格納されているもの、あるいは他の不揮発性メモリに保存されているものとなるように設定することが望ましい。
【００５９】
コード領域２４ａから読み出した値が０ｘＦＦＦＦＦＦＦＦでない場合は（ステップＳ２０４；Ｎ）、共通領域２４に新たなブートプログラムが存在すると判断し、ブートプログラムの更新処理を行なう。すなわち、ＣＰＵ１１は、ブートプログラム領域２２の内容を消去し（ステップＳ２０５、図５（ｅ））、該消去が完了すると（ステップＳ２０６；Ｙ）、共通領域２４に格納されている新たなブートプログラムをブートプログラム領域２２に複製する（ステップＳ２０７、図５（ｆ）、図６（ｇ））。その後、共通領域２４の内容を消去し（ステップＳ２０８、図６（ｈ））、消去が完了すると（ステップＳ２０９；Ｙ）、ＣＰＵ１１のプログラムカウンタをブートプログラム領域２２の先頭アドレスに変更し（ステップＳ２１０）、ブートプログラム領域２２に格納された新たなブートプログラムを実行して（ステップＳ２１１）、起動処理を終了する（エンド）。その後は、アプリケーションプログラムが実行される。
【００６０】
次に、ブートプログラムの書き換え中に電源断が起きた場合の動作保証について説明する。図３および図７の各処理においては、コード領域２４ａに判別コード（０ｘＦＦＦＦＦＦＦＦ以外の値）が格納されているときは、共通領域２４に完全な状態の新たなブートプログラムが存在することが保証される。また、コード領域２４ａが消去状態にあるときには、ブートプログラム領域２２に完全な状態のブートプログラムが存在することが保証される。そして、判別プログラムは、コード領域２４ａに判別コード（０ｘＦＦＦＦＦＦＦＦ以外の値）が存在すれば共通領域２４のブートプログラムをブートプログラム領域２２に複製し、その後、この複製されたブートプログラムを実行し、コード領域２４ａに判別コードがなく消去状態（０ｘＦＦＦＦＦＦＦＦ）のときはブートプログラム領域２２のブートプログラムを実行するので、ブートプログラムの書き換え中のどの時点で電源断があっても、ブートプログラム領域２２もしくは共通領域２４に存在する完全な状態のブートプログラムを用いて起動処理が行なわれる。
【００６１】
たとえば、バッファ領域２８に保存されている新たなブートプログラムを共通領域２４に対して書き込み中（図４（ｃ））に電源断した場合は、コード領域２４ａが消去状態（０ｘＦＦＦＦＦＦＦＦ）となっているので、次の電源オン時には、新たなブートプログラムが共通領域２４に存在しないと判別され（図７、ステップＳ２０４；Ｙ）、ブートプログラム領域２２にあるブートプログラムを使用して起動処理が行なわれる。
【００６２】
また、ブートプログラム領域２２を消去したとき（図５（ｅ））や共通領域２４にある新たなブートプログラムをブートプログラム領域２２に複製中（図５（ｆ））に電源断した場合は、コード領域２４ａに判別コードが書き込まれているので、次の電源オン時には、新たなブートプログラムが共通領域２４に存在すると判別され（図７、ステップＳ２０４；Ｎ）、該新たなブートプログラムのブートプログラム領域２２への複製処理が実行される（図７ステップＳ２０５〜Ｓ２０９）。そして、ブートプログラムの更新が完了するとブートプログラム領域２２に格納された新たなブートプログラムを使用して起動処理が実行される（ステップＳ２１０、Ｓ２１１）。
【００６３】
このように、ブートプログラムの更新中の電源断に対して確実な動作保証を行なうためには、現用のブートプログラムと新たなブートプログラムとを同時に格納するための記憶領域を必要とする。しかしながら本実施の形態では、通常はアプリケーションプログラムの格納される領域を、ブートプログラム書き換え中に新たなブートプログラムを一時的に格納する領域に共用したので、新たなブートプログラムを格納するための専用領域を設ける必要がなく、フラッシュメモリ１３のメモリ消費量を削減することができる。
【００６４】
さらに、共通領域２４の末尾の一部領域に判別コードを格納するためのコード領域２４ａを割り当てたので、フラッシュメモリのようにデータの書き換えがセクタ単位に制限されているメモリを使用した場合でも、判別コードの格納用に専用セクタを設ける必要がなく、メモリを有効活用することができる。特に、複数のメモリを並列構成にしてビット幅を増やした場合には、判別コードの格納用に消費されるセクタ数がメモリの並列個数に順じて増加するので、専用セクタを設けずに済むことによるメモリの削減効果が大きい。
【００６５】
以上、本発明の実施の形態を図面によって説明してきたが、具体的な構成は実施の形態に示したものに限られるものではなく、本発明の要旨を逸脱しない範囲における変更や追加があっても本発明に含まれる。
【００６６】
たとえば、実施の形態ではコード領域２４ａを共通領域２４の末尾に割り当てたが、アプリケーション領域の手前に共通領域２４を配置する場合には、共通領域２４の先頭にコード領域２４ａを割り当ててもかまわない。要するに、共通領域２４にアプリケーションプログラムを格納する際に共通領域２４とアプリケーションプログラム領域２３とを連続した領域として使用できるように、コード領域２４ａがアプリケーションプログラム領域２３と共通領域２４とを結合させた連続領域の端に位置するようにすればよい。
【００６７】
実施の形態ではアプリケーションプログラム領域２３と共通領域２４とを設けたが、アプリケーションプログラム領域２３と共通領域２４とを結合させた領域全体を共通領域としてもよい。コード領域２４ａを該共通領域の先頭または末尾に配置すればよい。なお、アプリケーションプログラム領域２３と共通領域２４とを区別することでブートプログラムの書き換え時に消去すべきメモリ領域を少なくでき、処理時間が短縮される。
【００６８】
また、実施の形態では、共通領域２４に新たなブートプログラムを一時格納するようにしたが、新たなブートプログラムの一時記憶用に専用エリアを設け、該専用エリアの一部に判別コードを保存するためのコード領域を割り当てるようにしてもよい。かかる場合においても、判別コード格納用に専用のセクタを割り当てる場合に比べて、ブートプログラムの書き換え専用に消費されるメモリ量が低減される。
【００６９】
フラッシュメモリはデータの書き換え前に内容の消去を要するが、ブートプログラムの格納用メモリとして、データの書き換え前に消去処理を必要としないメモリを使用する場合には、新たなブートプログラムが共通領域２４に存在していないことを示す値として、消去状態で読み出される値（０ｘＦＦＦＦＦＦＦＦ）以外の値を使用してもかまわない。
【００７０】
情報処理装置１０は、ＣＰＵが起動時にブートプログラムを実行する装置であればよく、たとえば、複写機や複合機などの画像形成装置が該当する。
【図面の簡単な説明】
【００７１】
【図１】本発明の実施の形態に係わる情報処理装置の構成を示すブロック図である。
【図２】本発明の実施の形態に係わる情報処理装置におけるメモリおよびフラッシュメモリのメモリマッピングを示す説明図である。
【図３】本発明の実施の形態に係わる情報処理装置の更新プログラムの処理を示す流れ図である。
【図４】ブートプログラムの更新時におけるフラッシュメモリの記憶内容の遷移を示す説明図である。
【図５】図４の続きを示す説明図である。
【図６】図５の続きを示す説明図である。
【図７】本発明の実施の形態に係わる情報処理装置が電源投入時もしくはリセット時に行なう処理を示す流れ図である。
【符号の説明】
【００７２】
１０…情報処理装置
１１…ＣＰＵ
１２…メモリ
１３…フラッシュメモリ
１４…デバイスコントローラ
１５…システムバス
２１…判別プログラム領域
２２…ブートプログラム領域
２３…アプリケーションプログラム領域
２４…共通領域
２４ａ…コード領域
２８…バッファ領域
【図１】
0004826232.tif 000002
【図２】
0004826232.tif 000003
【図３】
0004826232.tif 000004
【図４】
0004826232.tif 000005
【図５】
0004826232.tif 000006
【図６】
0004826232.tif 000007
【図７】
0004826232.tif 000008