(57)【要約】【課題】通信速度を変更することなく、プリンタ等の周辺装置に対するファームウェアの更新データの通信時間を短縮する。【解決手段】サーバ１２ｂは、第１形式のレコードを順次読み込み（Ｓ１０１）、第１形式のレコードの実データに含まれ第２形式の管理データの長さを超えて連続する空白データを削除して当該空白データの前後で実データを分割し（Ｓ１０９）、第１形式のレコードの実データを所定長さ単位になるよう連結し（Ｓ１０６，Ｓ１０７）、分割された実データに応じた管理データ及び連結された実データに応じた管理データを生成して第２形式のレコードを生成し（Ｓ１１０）、第２形式のレコードからなる更新データをプリンタ１３ｂに送信する（Ｓ１１２）。また、アスキーコードで表現された第１形式のレコードはバイナリ変換され（Ｓ１０４）、プリンタ１３ｂにはバイナリで表現された第２形式のレコードが送信される。【選択図】図４
2008059564.tif 000002
【特許請求の範囲】
【請求項１】
周辺装置のファームウェアを更新するための更新データを周辺装置に送信するホスト装置における更新データ送信方法であって、
（ａ）ソースオブジェクトデータとソース管理データとを含む第１形式のソースレコードを順次読み込むステップと、
（ｂ）前記ソースレコードを、ターゲットオブジェクトデータとターゲット管理データとを含む第２形式のターゲットレコードに変換するステップと、
（ｃ）前記ターゲットレコードを前記周辺装置に送信するステップと、を備え、前記ステップ（ｂ）は、
（ｂ１）前記ソースオブジェクトデータを所定長さになるよう結合したオブジェクトデータ列を生成するステップと、
（ｂ２）前記ステップ（ｂ１）の実行中に、前記ソースオブジェクトデータ内に前記ターゲット管理データの長さ以上の空白データ列があるか否かを検出し、前記空白データ列が存在する場合には、前記空白データ列の直前のデータで終わるオブジェクトデータと、前記空白データ列の直後のデータから始まるオブジェクトデータを生成し、前記空白データ列を含まないようにするステップと、
（ｂ３）前記ステップ（ｂ１）及び（ｂ２）で生成されたオブジェクトデータに応じた管理データを生成し、これらオブジェクトデータ及び管理データをそれぞれ前記ターゲットオブジェクトデータ及び前記ターゲット管理データとする前記ターゲットレコードを生成するステップと、を備えることを特徴とする更新データ送信方法。
【請求項２】
請求項１に記載の更新データ送信方法において、
前記第１形式はアスキーコードで表現される形式であり、前記第２形式はバイナリで表現される形式であり、
（ｄ）前記ソースレコードをバイナリ形式のソースレコードに変換するステップを更に備えることを特徴とする更新データ送信方法。
【請求項３】
請求項１に記載の更新データ送信方法において、
前記第１および第２形式はアスキーコードで表現される形式であり、
前記ステップ（ｂ）は、（ｂ４）前記ステップ（ｂ３）により生成された前記ターゲットレコードをバイナリ形式のターゲットレコードに変換するステップを更に備えることを特徴とする更新データ送信方法。
【請求項４】
請求項１〜３のいずれか一項に記載の更新データ送信方法において、
前記所定長さは、前記周辺装置のファームウェアが格納されるフラッシュメモリのデータ書き換え単位長さ以下に設定されることを特徴とする更新データ送信方法。
【請求項５】
請求項１〜４のいずれか一項に記載の更新データ送信方法において、
前記所定長さは、前記周辺装置が接続されるインターフェースの種類に応じて設定されることを特徴とする更新データ送信方法。
【請求項６】
請求項１〜５のいずれか一項に記載の更新データ送信方法において、
（ｅ）前記周辺装置との通信速度を測定し、当該測定結果に基づいて前記所定長さを設定するステップを更に備えることを特徴とする更新データ送信方法。
【請求項７】
請求項１〜６のいずれか一項に記載の更新データ送信方法における各ステップを、コンピュータに実行させるためのプログラム。
【請求項８】
請求項１〜６のいずれか一項に記載の更新データ送信方法における各ステップを、コンピュータに実行させるためのプログラムを記録した記録媒体。
【請求項９】
周辺装置のファームウェアを更新するための更新データを周辺装置に送信するホスト装置において、
ソースオブジェクトデータとソース管理データとを含む第１形式のソースレコードを順次読み込み、読み込んだ前記ソースレコードを、ターゲットオブジェクトデータとターゲット管理データとを含む第２形式のターゲットレコードに変換し、変換された前記ターゲットレコードを前記周辺装置に送信する制御部を備え、
前記制御部は、
前記ソースオブジェクトデータを所定長さになるよう結合したオブジェクトデータ列を生成するデータ連結部と、
前記ソースオブジェクトデータ内に前記ターゲット管理データの長さ以上の空白データ列があるか否かを検出する空白データ検出部と、
前記データ連結部により生成されたオブジェクトデータに応じた管理データを生成し、これらオブジェクトデータ及び管理データをそれぞれ前記ターゲットオブジェクトデータ及び前記ターゲット管理データとする前記ターゲットレコードを生成するレコード生成部と、を備え、
前記データ連結部は、
前記空白データ検出部により前記空白データ列が検出された場合には、前記空白データ列の直前のデータで終わるオブジェクトデータと、前記空白データ列の直後のデータから始まるオブジェクトデータを生成し、オブジェクトデータ内に前記空白データ列を含まないようにすることを特徴とするホスト装置。
【請求項１０】
請求項９に記載のホスト装置において、
前記第１形式はアスキーコードで表現される形式であり、前記第２形式はバイナリで表現される形式であり、
前記ソースレコードをバイナリ形式のソースレコードに変換するデータ変換部を更に備えることを特徴とするホスト装置。
【請求項１１】
請求項９に記載のホスト装置において、
前記第１および第２形式はアスキーコードで表現される形式であり、
前記制御部は、前記レコード生成部により生成された前記ターゲットレコードをバイナリ形式のターゲットレコードに変換するデータ変換部を更に備えることを特徴とするホスト装置。
【請求項１２】
請求項９〜１１のいずれか一項に記載のホスト装置において、
前記所定長さは、前記周辺装置のファームウェアが格納されるフラッシュメモリのデータ書き換え単位長さ以下に設定されることを特徴とするホスト装置。
【請求項１３】
請求項９〜１２のいずれか一項に記載のホスト装置において、
前記所定長さは、前記周辺装置が接続されるインターフェースの種類に応じて設定されることを特徴とするホスト装置。
【請求項１４】
請求項９〜１３のいずれか一項に記載のホスト装置と、当該ホスト装置に接続される周辺装置とからなるシステムであって、
前記周辺装置は、
前記ホスト装置から送信される前記第２形式のレコードからなる更新データを受信する受信部と、
前記受信部により受信した前記更新データに基づいて、フラッシュメモリに格納されるファームウェアを書き換える書き換え部と、を備えることを特徴とするシステム。
【請求項１５】
請求項１４に記載のシステムにおいて、
前記周辺装置は、前記書き換え部によりファームウェアの書き換えが終了した後、自らをリセットして更新されたファームウェアで再起動し、前記ホスト装置からの要求に応じて前記ファームウェアのバージョン情報を送信することを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、周辺装置のファームウェア（プログラム）の更新データをコンピュータが周辺装置に送信するための更新データ送信方法及び当該更新データ送信方法をコンピュータに実行させるための更新データ送信プログラムに関する。また、周辺装置のファームウェア更新データを周辺装置に対して送信するコンピュータと、コンピュータからのファームウェア更新データを受信して自身のファームウェアを書き換える周辺装置とからなるファームウェア書き換えシステムに関する。
【背景技術】
【０００２】
近年のプリンタ等の周辺装置では、ファームウェアをフラッシュメモリに格納し容易に更新できるよう構成されている。例えば、制御プログラムの更新用データを外部装置より受信し、フラッシュメモリの第２記憶領域に記憶された書き換えプログラムを用いて、フラッシュメモリの第１記憶領域に記憶された制御プログラムを、受信した更新用データに書き換えるファームウェアの更新方法が知られている（特許文献１参照）。また、ネットワークに接続された周辺装置では、当該ネットワークを介してコンピュータからファームウェア更新データを受信し、ファームウェアを更新することができる。
【０００３】
コンピュータは、周辺装置のファームウェア更新データを、例えばモトローラ（登録商標）Ｓ３フォーマット形式で周辺装置に送信する。モトローラＳ３フォーマットは、プログラム言語を用いて作成されたソースコードをコンパイルしたものを１６進数のテキスト形式にしたもので、後述するようにデータ格納先アドレス等の管理データ部と実データ部とから構成される（図２（ａ）参照）。モトローラＳ３フォーマットでは、１バイトのデータが２文字で表現されている。周辺装置は、受信したテキスト形式のモトローラＳ３フォーマット（以下「Ｓ３アスキーフォーマット」と称する）のデータをバイナリ変換してフラッシュメモリに書き込む。このように、更新データはモトローラＳ３フォーマットのような所定のフォーマット形式で表され、１レコード（パケット）単位で送受信される。
【０００４】
パケットを生成する方法として、例えば、ＲＡＭの記憶領域をヘッダが格納されるヘッダ領域とデータが格納されるデータ領域とに分離し、ヘッダ領域に格納されたヘッダとデータ領域に格納されたデータとを、ハードウェアにより結合して送信パケットを生成する方法が知られている（特許文献２参照）。
【０００５】
周辺装置の高機能化によりファームウェアのサイズは増大し、これに伴って、ファームウェアの更新時に送受信される更新データのレコード数（単位データ数）も増大している。更新データのサイズが大きくなると、コンピュータと周辺装置との通信インターフェースがＵＳＢ、パラレル、Ｅｔｈｅｒｎｅｔ（登録商標）その他の高速通信インターフェースである場合にはそれほど問題とならないものの、ＲＳ−２３２Ｃやその他の低速通信インターフェースである場合には更新データの通信に長時間を要してしまう。例えば、６Ｍバイトのデータ転送には、通信速度が１９２００ｂｐｓの場合に約４５分、通信速度が９６００ｂｐｓの場合に約９０分かかることになる。通常、ファームウェア更新データの通信中には当該周辺装置は使用できないため、特に２４時間稼動している施設において、通信時間の短縮が望まれている。
【０００６】
そこで、ＲＳ−２３２Ｃ（例えば９６００ｂｐｓ）によりコンピュータからのデータを一時的にメモリに保存し、当該メモリに保存したデータをより高速（例えば５００００ｂｐｓ）なシリアル通信あるいはパラレル通信により携帯型情報機器に転送することのできるインターフェースボックスが知られている（特許文献３参照）。これにより、携帯型情報機器がデータ受信処理に占有される時間を削減することができる。
【０００７】
また、転送するデータ量を減らすことによって通信時間を短縮することができる。例えば、プリンタに送信すべき印字データの中に連続する空白文字データ（０ｘ２０）がいくつあるかをカウントし、当該個数が基準個数以上のときは、その連続する空白文字データに代えて連続空白文字データに相当する分だけプリンタの印字位置（印字ヘッド）を一括移動させる制御データを送信する方法が知られている（特許文献４参照）。
【０００８】
【特許文献１】特開２００５−６３０５０号公報
【特許文献２】特開２０００−１３４２３０号公報
【特許文献３】特開平１１−２１２９０８号公報
【特許文献４】特開平０６−２４２８９４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献３に開示された技術においては、インターフェースボックスを用意すると共に周辺装置を当該インターフェースボックスに対応させなければならず汎用性がないという問題があった。また、コンピュータとインターフェースボックスとの間の通信速度がボトルネックとなり、システム全体としては更新データの通信時間を短縮することはできないという問題があった。
【００１０】
本発明は、上記課題を解決するためになされたものであって、通信速度を変更することなく、周辺装置のファームウェア更新データをコンピュータから周辺装置へ送る際の通信時間を短縮することのできる更新データ送信方法、更新データ送信プログラム及びファームウェア書き換えシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため本発明の更新データ送信方法は、周辺装置のファームウェアを更新するための更新データを周辺装置に送信するホスト装置における更新データ送信方法であって、（ａ）ソースオブジェクトデータとソース管理データとを含む第１形式のソースレコードを順次読み込むステップと、（ｂ）前記ソースレコードを、ターゲットオブジェクトデータとターゲット管理データとを含む第２形式のターゲットレコードに変換するステップと、（ｃ）前記ターゲットレコードを前記周辺装置に送信するステップと、を備え、前記ステップ（ｂ）は、（ｂ１）前記ソースオブジェクトデータを所定長さになるよう結合したオブジェクトデータ列を生成するステップと、（ｂ２）前記ステップ（ｂ１）の実行中に、前記ソースオブジェクトデータ内に前記ターゲット管理データの長さ以上の空白データ列があるか否かを検出し、前記空白データ列が存在する場合には、前記空白データ列の直前のデータで終わるオブジェクトデータと、前記空白データ列の直後のデータから始まるオブジェクトデータを生成し、前記空白データ列を含まないようにするステップと、（ｂ３）前記ステップ（ｂ１）及び（ｂ２）で生成されたオブジェクトデータに応じた管理データを生成し、これらオブジェクトデータ及び管理データをそれぞれ前記ターゲットオブジェクトデータ及び前記ターゲット管理データとする前記ターゲットレコードを生成するステップと、を備えることを特徴とする。
【００１２】
また、本発明のホスト装置は、周辺装置のファームウェアを更新するための更新データを周辺装置に送信するホスト装置において、ソースオブジェクトデータとソース管理データとを含む第１形式のソースレコードを順次読み込み、読み込んだ前記ソースレコードを、ターゲットオブジェクトデータとターゲット管理データとを含む第２形式のターゲットレコードに変換し、変換された前記ターゲットレコードを前記周辺装置に送信する制御部を備え、前記制御部は、前記ソースオブジェクトデータを所定長さになるよう結合したオブジェクトデータ列を生成するデータ連結部と、前記ソースオブジェクトデータ内に前記ターゲット管理データの長さ以上の空白データ列があるか否かを検出する空白データ検出部と、前記データ連結部により生成されたオブジェクトデータに応じた管理データを生成し、これらオブジェクトデータ及び管理データをそれぞれ前記ターゲットオブジェクトデータ及び前記ターゲット管理データとする前記ターゲットレコードを生成するレコード生成部と、を備え、前記データ連結部は、前記空白データ検出部により前記空白データ列が検出された場合には、前記空白データ列の直前のデータで終わるオブジェクトデータと、前記空白データ列の直後のデータから始まるオブジェクトデータを生成し、オブジェクトデータ内に前記空白データ列を含まないようにすることを特徴とする。
【００１３】
これらの構成によれば、実データを連結することによりレコード数（送信単位データ数）が削減され、レコード毎に必要な管理データの数を削減することができる。これにより、送信データの総量が減少し、データ通信時間を短縮することができる。また、連結データ長に上限を設けているので、通信エラー等の不具合が発生した場合であっても当該不具合を早期に検出してデータ通信をリトライすることができ、無駄なデータ通信を回避することができる。また、管理データの長さを超えて連続する空白データが削除されるため、送信するデータの総量をさらに減少させることができる。
【００１４】
なお、以下の説明における「空白データ」とは、不揮発性メモリ（例えばフラッシュメモリ）を初期化またはデータ消去したときの値を示すものである。一般にこの値は０ｘＦＦであるが、本発明は０ｘＦＦに限定されるものではない。
【００１５】
これらの場合において、前記ソースレコードはアスキーコードで表現される形式であり、前記ターゲットレコードはバイナリで表現される形式であることが好ましい。アスキーコードをバイナリ変換することにより送信データ総量を略半減させることができ、通信時間も略半分に短縮できる。また、従来のように周辺装置側でバイナリ変換する必要がなく、周辺装置におけるファームウェアの書き換え処理の負荷を軽減することができる。周辺装置のＣＰＵは一般にコンピュータのＣＰＵに比して処理能力が低いため、周辺装置の負荷を軽減することにより、ホストコンピュータと周辺装置とを含めたシステム全体としての書き換え処理のパフォーマンスを向上させることができる。
【００１６】
またこれらの場合において、前記所定長さは、前記周辺装置のファームウェアが格納されるフラッシュメモリのデータ書き換え単位長さ以下に設定されることが望ましい。所定長さがデータ書き換え単位長さ（セクタ容量）より長いと、周辺装置側で実データをデータ書き換え単位長さ毎に分割する処理が必要となる場合があり、これにより周辺装置の負荷が高くなってシステム全体としての書き換え処理のパフォーマンスが低下してしまうためである。
【００１７】
またこれらの場合において、前記所定長さは、前記周辺装置が接続されるインターフェースの種類に応じて設定されることが望ましい。また、前記周辺装置との通信速度を測定し、当該測定結果に基づいて前記所定長さを設定することが望ましい。通信インターフェースあるいは通信速度に応じて所定長さを変更することにより、より効率的にデータ通信でき通信時間を短縮することができる。
【００１８】
また、本発明は、上記の更新データ送信方法における各ステップを、コンピュータに実行させるためのプログラムまたは当該プログラムを記録した記録媒体として提供することができる。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照して本発明の実施形態について説明する。
【００２０】
＜システムの全体構成＞
図１に示すように、本発明の実施形態のファームウェア書き換えシステム１は、ホストコンピュータ１１、サーバ１２ａ，１２ｂ，１２ｃ、周辺装置としてのプリンタ１３ａ１，１３ａ２，１３ｂ，１３ｃ，１３ｄで構成されている。
【００２１】
ホストコンピュータ１１とサーバ１２ａ〜１２ｃはネットワーク１４を介して接続されている。サーバ１２ａには、プリンタ１３ａ１，１３ａ２がそれぞれインターフェース１５ａ１，１５ａ２を介して接続されている。同様に、サーバ１２ｂには、プリンタ１３ｂがインターフェース１５ｂを介して接続され、サーバ１２ｃには、プリンタ１３ｃがインターフェース１５ｃを介して接続されている。また、プリンタ１３ｄは、インターフェース１５ｄを介してネットワーク１４に接続され、ネットワーク１４上のホストコンピュータ１１及びサーバ１２ａ〜１２ｃから制御可能である。
【００２２】
サーバ１２ａ〜１２ｃは、汎用パーソナルコンピュータやＰＯＳ端末等の専用情報機器として実現される。
【００２３】
ネットワーク１４は、Ｅｔｈｅｒｎｅｔ（登録商標）等の構内通信網（ＬＡＮ）として実現してもよいし、専用線、インターネット、ＶＰＮ等の広域通信網（ＷＡＮ）として実現してもよい。ネットワーク１４がＷＡＮである場合には、ホストコンピュータ１１から遠隔地にある各サーバ１２ａ〜１２ｃに対して、接続されるプリンタ１３ａ１，１３ａ２，１３ｂ，１３ｃのファームウェアの書き換え処理を指示することができる。また、ホストコンピュータ１１は、ネットワーク１４に接続されるプリンタ１３ｄに対してファームウェアの書き換え処理を指示することができる。すなわち、１台のホストコンピュータ１１から遠隔地にある複数のプリンタ１３ａ１，１３ａ２，１３ｂ，１３ｃ，１３ｄに対するファームウェア書き換え処理を一度に指示することができる。
【００２４】
インターフェース１５ａ１，１５ａ２，１５ｂ，１５ｃは、ＲＳ−２３２Ｃ（最大通信速度１４．４ｋｂｐｓ）、ＵＳＢ（ＵＳＢ２．０で最大通信速度６０Ｍｂｐｓ）等のシリアルインターフェースで実現してもよいし、ＳＣＳＩ（最大通信速度３２０Ｍｂｐｓ）等のパラレルインターフェースで実現してもよい。
【００２５】
ここで、サーバ１２ａ〜１２ｃは、ネットワーク１４を介して互いに異なる通信速度でホストコンピュータ１１に接続されていてもよい。同様に、プリンタ１３ａ１、１３ａ２は互いに異なる通信速度でサーバ１２ａに接続されていてもよい。
【００２６】
このようなファームウェア書き換えシステム１において、ホストコンピュータ１１からプリンタ１３ａ１，１３ａ２，１３ｂ，１３ｃ，１３ｄに対してファームウェアの更新データが送信され、各プリンタは自身のファームウェアを書き換える。あるいは、サーバ１２ａ〜１２ｃから自身に接続されるプリンタ１３ａ１，１３ａ２，１３ｂ，１３ｃに対してファームウェアの更新データが送信され、各プリンタは自身のファームウェアを書き換える。以下では、サーバ１２ｂ（コンピュータ）とプリンタ１３ｂ（周辺装置）とからなるファームウェア書き換えシステム１を一例として挙げ、プリンタ１３ｂのファームウェアを書き換えるための処理について説明する。
【００２７】
＜モトローラＳ３フォーマット＞
プリンタ１３ｂのファームウェアはプログラム言語を用いて作成され、そのソースコードがコンパイルされて１６進数のテキスト形式であるモトローラＳ３フォーマットとしてサーバ１２ｂに提供される。尤も、サーバ１２ｂにファームウェアのソースコードを提供し、サーバ１２ｂ上でモトローラＳ３フォーマットに変換してもよい。
【００２８】
モトローラＳ３フォーマットのレコード（単位データ）２０ａは、図２（ａ）に示すように、タイプフィールド２１、データ長フィールド２２、アドレスフィールド２３、データフィールド２４、チェックサムフィールド２５から構成される。タイプフィールド２１は、モトローラＳフォーマットの型（レコードタイプ）を示すデータであり２バイトで表現される。本実施形態例ではＳ３型であるが、モトローラＳフォーマットにはこの他にＳ１型、Ｓ２型がある。また、Ｓ１型〜Ｓ３型のターミネータとしてそれぞれＳ７型〜Ｓ９型が定義されている。データ長フィールド２２は、当該データ長フィールド２２の後に続くデータの数（レコード長）を示すデータで２バイトで表現される。アドレスフィールド２３は、実データの先頭バイトが格納されるアドレスを示すデータで８バイトで表現される。データフィールド２４は、プリンタ１３ｂのフラッシュメモリ１３２に書き込まれる実データ（オブジェクトデータ）で２〜５００バイトで表現される。チェックサムフィールド２５は、データ長フィールド２２、アドレスフィールド２３、データフィールド２４の各バイト値に基づいて算出されるチェックサムで２バイトで表現される。
【００２９】
以下の説明では、実データ以外のデータ、すなわち、レコードタイプ、レコード長、アドレス及びチェックサムを合わせて「管理データ」と称し、実データと管理データとを合わせて「レコード（単位データ）」と称する。
【００３０】
＜サーバの構成＞
図３に示すように、サーバ１２ｂは主として、制御部（ＣＰＵ）１１１、記憶部１１２、通信インターフェース１１３、入力部１１４、表示部１１５を備えており、これらはそれぞれバス１１６を介して接続されている。
【００３１】
制御部１１１は、記憶部１１２に記憶された各種プログラムを適宜読み出して実行し、サーバ１２ｂの全体の制御を司る。また、制御部１１１は、データ読み込み部１１１ａ、空白データ検出部１１１ｂ、データ長比較部１１１ｃ、データ連結部１１１ｄ、レコード（単位データ）生成部１１１ｅ、データ変換部１１１ｆを備えている。
【００３２】
データ読み込み部１１１ａは、サーバ１２ｂのオペレータからのファームウェア書き換え指示あるいはホストコンピュータ１１からのファームウェア書き換え指示に応じて、プリンタ１３ｂのファームウェア更新データ（モトローラＳ３フォーマット形式）の各レコード（ソースレコード）を記憶部１１２から順次読み込む。なお、更新データは、サーバ１２ｂ上でオペレータから提供されたものであっても、ホストコンピュータ１１からネットワーク１４を介して受信したものであってもよい。
【００３３】
空白データ検出部１１１ｂは、データ読み込み部１１１ａが読み込んだ更新データの実データに含まれる所定長さ以上の連続した空白データの有無を検出する。
【００３４】
データ長比較部１１１ｃは、実データを連結した際の実データの長さ（連結データ長）と、予め設定された連結データ長最大値とを比較する。
【００３５】
データ連結部１１１ｄは、連結データ長最大値を超えない範囲で順次ソースレコードの実データを連結する。また、空白データ検出部１１１ｂにより実データ中に所定長さ以上の空白データが検出された場合に、データ連結部１１１ｄは、その空白データの前後で実データを分割し空白データを削除する。フラッシュメモリ１３２は消去されると空白データ（０ｘＦＦ）となるため、空白データを削除することができる。
【００３６】
レコード生成部１１１ｅは、データ連結部１１１ｄにより連結された実データ（連結データ）に応じた管理データを当該連結データに付加して新たなレコード（ターゲットレコード）２０ｃまたは２０ｄを生成する。すなわち、連結データ長に基づいてレコード長を生成し、連結データの先頭バイトを格納するアドレスを指定し、チェックサムを生成する。
【００３７】
このように、所定長さ以上連続する空白データが検出されないときは、データ連結部１１１ｄは、連結データ長最大値に達するまでソースレコードの実データを連結してターゲットレコードの実データを生成する。また、所定長さ以上連続する空白データが検出されたときは、データ連結部１１１ｄは、当該連続空白データの直前までの実データをこれまでに連結した実データに連結してターゲットレコードの実データとし、当該連続空白データの直後の実データを次のターゲットレコードの実データの先頭データとする。なお、連続空白データの直前の実データをこれまでに連結した実データに連結する場合にも、連結データ長最大値を超えないようにする（連結データ長最大値を超える場合には、その超える分の実データは次のターゲットレコードの実データとする）。
【００３８】
データ変換部１１１ｆは、データ読み込み部１１１ａにより読み出されたレコード２０ａからなる更新データまたはレコード生成部１１１ｅにより生成されたレコード２０ｄからなる更新データをアスキー形式からバイナリ形式に変換する。
【００３９】
記憶部１１２は、制御部１１１の作業領域や更新データの格納領域として機能し、ローカルメモリやキャッシュメモリを含んでよい。記憶部１１２は、電気的、磁気的あるいは光学的にデータ読み書き可能であり、例えば、半導体記憶装置（ハードディスク、メモリ）、磁気テープ、フレキシブルディスク、光磁気ディスク、光ディスクが含まれる。
【００４０】
通信インターフェース１１３は、プリンタ１３ｂと接続するためのシリアルインターフェースやパラレルインターフェースを含む。また、ネットワーク１４を介してホストコンピュータ１１と接続するためのＥｔｈｅｒｎｅｔ（登録商標）アダプタやモデムを含む。
【００４１】
入力部１１４は、オペレータからの入力を受け付けるものであり、キーボード、ポインティングデバイスを含む。
【００４２】
表示部１１５は、オペレータに対して、データの入力を受け付ける画面を表示したり、サーバ１２ｂによる各種の処理結果や進捗状況を表示するものであり、液晶表示装置等のディスプレイを含む。
【００４３】
＜プリンタの構成＞
図３に示すように、プリンタ１３ｂは主として、制御部（ＣＰＵ）１３１、フラッシュメモリ１３２、ＲＡＭ１３３、通信インターフェース１３４、操作ボタン１３５、表示部１３６、プリンタユニット１３７を備えており、これらはそれぞれバス１３８を介して接続されている。
【００４４】
制御部１３１は、フラッシュメモリ１３２に記憶されたファームウェアや各種プログラムを適宜読み出して実行し、プリンタ１３ｂの全体の制御を司る。また、制御部１３１は、サーバ１２ｂからの指示に応じて、または、ファームウェアの更新データの受信に応じて、書き換えプログラムを読み出し実行してファームウェアを書き換えるファームウェア書き換え部１３１ａを備えている。
【００４５】
フラッシュメモリ１３２は、セクタ単位（例えば６４ＫＢ単位）で、データの一括消去および書き換えが可能な不揮発性メモリである。
【００４６】
ＲＡＭ１３３は、制御部１３１がプログラムの実行時に使用するローカルメモリやキャッシュメモリとして機能する。
【００４７】
通信インターフェース１３４は、サーバ１２ｂと接続するための、ＲＳ−２３２Ｃ、ＵＳＢ等のシリアルインターフェースやＳＣＳＩ等のパラレルインターフェースを含む。
【００４８】
操作ボタン１３５は、オペレータによる入力を受け付けるものである。
【００４９】
表示部１３６は、オペレータに対して、データの入力を受け付ける画面を表示したり、プリンタ１３ｂによる各種の処理結果や進捗状況、あるいはステータス情報を表示するものであり、液晶表示装置やＬＥＤを含む。
【００５０】
プリンタユニット１３７は、印刷ヘッドや用紙搬送機構を含み、制御部１３１の制御下で記録紙に印刷を行う。
【００５１】
＜更新データ送信処理＞
次に、プリンタ１３ｂのフラッシュメモリ１３２に記憶されたファームウェアを更新するための更新データを、サーバ１２ｂがプリンタ１３ｂに対して送信する際の処理について、図４を参照して説明する。
【００５２】
まず、サーバ１２ｂは、ファームウェア更新データ送信処理にあたり前処理を行う（ステップＳ１０１）。例えば、制御部１１１が、常駐させているプリンタスプーラを停止させる。次に、データ読み込み部１１１ａが、記憶部１１２に格納されているモトローラＳ３フォーマット形式のプリンタ１３ｂ用ファームウェア更新データを１レコードごと順次読み込む（ステップＳ１０２）。更新データの終了を示すＳ７レコードを読み込むと（ステップＳ１０３：Ｙｅｓ）、読み込んだＳ３フォーマットの各レコードをバイナリ変換して図２（ｂ）に示すフォーマットに変換する（ステップＳ１０４）。
【００５３】
アスキーコード０ｘ３０（「０」）〜０ｘ３９（「９」）と０ｘ４１（「Ａ」）〜０Ｘ４６（「Ｆ」）は、バイナリ変換によってそれぞれ０ｘ０〜０ｘ９と０ｘＡ〜０ｘＦとなる。すなわち、アスキーコードをバイナリに変換することによってデータ量は半減される。なお、図２に示すとおり、タイプフィールド２１を除くデータ長フィールド２２、アドレスフィールド２３、データフィールド２４のデータがバイナリ変換され、バイナリ変換されたデータ長フィールド２２、アドレスフィールド２３、データフィールド２４のデータに基づいてチェックサムが生成される。したがって、更新データは、図２（ｂ）に示すように、２バイトのタイプフィールド２６、１バイトのデータ長フィールド２７、４バイトのアドレスフィールド２８、及び１バイトのチェックサムフィールド３０からなる８バイトの管理データと、最大で２５０バイトのデータフィールド２９とで構成されるレコード２０ｂの配列となる。以下、図２（ａ）に示す形式を「Ｓ３アスキーフォーマット」、図２（ｂ）に示す形式を「Ｓ３バイナリフォーマット」と称する。
【００５４】
次に、空白データ検出部１１１ｂが、更新データを１レコードごと読み出しながら、データフィールド２９の実データ中に、１０バイト以上連続した空白データ（０ｘＦＦ）が含まれているか否かを検出する（ステップＳ１０５）。なお、１レコード内だけではなく、連続するレコードの実データ内で空白データの有無を検出することが好ましい。例えば、前のレコードの実データの最後の５バイトが空白データであり、次のレコードの実データの先頭の５バイトが空白データである場合には、１０バイト以上連続した空白データとして検出される。
【００５５】
１０バイト以上連続する空白データがない場合には（ステップＳ１０５：Ｎｏ）、データ長比較部１１１ｃは、実データを連結した場合の連結データ長が連結データ長最大値（本例では２Ｋバイト）を超えるか否かを判断する（ステップＳ１０６）。すなわち、これまでに読み出されたレコードの実データ長の総和が、連結データ長最大値を超えるか否かを判断する。連結データ長が、連結データ長最大値である２Ｋバイトを超えない場合（ステップＳ１０６：Ｎｏ）、データ連結部１１１ｄは、先に読み出し（連結され）た実データと今回読み出した実データとを連結する（ステップＳ１０７）。
【００５６】
ここで、連結データ長最大値は、所定サイズのデータの通信に要する時間を、レコード長をパラメータとして測定し、通信時間が短く且つレコード長の長すぎない効果的で効率的なレコード長を、予め実験により求め決定している。ただ単にレコード長を長くしても、通信時間短縮の効果は上がらないばかりでなく、通信時のエラー検出に時間がかかり効率的でない。また、プリンタ１３ｂのフラッシュメモリ１３２のセクタサイズ以下に設定することが好ましい。例えば、通信インターフェース１１３，１３４がＲＳ−２３２ＣやＵＳＢのシリアルインターフェースであれば、連結データ長最大値は２Ｋバイト程度が好ましいことを実験により求めている。
【００５７】
この場合に、インターフェース毎あるいは通信速度毎に、予め定めた連結データ長最大値をルックアップテーブルとしてサーバ１２ｂ内に格納しておき適宜に選択することが好ましい。また、サーバ１２ｂとプリンタ１３ｂとの間の通信速度を測定し、当該測定値に応じてそのテーブルから連結データ最大値を選択してもよい。通信速度の測定は、例えば、サーバ１２ｂからプリンタ１３ｂに所定サイズのデータを送信し、プリンタ１３ｂは受信が終了した旨をサーバ１２ｂに通知し、サーバ１２ｂは送信開始から当該通知を受信するまでの時間を計測することにより、凡その通信速度を求めることができる。
【００５８】
次に、最後まで更新データを読み込んだか否かを判断する（ステップＳ１０８）。すなわち、ターミネータＳ７レコードを読み込んだか否かを判断し、ターミネータが読み出されるまでステップＳ１０５からステップＳ１０８の処理を繰り返し行う。
【００５９】
このように、実データのデータ長が２Ｋバイトとなるように実データを連結し、最終的に、図２（ｂ）に示すＳ３バイナリフォーマット形式のレコード２０ｂを、図２（ｃ）に示すＳＣバイナリフォーマットの形式のレコード２０ｃに変換する。ここで、ＳＣバイナリフォーマットは出願人のオリジナル・データ形式であり、２バイトのタイプフィールド３１（ＳＣ）と、２バイトのデータ長フィールド３２（上位桁３２ａ、下位桁３２ｂ）と、４バイトのアドレスフィールド３３と、最大２Ｋバイトのデータフィールド３４と、１バイトのチェックサムフィールド３５で構成される。各管理データ（３２，３３，３５）は、連結された実データに基づいて生成される。なお、Ｓ３フォーマットのターミネータであるＳ７レコードは、ＳＣフォーマットのターミネータとしてＳＸレコードに置換される。
【００６０】
一方、ステップＳ１０５において、１０バイト以上連続する空白データが検出されると（ステップＳ１０５：Ｙｅｓ）、データ連結部１１１ｄは、その連続する空白データを削除し、その空白データの直前までの実データをこれまでに連結した実データに連結する（ステップＳ１０９）。なお、削除された空白データの後に続く実データは、次のレコードとして生成される。そして、レコード生成部１１１ｅは、連結された実データに応じた管理データを生成して連結データに付加し、ＳＣバイナリフォーマットのレコード２０ｃを生成する（ステップＳ１１０）。
【００６１】
また、ステップＳ１０６において、連結データ長が２Ｋバイトを超える場合にも（ステップＳ１０６：Ｙｅｓ）、レコード生成部１１１ｅは、連結された実データに応じた管理データを生成して連結データに付加し、ＳＣバイナリフォーマットのレコード２０ｃを生成する（ステップＳ１１０）。また、図示は省略したが、アドレスフィールドで指定されるアドレスから前後のレコードが非連続であると判断される場合にも、新たなレコードが生成される。すなわち、１つのレコード内で実データが非連続とならないようにレコードが生成される。
【００６２】
ステップＳ１０８において、最後まで更新データを読み込んだと判断すると（ステップＳ１０８：Ｙｅｓ）、サーバ１２ｂはプリンタ１３ｂとの通信準備を行う（ステップＳ１１１）。例えば、インターフェース１５ｂをオープンしたり、通信線の状態（ビジー状態か否か）を確認する。また、プリンタ１３ｂの機種ＩＤとファームウェアバージョンを取得して、接続されているプリンタ１３ｂが送信しようとしている更新データの対象となるプリンタであるか否かを確認する。通信準備が整うとプリンタ１３ｂに対して、ＳＣバイナリフォーマットのレコード２０ｃの配列を順次プリンタ１３ｂに送信する（ステップＳ１１２）。
【００６３】
サーバ１２ｂは、更新データの送信が終了すると、プリンタ１３ｂによる書き換え処理終了の頃合いを計って、プリンタからファームウェアのバージョンを取得し、ファームウェア更新の成否を確認する（ステップＳ１１３）。
【００６４】
このように、連結データ長最大値である２Ｋバイトを超えない範囲で実データを連結し新たなレコード２０ｃを生成することにより、レコードの総数を削減することができる。レコード数が削減されれば、レコード（単位データ）毎に必要となる管理データ数も削減されるので、送信データの総量が減少し、延いてはプリンタ１３ｂに対するファームウェア更新データの通信時間を短縮することができる。
【００６５】
また、管理データの長さを超える連続した空白データは削除されるため、送信データの総量を減少させることができる。連結データ長が連結データ長最大値に満たなくても新たなレコード２０ｃが生成されるため、レコード数が増加し管理データ数が増加する可能性があるが、管理データの長さを超えて連続する空白データを削除しているため、少なくとも１レコードあたり１バイト分のデータ量を削減することができる。
【００６６】
なお、本実施形態例においては、Ｓ３アスキーフォーマットの更新データを全て読み込んだ後に、バイナリ変換処理や、空白データの検出処理、実データの連結処理を行っているが、１レコードを読み込む度にこれらの処理を行うようにしてもよい。
【００６７】
＜ファームウェア書き換え処理＞
次に、サーバ１２ｂからの更新データを受信したプリンタ１３ｂが行うファームウェア書き換え処理について図５を参照して説明する。
【００６８】
サーバ１２ｂの通信準備（ステップＳ１１１）と並行してプリンタ１３ｂにおいても通信準備を行う（ステップＳ２０１）。また、フラッシュメモリのイメージが作成されるＲＡＭ１３３の領域（以下「イメージ領域」と称する）を初期化し０ｘＦＦデータにしておく。次に、サーバ１２ｂから送信されるＳＣバイナリフォーマットの更新データを１レコードずつ順次読み込む（ステップＳ２０２）。プリンタ１３ｂは、受信したデータに基づいてチェックサムを生成し、当該チェックサムが受信したレコードに含まれるチェックサムと一致するかを検査し、データ通信の成否を判断する（ステップＳ２０３）。一致しない場合には（ステップＳ２０３：Ｎｏ）、サーバ１２ｂにエラーを通知する（ステップＳ２０４）。
【００６９】
チェックサムが一致し受信したレコードが正常であると判断される場合には（ステップＳ２０３：Ｙｅｓ）、読み出したレコード２０ｃがターミネータＳＸレコードであるか否かを判断する（ステップＳ２０５）。ＳＸレコードでなければ、アドレスフィールド３３で指定されたアドレスに相当するＲＡＭ１３３のイメージ領域内に、データフィールド３４で指定されたデータを書き込む（ステップＳ２０６）。全レコードを受信するまで上記処理（ステップＳ２０２〜Ｓ２０６）を繰り返し行う。
【００７０】
読み出したレコード２０ｃがターミネータＳＸレコードであれば（ステップＳ２０５：Ｙｅｓ）、フラッシュメモリ１３２のファームウェア格納領域のデータを消去し（ステップＳ２０７）、ＲＡＭ１３３のイメージ領域に格納されたデータをフラッシュメモリ１３２のファームウェア格納領域に書き込む（ステップＳ２０８）。書き込み終了後、プリンタ１３ｂは自らをリセットし、更新されたファームウェアで再起動する（ステップＳ２０９）。この後、サーバ１２ｂからの要求に応じて、ファームウェアバージョンを送信する。
【００７１】
＜更新データ送信処理の変形例＞
図４に示す上記実施形態では、Ｓ３アスキーフォーマットをＳ３バイナリフォーマットに変換した後ＳＣバイナリフォーマットに変換したが、Ｓ３アスキーフォーマットをＳＣアスキーフォーマットに変換した後ＳＣバイナリフォーマットに変換してもよい。すなわち、アスキー・バイナリ変換は、Ｓ３フォーマットをＳＣフォーマットに変換する前に行ってもよいし、Ｓ３フォーマットをＳＣフォーマットに変換した後に行ってもよい。
【００７２】
以下、後者の場合の更新データ送信処理を図６を参照して説明する。なお、図４に示した処理と同様の処理についての詳細な説明は省略する。図４と図６に示すとおり、バイナリ変換処理（ステップＳ３０９，Ｓ１０４）を実行するタイミングが異なる。また、このバイナリ変換処理の実行タイミングの相異に伴って、連結データ長最大値が異なり、前述の処理では２Ｋバイト（ステップＳ１０６）であったが、変形例では４Ｋバイトである（ステップＳ３０４）。
【００７３】
制御部１１１は前処理を行い（ステップＳ３０１）、記憶部１１２に格納されているモトローラＳ３フォーマット形式のプリンタ１３ｂ用ファームウェア更新データを１レコードごと読み込む（ステップＳ３０２）。次に、データフィールド２４内の実データ中に、１０バイト以上連続する空白データが含まれているか否かを判断する（ステップＳ３０３）。１０バイト以上連続する空白データがない場合には（ステップＳ３０３：Ｎｏ）、連結データ長が連結データ長最大値（本例では４Ｋバイト）を超えるかを判断する（ステップＳ３０４）。連結データ長が、連結データ長最大値である４Ｋバイトを超えない場合（ステップＳ３０４：Ｎｏ）、データ連結部１１１ｄは、先に読み出した実データと今回読み出した実データとを連結する（ステップＳ３０５）。なお、ファームウェア更新用データは１レコード毎に読み出されるが、実データの連結処理（ステップＳ３０５）と連結データ長の確認処理（ステップＳ３０４）はバイト単位で行われ、実データを連結したときにその連結データ長が連結データ長最大値を超えないようにしている。次に、最後まで更新データを読み込んだか否か、すなわちターミネータ（Ｓ７レコード）を読み込んだか否かを判断し（ステップＳ３０６）、ターミネータが読み出されるまで、ステップＳ３０３からステップＳ３０６の処理を繰り返し行う。このように、実データを４Ｋバイト単位で再構成していく。
【００７４】
一方、ステップＳ３０３において、１０バイト以上連続する空白データが検出されると（ステップＳ３０３：Ｙｅｓ）、その連続する空白データを削除し、その空白データの直前までの実データをこれまでに連結した実データに連結する（ステップＳ３０７）。そして、連結データ応じた管理データを生成して連結データに付加し、ＳＣアスキーフォーマットのレコード２０ｄを生成する（ステップＳ３０８）。ここで、ＳＣアスキーフォーマットは、Ｓ３アスキーフォーマットの実データ長を４Ｋバイトに拡張した出願人のオリジナル・データ形式であり、２バイトのタイプフィールド３６（ＳＣ）と、４バイトのデータ長フィールド３７（上位桁３７ａ、下位桁３７ｂ）と、８バイトのアドレスフィールド３８と、最大４Ｋバイトのデータフィールド３９と、２バイトのチェックサムフィールド４０とで構成される。
【００７５】
また、ステップＳ３０４において、連結データ長が４Ｋバイトを超える場合にも（ステップＳ３０４：Ｙｅｓ）、これまでに連結した（４Ｋバイトの）実データに応じた管理データを生成して連結データに付加し、ＳＣアスキーフォーマットのレコード２０ｄを生成する（ステップＳ３０９）。
【００７６】
ステップＳ３０６において、最後まで更新データを読み込んだと判断すると（ステップＳ３０６：Ｙｅｓ）、ＳＣアスキーフォーマットのレコード２０ｄの配列をＳＣバイナリフォーマットのレコード２０ｃの配列に変換する（ステップＳ３０９）。バイナリ変換が終了すると、サーバ１２ｂはプリンタ１３ｂとの通信準備を行い（ステップＳ３１０）、ＳＣバイナリフォーマットのレコード２０ｃの配列を順次プリンタ１３ｂに送信する（ステップＳ３１１）。送信終了後、所定時間待機した後プリンタのファームウェアバージョンを取得し、更新処理の成否を確認する（ステップＳ３１２）。
【００７７】
なお本発明は、プログラム言語で作成されたファームウェアのソースコードをコンパイルしてＳ３アスキーフォーマットのデータを生成し、当該Ｓ３アスキーフォーマットのデータをＳＣバイナリフォーマットのデータに変換して周辺装置に送信するまでの一連の処理をサーバ１２ｂに実行させるようにしてもよい。また、当該一連の処理をホストコンピュータ１１に実行させ、サーバ１２ｂを介してプリンタ１３ｂに送信するようにしてもよい。
【００７８】
また、上記実施形態例においては、周辺装置によるファームウェアの更新を、ファームウェアが格納される全セクタを一括して書き換えているが、セクタ単位毎に書き換えるようにしてもよい。
【図面の簡単な説明】
【００７９】
【図１】本発明に係るシステムの全体構成を示すブロック図。
【図２】更新データを構成する単位データのフォーマットを示す図。
【図３】サーバとプリンタの制御ブロック図。
【図４】更新データ送信処理のフローチャート。
【図５】ファームウェア書き換え処理のフローチャート。
【図６】更新データ送信処理の変形例に係るフローチャート。
【符号の説明】
【００８０】
１…ファームウェア書き換えシステム、１１…ホストコンピュータ、１２ａ，１２ｂ，１２ｃ…サーバ、１３ａ１，１３ａ２，１３ｂ，１３ｃ，１３ｄ…プリンタ、１４…ネットワーク、１５ａ１，１５ａ２，１５ｂ，１５ｃ，１５ｄ…インターフェース、２０ａ，２０ｂ，２０ｃ，２０ｄ…レコード、１１１…制御部、１１１ａ…データ読み込み部、１１１ｂ…空白データ検出部、１１１ｃ…データ長比較部、１１１ｄ…データ連結部、１１１ｅ…レコード（単位データ）生成部、１１１ｆ…データ変換部、１１２…記憶部、１１３，１３４…通信インターフェース、１３１…制御部、１３１ａ…ファームウェア書き換え部、１３２…フラッシュメモリ、１３３…ＲＡＭ。
【図２】
2008059564.tif 000003
【図３】
2008059564.tif 000004
【図４】
2008059564.tif 000005
【図５】
2008059564.tif 000006
【図６】
2008059564.tif 000007
【図１】
2008059564.tif 000008