(57)【要約】  プログラム更新装置（１００）は、サーバと通信することで、記憶部（１３０）のプログラム格納領域（１３０ｐ）に記憶されている第１プログラム（４１０）を第２プログラムに更新する。受信部（１１１）は、第２プログラムを構成するコードが圧縮されてなる圧縮コードをサーバから順次受信する。第１書込部（１１２）は、受信部（１１１）によって受信された圧縮コードをプログラム格納領域（１３０ｐ）に書き込む。第２書込部（１１３）は、プログラム格納領域（１３０ｐ）から順次読み出した圧縮コードを展開してプログラム格納領域（１３０ｐ）に書き込むことにより、プログラム格納領域（１３０ｐ）に第２プログラムを書き込む。
2018179106.tif 000002
【特許請求の範囲】
【請求項１】
サーバと通信することで、記憶手段の特定の領域に記憶されている第１プログラムを第２プログラムに更新するプログラム更新装置であって、
前記第２プログラムを構成するコードが圧縮されてなる圧縮コードを前記サーバから順次受信する受信手段と、
前記受信手段によって受信された前記圧縮コードを前記特定の領域に書き込む第１書込手段と、
前記特定の領域から順次読み出した前記圧縮コードを展開して前記特定の領域に書き込むことにより、前記特定の領域に前記第２プログラムを書き込む第２書込手段と、
を備えるプログラム更新装置。
【請求項２】
前記記憶手段は、フラッシュメモリであって、
前記第１プログラムは、プロセッサを前記受信手段、前記第１書込手段及び前記第２書込手段として機能させるための更新モジュールを含み、
前記第１書込手段は、前記特定の領域のうち前記更新モジュールが記憶されている領域とは異なる領域に前記圧縮コードを書き込む、
請求項１に記載のプログラム更新装置。
【請求項３】
前記第１書込手段は、書き込んだ前記圧縮コードのアドレスを示すテーブルを生成し、
前記第２書込手段は、一の前記圧縮コードを展開する際に、前記テーブルを参照して、前記特定の領域のうち、他の前記圧縮コードが記憶されている領域とは異なる領域、又は、既に展開した他の前記圧縮コードが記憶されている領域に、一の前記圧縮コードから展開したコードを書き込む、
請求項１又は２に記載のプログラム更新装置。
【請求項４】
記憶手段の特定の領域に記憶されている第１プログラムを第２プログラムに更新するプログラム更新方法であって、
前記第２プログラムを構成するコードが圧縮されてなる圧縮コードを前記特定の領域に順次書き込む第１書込ステップと、
前記特定の領域から順次読み出した前記圧縮コードを展開して前記特定の領域に書き込むことにより、前記特定の領域に前記第２プログラムを書き込む第２書込ステップと、
を含むプログラム更新方法。
【請求項５】
記憶手段の特定の領域に記憶されているプログラムであって、コンピュータを、
他のプログラムを構成するコードが圧縮されてなる圧縮コードをサーバから順次受信する受信手段、
前記受信手段によって受信された前記圧縮コードを前記特定の領域に書き込む第１書込手段、
前記特定の領域から順次読み出した前記圧縮コードを展開して前記特定の領域に書き込むことにより、前記特定の領域に前記他のプログラムを書き込む第２書込手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム更新装置、プログラム更新方法及びプログラムに関する。
【背景技術】
【０００２】
プログラムを実行することで動作する組み込み機器が普及している。近年では、組み込み機器がネットワークを介して通信する機能を有し、この機能を利用して動作するケースが多くなっている。例えば、組み込み機器を動作させるためのプログラムを、組み込み機器の通信機能を利用して更新する技術が提案されている（例えば、特許文献１を参照）。【０００３】
特許文献１には、フラッシュ・メモリのデータを書き換える装置について記載されている。この装置は、外部から入力された更新プログラムを圧縮して、既存のプログラムが記憶されている第１の記憶領域とは異なる第２の記憶領域に書き込む。そして、この装置は、第１の記憶領域に記憶されている既存のプログラムを消去してから、第２の記憶領域に書き込まれた圧縮状態の更新プログラムを展開して第１の記憶領域に書き込む。この装置によれば、第２の記憶領域には、圧縮された更新プログラムが記憶されるため、第２の記憶領域の容量が小さい場合であっても、第１の領域に記憶されるプログラムの更新が可能となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−１５７０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の技術では、プログラムを更新するための専用の第２の記憶領域が必要となる。しかしながら、フラッシュメモリの容量に余裕がないケースに代表されるように、ハードウェアの資源に制限のある組み込み機器では、特許文献１に記載の技術を用いてプログラムを更新することが困難となる。【０００６】
本発明は、上記の事情に鑑みてなされたもので、プログラムの更新専用の記憶領域を用いることなくプログラムを更新することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明のプログラム更新装置は、サーバと通信することで、記憶手段の特定の領域に記憶されている第１プログラムを第２プログラムに更新するプログラム更新装置であって、第２プログラムを構成するコードが圧縮されてなる圧縮コードをサーバから順次受信する受信手段と、受信手段によって受信された圧縮コードを特定の領域に書き込む第１書込手段と、特定の領域から順次読み出した圧縮コードを展開して特定の領域に書き込むことにより、特定の領域に第２プログラムを書き込む第２書込手段と、を備える。
【発明の効果】
【０００８】
本発明によれば、第２プログラムを構成するコードが圧縮されてなる圧縮コードが、第１プログラムが記憶されている特定の領域に書き込まれる。そして、圧縮コードが展開されて特定の領域に書き込まれる。このため、プログラムの更新専用の記憶領域を用いることなくプログラムを更新することができる。
【図面の簡単な説明】
【０００９】
【図１】プログラム更新システムの構成を示す図
【図２】プログラム更新装置の構成を示す図
【図３】サーバとプログラム更新装置との間における通信の概要を示す図
【図４】プログラム更新装置によって実行される一連の処理を示すフロー図
【図５】更新モード処理を示すフロー図
【図６】第１領域のモジュールがＲＡＭにロードされた状態を示す図
【図７】第１書込処理を示すフロー図
【図８】第２領域のモジュールが削除された状態を示す図
【図９】ＲＡＭに分割コードが格納された状態を示す図
【図１０】サーバから送信されるデータの構成を示す図
【図１１】第２領域に圧縮コードが格納された状態を示す図
【図１２】配置テーブルを示す図
【図１３】サーバとプログラム更新装置との間における分割コードの伝送を示す図
【図１４】第２書込処理を示すフロー図
【図１５】第１領域のモジュールが削除された状態を示す図
【図１６】展開領域に展開コードが格納された状態を示す図
【図１７】記憶部に第２プログラムが格納された状態を示す図
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態を、図面を参照しつつ詳細に説明する。
【００１１】
実施の形態．
図１には、本実施の形態に係るプログラム更新システム１０００の構成が示されている。プログラム更新システム１０００は、プログラム更新装置１００に記憶される第１プログラム４１０を、サーバ２００から配信される第２プログラム４２０に更新するシステムである。
【００１２】
第１プログラム４１０は、例えば、通信機器、空調機器、照明機器、調理機器、音響機器及び映像機器を含む家電機器としてプログラム更新装置１００を動作させるためのプログラムである。第２プログラム４２０は、第１プログラム４１０を改善したものに相当する。なお、第１プログラム４１０及び第２プログラム４２０は、いわゆるソフトウェアと同等であってもよいし、プロセッサ１１０に対する指令の他に、種々のデータ及びいわゆるライブラリを含んでもよい。
【００１３】
図１に示されるように、プログラム更新システム１０００は、第１プログラム４１０を実行するプログラム更新装置１００と、第２プログラム４２０を配信するサーバ２００と、を有している。プログラム更新装置１００及びサーバ２００は、インターネットに代表されるネットワーク３００を介して接続される。
【００１４】
プログラム更新装置１００は、ネットワーク機器として機能する組み込み機器である。プログラム更新装置１００は、第１プログラム４１０を実行することで、この第１プログラム４１０を第２プログラム４２０に更新する。プログラム更新装置１００は、ＣＰＵ（Central Processing Unit）又はＭＰＵ（Micro Processing Unit）を含んで構成されてプログラムを実行するプロセッサ１１０と、いわゆる主記憶装置に相当するＲＡＭ（Random Access Memory）１２０と、いわゆる補助記憶装置に相当する記憶部１３０と、ネットワーク３００を介してサーバ２００を含む外部の機器と通信するための通信インタフェース回路１４０と、を有している。ＲＡＭ１２０、記憶部１３０及び通信インタフェース回路１４０は、内部バス１５０を介してプロセッサ１１０に接続されている。
【００１５】
なお、プログラム更新装置１００は、プロセッサ１１０、ＲＡＭ１２０、記憶部１３０及び通信インタフェース回路１４０以外の構成要素を有していてもよい。例えば、プログラム更新装置１００が広域ネットワークであるネットワーク３００と住宅内のＬＡＮ（Local Area Network）とを中継する通信機器である場合には、プログラム更新装置１００は、ＬＡＮを介して通信するためのインタフェース回路を有していてもよい。また、プログラム更新装置１００が空調機器である場合には、プログラム更新装置１００は、空調空気を生成して吹き出すための熱交換器、冷媒配管及び送風機を有していてもよい。このような構成要素は、第１プログラム４１０を実行するプロセッサ１１０によって適宜制御される。
【００１６】
サーバ２００は、プログラム更新装置１００を製造したメーカによって運営されるサーバ装置である。サーバ２００を運営するメーカは、例えば、第１プログラム４１０に「１．０」というバージョン番号を付与し、第２プログラム４２０に「１．１」というバージョン番号を付与する。
【００１７】
図２には、プログラム更新装置１００の機能的な構成が示されている。
【００１８】
プログラム更新装置１００は、プロセッサ１１０が第１プログラム４１０を実行することにより発揮する種々の機能を有している。プロセッサ１１０によって発揮される機能には、受信モジュール４１１を実行することで実現される受信部１１１と、第１書込モジュール４１２を実行することで実現される第１書込部１１２と、第２書込モジュール４１３を実行することで実現される第２書込部１１３と、通常処理モジュール４１４を実行することで実現される通常処理部１１４と、が含まれる。
【００１９】
ここで、受信モジュール４１１、第１書込モジュール４１２、第２書込モジュール４１３及び通常処理モジュール４１４はいずれも、第１プログラム４１０を構成するプログラムコードである。プログラムコードは、例えば、バイナリコード又はオブジェクトコードである。受信モジュール４１１、第１書込モジュール４１２及び第２書込モジュール４１３は、第１プログラム４１０を第２プログラム４２０に更新するためのサブプログラム又はアプリケーションである。以下では、受信モジュール４１１、第１書込モジュール４１２及び第２書込モジュール４１３を総称して更新モジュール４１５という。更新モジュール４１５は、ＲＡＭ１２０にロードされて実行され、通常処理モジュール４１４は、ＲＡＭ１２０にロードされることなく記憶部１３０上で実行される。
【００２０】
受信部１１１は、サーバ２００からコードを逐次受信して、受信したコードをＲＡＭ１２０に逐次格納する。ただし、サーバ２００からは、第２プログラム４２０を構成するコードが圧縮された状態で送信されるため、受信部１１１は、圧縮されたコードを受信する。以下では、この圧縮された状態でサーバ２００から伝送されるコードを圧縮コードという。なお、本実施の形態に係る圧縮コードは、圧縮されたサブプログラムに相当する。サブプログラムは、プログラムの一部の機能を指す。
【００２１】
第１書込部１１２は、サーバ２００から受信した圧縮コードを記憶部１３０に逐次書き込む。詳細には、第１書込部１１２は、圧縮コードを記憶部１３０のうち後述の第２領域１３２に書き込む。また、第２書込部１１３は、記憶部１３０から圧縮コードを逐次読み出して展開し、展開したコードを記憶部１３０に逐次書き込むことにより、記憶部１３０に記憶されている第１プログラム４１０を第２プログラム４２０に更新する。詳細には、第２書込部１１３は、展開したコードを記憶部１３０のうち後述のプログラム格納領域１３０ｐに書き込む。
【００２２】
また、通常処理部１１４は、プログラムの更新以外の通常の処理を実行する。例えば、プログラム更新装置１００が広域ネットワークとＬＡＮとを中継する通信機器である場合には、通常処理部１１４は、パケットの書き換えを含む中継処理を実行する。また、プログラム更新装置１００が空調機器である場合には、通常処理部１１４は、送風機の制御を含む空調処理を実行する。
【００２３】
ＲＡＭ１２０には、プロセッサ１１０が後述のブートプログラム４００内の命令を実行することで、更新モジュール４１５が記憶部１３０からロードされる。そして、ＲＡＭ１２０にロードされた更新モジュール４１５がプロセッサ１１０によって実行される。ＲＡＭ１２０は、プロセッサ１１０が機能を発揮するために利用するアプリケーション領域１２１と、サーバ２００から受信したコードを一時的に格納するためのバッファ領域１２２と、圧縮コードを展開するための展開領域１２３と、を有している。
【００２４】
記憶部１３０は、不揮発性メモリであって、本実施の形態ではフラッシュメモリである。記憶部１３０は、プログラム更新装置１００の起動時に実行されるブートプログラム４００と、第１プログラム４１０と、プログラムを更新するか否かを示す更新フラグ５０１と、記憶部１３０に配置された圧縮コードのアドレスを示す配置テーブル５０２と、を記憶する。なお、ＲＡＭ１２０にロードさせることなく、フラッシュメモリである記憶部１３０上でプログラムを実行する場合には、記憶部１３０にデータを書き込むことができない。このため、第１プログラム４１０を第２プログラム４２０に更新するための更新モジュール４１５は、ＲＡＭ１２０上で実行される。
【００２５】
第１プログラム４１０は、記憶部１３０の特定の領域であるプログラム格納領域１３０ｐに格納される。プログラム格納領域１３０ｐに格納されている第１プログラム４１０の実行により第１プログラム４１０が第２プログラム４２０に更新されると、プログラム格納領域１３０ｐに格納されている第１プログラム４１０が第２プログラム４２０に置き換わることとなる。
【００２６】
プログラム格納領域１３０ｐは、更新モジュール４１５が格納される第１領域１３１と、第１領域１３１とは異なる領域であって、通常処理モジュール４１４が格納される第２領域１３２と、を有している。プログラム格納領域１３０ｐの容量は、第１プログラム４１０のサイズと同一又は同等である。第２プログラム４２０のサイズが第１プログラム４１０より大きい場合を想定して、プログラム格納領域１３０ｐの容量を第１プログラム４１０のサイズより大きくしてもよい。
【００２７】
ここで、領域は、フラッシュメモリのブロックにより構成される領域であってもよいが、これには限定されない。
【００２８】
なお、ブートプログラム４００、更新フラグ５０１及び配置テーブル５０２は、記憶部１３０が有する記憶領域のうちプログラム格納領域１３０ｐとは異なる領域に格納される。
【００２９】
続いて、プログラム更新システム１０００における第２プログラム４２０の配信の概要について、図３のシーケンス図を用いて説明する。図３には、サーバ２００からプログラム更新装置１００へ圧縮コードを送信する流れが示されている。
【００３０】
まず、プログラム更新装置１００は、プログラムを更新する必要がないときに、通常処理を実行する（ステップＳ１）。サーバ２００は、第２プログラム４２０を配信する準備が完了すると、プログラムの更新をプログラム更新装置１００に要求する（ステップＳ２）。この要求を受けたプログラム更新装置１００は、再起動して（ステップＳ３）、新たなプログラムの送信をサーバ２００に要求する（ステップＳ４）。
【００３１】
次に、サーバ２００は、第２プログラム４２０を構成するサブプログラムが圧縮されてなる圧縮コードを順次送信して、プログラム更新装置１００は、圧縮コードを順次受信する。具体的には、サーバ２００は、圧縮コード［１］を送信する（ステップＳ５）。圧縮コード［１］は、順番に送信される複数の圧縮コードのうち１番目に送信されるコードを意味する。圧縮コードが送信される順番は、サーバ２００によって決定されてもよいし、サーバ２００とプログラム更新装置１００との別途の手続で予め定められてもよい。
【００３２】
プログラム更新装置１００は、圧縮コード［１］を受信すると、受信した圧縮コード［１］を記憶部１３０の第２領域１３２に格納する（ステップＳ６）。そして、プログラム更新装置１００は、圧縮コード［１］の受信の完了をサーバ２００に通知して、次の圧縮コードの送信をサーバ２００に要求する（ステップＳ７）。
【００３３】
プログラム更新装置１００からの要求を受けて、サーバ２００は、２番目に送信すべき圧縮コード［２］をプログラム更新装置１００に送信する（ステップＳ８）。プログラム更新装置１００は、圧縮コード［２］を受信して第２領域１３２に格納する（ステップＳ９）。そして、プログラム更新装置１００は、圧縮コード［２］の受信の完了をサーバ２００に通知して、次の圧縮コードの送信をサーバ２００に要求する（ステップＳ１０）。このようにして圧縮コードのダウンロードが繰り返される。
【００３４】
サーバ２００が最後に送信すべき圧縮コード［Ｎ］を送信し（ステップＳ１１）、プログラム更新装置１００が圧縮コード［Ｎ］を第２領域１３２に格納すると（ステップＳ１２）、プログラム更新装置１００は、圧縮コード［Ｎ］の受信の完了をサーバ２００に通知する（ステップＳ１３）。そして、プログラム更新装置１００は、記憶部１３０から読み出した圧縮コードをＲＡＭ１２０に順次展開して、第２プログラム４２０をプログラム格納領域１３０ｐに格納する（ステップＳ１４）。
【００３５】
続いて、プログラム更新装置１００によって実行される一連の処理について、図４〜１７を用いて説明する。図４には、プログラム更新装置１００によって実行される処理が示されている。図４に示される処理は、プログラム更新装置１００の電源が投入されることで開始する。
【００３６】
まず、プログラム更新装置１００は、更新フラグ５０１がＯＮ状態であるか否かを判定する（ステップＳ２１）。具体的には、ブートプログラム４００を実行するプロセッサ１１０が、記憶部１３０に記憶されている更新フラグ５０１を参照して、プログラムを更新すべきか否かを判定する。
【００３７】
更新フラグ５０１がＯＮ状態ではないと判定された場合（ステップＳ２１；Ｎｏ）、プログラム更新装置１００は、通常の処理を実行する（ステップＳ２２）。この処理は、図３に示されるステップＳ１に相当し、通常処理部１１４によって実行される。
【００３８】
次に、通常処理部１１４は、サーバ２００からのプログラムの更新の要求があるか否かを判定する（ステップＳ２３）。この要求は、図３に示されるステップＳ２の要求に相当する。更新の要求がないと判定した場合（ステップＳ２３；Ｎｏ）、通常処理部１１４は、ステップＳ２２以降の処理を繰り返す。
【００３９】
一方、更新の要求があると判定した場合（ステップＳ２３；Ｙｅｓ）、通常処理部１１４は、更新フラグ５０１をＯＮ状態に設定する（ステップＳ２４）。これにより、プログラム更新装置１００は、第１プログラム４１０を更新すべき状態となる。
【００４０】
次に、通常処理部１１４は、実行した処理がすべて終了したか否かを判定する（ステップＳ２５）。実行した処理がすべて終了してはいないと判定した場合（ステップＳ２５；Ｎｏ）、通常処理部１１４は、ステップＳ２５の判定を繰り返し実行して、すべての処理が終了するまで待機する。
【００４１】
実行した処理がすべて終了したと判定した場合（ステップＳ２５；Ｙｅｓ）、プロセッサ１１０は、再起動の設定をする（ステップＳ２６）。その後、プログラム更新装置１００による一連の処理が終了し、プログラム更新装置１００が再起動して、再び図４に示される一連の処理が開始する。この再起動は、図３に示されるステップＳ３に相当する。
【００４２】
ステップＳ２１にて、更新フラグ５０１がＯＮ状態であると判定した場合（ステップＳ２１；Ｙｅｓ）、プログラム更新装置１００は、更新モード処理を実行する（ステップＳ２７）。この更新モード処理について、図５を用いて説明する。
【００４３】
図５に示されるように、更新モード処理では、プロセッサ１１０が、ブートプログラム４００の実行により、第１領域１３１の更新モジュール４１５をＲＡＭ１２０にロードする（ステップＳ３０）。具体的には、図６に示されるように、受信モジュール４１１、第１書込モジュール４１２及び第２書込モジュール４１３がＲＡＭ１２０にロードされる。これにより、プロセッサ１１０が受信部１１１、第１書込部１１２及び第２書込部１１３として機能するための準備が完了する。
【００４４】
次に、第１書込処理が、主として受信部１１１及び第１書込部１１２によって実行される（ステップＳ３１）。そして、第２書込処理が、主として第２書込部１１３によって実行される（ステップＳ３２）。その後、プロセッサ１１０が更新フラグ５０１をＯＦＦ状態に設定する（ステップＳ３３）。これにより、更新モード処理が終了して、プログラムの更新が完了する。
【００４５】
図４に戻り、更新モード処理（ステップＳ２７）が終了すると、プログラム更新装置１００は、ステップＳ２２以降の処理を実行する。
【００４６】
続いて、図５に示された第１書込処理（ステップＳ３１）及び第２書込処理（ステップＳ３２）について、順に説明する。
【００４７】
第１書込処理（ステップＳ３１）では、図７に示されるように、第１書込部１１２が、第２領域１３２のコードを消去する（ステップＳ４１）。これにより、図８に示されるように、第２領域１３２に記憶されていた通常処理モジュール４１４が削除されることとなる。
【００４８】
次に、受信部１１１は、第２プログラム４２０の送信をサーバ２００に要求する（ステップＳ４２）。この要求は、図３に示されるステップＳ４に相当する。そして、受信部１１１は、分割された圧縮コードを受信して、ＲＡＭ１２０のバッファ領域１２２に格納する（ステップＳ４３）。これにより、図９に示されるように、バッファ領域１２２に分割コード６１１が格納される。
【００４９】
ここで、サーバ２００から送信されるデータの詳細な構成について、図１０を用いて説明する。図１０に示される送信データ６００は、サーバ２００から送信されてプログラム更新装置１００によって受信されるデータである。送信データ６００は、メッセージヘッダ６０と、圧縮コード６１，６２，６３と、を有している。
【００５０】
メッセージヘッダ６０は、「プログラムの更新要求」を意味するコマンド名、送信データ６００のサイズ、及び圧縮コードの総数Ｎを示す固定長のデータである。また、圧縮コード６１〜６３それぞれは、ヘッダ６０１と圧縮されたサブプログラム６０２とを有している。ヘッダ６０１は、サブプログラム６０２の名称と、サブプログラム６０２の圧縮された状態におけるサイズ及び展開された状態におけるサイズと、記憶部１３０上に展開されたときのアドレスと、を示す固定長のデータである。圧縮されたサブプログラム６０２は、可変長のデータである。本実施の形態に係る圧縮コード６１〜６３それぞれのサブプログラム６０２は、第２プログラム４２０を構成するモジュールに対応する。なお、サブプログラム６０２は、いわゆるアプリケーション又はソフトウェアコンポーネントに対応するコードであってもよい。
【００５１】
また、本実施の形態では、第２プログラム４２０が格納される記憶部１３０の構成が、サーバ２００を運営する者に対して明らかであるものとする。例えば、記憶部１３０を備えるプログラム更新装置１００を製造したメーカが、第２プログラム４２０を配信するものとする。このため、ヘッダ６０１には、圧縮コードが展開されたときの記憶部１３０におけるアドレスが含まれ得る。
【００５２】
圧縮コード６１〜６３は可変長のデータであるため、そのサイズが大きくなることもある。このため、圧縮コード６１〜６３それぞれがサーバ２００から送信される際には、適当なサイズに分割される。図１０では、圧縮コード６１から分割された分割コード６１１，６１２，６１３が一例として示されている。
【００５３】
なお、図１０中の分割コード［１−１］は、圧縮コード［１］から分割された１番目のコードを意味し、分割コード［１−２］は、圧縮コード［１］から分割された２番目のコードを意味する。同様に、分割コード［１−Ｋ］は、圧縮コード［１］から分割されたＫ番目のコードを意味する。
【００５４】
図７に戻り、ステップＳ４３に続いて、受信部１１１は、圧縮コードのヘッダを参照して、１つの圧縮コードを構成する分割コードをすべて受信したか否かを判定する（ステップＳ４４）。ステップＳ４４の判定を否定した場合（ステップＳ４４；Ｎｏ）、受信部１１１は、ステップＳ４３以降の処理を繰り返す。これにより、図９に示されるように、分割コード６１２以降のコードがバッファ領域１２２にアペンドされる。
【００５５】
一方、ステップＳ４４の判定が肯定された場合（ステップＳ４４；Ｙｅｓ）、第１書込部１１２は、分割コードにより構成される圧縮コードを第２領域１３２に書き込む（ステップＳ４５）。この圧縮コードの書き込みは、図３に示されるステップＳ６，Ｓ９，Ｓ１２に相当する。これにより、図１１に示されるように、圧縮コード６１が第２領域１３２に格納される。
【００５６】
次に、第１書込部１１２は、配置テーブル５０２を生成する（ステップＳ４６）。具体的には、第１書込部１１２は、図１２に示されるように、第２領域１３２に書き込んだ圧縮コードのアドレス及びサイズと、圧縮コードを展開したときのサイズと、を含むレコードを生成して、テーブルに追加することにより、配置テーブル５０２を生成する。なお、図１２中の番号は、圧縮コードの番号を意味する。例えば、圧縮コード［１］の番号は、「１」であって、サーバ２００から送信された順番と等しい番号が圧縮コードに付される。
【００５７】
次に、受信部１１１は、圧縮コードの受信の完了をサーバ２００に通知する（ステップＳ４７）。この通知は、図３に示されるステップＳ７，Ｓ１０，Ｓ１３に相当する。
【００５８】
次に、受信部１１１は、メッセージヘッダ６０（図１０参照）に含まれる圧縮コードの総数Ｎを参照して、圧縮コードをすべて受信したか否かを判定する（ステップＳ４８）。圧縮コードをすべて受信してはいないと判定した場合（ステップＳ４８；Ｎｏ）、受信部１１１は、次の圧縮コードの送信をサーバ２００に要求する（ステップＳ４９）。この要求は、図３に示されるステップＳ７，Ｓ１０に相当する。
【００５９】
圧縮コードをすべて受信したと判定された場合（ステップＳ４８；Ｙｅｓ）、第１書込処理が終了し、プログラム更新装置１００によって実行される処理は、図５に示される更新モード処理に戻る。
【００６０】
図１３には、プログラム更新装置１００が第１書込処理を実行する際のサーバ２００との間における通信の流れが示されている。図１３に示されるように、プログラム更新装置１００がプログラムの送信をサーバ２００に要求すると（ステップＳ４）、サーバ２００は、圧縮コード［１］の分割コード［１−１］をプログラム更新装置１００に送信して（ステップＳ４０１）、プログラム更新装置１００は、分割コード［１−１］を受信してバッファ領域１２２の先頭に格納する（ステップＳ４０２）。
【００６１】
次に、サーバ２００は、圧縮コード［１］の分割コード［１−２］を送信して（ステップＳ４０３）、プログラム更新装置１００は、分割コード［１−２］を受信してバッファ領域１２２にアペンドすることで格納する（ステップＳ４０４）。このようにして、分割コードの送信とバッファ領域１２２への格納が繰り返される。そして、サーバ２００は、圧縮コード［１］を構成する最後の分割コード［１−Ｋ］を送信して（ステップＳ４０５）、プログラム更新装置１００は、分割コード［１−Ｋ］をバッファ領域１２２に格納する（ステップＳ４０６）。
【００６２】
次に、プログラム更新装置１００は、バッファ領域１２２に格納された分割コード［１−１］〜［１−Ｋ］を結合することで圧縮コード［１］を生成して、記憶部１３０の第２領域１３２に圧縮コード［１］を格納する（ステップＳ４０７）。
【００６３】
そして、プログラム更新装置１００が次の圧縮コードの送信を要求すると（ステップＳ７）、サーバ２００は、圧縮コード［２］の分割コード［２−１］をプログラム更新装置１００に送信して（ステップＳ４１１）、プログラム更新装置１００は、分割コード［２−１］を受信してバッファ領域１２２の先頭に格納する（ステップＳ４１２）。
【００６４】
なお、図１３中のステップＳ４０２，Ｓ４０４，Ｓ４０６，Ｓ４１２はそれぞれ、図７中のステップＳ４３に相当する。また、図１３中のステップＳ４０７は、図７中のステップＳ４５及び図３中のステップＳ６に相当する。また、図１３中の分割コードを送信するステップＳ４０１，Ｓ４０３，Ｓ４０５は、図３に示されるステップＳ５に相当する。
【００６５】
図５に戻り、第１書込処理（ステップＳ３１）が終了すると、第２書込処理（ステップＳ３２）が実行される。第２書込処理（ステップＳ３２）では、図１４に示されるように、第２書込部１１３が、第１領域１３１のコードを消去する（ステップＳ５１）。これにより、図１５に示されるように、第１領域１３１に記憶されていた更新モジュール４１５が削除されることとなる。
【００６６】
次に、第２書込部１１３は、未だ展開していない圧縮コードを第２領域１３２から１つ選択して読み出す（ステップＳ５２）。ここで、圧縮コードを選択する手法は任意である。第２書込部１１３は、最初に実行するステップＳ５２では圧縮コード［１］を選択し、次回以降のステップＳ５２では番号の若い圧縮コード［２］を優先して選択してもよい。また、第２書込部１１３は、他の圧縮コードよりサイズが大きい圧縮コードを優先して選択してもよい。
【００６７】
次に、第２書込部１１３は、選択した圧縮コードを展開したときのサイズに等しい領域がプログラム格納領域１３０ｐに空いているか否かを判定する（ステップＳ５３）。具体的には、第２書込部１１３は、配置テーブル５０２を参照することにより、選択した圧縮コードを展開したときのコードが格納される領域を、プログラム格納領域１３０ｐのうち、圧縮コードが記憶されている領域とは異なる領域、又は、既に展開した圧縮コードが記憶されている領域に確保できるか否かを判定する。
【００６８】
ステップＳ５３の判定を否定した場合（ステップＳ５３；Ｎｏ）、第２書込部１１３は、処理をステップＳ５２に移行して、前回のステップＳ５２で選択した圧縮コードとは異なる圧縮コードを１つ選択する。ここで、第２書込部１１３は、未選択の圧縮コードを優先して選択してもよい。
【００６９】
ステップＳ５３の判定を肯定した場合（ステップＳ５３；Ｙｅｓ）、第２書込部１１３は、選択した圧縮コードをＲＡＭ１２０の展開領域１２３上に展開する（ステップＳ５４）。これにより、図１６に例示されるように、展開領域１２３には、圧縮コード６１から展開された展開コード７０１が格納される。
【００７０】
次に、第２書込部１１３は、展開コードを書き込んだアドレスを追加することで、配置テーブル５０２を更新する（ステップＳ５６）。
【００７１】
次に、第２書込部１１３は、第２領域１３２に格納されていた圧縮コードをすべて展開して第２プログラム４２０をプログラム格納領域１３０ｐに書き込んだか否かを判定する（ステップＳ５７）。第２プログラム４２０をプログラム格納領域１３０ｐに書き込んではいないと判定した場合（ステップＳ５７；Ｎｏ）、第２書込部１１３は、ステップＳ５２以降の処理を繰り返す。
【００７２】
一方、第２プログラム４２０をプログラム格納領域１３０ｐに書き込んだと判定された場合（ステップＳ５７；Ｙｅｓ）、第２書込処理が終了して、プログラム更新装置１００によって実行される処理は、図５に示される更新モード処理に戻る。
【００７３】
図１７には、第２書込処理が完了して、第２プログラム４２０が記憶部１３０に記憶されている状態が示されている。図１７に示されるように、第２プログラム４２０は、第１プログラム４１０の受信モジュール４１１、第１書込モジュール４１２、第２書込モジュール４１３及び通常処理モジュール４１４それぞれに対応する受信モジュール４２１、第１書込モジュール４２２、第２書込モジュール４２３及び通常処理モジュール４２４を有している。このため、サーバ２００から更なるプログラムの更新が要求された場合には、第１プログラム４１０と同様に、第２プログラム４２０の実行により、第２プログラム４２０自体が、第２プログラム４２０とは異なる他のプログラムに更新されて置き換わることとなる。
【００７４】
なお、圧縮コードから展開領域１２３に順次展開された展開コードは、第２プログラム４２０を構成するモジュールに等しい。例えば、展開コード７０１は、受信モジュール４２１に等しい。
【００７５】
以上、説明したように、プログラム更新装置１００は、記憶手段としての記憶部１３０と、圧縮コードをサーバ２００から順次受信する受信手段としての受信部１１１と、圧縮コードを第１領域１３１に書き込む第１書込手段としての第１書込部１１２と、展開コードをプログラム格納領域１３０ｐに書き込むことにより、当該プログラム格納領域１３０ｐに第２プログラム４２０を書き込む第２書込手段としての第２書込部１１３と、を有していた。
【００７６】
そして、第１書込部１１２は、圧縮コードをプログラム格納領域１３０ｐに書き込んだ。そして、第２書込部１１３は、プログラム格納領域１３０ｐから読み込んだ圧縮コードを展開することで得た展開コードをプログラム格納領域１３０ｐに格納した。これにより、プログラム更新装置１００は、プログラムの更新専用の記憶領域を用いることなく、プログラム格納領域１３０ｐに記憶されている第１プログラム４１０を第２プログラム４２０に更新することができる。
【００７７】
また、第１書込部１１２は、プログラム格納領域１３０ｐのうち、通常処理モジュール４１４が格納されている第２領域１３２に圧縮コードを書き込んだ。すなわち、第１書込部１１２は、プログラムの更新に使用しない領域に圧縮コードを書き込んだ。例えば、プログラム更新装置１００への電力供給の遮断、或いはネットワーク３００における通信途絶が発生すると、第１書込処理が正常に終了することなく中断してしまう。しかしながら、第１書込処理では、更新モード処理に必要な第１領域１３１のモジュールが変更されることがないため、プログラム更新装置１００を再起動することで、容易に更新モード処理を再開して、プログラムを更新することが可能になる。
【００７８】
また、フラッシュメモリは組み込み機器に広く用いられている。そして、第１書込部１１２は、フラッシュメモリである記憶部１３０のうち第２領域１３２のコードを消去して、第２領域１３２に圧縮コードを書き込んだ。このため、プログラムを更新する組み込み機器を容易に構成することができる。
【００７９】
また、第２書込部１１３は、１つの圧縮コードを展開する際に、配置テーブル５０２を参照して、プログラム格納領域１３０ｐのうち、他の圧縮コードが記憶されている領域とは異なる領域、又は、既に展開した他の圧縮コードが記憶されている領域に、展開コードを書き込んだ。これにより、未だ展開されていない圧縮コードを破損することなく、すべての圧縮コードを展開することができる。
【００８０】
また、圧縮コードには、圧縮されたサブプログラム６０２が含まれた（図１０参照）。このサブプログラム６０２は、第２プログラム４２０を構成するモジュールに等しい。したがって、第２書込処理が中断された場合であっても、中断されるまでに圧縮コードが展開されるため、第２プログラム４２０の機能をある程度確保することが期待できる。
【００８１】
以上、本発明の実施の形態について説明したが、本発明は上記実施の形態によって限定されるものではない。
【００８２】
上記実施の形態に係る圧縮コードには、圧縮されたサブプログラム６０２が含まれたが、これには限定されない。例えば、第２プログラム４２０を適当なサイズに等分したコードを圧縮することで圧縮コードを構成してもよい。
【００８３】
上記実施の形態では、受信部１１１及び第１書込部１１２が圧縮コードを逐次受信して、圧縮コードの受信がすべて終了した後に第２書込部１１３が圧縮コードの読み出し及び展開をする場合を例に説明したが、これには限定されない。例えば、受信部１１１が圧縮コードを逐次受信する処理の最中に、第１書込部１１２が第１領域１３１に圧縮コードを書き込んだり、第２書込部１１３が第１領域１３１に展開コードを書き込んだりしてもよい。これにより、更新モード処理の実行時間を短縮することができる。
【００８４】
上記実施の形態では、第１書込部１１２による圧縮コードの書き込みがすべて終了した後に、第２書込部１１３が圧縮コードを読み出す場合を例に説明したが、これには限定されない。第１書込部１１２による圧縮コードの書き込みと、第２書込部１１３による圧縮コードの読み出し及び展開と、を並行して実行してもよい。これらの処理が並行して実行される場合には、更新モード処理の実行時間を短縮することができる。
【００８５】
上記実施の形態では、第２書込部１１３が、一の圧縮コードについての読み出し、展開及び書き込みが完了した後に、他の圧縮コードを読み出す場合を例に説明したが、これには限定されない。第２書込部１１３は、一の圧縮コードについての読み出し及び展開と、他の圧縮コードについての書き込みと、を並行して実行してもよい。これらの処理が並行して実行される場合にも、更新モード処理の実行時間を短縮することができる。
【００８６】
また、上記実施の形態に係る配置テーブル５０２は、記憶部１３０に記憶されたが、これには限定されない。例えば、第１書込部１１２がＲＡＭ１２０上にのみ配置テーブル５０２を生成して、第２書込部１１３がこの配置テーブル５０２を参照してもよい。
【００８７】
また、プログラム更新装置１００は、内蔵の記憶部１３０に記憶される第１プログラム４１０を更新したが、これには限定されない。プログラム更新装置１００は、取り外し可能な外部の記憶装置に記憶されているプログラムを更新してもよい。例えば、複数の組み込み機器を管理するプログラム更新装置１００が、サーバ２００から配信されるプログラムを受信して、組み込み機器それぞれのプログラムを更新してもよい。
【００８８】
また、プログラム更新装置１００は、サーバ２００と通信することで第２プログラム４２０を取得したが、これには限定されない。プログラム更新装置１００は、フレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disk Read-Only Memory）、ＤＶＤ（Digital Versatile Disk）に代表されるコンピュータ読み取り可能な記録媒体に格納して配布された第２プログラム４２０を取得してもよい。
【００８９】
上記実施の形態に係るプログラム更新装置１００の機能は、専用のハードウェアによっても、また、通常のコンピュータシステムによっても実現することができる。
【００９０】
例えば、記憶部１３０に記憶される第１プログラム４１０を、コンピュータ読み取り可能な記録媒体に格納して配布し、それらの第１プログラム４１０をコンピュータにインストールすることにより、上述の処理を実行する装置を構成することができる。
【００９１】
また、第１プログラム４１０をインターネットに代表される通信ネットワーク上のサーバ装置が有するディスク装置に格納しておき、搬送波に重畳させて、コンピュータにダウンロードするようにしてもよい。
【００９２】
また、通信ネットワークを介して第１プログラム４１０を転送しながら起動実行することによっても、上述の処理を達成することができる。
【００９３】
さらに、第１プログラム４１０の全部又は一部をサーバ装置上で実行させ、その処理に関する情報をコンピュータが通信ネットワークを介して送受信しながら第１プログラム４１０を実行することによっても、上述の処理を達成することができる。
【００９４】
なお、上述の機能を、ＯＳ（Operating System）が分担して実現する場合又はＯＳとアプリケーションとの協働により実現する場合等には、ＯＳ以外の部分のみを媒体に格納して配布してもよく、また、コンピュータにダウンロードしてもよい。
【００９５】
また、プログラム更新装置１００の機能を実現する手段は、ソフトウェアに限られず、その一部又は全部を、回路を含む専用のハードウェアによって実現してもよい。
【００９６】
本発明は、本発明の広義の精神と範囲を逸脱することなく、様々な実施の形態及び変形が可能とされるものである。また、上述した実施の形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。つまり、本発明の範囲は、実施の形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、本発明の範囲内とみなされる。
【産業上の利用可能性】
【００９７】
本発明は、機器を動作させるためのプログラムの更新に適している。
【符号の説明】
【００９８】
１０００  プログラム更新システム、  １００  プログラム更新装置、  １１０  プロセッサ、  １１１  受信部、  １１２  第１書込部、  １１３  第２書込部、  １１４  通常処理部、  １２０  ＲＡＭ、  １２１  アプリケーション領域、  １２２  バッファ領域、  １２３  展開領域、  １３０  記憶部、  １３０ｐ  プログラム格納領域、  １３１  第１領域、  １３２  第２領域、  １４０  通信インタフェース回路、  １５０  内部バス、  ２００  サーバ、  ３００  ネットワーク、  ４００  ブートプログラム、  ４１０  第１プログラム、  ４１１，４２１  受信モジュール、  ４１２，４２２  第１書込モジュール、  ４１３，４２３  第２書込モジュール、  ４１４，４２４  通常処理モジュール、  ４１５  更新モジュール、  ４２０  第２プログラム、  ５０１  更新フラグ、  ５０２  配置テーブル、  ６００  送信データ、  ６０  メッセージヘッダ、  ６１〜６３  圧縮コード、  ６０１  ヘッダ、  ６０２  サブプログラム、  ６１１〜６１３  分割コード、  ７０１  展開コード。
【図１】
2018179106.tif 000003
【図２】
2018179106.tif 000004
【図３】
2018179106.tif 000005
【図４】
2018179106.tif 000006
【図５】
2018179106.tif 000007
【図６】
2018179106.tif 000008
【図７】
2018179106.tif 000009
【図８】
2018179106.tif 000010
【図９】
2018179106.tif 000011
【図１０】
2018179106.tif 000012
【図１１】
2018179106.tif 000013
【図１２】
2018179106.tif 000014
【図１３】
2018179106.tif 000015
【図１４】
2018179106.tif 000016
【図１５】
2018179106.tif 000017
【図１６】
2018179106.tif 000018
【図１７】
2018179106.tif 000019
【国際調査報告】
2018179106.tif 000020
2018179106.tif 000021
2018179106.tif 000022
2018179106.tif 000023