(57)【要約】【課題】プログラムの更新の際に、当該更新による障害の発生を抑止する。【解決手段】ＲＯＭ２に、起動処理プログラム群、機能プログラム群を、起動処理プログラム群、機能プログラム群の順番に記録する。機能プログラム群は、電子機器の各種機能を実現するためのプログラムの群である。一方、起動処理プログラム群は、電子機器の初期化を行う初期化プログラムと、機能プログラムの起動処理を行う起動プログラムと、ＲＯＭ２の機能プログラム群を更新するための更新プログラムを含んでおり、これらは、初期化プログラム、起動プログラム、更新プログラムの順の順番にＲＯＭ２に記録される。そして、更新プログラムによって、ＲＯＭ２の機能プログラム群を更新する。【選択図】図２
2004094820.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行することにより機能を果たす電子機器であって、
前記プログラムを格納した可書換型の不揮発性のメモリを備え、
前記不揮発性のメモリ上には、電子機器に前記機能を遂行させるための第１のプログラム群と、電子機器を初期化し前記第１のプログラム群のプログラムを起動する起動処理プログラムと前記第１のプログラム群のプログラムを新たなプログラムに更新するための更新プログラムとを含む第２のプログラム群とが、各々のプログラム群を独立に書き換え可能なように分割配置されており、
前記更新プログラムは、前記第１のプログラム群のプログラムを新たなプログラムに更新する処理を前記電子機器に実行させるプログラムであることを特徴とする電子機器。
【請求項２】
請求項１記載の電子機器であって、
前記更新プログラムは、前記第１のプログラム群のプログラムを新たなプログラムに更新し、更新の正常性を検証し、正常性の検証が失敗した場合に、第１のプログラム群のプログラムを再更新する処理を前記電子機器に実行させるプログラムであることを特徴とする電子機器。
【請求項３】
請求項１または２記載の電子機器であって、
前記更新プログラムは、前記第１のプログラム群のプログラムと前記第２のプログラム群のプログラムとを、相互に独立した前記不揮発性メモリの書き換えシーケンスによって更新する処理を前記電子機器に実行させるプログラムであることを特徴とする電子機器。
【請求項４】
請求項３記載の電子機器であって、
前記更新プログラムは、前記第２のプログラム群のプログラムの更新の際に、前記起動処理プログラムを最初に更新する処理を前記電子機器に実行させるプログラムであることを特徴とする電子機器。
【請求項５】
プログラムを実行することにより機能を果たす電子機器のプログラムを更新するプログラム更新方法であって、
前記電子機器の可書換型の不揮発性のメモリに、電子機器に前記機能を遂行させるための第１のプログラム群と、電子機器を初期化し前記第１のプログラム群のプログラムを起動する起動処理プログラムと前記第１のプログラム群のプログラムを新たなプログラムに更新するための更新プログラムとを含む第２のプログラム群とを、各々のプログラム群を独立に書き換え可能なように分割配置して記録するステップと、
前記更新プログラムを電子機器に実行させることにより、前記電子機器において、前記第１のプログラム群のプログラムを新たなプログラムに更新し、更新の正常性を検証し、正常性の検証が失敗した場合に、第１のプログラム群のプログラムを再更新する処理を実行するステップとを有することを特徴とするプログラム更新方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、各種電子機器に組み込まれるファームウエアプログラムなどのプログラムを、バージョンアップなどのために更新する技術に関するものであり、特に、当該更新による障害の発生を抑止する技術に関するものである。
【０００２】
【従来の技術】
たとえば、各種電子機器には、ＲＯＭなどの可書換型の不揮発性メモリに格納された形態で組み込まれるファームウエアプログラムを、バージョンアップのために適時更新する機能が予め組み込まれていることが多い。
そして、従来は、このようなファームウエアプログラムの更新は、単に、ＲＯＭ上のファームウエアプログラムを、新しいファームウエアプログラムに書き換えることにより行われてきた。
【０００３】
【発明が解決しようとする課題】
従来のファームウエアプログラム更新の技術によれば、更新作業途中で電源のオフ等の障害が発生した場合、ＲＯＭ上のファームウエアプログラムが不完全な形で書き換えられてしまい、その後、ファームウエアプログラムを正常に実行できないために、その電子機器を正常に起動することができなくなったり、ファームウエアプログラムの再更新を行えなくなってしまうことがある。
【０００４】
そこで、本発明は、プログラムの更新の際に、当該更新による障害の発生を抑止する自己更新プログラムを提供することを課題とする。
【０００５】
【課題を解決するための手段】
前記課題達成のために、本発明は、プログラムを実行することにより機能を果たす電子機器の、前記プログラムを格納した可書換型の不揮発性のメモリ上に、電子機器に前記機能を遂行させるための第１のプログラム群と、電子機器を初期化し前記第１のプログラム群のプログラムを起動する起動処理プログラムと前記第１のプログラム群のプログラムを新たなプログラムに更新するための更新プログラムとを含む第２のプログラム群とを、各々のプログラム群を独立に書き換え可能なように分割配置して記憶し、前記更新プログラムを、前記第１のプログラム群のプログラムを新たなプログラムに更新する処理を前記電子機器に実行させるプログラムとしたものである。
【０００６】
このように、第１のプログラム群と第２のプログラム群を分割して記録し、第１のプログラム群の更新を行うので、第１のプログラム群の更新処理中に障害が発生した場合であっても、その障害によって、第２のプログラム群が損傷を受けてしまうことがない。
【０００７】
したがって、もし、更新処理によって障害が起きた場合であっても、再起動によって第２のプログラム群に属する各プログラムの機能を利用することができるので、たとえば第２のプログラム群に属する更新処理プログラムを用いて、プログラムの再更新などを行うことができるようになる。
なお、このような電子機器においては、前記更新プログラムを、前記第１のプログラム群のプログラムの更新の正常性を検証し、正常性の検証が失敗した場合に、第１のプログラム群のプログラムを再更新する処理を前記電子機器に実行させるプログラムとしてもよく、このようにすることにより、より確実に第１のプログラム群のプログラムの更新を行うことができるようになる。
【０００８】
ここ前記更新プログラムは、前記第１のプログラム群のプログラムと前記第２のプログラム群のプログラムとを、相互に独立した前記不揮発性メモリの書き換えシーケンスによって更新する処理を前記電子機器に実行させるプログラムとしても良い。このように揮発性メモリの書き換えシーケンスを、第１のプログラム群と、通常第１のプログラム群のプログラムに比べ容量が小さい第２のプログラム群について独立に行うことにより、第２のプログラム群のプログラムの更新処理中に障害が発生する確率を低く抑えることができ、これにより更新処理後に第２のプログラム群のプログラムが稼働しないことにより電子機器の動作がフリーズ等したり、更新プログラムによる再更新を行えなくなってしまうことを抑止することができる。
【０００９】
また、この場合において、前記更新プログラムは、前記第２のプログラム群のプログラムの更新の際に、前記起動処理プログラムを最初に更新するプログラムとするのが良い。これによって起動処理プログラムに対して更新処理によって障害が発生する確率を低く抑え、更新処理後に起動処理プログラムが稼働しないことにより電子機器の動作がフリーズ等してしまい、その後に問題を克服するための処置をとることができなくなってしまうことを抑止することができる。
【００１０】
【発明の実施の形態】
以下、本発明の実施形態について電子機器のファームウエアプログラムの更新への適用を例にとり説明する。
図１に、本実施形態においてファームウエアプログラム更新の対象とする電子機器の構成例を示す。
図示するように、この電子機器は、ＣＰＵ１、フラッシュメモリなどの可書換型のＲＯＭ２、ＣＰＵ１の主記憶として使用されるＲＡＭ３、過般型のメモリカードなどの外部記憶媒体５を装着可能な外部記憶媒体インタフェース４、入力インタフェース６を介して接続された、キースイッチなどの入力装置７、表示インタフェース８を介して接続されたＬＣＤなどの表示装置９、当該電子機器の機能を提供する機能部１０、他装置と接続するための外部入出力インタフェース１１とを有する。なお、ＲＯＭ２は、ブロックを単位にデータの消去や書き込みを行うことのできる可書換型の不揮発性メモリである。
【００１１】
ここで、電子機器はたとえばプリンタなどであり、この場合、機能部１０は印刷機能を提供するものとなり、外部入出力インタフェース１１でパーソナルコンピュータやデジタルカメラなどのプリンタのホストとなる装置に接続することになる。
【００１２】
さて、本実施形態においては、図２に示すように、ＲＯＭ２に、起動処理プログラム群、機能プログラム群を、起動処理プログラム群と機能プログラム群でＲＯＭ２のブロックを共用しないように、起動処理プログラム群、機能プログラム群の順番に記録する。ここで、機能プログラム群は、電子機器の各種機能を実現するための機能プログラムの群である。一方、起動処理プログラム群は、電子機器の初期化を行う初期化プログラムと、機能プログラムの起動処理を行う起動プログラムと、ＲＯＭ２の機能プログラム群を更新するための更新プログラムをまとめたものであり、これらは、初期化プログラム、起動プログラム、更新プログラムの順の順番にＲＯＭ２に記録される。
【００１３】
さて、このような電子機器の構成において、オペレータは、ＲＯＭ２の機能プログラム群の更新を、新しい機能プログラム群（以下、便宜上「更新後プログラム」と記す）を格納した外部記憶媒体５を、外部記憶媒体インタフェース４に装着し、入力装置７を介して更新指示を入力することにより行う。
【００１４】
更新指示が入力されると、ＣＰＵ１は、更新プログラムをＲＡＭ３にロードし実行することにより、以下に示す更新処理を行う。
図３に、この更新処理の手順を示す。
図示するように、この更新処理では、まず、更新中フラグをセットする（ステップ３０２）。この更新中フラグは、不揮発性のメモリにセットする。この不揮発性のメモリとしてはＲＯＭ２を用いることもできるが、別途、不揮発性のレジスタを備えるようにしてもよい。
【００１５】
次に、ｉを０に設定し（ステップ３０４）、ＲＯＭ２のＳｔ＋ｉ番目のブロックを消去する（ステップ３０６）。ここで、Ｓｔは、ＲＯＭ２上において機能プログラム群を記録している先頭のブロックの番号である。
そして、外部記憶媒体５から更新後プログラムの先頭からｉブロックサイズ進んだアドレスからデータを１ブロック分読み出し、ＲＯＭ２のＳｔ＋ｉ番目のブロックにコピーする（ステップ３０８）。
そして、ＲＯＭ２に記憶したデータを読み出し、先に外部記憶媒体５から読み出したデータとの一致性を検証する（ステップ３１０）。そして、検証が成功したかどうかを調べ（ステップ３１２）、検証が失敗したならば、ステップ３０８に戻り、もう一度データのコピーを行う。ただし、ＲＯＭ２の同じブロックについて所定回数以上検証が失敗した場合には、所定のエラー処理を行うようにしてもよい。
【００１６】
一方、検証が成功した場合には、外部記憶媒体５の更新後プログラムの最後のデータまで、ＲＯＭ２へのコピーが完了したかどうかを調べ（ステップ３１４）、完了していれば、更新中フラグをクリアし（ステップ３１６）処理を終了する。
一方、まだ、記憶媒体の更新後プログラムの最後のデータまで、ＲＯＭ２へのコピーが完了していない場合には、ｉを１進め（ステップ３１８）、ステップ３０６に戻り、次のＲＯＭ２のブロックへの外部記憶媒体５からの更新後プログラムのデータのコピーを行う。
【００１７】
ここで、以上のようなＲＯＭ２上への各プログラムの配置と更新処理によれば、起動処理プログラム群と機能プログラム群を分割してＲＯＭ２に記録し、機能プログラム群の更新を行うので、更新処理中に障害が発生した場合であっても、その障害によって、起動処理プログラム群が損傷を受けてしまうことがない。
【００１８】
したがって、更新処理によって障害が起きた場合であっても、再起動によって起動処理プログラム群に属する各プログラムの機能を利用することができるようになり、たとえば、起動処理プログラム群に属する更新処理プログラムを用いて、ＲＯＭ２上のプログラムの再更新などを行うことができるようになる。
【００１９】
ところで、電子機器起動時に起動プログラムにおいて、前述した更新フラグがセットされている場合には自動的に更新処理プログラムを実行するようにすれば、自動的に上述のようなＲＯＭ２上のプログラムの再更新を行うことができるようになる。
【００２０】
さて、以上のような電子機器において、起動処理プログラム群の更新を行う場合には、図２に示すように、以上の更新処理と同様な処理により、起動処理プログラム群の更新を行う起動処理プログラム群更新用の更新プログラムを機能プログラム群に含め、このプログラムをＣＰＵが実行することにより起動処理プログラム群の更新を行うようにすればよい。
【００２１】
この場合において、前述のように起動処理プログラム群内においては、初期化プログラム、起動処理プログラムがＲＯＭ２の先頭に記録されており、これらが最初に更新されるようにしているので、起動プログラム群の更新処理において発生した障害によって、初期化プログラム、起動処理プログラムが損傷する確率を低く抑えることができ、これによって更新処理後に電子機器の動作がフリーズ等してしまい、その後に問題を克服するための処置をとることができなくなってしまうことを抑止することができる。
【００２２】
以上のように本実施形態によれば、プログラムの更新処理を行っている際に、電源オフや、更新後プログラムの不具合や、外部記憶媒体５の抜き取りなどの影響により、プログラムメモリに書き込んだプログラムに問題が生じた場合でも、その問題を克服するための処理を継続することができる確率を高めることができる。
【００２３】
ところで、以上の実施形態の図３に示した更新処理においては、前記Ｓｔを０に設定することにより、起動処理プログラム群と機能プログラム群の双方を更新するように構成することもできる。このようにした場合においても、起動処理プログラム群をＲＯＭ２の先頭に記録し、最初に更新されるようにしているので、更新処理において発生した障害によって起動処理プログラム群が損傷する確率を低く抑えることができ、これによって更新処理後に電子機器の動作がフリーズ等してしまい、その後に問題を克服するための処置をとることができなくなってしまうことを抑止することができる。
【００２４】
または、図３に示した更新処理に代えて、図４に示す更新処理を行うように更新プログラムを構成することにより、更新プログラムにより起動処理プログラム群と機能プログラム群の双方を更新するように構成してもよい。
すなわち、更新処理において、まず、更新中フラグをセットする（ステップ４０２）。次に、対象を起動処理プログラム群に設定し（ステップ３０４）、ＲＯＭ２の起動処理プログラム群記録ブロックを消去する（ステップ４０６）。
そして、外部記憶媒体５から対象として設定した起動処理プログラム群のデータを読み出し、ＲＯＭ２にコピーする（ステップ４０８）。
そして、ＲＯＭ２に記憶したデータを読み出し、先に外部記憶媒体５から読み出したデータとの一致性を検証する（ステップ４１０）。そして、検証が成功したかどうかを調べ（ステップ４１２）、検証が失敗したならば、ステップ４０８に戻り、もう一度データのコピーを行う。
【００２５】
一方、検証が成功した場合には、更新が終了したかどうかを（ステップ４１４）、完了していれば、更新中フラグをクリアし（ステップ４１６）処理を終了する。ここで、更新は、その時点で対象として機能プログラム群が設定されていれば終了したものと判定する。
【００２６】
一方、まだ、更新が終了していない場合には、対象を機能プログラム群に設定し（ステップ４１８）、ステップ４０６に戻り、対象として設定した機能プログラム群のデータのコピーを行う。
ここで、以上のようなＲＯＭ２上への各プログラムの配置と更新処理によれば、起動処理プログラム群と機能プログラム群を分割してＲＯＭ２に記録し、ＲＯＭ２のデータ書き換えの為の消去ー書き込みのシーケンスを、プログラム群単位に、起動処理プログラム群と機能プログラム群とで独立に行う。ここで、起動処理プログラム群は、機能プログラム群に比べ容量が小さいので、以上の更新処理によれば、起動処理プログラム群と機能プログラム群に対して一括して消去ー書き込みのシーケンスを適用する場合に比べ、更新処理中に起動処理プログラム群に障害が発生する確率を低く抑えることができる。
【００２７】
【発明の効果】
以上のように、本発明によれば、プログラムの更新の際に、当該更新による障害の発生を抑止することができる。
【図面の簡単な説明】
【図１】本発明の実施形態に係るプログラム更新の対象となる電子機器の構成例を示すブロック図である。
【図２】本発明の実施形態に係る電子機器におけるＲＯＭ上のプログラムの配置を示す図である。
【図３】本発明の実施形態に係る更新処理の手順を示すフローチャートである。
【図４】本発明の実施形態に係る更新処理の他の手順を示すフローチャートである。
【符号の説明】
１：ＣＰＵ、２：ＲＯＭ、３：ＲＡＭ、４：外部記憶媒体インタフェース、５：外部記憶媒体、６：入力インタフェース、７：入力装置、８：表示インタフェース、１０：機能部、１１：外部入出力インタフェース。
【図１】
2004094820.tif 000003
【図２】
2004094820.tif 000004
【図３】
2004094820.tif 000005
【図４】
2004094820.tif 000006