(57)【要約】【課題】限られたＲＡＭ領域であっても従来の書き換え処理を実行することができるようにし、初期化処理からメイン処理あるいは初期化処理から書き換え処理へ移行するまでの時間を短縮する。【解決手段】プリンタ１０は、ブートプログラムとメインプログラムと、を記憶するフラッシュＲＯＭ１２と、ブートプログラムのうち電源がオフされるまで常駐プログラムによって専用される専用領域１３ｄと、ブートプログラムのうち特定プログラム以外で高速処理を要求される高速処理プログラムとメインプログラムとによって共用される共用領域１３ｅと、を備えるＲＡＭ１３と、を有し、起動処理においてフラッシュＲＯＭ１２から、常駐プログラムを読み出して専用領域１３ｄへ書き込むとともに非常駐プログラムを読み出して共用領域１３ｅへ書き込み（ステップＳ２３）、メイン処理へ移行する指示を受けると(ステップＳ２４)メインプログラムを読み出して非常駐プログラムが書き込まれている共用領域１３ｅへ書き込み、メイン処理へ移行する。【選択図】図７
2009003755.tif 000002
【特許請求の範囲】
【請求項１】
起動処理において動作する起動プログラムと、メイン処理において動作するメインプログラムと、を記憶する書き換え可能な不揮発性記憶部と、
前記起動プログラムのうち電源がオフされるまで特定プログラムによって専用される専用領域と、前記起動プログラムのうち前記特定プログラム以外で高速処理を要求される高速処理プログラムと前記メインプログラムとによって共用される共用領域と、を備える揮発性記憶部と、
前記起動処理において前記不揮発性記憶部から、前記特定プログラムを読み出して前記専用領域へ書き込むとともに前記高速処理プログラムを読み出して前記共用領域へ書き込み、前記メイン処理へ移行する指示を受けると前記メインプログラムを読み出して前記高速処理プログラムが書き込まれている前記共用領域へ書き込む書き込み処理部と、を有することを特徴とするプログラム書き込み装置。
【請求項２】
前記書き込み処理部は、
更新起動プログラムを受信すると前記共用領域の空き領域に一時的に格納し、
前記不揮発性記憶部のうち前記メインプログラムが記憶されているメイン記憶領域を消去し、
前記空き領域に格納された前記更新起動プログラムを読み出して、消去された前記メイン記憶領域へ前記更新起動プログラムを書き込み、
前記不揮発性記憶部のうち前記起動プログラムが記憶されている起動プログラム記憶領域を消去し、
前記空き領域に格納された前記更新起動プログラムを読み出して、消去された前記起動プログラム記憶領域へ前記更新起動プログラムを書き込むことを特徴とする請求項１に記載のプログラム書き込み装置。
【請求項３】
請求項１または２に記載のプログラム書き込み装置を有することを特徴とするプリンタ。
【請求項４】
起動処理において動作する起動プログラムと、メイン処理において動作するメインプログラムと、を記憶する書き換え可能な不揮発性記憶部と、
前記起動プログラムのうち電源がオフされるまで特定プログラムによって専用される専用領域と、前記起動プログラムのうち前記特定プログラム以外で高速処理を要求される高速処理プログラムと前記メインプログラムとによって共用される共用領域と、を備える揮発性記憶部と、を有するプログラム書き込み装置の制御方法であって、
前記起動処理において前記不揮発性記憶部から、前記特定プログラムを読み出して前記専用領域へ書き込むとともに前記高速処理プログラムを読み出して前記共用領域へ書き込むステップと、
前記メイン処理へ移行する指示を受けると前記メインプログラムを読み出して前記高速処理プログラムが書き込まれている前記共用領域へ書き込むステップと、を有することを特徴とするプログラム書き込み装置の制御方法。
【請求項５】
更新起動プログラムを受信すると前記共用領域の空き領域に一時的に格納するステップと、
前記不揮発性記憶部のうち前記メインプログラムが記憶されているメイン記憶領域を消去するステップと、
前記空き領域に格納された前記更新起動プログラムを読み出して、消去された前記メイン記憶領域へ前記更新起動プログラムを書き込むステップと、
前記不揮発性記憶部のうち前記起動プログラムが記憶されている起動プログラム記憶領域を消去するステップと、
前記空き領域に格納された前記更新起動プログラムを読み出して、消去された前記起動プログラム記憶領域へ前記更新起動プログラムを書き込むステップと、を有することを特徴とする請求項４に記載のプログラム書き込み装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュＲＯＭのような不揮発性記憶部に格納されている起動プログラム及びメインプログラムの書き込み処理を実行するプログラム書き込み装置及びプログラム書き込み装置の制御方法に関する。
【背景技術】
【０００２】
近年、プリンタやスキャナ等の周辺装置は、パーソナルユースや業務用途等の様々な目的に応じて幅広く利用されている。
【０００３】
周辺装置にはファームウェアが組み込まれており、ファームウェアを実行することにより各周辺装置に応じた動作制御が行われる。例えば、プリンタに組み込まれているファームウェアは、プリンタの起動に必要なハードウェアの初期化処理などを含む一連の起動動作を実行させるブートプログラム（起動プログラム）と、ブートプログラムによる起動動作後に実行されてホストコンピュータからの指示に応じてプリンタを制御するメインプログラムと、を少なくとも備えている。ブートプログラムとメインプログラムは、プリンタ内に設けられたフラッシュＲＯＭ内の異なるセクタに格納されており、フラッシュＲＯＭ書き換えの際にはセクタ毎に、すなわちブートプログラムとメインプログラムをそれぞれ別々に書き換えが可能である。
【０００４】
ところで、ブートプログラムが記憶されているセクタ（以下、ブートセクタ）の書き換えに失敗すると、プリンタはブートプログラムによる起動動作を実行することができず、起動不能状態に陥ることがある。このような状態を回避するため、選択的に読み出される複数のブートセクタを設け、一のブートセクタ内のブートプログラム書き換えに失敗しても、他のブートセクタ内の正常なブートプログラムでプリンタを起動させる、いわゆるＷブート方式が提案されている（例えば、特許文献１参照）。
【０００５】
特許文献１に記載のＷブート方式では、常にフラッシュＲＯＭ上に２つのブートセクタが記憶領域を専有しているため、記憶容量の小さいフラッシュＲＯＭを搭載する周辺装置には不向きである。このため、記憶容量の小さいフラッシュＲＯＭに採用可能な書換え方法が提案されている。
【０００６】
特許文献２には、書換え処理においてフラッシュＲＯＭ上に本ブートセクタと仮ブートセクタとを一時的に設け、最終的には仮ブートセクタのみをメインプログラムによって上書きしてメイン領域とする書換え方法が記載されている。この方法によれば、フラッシュＲＯＭの記憶領域を有効利用することができる。
【特許文献１】特開２００４−９４６２８号公報
【特許文献２】特開２００７−２５８２１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、特許文献２に記載の書換え方法では、フラッシュＲＯＭ上の正常なブートプログラムを含むブートセクタ全体をＲＡＭ上にコピーし、コピーされたブートプログラムが書換え処理を実行する。このため、少なくともフラッシュＲＯＭ上のブートセクタ領域に応じた記憶容量を有するＲＡＭが必要である。
【０００８】
また、ブートセクタ全体をフラッシュＲＯＭから読み出して、ＲＡＭへコピーしなければならない。このため、コピーに要する時間を短縮して書換え処理のさらなる高速化を図ることが望まれる。
【０００９】
また、ブートセクタに記憶されているブートプログラムには書き換えプログラムが含まれるが、一度ブートセクタ全体がＲＡＭへコピーされると、書き換え処理の実行中であるかメイン処理の実行中であるかにかかわらず、コピーされた書き換えプログラムはＲＡＭ上に常駐した状態となる。ところが、書き換えプログラムは書き換え処理以外の処理において、動作することはない。すなわち、ＲＡＭ上に書き換えプログラムを常駐させておく必要性は低い。
【００１０】
本発明は、上記課題を解決するためになされたものであり、フラッシュＲＯＭ上のブートセクタ領域に応じた記憶容量をＲＡＭ上に確保できない場合でも、書き換え処理を行うことができるようにすることを目的とする。すなわち、限られたＲＡＭ領域であっても従来の書き換え処理を実行することができるようにすることを目的とする。
【００１１】
さらに、ブートセクタ全体をＲＡＭへコピーするための処理時間を短縮することによって、初期化処理からメイン処理あるいは初期化処理から書き換え処理へ移行するまでの時間を短縮することを目的とする。
【００１２】
また、ＲＡＭ上に常駐させておく必要のないプログラムによって、特定のＲＡＭ領域を専有することがないようにすることを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決することのできる本発明に係るプログラム書き込み装置は、起動処理において動作する起動プログラムと、メイン処理において動作するメインプログラムと、を記憶する書き換え可能な不揮発性記憶部と、
前記起動プログラムのうち電源がオフされるまで特定プログラムによって専用される専用領域と、前記起動プログラムのうち前記特定プログラム以外で高速処理を要求される高速処理プログラムと前記メインプログラムとによって共用される共用領域と、を備える揮発性記憶部と、
前記起動処理において前記不揮発性記憶部から、前記特定プログラムを読み出して前記専用領域へ書き込むとともに前記高速処理プログラムを読み出して前記共用領域へ書き込み、前記メイン処理へ移行する指示を受けると前記メインプログラムを読み出して前記高速処理プログラムが書き込まれている前記共用領域へ書き込む書き込み処理部と、を有することを特徴とする。
【００１４】
また、上記課題を解決することのできる本発明は、起動処理において動作する起動プログラムと、メイン処理において動作するメインプログラムと、を記憶する書き換え可能な不揮発性記憶部と、前記起動プログラムのうち電源がオフされるまで特定プログラムによって専用される専用領域と、前記起動プログラムのうち前記特定プログラム以外で高速処理を要求される高速処理プログラムと前記メインプログラムとによって共用される共用領域と、を備える揮発性記憶部と、を有するプログラム書き込み装置の制御方法であって、
前記起動処理において前記不揮発性記憶部から、前記特定プログラムを読み出して前記専用領域へ書き込むとともに前記高速処理プログラムを読み出して前記共用領域へ書き込むステップと、
前記メイン処理へ移行する指示を受けると前記メインプログラムを読み出して前記高速処理プログラムが書き込まれている前記共用領域へ書き込むステップと、を有することを特徴とする。
【００１５】
上記構成によれば、起動処理において、起動プログラムのうち特定プログラムを読み出して専用領域へ書き込むとともに、起動プログラムのうち高速処理が要求される高速処理プログラムを読み出して共用領域へ書き込むよう構成されている。すなわち、揮発性記憶部へは起動プログラムの一部を書き込むが全体を書き込むことがない。つまり、起動プログラムのうち高速処理を要求されないプログラムについては揮発性記憶部上に読み出して起動させることなく、不揮発性記憶部において起動させることができる。具体的には、フラッシュＲＯＭ（不揮発性記憶部）上のブートセクタ領域（起動プログラムが格納されている領域）に応じた記憶容量をＲＡＭ（揮発性記憶部）上に確保できない場合でも、従来と同様の書き換え処理を実行することができる。
【００１６】
また、上記構成によれば、揮発性記憶部へは起動プログラムの一部を書き込むので、従来のように起動処理において起動プログラム全体をＲＡＭ（揮発性記憶部）へコピーしていた場合に比べて、初期化処理時間を短縮することができる。したがって、初期化処理からメイン処理あるいは初期化処理から書き換え処理へ移行するまでの時間を短縮することができる。
【００１７】
また、上記構成によれば、メイン処理へ移行する指示を受けるとメインプログラムを読み出して高速処理プログラムが書き込まれている共用領域へ書き込む。すなわち、起動処理が終了してメイン処理へ移行する場合に、メイン処理において動作する必要のない高速処理プログラムはメインプログラムに書き換えられる。このため、ＲＡＭ（揮発性記憶部）上に常駐させておく必要のないプログラムによって、特定のＲＡＭ領域が専有されることがない。したがって、記憶容量の限られたＲＡＭを採用しても従来と同様にメインプログラムをＲＡＭ上で実行させることができる。
【００１８】
また本発明において、前記書き込み処理部は、
更新起動プログラムを受信すると前記共用領域の空き領域に一時的に格納し、
前記不揮発性記憶部のうち前記メインプログラムが記憶されているメイン記憶領域を消去し、
前記空き領域に格納された前記更新起動プログラムを読み出して、消去された前記メイン記憶領域へ前記更新起動プログラムを書き込み、
前記不揮発性記憶部のうち前記起動プログラムが記憶されている起動プログラム記憶領域を消去し、
前記空き領域に格納された前記更新起動プログラムを読み出して、消去された前記起動プログラム記憶領域へ前記更新起動プログラムを書き込むことを特徴とする。
【００１９】
また本発明は、更新起動プログラムを受信すると前記共用領域の空き領域に一時的に格納するステップと、
前記不揮発性記憶部のうち前記メインプログラムが記憶されているメイン記憶領域を消去するステップと、
前記空き領域に格納された前記更新起動プログラムを読み出して、消去された前記メイン記憶領域へ前記更新起動プログラムを書き込むステップと、
前記不揮発性記憶部のうち前記起動プログラムが記憶されている起動プログラム記憶領域を消去するステップと、
前記空き領域に格納された前記更新起動プログラムを読み出して、消去された前記起動プログラム記憶領域へ前記更新起動プログラムを書き込むステップと、を有することを特徴とする。
【００２０】
上記構成によれば、更新起動プログラムを受信すると、メイン記憶領域は消去され、消去されたメイン記憶領域へ更新起動プログラムが書き込まれる。その後、起動プログラム記憶領域が消去され、消去された起動プログラム領域にも更新起動プログラムが書き込まれる。すなわち、不揮発性記憶部上には一時的に複数の更新起動プログラムが書き込まれる。書き込み処理の途中で電源がオフされても不揮発性記憶部上には、起動プログラムあるいは更新起動プログラムの何れかが保護される。このため、どちらかの起動プログラムによって確実に起動することができる。
【００２１】
また、メイン記憶領域に対して更新起動プログラムを書き込む場合、起動プログラム記憶領域に対して更新起動プログラムを書き込む場合、の何れにおいても、更新起動プログラムを揮発性記憶部の空き領域から読み出して書き込むよう構成されている。したがって、書き込み速度の高速化を図ることができる。
【００２２】
また、本発明に係るプリンタは、上記何れかのプログラム書き込み装置を有することを特徴とする。このような構成によれば、記憶容量の限られたＲＡＭ（揮発性記憶部）を搭載したプリンタであっても、従来と同様にプログラム書き換え処理を行うことができる。したがって、プリンタのコストダウンを図ることができる。
【発明を実施するための最良の形態】
【００２３】
以下、図面を参照して本発明の実施形態について説明する。図１は、本発明に係るプログラム書き込み装置を備えたプリンタの内部構成を示した図である。
【００２４】
図１に示すように、プリンタ１０は主として、制御部（ＣＰＵ）１１と、フラッシュＲＯＭ（不揮発性記憶部）１２と、ＲＡＭ（揮発性記憶部）１３と、通信インターフェース１４と、操作ボタン１５と、表示部１６と、プリンタユニット１７と、を備えており、これらはそれぞれバス１８を介して接続されて構成されている。
【００２５】
制御部１１は、プリンタ１０全体の制御を行い、フラッシュＲＯＭ１２に記憶された各種プログラム、例えばファームウェアを適宜読み出して実行する。また制御部１１は、書き込み（コピー）処理部１１ａを備えている。書き込み処理部１１ａは電源がオンされると起動プログラムを読み出してＲＡＭ１３へ書き込み、メイン処理を実行する場合にはメインプログラムを読み出してＲＡＭ１３へ書き込む。また、メモリ書き換え処理を実行する場合にはメモリ書き換えプログラムを読み出してＲＡＭ１３へ書き込み、フラッシュＲＯＭ１２の書き換え対象セクタを消去したりする。詳細については後述する。
【００２６】
また、表示部１６は、ユーザにデータの入力を受け付ける画面を表示したり、プリンタ１０による演算処理結果の画面を表示したりするものであり、液晶表示装置（ＬＣＤ）等のディスプレイ装置を含む。
【００２７】
また、操作ボタン１５は、ユーザによる入力の受付を行うものであり、様々な形式のボタンその他の入力デバイスを含む。操作ボタン１５は、直接又は介在Ｉ／Ｏコントローラを介してプリンタ１０と接続することができる。
【００２８】
また、通信インターフェース１４は、通信回線を介してホストコンピュータ２０と接続できるようにするためのインターフェースである。通信インターフェース１４は、ＲＳ−２３２Ｃ、ＵＳＢ等のシリアルインターフェース・アダプタ、ＳＣＳＩ等のパラレルインターフェース・アダプタ等を含む。
【００２９】
プリンタユニット１７は、制御部１１の制御に基づいて実際に印刷を行うプリンタヘッド、用紙フィード装置等が含まれる。
【００３０】
フラッシュＲＯＭ１２には、書き換え対象となるファームウェアが記憶されており、セクタ単位、例えば６４ＫＢ単位での一括消去、書き換えが可能となっている。
【００３１】
フラッシュＲＯＭ１２は、電気的に書き換え可能な不揮発性の記憶媒体である。フラッシュＲＯＭ１２は、一括して消去可能な最小単位の記憶領域である複数のセクタに分割されており、セクタ毎にデータの書き換えを行うことが可能である。フラッシュＲＯＭ１２には、起動処理の初期段階の処理を実行するブートセレクタプログラムと、ブートセレクプログラムの実行後に起動され引き続き起動処理を実行するブートプログラムと、印刷処理等プリンタ１０本来の処理（以下、メイン処理という）を制御するメインプログラムが記憶されている。
【００３２】
以下、本実施形態では、フラッシュＲＯＭ１２内において、ブートセレクタプログラムが格納されている領域を「ブートセレクタ」、ブートプログラムが格納されている領域を「ブートセクタ」、メインプログラムが格納される領域を「メイン領域」と呼ぶこととする。
【００３３】
ＲＡＭ１３は、各種プログラムが一時的に保持される書き換え可能な揮発性の記憶媒体である。フラッシュＲＯＭ１２に記憶された各種プログラムの実行に当たっては、ＲＡＭ１３に各種プログラムが読み出され、プリンタ１０の制御が行われる。
【００３４】
図２は、フラッシュＲＯＭ１２における各種プログラムの内部記憶状態を示す模式図である。（ａ）はプリンタ１０の書き換え処理を実行する前のフラッシュＲＯＭ１２の内部構成を示し、（ｂ）はプリンタ１０の書き換え処理中のフラッシュＲＯＭ１２の構成例を示した図である。
【００３５】
図２（ａ）に示すようにフラッシュＲＯＭ１２は、主としてブートセレクタ３１、メインセクタ１、メインセクタ２、メインセクタ３…からなるメイン領域３２及び第1ブートセクタ３３とを備えている。また、図２（ｂ）に示すようにメモリ書き換え処理中においては、ブートセレクタ３１、メイン領域３２及び第１ブートセクタ３３のほか、メインセクタ１に相当するセクタに一時的に第２ブートセクタ３４が構成される。
【００３６】
まず、ブートセレクタ３１について説明する。
ブートセレクタ３１には、プリンタ１０の初期起動時に読み出されて実行されるブートセレクタプログラムが記憶されている。ブートセレクタプログラムは、プリンタ１０の電源投入直後に初期の起動処理を実行する初期ブートプログラムである。ブートセレクタプログラムは、基本的に書き換えが行われないよう設定されており、プリンタ１０の起動処理に最低限必要な機能のみを実行する。
【００３７】
プリンタ１０の起動処理に最低限必要な機能とは、例えば、最低限のハードウェアチェックおよび初期化等が挙げられる。この最低限のハードウェアチェックおよび初期化とは、ブートプログラムが実行されるまでの間、自身のプログラムを実行するために必要なデバイスのみを対象としたチェックおよび初期化が挙げられ、たとえばＣＰＵのチェックおよび初期化、およびブートセレクタプログラムを実行するために必要なＲＡＭ１３の所定領域のチェックおよび初期化等が挙げられる。
【００３８】
次に、第１ブートセクタ３３及び第２ブートセクタ３４について説明する。
第１ブートセクタ３３は、起動時における各種起動処理の実行、フラッシュＲＯＭ１２に格納されたプログラムを書き換えるための機能を実行させるブートプログラム（起動プログラム）が格納されている。
ブートプログラムには、起動処理が実行されてＲＡＭ１３上に読み出されると電源がオフされるまでＲＡＭ１３上に常駐する常駐プログラム（特定プログラム）、高速処理を要求される非常駐プログラム（高速処理プログラム）、ＲＡＭ１３上に読み出されることなくフラッシュＲＯＭ１２上で動作するプログラムが含まれる。
【００３９】
例えば、常駐プログラムにはフラッシュＲＯＭ制御プログラム、ブート／メイン共有関数プログラムが挙げられる。また、非常駐プログラムには割込みベクタテーブル、Wブート・スタートアッププログラム、メモリ書き換えプログラム、コマンド処理プログラム、インターフェース処理プログラムが挙げられる。フラッシュＲＯＭ１２上で動作するプログラムにはＮＶＳモジュール、データ固定領域などが挙げられる。
【００４０】
第２ブートセクタ３４は、メモリ書き換え処理において一時的にブートプログラムが書き込まれるセクタである。第１ブートセクタ３３及び第２ブートセクタ３４にはブートプログラムの正当性を確認するチェックサム３３ａ，３４ａがそれぞれブートセクタの最後に格納される。
【００４１】
次に、メイン領域３２について説明する。
メイン領域３２は、複数のメインセクタを備え、各セクタにプリンタ１０のメイン処理の制御を実行するメインプログラムが格納されている。メイン領域３２内のメインプログラムは、ブートプログラムによる起動処理の終了後にＲＡＭ１３上へ読み出され、実行される。
【００４２】
また、メインセクタ１，メインセクタ２…は、第１ブートセクタ３３及び第２ブートセクタ３４と同様にメインプログラムの正当性を確認するチェックサム３２ａを有している。なお、各ブートセクタ３３，３４及び各メインセクタのチェックサムは夫々のセクタの最後に１６ビットのＷＯＲＤサイズを基本として書き込み、構成ビットが少ないことによる正常性チェックの信頼度を下げないようにしている。
【００４３】
＜メモリ書き換え処理について＞
次にメモリ書き換え処理について説明する。
図３及び図４は、メモリ書き換え処理におけるフラッシュＲＯＭ及びＲＡＭの内部構成の変化を示した模式図である。
図３（ａ）に示すように本実施形態のＲＡＭ１３は、電源がオンされてからオフされるまで、特定の用途のために使用される常駐ＲＡＭ領域１３ａと、電源がオフされるまでの間に他の用途にも使用される非常駐ＲＡＭ領域１３ｂの２つの領域に分けられている。
【００４４】
常駐ＲＡＭ領域１３ａには、スタックや受信バッファとして使用される領域１３ｃと、電源オン中はフラッシュＲＯＭ制御プログラム、ブート／メイン共有関数プログラムなどの特定プログラムによって専用される専用領域１３ｄと、が含まれる。
【００４５】
また、非常駐領域１３ｂには、ブートプログラムのうち特定プログラム以外で高速処理を要求される非常駐プログラム（高速処理プログラム）とメインプログラムとによって共用される共用領域１３ｅと、メモリ書き換え処理においてホストコンピュータ２０から更新プログラムが送信されたときに一時的に保管する一時保管領域１３ｆと、が含まれる。
高速処理プログラムには、割込みベクタテーブル、Wブート・スタートアッププログラム、メモリ書き換えプログラム、コマンド処理プログラム、インターフェース処理プログラムなどがある。
【００４６】
非常駐ＲＡＭ領域１３ｂは、常駐プログラムによって専用されることなく、各処理において実行する必要性があるプログラムによって適宜書き換えられる。具体的には、メモリ書き換え処理を実行する場合にはメモリ書き換えプログラムが書き込まれ、メイン処理へ移行する場合にはフラッシュＲＯＭ１２から読み出されたメインプログラムが書き込まれる。このように複数のプログラムによって非常駐ＲＡＭ領域１３ｂを共用することができるので、記憶容量の限られたＲＡＭ１３であっても従来と同様の機能を果たすことができる。
【００４７】
以下では、旧バージョン（Ｖｅｒ．１）のブートプログラム及びメインプログラムを新バージョン（Ｖｅｒ．２）のブートプログラム及びメインプログラムに書き換える処理を具体例として説明する。図５は、メモリ書き換え処理を説明するフローチャートである。
【００４８】
電源が投入されるとブートセレクタ３１のブートセレクタプログラムが起動して初期化処理を実行する（ステップＳ１１、図３（ａ）参照）。ブートセレクタプログラムは第１ブートセクタ３３及び第２ブートセクタ３４のうち何れか正常に起動するブートセクタを選択する。ここでは、第１ブートセクタ３３が正常に起動するセクタであるため、第１ブートセクタ３３に格納されている起動プログラム（Ｖｅｒ．１）のうち、上述した常駐プログラム及び非常駐プログラムのみを読み出し、ＲＡＭ１３へ書き込む（ステップＳ１２）。このとき、常駐プログラムは常駐ＲＡＭ領域１３ａへ、非常駐プログラムは非常駐ＲＡＭ領域１３ｂへ書き込む（図３（ｂ）参照）。
【００４９】
次に、ＲＡＭ１３に書き込まれた非常駐プログラムのうちメモリ書き換えプログラムが起動し（ステップＳ１３）、メモリ書き換えモードへ移行する。メモリ書き換えモードへ移行すると、常駐ＲＡＭ領域１３ａに書き込まれたフラッシュＲＯＭ制御プログラム、ブート／メイン共有関数プログラムが起動し、ホストコンピュータ２０から受信した新バージョンのブートプログラム（Ｖｅｒ．２）を非常駐ＲＡＭ領域のうち一時保管領域に書き込む（ステップＳ１４）。このとき、チェックサムを算出して一時保管領域の所定のアドレスに書き込む（図３（ｃ）参照）。
【００５０】
メイン領域３２の最初のメインセクタ１を消去し（ステップＳ１５、図３（ｃ）参照）、消去したメインセクタ１に、ＲＡＭ１３の一時保管領域に書き込まれた新バージョンのブートプログラム（Ｖｅｒ．２）を書き込む（ステップＳ１６、図３（ｄ）参照）。さらに、メインセクタ１の所定のアドレスにブートＩＤを書き込む。なお、ブートＩＤは、第１ブートセクタ３３に書き込まれるブートプログラムとメインセクタ１に一時的に格納されるブートプログラムとを識別するためのＩＤである。本実施形態では、第１ブートセクタ３３にはブートＩＤ（正：０ｘ００４１）が、メインセクタ１にはブートＩＤ（副：０ｘ００４２）が書き込まれる。
【００５１】
ステップＳ１６では、新バージョンのブートプログラム（Ｖｅｒ．２）がフラッシュＲＯＭ１２のメインセクタ１に一時的に保存され、図３（ｄ）に示すようにメイン領域３２に一時的な第２ブートセクタ３４が構成されたことになる。この状態で電源がオフされても新バージョンのブートプログラム（Ｖｅｒ．２）を保護することができる。
【００５２】
新バージョンのブートプログラム（Ｖｅｒ．２）がフラッシュＲＯＭ１２上に格納されたところで、旧バージョンのブートプログラム（Ｖｅｒ．１）を第１ブートセクタ３３から消去する（ステップＳ１７、図４（ａ）参照）。消去した第１ブートセクタ３３に、ＲＡＭ１３の一時保管領域に書き込まれた新バージョンのブートプログラム（Ｖｅｒ．２）を書き込むとともに、第１ブートセクタ３３の所定のアドレスにブートＩＤ（正：０ｘ００４１）を書き込む。（ステップＳ１８、図４（ｂ）参照）。
【００５３】
なお、ステップＳ１６において第２ブートセクタから新バージョンのブートプログラム（Ｖｅｒ．２）を読み出し、第１ブートセクタ３３に書き込むことも可能であるが、ＲＡＭ１３の一時保管領域に書き込まれている新バージョンのブートプログラム（Ｖｅｒ．２）を直接書き込むことによって、書き込み速度の高速化を図ることができる。
【００５４】
図４（ｂ）に示すように新バージョンのブートプログラムがフラッシュＲＯＭ１２上に２つ格納されたところで、一時的に構成された第２ブートセクタの新バージョンのブートプログラム（Ｖｅｒ．２）を消去する(ステップＳ１９、図４（ｃ）参照)。
【００５５】
ホストコンピュータ２０から受信した新バージョンのメインプログラム（Ｖｅｒ．２）をメインセクタ１に書き込む（ステップＳ２０、図４（ｄ）参照）。続いて、メインセクタ２を消去し同じく新バージョンのメインプログラムを書き込み、メイン領域をすべて書き換えるとチェックサムを算出する。メイン領域の指定アドレスに算出したチェックサムを書き込むとメモリ書き換え処理を終了する。
【００５６】
このように、本実施形態のメモリ書き換え方法では、旧バージョンのブートプログラム（Ｖｅｒ．１）をフラッシュＲＯＭ１２上に残し保護したまま、新バージョンのブートプログラム（Ｖｅｒ．２）をフラッシュＲＯＭ１２の別領域に書き込む。このため、書き込み途中で電源がオフされても新旧何れかのバージョンのブートプログラムによって起動復帰することができる。
【００５７】
具体的には、ステップＳ１６の途中で電源がオフされても（図３（ｄ）の状態）、第１ブートセクタには旧バージョンのブートプログラム（Ｖｅｒ．１）が生き残っているため復帰することができる。
また、ステップＳ１８の途中で電源がオフされても（図４（ｂ）の状態）、すでに第２ブートセクタに新バージョンのブートプログラム（Ｖｅｒ．２）が書き込まれているため復帰することができる。
さらに、ステップＳ２０の途中で電源がオフされても（図４（ｄ）の状態）、第１ブートセクタは新バージョンのブートプログラムに書き換えられているため、新バージョンのブートプログラム（Ｖｅｒ．２）で復帰することができる。復帰後はメインプログラムのみを新バージョンに書き換えればよい。
【００５８】
＜電源投入からメイン処理へ移行する処理について＞
次に電源オンからメイン処理へ実行するまでの処理について説明する。図６は、電源オンされてからメイン処理へ移行するまでのフラッシュＲＯＭ及びＲＡＭの内部記憶構成の変化を示した模式図である。
【００５９】
以下では、メイン処理へ移行するまでの流れをフラッシュＲＯＭ１２とＲＡＭ１３の状態遷移とともに説明する。図７は、メイン処理へ移行するまでの流れを説明するフローチャートである。
【００６０】
電源が投入されるとブートセレクタ３１のブートプログラムが起動し初期化処理を実行する（ステップＳ２１）。具体的には、第１ブートセクタ３３のブートID及びチェックサムの正当性を判断する(ステップＳ２２)。第１ブートセクタ３３のブートID及びチェックサムが一致していると判断した場合には（ステップＳ２２：一致）、第１ブートセクタ３３（ブートＩＤ（正：０ｘ００４１）の方）を選択し、第１ブートセクタ３３に格納されている起動プログラムのうち、常駐プログラムと非常駐プログラムだけを読み出して、ＲＡＭ１３へ書き込む（ステップＳ２３、図６（ａ）から（ｂ）参照）。
【００６１】
第１ブートセクタ３３に格納されている一部のプログラムが動作するとともに、ＲＡＭ１３に読み出されたメモリ書き換えプログラムが動作し、メイン領域３２全体のチェックサム３２ａの正当性を判断する（ステップＳ２４、図６（ｃ）参照）。メイン領域のチェックサムが一致していると判断した場合には（ステップＳ２４：一致）、フラッシュＲＯＭ１２内は正常に書き換えられていることが確認できたためメイン処理へ移行する。
【００６２】
メイン領域３２に格納されているメインプログラムを読み出し、メモリ書き換えプログラムが書き込まれていたＲＡＭ１３の非常駐ＲＡＭ領域１３ｂにメインプログラムを上書きする（図６（ｄ）参照）。ＲＡＭ１３に書き込まれたメインプログラムが起動してメイン処理が実行される。このとき、常駐プログラムが書き込まれた常駐プログラム領域１３ａはメイン処理においても共有して実行する。
【００６３】
一方、ステップＳ２２で、第１ブートセクタ３３のブートID及びチェックサムが不一致であると判断した場合には（ステップＳ２２：不一致）、メインセクタ３２のブートID及びチェックサムの正当性を判断する（ステップＳ２５）。メインセクタ３２のブートID及びチェックサムが一致していると判断した場合は（ステップＳ２５：一致）、図５のステップＳ１８において新バージョンのブートプログラムの書き込み途中に電源がオフされてしまったと考えられる。つまり、一時的に第２ブートセクタ３４を構成した後、第１ブートセクタの書き込みに失敗した場合である。
【００６４】
この場合には新バージョンに書き換えられた正常な第２ブートセクタ３３（ブートＩＤ（正：０ｘ００４２）の方）を選択し、第２ブートセクタ３３に格納されている起動プログラムのうち常駐プログラムと非常駐プログラムだけを読み出して、ＲＡＭ１３へ書き込む（ステップＳ２６）。ＲＡＭ１３に書き込まれたメモリ書き換えプログラムが動作すると、正常な第２ブートセクタ３３の内容一式を第１ブートセクタへ書き込み、強制書き換えモードへ移行する（ステップＳ２７）。
【００６５】
また、ステップＳ２５で、メインセクタ３２のブートＩＤ及びチェックサムが一致していないと判断した場合には（ステップＳ２５：不一致）、上記説明したフラッシュＲＯＭ１２内のメインプログラムの書き換え処理が正常に終了できなかった場合であると考えられる。つまり、図５のステップＳ２０において新バージョンのメインプログラムの書き込み途中に電源がオフされてしまった場合である。
【００６６】
このような状態は、第１ブートセクタ３３及びメインセクタ３２の正当性が共に保障できず、正常なブートプログラムがフラッシュＲＯＭ１２に存在しない状態である。このため、復帰不可能エラーとしてエラー処理を行う。
【００６７】
このように、本実施形態によれば、ＲＡＭ１３は常駐ＲＡＭ領域１３ａと非常駐ＲＡＭ領域１３ｂとに分類され、非常駐ＲＡＭ領域１３ｂにはメモリ書き換え処理とメイン処理とにおいてそれぞれ異なるプログラムが書き込まれるよう構成されている。すなわち、メモリ書き換え処理においてはメモリ書き換えプログラムが呼び出されて起動し、メイン処理においてはメインプログラムが呼び出されて起動する。したがって、非常駐ＲＡＭ領域１３ｂは、複数の処理で共用することができる記憶領域となっている。このため記憶容量の限られたＲＡＭ１３を採用しても従来と同様にメインプログラムをＲＡＭ上で実行させることができる。
【図面の簡単な説明】
【００６８】
【図１】本発明のプログラム書き換え装置の一実施形態であるプリンタの内部構成を示した図である。
【図２】本実施形態のフラッシュＲＯＭにおける各種プログラムの記憶状態を示す模式図である。
【図３】メモリ書き換え処理におけるフラッシュＲＯＭ及びＲＡＭの内部構成の状態遷移を示した模式図である。
【図４】メモリ書き換え処理におけるフラッシュＲＯＭ及びＲＡＭの内部構成の状態遷移を示した模式図である。
【図５】メモリ書き換え処理を説明するフローチャートである。
【図６】電源オンされてからメイン処理へ移行するまでのフラッシュＲＯＭ及びＲＡＭの内部構成の状態遷移を示した模式図である。
【図７】メイン処理へ移行するまでの流れを説明するフローチャートである。
【符号の説明】
【００６９】
１０：プリンタ、１１：制御部、１１ａ：書き換え処理部、１２：フラッシュＲＯＭ、１３：ＲＡＭ、１３ａ：常駐ＲＡＭ領域、１３ｂ：非常駐ＲＡＭ領域、１３ｄ：専用領域、１３ｅ：共用領域、１４：通信インターフェース、１５：操作ボタン、１６：表示部、１７：プリンタユニット、１８：バス、２０：ホストコンピュータ、３１：ブートセレクタ、３２：メイン領域、３３：第１ブートセクタ、３４：第２ブートセクタ
【図１】
2009003755.tif 000003
【図２】
2009003755.tif 000004
【図３】
2009003755.tif 000005
【図４】
2009003755.tif 000006
【図５】
2009003755.tif 000007
【図６】
2009003755.tif 000008
【図７】
2009003755.tif 000009