(57)【要約】【課題】  Ｗブートセクタとメインセクタが共に正常に書き換えできたかを判断することができるプリンタ及びプリンタのバージョンチェック方法を提供する。【解決手段】  ＣＰＵ１０１は、ブートセレクタデータに基づいて起動すべき前記ブートデータを格納したＷブートセクタＡ２０４及びＷブートセクタＢ２０３の何れか一方を選択する。そして、ＣＰＵ１０１は、ＷブートセクタＡ２０４、ＷブートセクタＢ２０３及びメインセクタ２０２にそれぞれ設けられたバージョン文字列を検証する。メインセクタ２０２のバージョン文字列と選択されたＷブートセクタＡ２０４及びＷブートセクタＢ２０３の一方のバージョン文字列が一致していると検証された場合にメインセクタ２０２中のメインデータが実行される。【選択図】図５
2006227830.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
前記ＣＰＵと通信可能に接続され複数のセクタを有するフラッシュＲＯＭと、
前記フラッシュＲＯＭの書き換え処理時に、書き換え対象セクタのデータを一時的に記憶するＲＡＭと、を有する情報処理機器であって、
前記フラッシュＲＯＭは、ブートセレクタデータを格納したブートセレクタと、前記ブートセレクタデータの実行によって選択的に起動されるブートデータをそれぞれ格納した第１ブートセクタ及び第２ブートセクタと、前記ブートデータによって起動されるメインデータを格納したメインセクタと、を有し、
前記ＣＰＵは、前記ブートセレクタデータを実行することにより起動すべき前記ブートデータを格納した第1ブートセクタ及び第2ブートセクタの何れか一方を選択し、かつ前記ブートデータを実行することにより前記第１ブートセクタ及び第２ブートセクタの何れか一方と前記メインセクタとがそれぞれ有するバージョン文字列を検証し、
前記ＣＰＵは、前記メインセクタのバージョン文字列と第1ブートセクタ及び第2ブートセクタの何れか一方のバージョン文字列が一致していると検証された場合に前記メインデータを実行することを特徴とする情報処理機器。
【請求項２】
前記ＣＰＵは、前記フラッシュＲＯＭの書き換え処理を実行する書き換え処理部を有し、前記メインセクタのバージョン文字列と前記ブートセクタデータによって選択されたブートセクタのバージョン文字列が一致していないと検証されたら、前記フラッシュＲＯＭの書き換え処理を実行することを特徴とする請求項１に記載の情報処理機器。
【請求項３】
ブートセレクタデータを格納したブートセレクタと、バージョン文字列、データ更新回数情報、チェックサム及びブートＩＤを備えた第１ブートセクタ及び第２ブートセクタと、バージョン文字列を備えたメインセクタと、から成るフラッシュＲＯＭを有する情報処理機器の制御方法であって、
前記ブートセレクタデータにより前記第１ブートセクタあるいは第２ブートセクタを選択するブートセクタ選択ステップと、
前記メインセクタのバージョン文字列と前記第１ブートセクタあるいは第２ブートセクタのいずれか一方のバージョン文字列が一致しているか否かを検証するバージョン文字列検証ステップと、を有し、
前記メインセクタのバージョン文字列と前記ブートセクタ選択ステップによって選択されたブートセクタのバージョン文字列が一致している場合に前記メインセクタに格納されたメインデータを実行することを特徴とする情報処理機器の制御方法。
【請求項４】
前記バージョン文字列検証ステップにおいて、前記メインセクタのバージョン文字列と前記ブートセクタ選択ステップにおいて選択されたブートセクタのバージョン文字列が一致していない場合には、前記フラッシュＲＯＭの書き換え処理を実行することを特徴とする請求項３に記載の情報処理機器の制御方法。
【請求項５】
前記メインセクタが備えた前記メインデータの正当性を確認する前記メインセクタのチェックサムを検証するメインセクタ検証ステップを有し、
前記メインセクタのバージョン文字列と前記ブートセクタ選択ステップによって選択されたブートセクタのバージョン文字列が一致しており、かつ、前記メインセクタチェックサム検証ステップにおいて前記メインセクタのチェックサムが正常である場合に前記メインデータを実行することを特徴とする請求項３又は４に記載の情報処理機器の制御方法。
【請求項６】
前記第１ブートセクタ及び第２ブートセクタは、前記第１ブートセクタ及び第２ブートセクタの新旧を比較するために必要なデータ更新回数情報と、前記第１ブートセクタ及び第２ブートセクタに格納されたブートデータの正当性を確認するチェックサム及びブートＩＤと、を備えていることを特徴とする請求項３〜５の何れか１項に記載の情報処理機器の制御方法。
【請求項７】
前記ブートセクタ選択処理ステップは、前記ブートセクタのチェックサムを検証するブートセクタチェックサム検証ステップと、前記第１ブートセクタ及び第２ブートセクタの更新回数を比較する更新回数比較ステップと、からなることを特徴とする請求項３〜６の何れか１項に記載の情報処理機器の制御方法。
【請求項８】
前記ブートセクタチェックサム検証ステップにおいて、前記第１ブートセクタ及び第２ブートセクタのチェックサムが共に正当であり、前記更新回数比較ステップにおいて、第1ブートセクタの更新回数が多い場合には前記第1ブートセクタのブートデータ処理を行い、
第２ブートセクタの更新回数が多い場合には前記第２ブートセクタのブートデータ処理を行うことを特徴とする請求項７に記載の情報処理機器の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理機器及び情報処理機器の制御方法に関する。
【背景技術】
【０００２】
近年、プリンタやスキャナ等の情報処理機器は、パーソナルユースや業務用途等の様々な目的に応じて幅広く利用されている。以下では、情報処理機器として、プリンタを例に挙げて説明する。
【０００３】
プリンタにはファームウェアが組み込まれており、ファームウェアを実行することによりプリンタの制御が行われる。ファームウェアは、大きく分けてハードウェアの初期化等プリンタの起動に必要な一連の起動動作を実行させるブートプログラムと、ブートプログラムによる起動動作後に実行されてホストコンピュータからの指示に応じてプリンタを制御するメインプログラムの２つを備えている。ブートプログラムとメインプログラムは、プリンタ内に設けられたフラッシュＲＯＭ内の異なるセクタに格納されており、フラッシュＲＯＭ書き換えの際にはセクタ毎に、すなわちブートプログラムとメインプログラムをそれぞれ別々に書き換えが可能である。
【０００４】
ところで、ブートプログラムが記憶されているセクタ（以下、ブートセクタ）の書き換えに失敗すると、プリンタはブートプログラムによる起動動作を実行することができず、起動不能状態に陥ることがある。このような状態を回避するため、選択的に読み出される複数のブートセクタを設け、一のブートセクタ内のブートプログラム書き換えに失敗しても、他のブートセクタ内の正常なブートプログラムでプリンタを起動させる、いわゆるＷブート方式が提案されている（例えば、特許文献１参照）。
【特許文献１】特開２００４−９４６２８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、Ｗブートを備えたプリンタにおいて、ブートプログラムとメインプログラムを同時に書き換えるときに、Ｗブートを構成する２つのセクタのうちの一方の書き換えに失敗した場合、書き換え手順によってはメインセクタのみが書き換えられる可能性がある。この場合、電源再投入時には、書き換えが行われなかった２つのセクタのうちの他方のセクタに書きこまれた古いバージョンのブートプログラムにより起動処理が行われ、書き換えが行われたメインセクタに格納された新しいバージョンのメインデータが実行されることがある。このような状況であっても、プリンタは正常に動作してしまうため、ユーザは正常にＷブートセクタが書き換えられたと誤解する虞がある。このような状態であっても、プリンタは正常に起動されて問題なく稼働する場合もあるが、バージョンアップにより不具合が解消されていないため、致命的な欠陥を抱えたままプリンタが稼働を続けてしまう虞もある。
【０００６】
本発明は、上記問題点を鑑みてなされたものであり、メインセクタと同じバージョン名をＷブートセクタにも配置し、双方のバージョン名を比較チェックすることによりＷブートセクタとメインセクタが共に正常に書き換えできたかを判断することができる情報処理機器及び情報処理機器の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の上記目的は、以下の手段により達成される。
（１）  ＣＰＵと、
前記ＣＰＵと通信可能に接続され複数のセクタを有するフラッシュＲＯＭと、
前記フラッシュＲＯＭの書き換え処理時に、書き換え対象セクタのデータを一時的に記憶するＲＡＭと、を有する情報処理機器であって、
前記フラッシュＲＯＭは、ブートセレクタデータを格納したブートセレクタと、前記ブートセレクタデータの実行によって選択的に起動されるブートデータをそれぞれ格納した第１ブートセクタ及び第２ブートセクタと、前記ブートデータによって起動されるメインデータを格納したメインセクタと、を有し、
前記ＣＰＵは、前記ブートセレクタデータを実行することにより起動すべき前記ブートデータを格納した第1ブートセクタ及び第2ブートセクタの何れか一方を選択し、かつ前記ブートデータを実行することにより前記第１ブートセクタ及び第２ブートセクタの何れか一方と前記メインセクタとがそれぞれ有するバージョン文字列を検証し、
前記ＣＰＵは、前記メインセクタのバージョン文字列と第1ブートセクタ及び第2ブートセクタの何れか一方のバージョン文字列が一致していると検証された場合に前記メインデータを実行することを特徴とする情報処理機器。
（２）  前記ＣＰＵは、前記フラッシュＲＯＭの書き換え処理を実行する書き換え処理部を有し、前記メインセクタのバージョン文字列と前記ブートセクタデータによって選択されたブートセクタのバージョン文字列が一致していないと検証されたら、前記フラッシュＲＯＭの書き換え処理を実行することを特徴とする（１）に記載の情報処理機器。
（３）  ブートセレクタデータを格納したブートセレクタと、バージョン文字列、データ更新回数情報、チェックサム及びブートＩＤを備えた第１ブートセクタ及び第２ブートセクタと、バージョン文字列を備えたメインセクタと、から成るフラッシュＲＯＭを有する情報処理機器の制御方法であって、
前記ブートセレクタデータにより前記第１ブートセクタあるいは第２ブートセクタを選択するブートセクタ選択ステップと、
前記メインセクタのバージョン文字列と前記第１ブートセクタあるいは第２ブートセクタのいずれか一方のバージョン文字列が一致しているか否かを検証するバージョン文字列検証ステップと、を有し、
前記メインセクタのバージョン文字列と前記ブートセクタ選択ステップによって選択されたブートセクタのバージョン文字列が一致している場合に前記メインセクタに格納されたメインデータを実行することを特徴とする情報処理機器の制御方法。
（４）  前記バージョン文字列検証ステップにおいて、前記メインセクタのバージョン文字列と前記ブートセクタ選択ステップにおいて選択されたブートセクタのバージョン文字列が一致していない場合には、前記フラッシュＲＯＭの書き換え処理を実行することを特徴とする（３）に記載の情報処理機器の制御方法。
（５）  前記メインセクタが備えた前記メインデータの正当性を確認する前記メインセクタのチェックサムを検証するメインセクタ検証ステップを有し、
前記メインセクタのバージョン文字列と前記ブートセクタ選択ステップによって選択されたブートセクタのバージョン文字列が一致しており、かつ、前記メインセクタチェックサム検証ステップにおいて前記メインセクタのチェックサムが正常である場合に前記メインデータを実行することを特徴とする（３）又は（４）に記載の情報処理機器の制御方法。
（６）  前記第１ブートセクタ及び第２ブートセクタは、前記第１ブートセクタ及び第２ブートセクタの新旧を比較するために必要なデータ更新回数情報と、前記第１ブートセクタ及び第２ブートセクタに格納されたブートデータの正当性を確認するチェックサム及びブートＩＤと、を備えていることを特徴とする（３）〜（５）の何れか１項に記載の情報処理機器の制御方法。
（７）  前記ブートセクタ選択処理ステップは、前記ブートセクタのチェックサムを検証するブートセクタチェックサム検証ステップと、前記第１ブートセクタ及び第２ブートセクタの更新回数を比較する更新回数比較ステップと、からなることを特徴とする（３）〜（６）の何れか１項に記載の情報処理機器の制御方法。
（８）  前記ブートセクタチェックサム検証ステップにおいて、前記第１ブートセクタ及び第２ブートセクタのチェックサムが共に正当であり、前記更新回数比較ステップにおいて、第1ブートセクタの更新回数が多い場合には前記第1ブートセクタのブートデータ処理を行い、
第２ブートセクタの更新回数が多い場合には前記第２ブートセクタのブートデータ処理を行うことを特徴とする（７）に記載の情報処理機器の制御方法。
【発明の効果】
【０００８】
本発明によれば、プリンタの電源再投入時あるいはリセット時には、第1ブートセクタとメインセクタのバージョン文字列あるいは第２ブートセクタとメインセクタのバージョン文字列が同じである場合のみメインデータを実行するため、プリンタのファームウェアバージョンアップの際に、メインデータとブートデータが共に正常に書き換えできたかを確実に判断することが可能である。また、この判断においては、ブートセクタとメインセクタに異なるバージョン文字列を備える必要が無く、比較的容易に確認を行うことができる。
【０００９】
また、本発明によれば、ブートセレクタデータ実行後、何らかの事情により第1ブートセクタあるいは第２ブートセクタのいずれか一方のブートデータ書き換えに失敗しメインデータのみ書き換えが行われた場合でも、再度ブートデータの書き換え処理を実行することができる。このため、電源再投入時、書き換え対象とならなかった旧バージョン文字列のブートセクタによる起動処理後、書き換え対象となった新しいバージョン文字列のメインデータが実行されることがなくなり、再度プリンタを起動した場合でもバージョン不一致によるプリンタのアップデートがなされず、不具合が解消しないといった問題点を解消することができる。
【００１０】
また、本発明によれば、メインデータ書き換え後、メインセクタチェックサムの正当性が確認された場合にのみ書き換え後のメインデータを実行するため、メインデータが正常に書き換えできたかを確実に判断することが可能である。
【００１１】
また本発明によれば、メインデータの書き換えに失敗した場合でも再度メインデータの書き換え処理を実行するため、アップデート前のメインデータが実行されることなく、プリンタを常に最新のメインデータによって駆動させることが可能である。
【００１２】
また本発明によれば、第１ブートセクタあるいは第２ブートセクタの何れか一方が異常状態にあっても他方の正常状態にあるブートセクタによるプリンタの起動が可能である。
【発明を実施するための最良の形態】
【００１３】
次に、図面を参照しながら、本発明に係る情報処理機器及び情報処理機器の制御方法の実施形態について説明する。
【００１４】
図１は、本実施形態のプリンタ１を示す斜視図である。
図１に示すように、プリンタ１では、下部ケース３と上部ケース５とから構成される装置ケース７の前面中央に、記録紙を装填した略箱形の用紙カセット９が着脱自在に装着されている。また、用紙カセット９の上方には、印刷が終了した記録紙を受ける排紙トレイ１１が設けられている。
【００１５】
また、装置ケース７の前面の両側には、動作状態を表示する表示部１３が設けられ、表示部１３の下方には、インクカートリッジを収納するインク収納部１４が設けられている。装置ケース７内部には、記録紙を用紙カセット９から一枚ずつ繰り出して所定の搬送経路に沿って搬送する搬送機構や、搬送経路の途中に装備されて搬送されてくる記録紙に文字や図形等の画像を記録する記録部やの各種の動作機器が組み込まれており、これらの動作により、印刷が実行さえる。
【００１６】
次に、本実施形態のプリンタ１に設けられた制御部の構成を説明する。
図２は、本実施形態のプリンタ１の制御部の一構成を示す図である。
本実施形態のプリンタ１は、不揮発性メモリであるフラッシュＲＯＭ１０１と、揮発性メモリであるＲＡＭ１０２と、演算素子としてのＣＰＵ１０３とを有している。
【００１７】
フラッシュＲＯＭ１０１は、一括して消去可能な最小単位の記憶領域である複数のセクタに分割されており、各セクタ毎にデータの書き換えを行うことが可能である。このフラッシュＲＯＭ１０１には、起動処理の初期段階の処理を実行するブートセレクタデータと、と、ブートセレクタデータの実行後に起動され引き続き起動処理を実行するブートデータと、プリンタ１の通常モードの制御を実行するメインデータが記憶されている。
【００１８】
以下、本実施形態では、フラッシュＲＯＭ１０１内において、ブートセレクタデータが格納されているセクタを「ブートセレクタ」、ブートデータが格納されているセクタを「ブートセクタ」、メインデータが格納されるセクタを「メインセクタ」と呼ぶこととする。
【００１９】
ＲＡＭ１０２は、各種データが一時的に保持される記憶領域である。フラッシュＲＯＭ１０１に記憶された各種データの実行に当たっては、ＲＡＭ１０２に各種データが読み出され、ＣＰＵ１０３によりプログラム等の各種データが実行されて、プリンタ１の制御が実行される。
【００２０】
図３は、フラッシュＲＯＭ１０１におけるセクタの一構成例を示す図である。
フラッシュＲＯＭ１０１は、機能的に分けて、ブートセレクタ２０１、メインセクタ２０２、第1ブートセクタ（以下、ＷブートセクタＡ２０４という。）、第２ブートセクタ（以下、ＷブートセクタＢ２０３という。）から構成されている。以下の説明では、ＷブートセクタＡ２０４及びＷブートセクタＢ２０３をあわせてＷブートセクタ、そしてＷブートセクタに書き込まれたデータをＷブートデータと呼ぶこととする。
【００２１】
まず、ブートセレクタ２０１について説明する。
ブートセレクタ２０１は、プリンタ１の初期起動時にまず読み出されて実行されるブートセレクタデータが記憶されている。ブートセレクタデータは、プリンタ１の電源投入直後に初期の起動処理を実行する初期ブートプログラムと、初期ブートプログラムの実行後に、後述するＷブートセクタＡ２０４とＷブートセクタＢ２０３のいずれからブートデータを読み出すか選択するブートセレクタプログラムから構成されている。ブートセレクタデータは、基本的に書き換えが行われないように構成されたデータであり、プリンタ１の起動処理に最低限必要な機能のみを実行し、ＷブートセクタＡ２０４とＷブートセクタＢ２０３のいずれかのブートデータを選択するように構成されている。
【００２２】
ここで、プリンタ１の起動処理に最低限必要な機能とは、例えば、最低限のハードウェアチェックおよび初期化等が挙げられる。この最低限のハードウェアチェックおよび初期化とは、後述するＷブートセクタ内のＷブートデータが実行されるまでの間、自身のプログラムを実行するために必要なデバイスのみを対象としたチェックおよび初期化が挙げられ、たとえばＣＰＵ１０３のチェックおよび初期化、およびブートセレクタプログラムを実行するために必要なＲＡＭ１０２中の所定領域のみのチェックおよび初期化等が挙げられる。
【００２３】
なお、ブートセレクタデータはバグ修正のためのブートセレクタ２０１の書き換え処理を限りなく減らすため、なるべくシンプルなコードで記載されている。また、ブートセレクタ２０１は、フラッシュＲＯＭの書き換え情報であるバージョン文字列及びバージョン文字列の正当性を確認するためのバージョンＩＤを備えている。
【００２４】
次に、ＷブートセクタＡ２０４及びＷブートセクタＢ２０３について説明する。
ＷブートセクタＡ２０４は、起動時における各種起動処理の実行、及びフラッシュＲＯＭ１０１に格納されたデータを書き換えるための機能を実行させるブートデータが格納されている。具体的に、ブートデータは、プリンタ１を完全に起動させるために必要な各種起動処理を行うブートプログラムと、ブートプログラムの実行後に実行され後述するメインセクタ２０２のメインデータによる処理への移行を行うメイン移行プログラムと、フラッシュＲＯＭ１０１内のデータの書き換え処理を実行する書き換えプログラムとを備えている。
【００２５】
ＷブートセクタＡ２０４に記憶されたブートプログラムは、ブートセレクタ２０１に記憶された初期ブートプログラムにおける初期化及びチェックを含むプリンタ１を起動する必要なデバイスの初期化及びチェックを一から独立して実行する。具体的には、ＣＰＵやＲＡＭのチェックに加えて、通信インタフェースの種別判定、各通信インタフェースに対応した処理、各種ステータスコマンドに対応した処理等が実行される。
【００２６】
一方、ＷブートセクタＢ２０３は、ＷブートセクタＡ２０４と同様に、起動時における各種起動処理の実行、及びフラッシュＲＯＭ１０１に格納されたデータを書き換えるための機能を実行させるブートデータが格納されている。このブートデータは、ＷブートセクタＡ２０４に記憶されたものと同様に、プリンタ１を完全に起動させるために必要な各種起動処理を行うブートプログラムと、ブートプログラムの実行後に実行され後述するメインセクタ２０２のメインデータによる処理への移行を行うメイン移行プログラムと、フラッシュＲＯＭ１０１内のデータの書き換え処理を実行する書き換えプログラムとを備えている。
【００２７】
このＷブートセクタＢ２０３に書き込まれているブートデータは、工場出荷時には同一のデータが書き込まれているが、工場出荷時以降に一度でも書き換えが行われると、何れか一方のみが交互に書き換えられ、書き換えによりそれぞれ異なるバージョンのブートデータが記憶される。すなわち、ＷブートセクタＢ２０３に格納されているデータは、工場出荷時以外はバージョンが異なるが同種のブート機能を実行するためのプログラムが記憶されている。これについては、後ほど詳述する。
【００２８】
ＷブートセクタＡ２０４及びＷブートセクタＢ２０３には、それぞれブートデータが正しく記憶されているかどうかを検証するためのチェックサム、ＷブートセクタＡ２０４及びＷブートセクタＢ２０３全体の書き換え回数を示すＷブート更新回数、Ｗブートを指定するＷブートＩＤ及びブートセレクタ２０１と同様のバージョン文字列及びバージョンＩＤが備えられている。
【００２９】
これらＷブートセクタＡ２０４及びＷブートセクタＢ２０３内のブートデータは、ブートセレクタ２０１のブートセレクタプログラムが実行された後、ブートセレクタプログラムにより何れか一方のブートデータが選択的に読み出されて実行される。これについても、後ほど詳述する。
【００３０】
なお、図３に示すようにＷブートセクタのＷブート更新回数、チェックサム、ＷブートＩＤはＷブートの最後にＷブート更新回数、チェックサム、ＷブートＩＤの順序で配置することが望ましい。この順序を外れる場合でもＷブートの正常性チェックの信頼度を少しでも上げるため、ＷブートＩＤは最後に書き込むようにすることが好ましい。
また、Ｗブート更新回数、チェックサム、ＷブートＩＤは１６ビットのＷＯＲＤサイズを基本とし、このサイズを外れる場合でもチェックサムとＷブートＩＤは併せて３２ビット以上とし、構成ビットが少ないことによる正常性チェックの信頼度を下げないようにしている。さらに、更新回数は、更新回数カウンタを１周させることなくカウントできるように１６ビット以上であることが望ましい。
【００３１】
次に、メインセクタ２０２について説明する。
メインセクタ２０２には、プリンタ１の通常モードの制御を実行するメインプログラム、ホストコンピュータからの指示に応じてＷブートセクタ内の書き換えプログラムを呼び出すＷブートセクタ選択プログラム、フォントデータ、諸設定データ等のメインデータが格納されている。メインセクタ２０２内のメインデータは、ＷブートセクタＡ２０４及びＷブートセクタＢ２０３のいずれか一方に記憶されたブートプログラムが実行された後、読み出されて実行され、プリンタ１の通常動作における各種制御を実行する。
【００３２】
このメインセクタ２０２は、ブートセレクタデータによって選択されたＷブートセクタＡ２０４またはＷブートセクタＢ２０３の何れかに記憶されたブートデータ中の書き換えプログラムによって書き換えが行われる。また、メインセクタ２０２は、ブートセレクタ２０１と同様にバージョン文字列及びバージョンＩＤを備える他、メインデータの正当性を確認するチェックサムを有している。
【００３３】
各セクタに書き込まれたバージョン文字列及びバージョンＩＤについて補足すると、ブートセレクタ２０１に備えられたバージョン文字列及びバージョンＩＤはブートセレクタ２０１に固有のものとし、ＷブートセクタＢ２０３及びＷブートセクタＡ２０４に備えられたバージョン文字列の一方は、常にメインセクタ２０２に備えられたバージョン文字列と同じものが書き込まれるように構成されている。これによりプリンタ１の正常起動時は、メインセクタ２０２のバージョン文字列とＷブートのバージョン文字列が同じであることが保証され、メインセクタ２０２のバージョン文字列によってメインデータとＷブートデータの両方のバージョンが一致した場合には、後述する書き換えにより正しくメインデータとＷブートデータの一方が書き換えられていることを確認した上で、メインセクタ２０２中のメインデータを実行することができる。これについても、後ほど詳述する。
なお、メインセクタ２０２のメインプログラム及びＷブートセクタ中のＷブートデータからブートセレクタ２０１のバージョン情報を参照する場合に備えて、ブートセレクタ２０１のバージョン文字列、バージョンＩＤは固定アドレスに配置することが好ましい。
【００３４】
次に、フラッシュＲＯＭ１０１内の各種データが実行されることによりＣＰＵ１０３により構成される各種機能部について説明する。
図４は、本実施形態のプリンタ１におけるＣＰＵ１０３内の処理を模式的に示すブロック図である。
ＣＰＵ１０３には、ＣＰＵ１０３がフラッシュＲＯＭ内の各種データを読み出して実行することにより、初期ブート部４１０、メインブート部４２０及びメイン部４３０が構成される。
【００３５】
初期ブート部４１０は、ブートセレクタ２０１のブートセレクタデータが読み出されて実行されることにより構成される機能部である。初期ブート部４１０では、初期ブートプログラムを実行することにより、プリンタ１の電源投入直後に初期の起動処理を実行する初期ブート処理部４１１と、ブートセレクタプログラムを実行することにより、初期ブートプログラムの実行後にＷブートセクタＡ２０４とＷブートセクタＢ２０３のいずれからブートデータを読み出すか選択するＷブート選択部４１２が構成される。
【００３６】
Ｗブート選択部４１２では、ＷブートセクタＡ２０４及びＷブートセクタＢ２０３のチェックサムが正しいか否かを検証し、そしてＷブート更新回数を比較した後、ＷブートセクタＡ２０４あるいはＷブートセクタＢ２０３のいずれからブートプログラムを読み出すかを選択する。このＷブート選択部４１２は、Ｗブートセクタのチェックサムが共に異常であると検証された場合にはエラー処理を実行する。
【００３７】
メインブート部４２０は、ＷブートセクタＡ２０４とＷブートセクタＢ２０３の何れか一方のブートデータが読み出されて実行されることにより構成される機能部である。メインブート部４２０では、ブートプログラムを実行することによりプリンタ１を完全に起動させるために必要な各種起動処理を行うブート処理部４２１と、メイン移行プログラムを実行することによりブートプログラムの実行後に実行され後述するメインセクタ２０２のメインデータによる処理への移行を行うメイン移行処理部４２２と、書き換えプログラムを実行することによりフラッシュＲＯＭ１０１内のデータの書き換え処理を実行する書き換え処理部４２３が構成される。
【００３８】
メイン移行処理部４２２は、ブート処理部４２１によるブート動作が終わった後、メインセクタ２０２内のメインデータを読み出してメイン処理を行わせるかどうかの判定を行う。具体的には、現在読み出されて実行されているＷブートデータを記憶しているＷブートセクタに書き込まれているバージョン文字列とメインセクタ２０２に格納されたバージョン文字列が一致しているか否かを検証する。この両セクタのバージョン文字列は、書き換え時に同一のバージョン文字列が書き込まれるように構成されており、２つのＷブートセクタのうち最新のバージョンのＷブートセクタ中のＷブートデータが実行され、その後メインデータに移行する場合には、常にバージョン文字列が一致するように構成されている。両セクタのバージョン文字列が一致する場合には、メインセクタ２０２のチェックサムがチェックされ正常であれば、メインセクタ２０２に書き込まれたメインデータが読み出されて、処理が続行される。ここで、チェックサムが異常であれば、メイン以降処理部４２２は、メモリ書き換え部４２３による処理へ移行する。
【００３９】
一方、何らかの理由により最新バージョンのＷブートデータが書き込まれたＷブートセクタからのデータが読み出せず、２つのＷブートセクタのうち古い方のバージョンのＷブートセクタ中のＷブートデータが実行され、その後メインデータに移行する場合には、バージョン文字列が一致しない。この場合には、メイン以降処理部４２２は、メモリ書き換え部４２３による処理へ移行する。
【００４０】
書き換え処理部４２３は、Ｗブートデータが読み出されなかったＷブートセクタのＷブートデータ及びメインセクタ２０２内のメインデータの書き換えを行う。このように、本実施形態では、一方のＷブートセクタ中の書き換えプログラムにより他方のＷブートセクタを書き換えるように構成されている。したがって、他方のＷブートセクタの書き換えが何らかの理由によって失敗した場合であっても、一方のＷブートセクタ内の情報は、正常に動作することができ、少なくとも常に読み出し可能な１個のＷブートセクタを常に保証することができる。
【００４１】
書き換え処理部４２３は、書き換え時に、書き換え後のＷブートデータおよび書き換え後のメインデータからそれぞれ算出したチェックサムの値をそれぞれ更新し、ブートセレクタ選択部４０１にて選択されたＷブートセクタの更新回数に基づいて算出した値を非選択Ｗブートセクタの更新回数として更新する。また、１回の書き換え処理毎に、書き換え対象領域となった非選択Ｗブートセクタおよびメインセクタ２０２にそれぞれ同じバージョン文字列を更新する。
【００４２】
メイン部４３０は、フォントデータ、諸設定データ等を参照しながらメインプログラムを実行することにより、プリンタ１の通常動作における各種制御を実行するメイン処理部４３１と、ホストコンピュータから送信される書き換えコマンドに応じて起動されるＷブート選択部４３２とが構成される。
【００４３】
メイン処理部４３１は、ホストコンピュータとの通信を行いつつ、プリンタ１の各駆動部を制御し、印刷を実行させる通常動作を制御する機能部である。プリンタ１が書き換えを行わない場合には、常に最終的にはこのメイン処理部４３１に移行し、プリンタ１が駆動制御される。
【００４４】
Ｗブート選択部４３２は、メイン処理部４３１の処理中にホストコンピュータから受信する書き換えコマンドを受信し、この書き換えコマンドに応じてフラッシュＲＯＭ書き換えを実行するにあたり、書き換え処理部４２３を実行するかを選択する。このＷブート選択部４３２の選択アルゴリズムは、初期ブート部４１０におけるＷブート選択部４１２による選択アルゴリズムと同等のものとなっている。すなわち、本実施形態では、メイン部４３０の処理実行中に書き換えコマンドを受信すると、再起動等を行わず直接Ｗブートセクタ中のＷブートデータを選択し、書き換えモードに移行するように構成されている。
【００４５】
次に、本実施形態のプリンタ１における起動処理の流れを説明する。
図５は本発明に係るプリンタ１の起動処理の流れを示すフローチャートである。
【００４６】
まず、プリンタ１の電源投入あるいはリセットされると（ステップＳ５００）、ブートセレクタ２０１内のブートセレクタデータが読み出されて実行され、初期ブートプログラムによりＣＰＵ１０３、ＲＡＭ１０２等の各種初期化が行われる（ステップＳ５０１）。
【００４７】
次に、ブートセレクタプログラムが実行されＷブート選択処理へ移行する（ステップＳ５０２）。このWブート選択処理は、メインセクタ２０２に格納されたメインデータを実行させるＷブートセクタＡ２０４あるいはＷブートセクタＢ２０３の何れか一方のブートセクタを選択するセクタ選択処理である。このWブート選択処理の詳細にあたっては、図６を参照して別途説明する。
【００４８】
次に、プリンタ１が備える図示せぬディップスイッチの状態を検出して「強制書き換えモード」であるか否かを判定し（ステップＳ５０３）、ディップスイッチの状態が「強制書き換えモード」である場合には、書き換えプログラムが起動され、フラッシュＲＯＭ１０１の書き換え処理を実行する（ステップＳ５０７）。「強制書き換えモード」ではない場合には「Ｗブート選択モード」（ステップＳ５０２）で選択されたＷブートセクタのバージョン文字列とメインセクタ２０２のバージョン文字列が一致しているかを検証する（ステップＳ５０４）。
【００４９】
ステップＳ５０４において、バージョン文字列が一致していない場合には、強制的にメモリ書き換え処理が実行される（ステップＳ５０７）。一方、バージョン文字列が一致している場合にはメインセクタ２０２のチェックサムが正常であるかを検証する（ステップＳ５０５）。
【００５０】
メインセクタ２０２のチェックサムが異常と検証された場合には、メモリ書き換え処理を実行する（ステップＳ５０７）。チェックサムが正常と検証された場合は、メインセクタ２０２に格納されたメインデータが実行され、プリンタが印刷等の所定の処理を実行可能な状態となる。この状態では、プリンタ１の各デバイスが駆動可能な状態となっており、ホストコンピュータからの指示に応じてプリンタ１の通常処理が実行される（ステップＳ５０６）。
【００５１】
次に、ブートセレクタプログラムにより実行されるＷブート選択処理の流れについて説明する。
図６は、本実施形態のプリンタ１のＷブート選択処理の流れを示す図である。
まず、Ｗブート選択部４１２は、ＷブートセクタＡ２０４及びＷブートセクタＢ２０３のチェックサムが異常であるかを検証する（ステップＳ６０１）。ＷブートセクタＡ２０４及びＷブートセクタＢ２０３のチェックサムが共に異常と検証された場合にはブートセレクタ２０１が有するエラー処理機能によってブートセレクタデータによるエラー処理を行う（ステップステップＳ６０４）。
【００５２】
ＷブートセクタＡ２０４及びＷブートセクタＢ２０３のチェックサムが共に異常ではないと検証された場合には、ＷブートセクタＡ２０４及びＷブートセクタＢ２０３のチェックサムが共に正常であるかを検証する（ステップＳ６０２）。ＷブートセクタＡ２０４及びＷブートセクタＢ２０３のチェックサムが共に正常である場合にはＷブートセクタＡ２０４及びＷブートセクタＢ２０３のＷブート更新回数を比較する（ステップＳ６０３）。
【００５３】
ＷブートセクタＡ２０４及びＷブートセクタＢ２０３に記録されている更新回数は、書き換えが行われる毎に書き換えられていき、具体的には、書き換え処理実行中のＷブートセクタの更新回数に１を加えたものが書き換え対象のＷブートセクタの更新回数として書き込まれる。したがって、更新回数を比較することにより、２つのＷブートセクタのうちどちらのセクタに最新のＷブートデータが書き込まれているか把握することができる（図８参照）。
【００５４】
したがって、ＷブートセクタＡ２０４のＷブート更新回数の方が大きい場合には、ＷブートセクタＡ２０４が最新であると判断され、実行対象ブートセクタとしてＷブートセクタＡ２０４が選択される（ステップＳ６０７）。一方、ＷブートセクタＢ２０３のＷブート更新回数の方が大きい場合には、ＷブートセクタＢ２０３が最新であると判断され、実行対象ブートセクタとしてＷブートセクタＢ２０３が選択される（ステップＳ６０６）。
【００５５】
一方、ＷブートセクタＡ２０４あるいはＷブートセクタＢ２０３の何れか一方のチェックサムが異常である場合には、ＷブートセクタＡ２０４のチェックサムは正常であるかを検証する（ステップＳ６０５）。ＷブートセクタＡ２０４のチェックサムが正常である場合には、実行対象ブートセクタとしてＷブートセクタＡ２０４が選択される（ステップＳ６０７）。ＷブートセクタＡ２０４のチェックサムが正常でない場合には、実行対象ブートセクタとしてＷブートセクタＢ２０３が選択される（ステップＳ６０６）。これにより、どちらか一方のＷブートセクタのチェックサムが正常であれば、正常に動作する少なくとも１個のＷブートセクタが保証され、チェックサムが正常なＷブートセクタ中のブートデータを用いてブート処理を実行することができる。
【００５６】
上記説明では、メモリ書き換えモードへは、図５に示すように、Ｗブートデータの実行時に、選択的に書き換えプログラムが実行されるとして説明を行ったが、メイン部４３０のメイン処理部４３１の通常モード実行途中にコマンドにより指示が為された場合にも、メモリ書き換えモードに移行が為される。
図７は、本実施形態のプリンタ１が通常モードからメモリ書き換えモードへ移行する流れを示す図である。
【００５７】
プリンタ１の電源投入によって（ステップＳ７００）、初期ブートプログラムが実行されＣＰＵ１０３、ＲＡＭ１０２等の各種初期化が行われる（ステップＳ７０１）。次に、ブートセレクタプログラムの実行によってＷブート選択処理へ移行する（ステップＳ７０２）。このＷブート選択処理は、図６を参照して説明したとおりである。そして、ＷブートセクタＡ２０４あるいはＷブートセクタＢ２０３の何れか一方に記憶されたＷブートデータが選択されて読み出され、ブート処理が行われる（Ｓ７０２）。その後、メインセクタとブートセクタのデータのバージョンが照合された後、メインセクタ２０２に格納されたメインデータが実行され通常モードとなる（ステップＳ７０３）。
【００５８】
通常モードにおいてメインデータ処理中にプリンタ１がメモリ書き換えコマンドをホストコンピュータから受信すると、Ｗブートセクタ選択プログラムによりＷブート選択部４１２が起動され、図６を参照して説明したようにＷブート選択処理が行われる。そして、選択されたＷブートセクタのブートデータ中のメモリ書き換えプログラムが起動され、フラッシュＲＯＭ１０１の書き換えが行われる。
【００５９】
次に、フラッシュＲＯＭ１０１の書き換えと、更新回数の関係について詳しく説明する。
図８は、フラッシュＲＯＭの書き換え状態の遷移を示す図である。
まず、フラッシュＲＯＭ１０１のＷブートセクタＡ２０４及びＷブートセクタＢ２０３には、Ｗブート更新回数が一方のＷブートセクタには「１」、他方のＷブートセクタには「０」が格納され、ＷブートセクタＡ２０４、ＷブートセクタＢ２０３、メインセクタ２０２及びブートセレクタ２０１にはそれぞれ同じバージョン文字列が格納された状態で出荷される。本実施形態では、ＷブートセクタＡ２０４のＷブート更新回数を「１」、ＷブートセクタＢ２０３のＷブート更新回数を「０」、各セクタのバージョン文字列を「Ｖｅｒ１．００」とする。
【００６０】
Ｗブート選択処理にてＷブートセクタＡ２０４及びＷブートセクタＢ２０３のチェックサムが共に正常であることが検証されると、Ｗブート更新回数の大きいＷブートセクタのブートデータが実行される。本実施形態では、出荷時においてＷブートセクタＡ２０４の方がＷブート更新回数が大きいためＷブートセクタＡ２０４のブートデータが実行される。
【００６１】
ここで、書き換えプログラムの実行時には、実行中のＷブートセクタのブートデータにより非実行中のＷブートセクタのブートデータを書き換え、Ｗブート更新回数及びバージョン文字列を更新する。本実施形態では、Ｗブートセクタの一方が書き換えられるときには、同時にメインデータのほうも書き換えられる。この書き換えにおいては、メインセクタ２０２のバージョン文字列と書き換えられたＷブートセクタ中のバージョン文字列は、同時に更新され、同一のバージョン文字列が書き込まれる。本実施形態では、実行中のＷブートセクタＡ２０４により非実行中のＷブートセクタＢ２０３が書き換えられ、Ｗブート更新回数を「０」から「２」に更新され、バージョン文字列を「Ｖｅｒ１．００」から「Ｖｅｒ１．０１」に更新される。すなわち、更新されたＷブートセクタのＷブート更新回数の方が、実行中のＷブートセクタのＷブート更新回数よりも大きくなる。また、メインセクタ２０２のバージョン文字列も「Ｖｅｒ１．００」から「Ｖｅｒ１．０１」に同時に更新される。
【００６２】
第２回目の書き換えは、ＷブートセクタＢ２０３の方がＷブート更新回数が大きいためＷブートセクタＢ２０３のブートデータが実行される。実行中のＷブートセクタＢ２０３により非実行中のＷブートセクタＡ２０４を書き換え、Ｗブート更新回数を「１」から「３」に更新し、バージョン文字列を「Ｖｅｒ１．００」から「Ｖｅｒ１．０２」に更新する。また、同時にメインセクタ２０２のメインデータが更新され、メインセクタ２０２のバージョン文字列は「Ｖｅｒ１．０１」から「Ｖｅｒ１．０２」に更新される。
【００６３】
第３回目以降の書き換えも同様に行われる。なお、更新回数が最大値（ＷＯＲＤサイズならＦＦＦＦｈ回）である場合には、次の更新回数は「０」回となり、最大値と「０」の比較では「０」の方が大きいと判断される。すなわち、Ｗブートの更新回数は、１００００ｈ回書き換えると出荷時の状態に戻る。
【００６４】
次に、フラッシュＲＯＭ１０１の書き換えとその後行われる処理の関係を整理して説明する。
図９は、Ｗブートの書き換え成功例と書き換え失敗例に分けて移行するモードを示した図である。
【００６５】
（Ｗブートの書き換え成功例）
本実施形態においてフラッシュＲＯＭ出荷時には、ＷブートセクタＡ２０４のＷブート更新回数が「１」、ＷブートセクタＢ２０３のＷブート更新回数が「０」、バージョン文字列が「Ｖｅｒ１．００」とされている。
【００６６】
メモリ書き換え処理が実行されＷブートセクタＢ２０３の書き換えに成功後、プリンタ１が電源再投入あるいはリセットされると、初期の起動処理後、Ｗブート選択処理によって、メモリ書き換えによりＷブートセクタＢ２０３の更新回数がＷブートセクタＡ２０４の更新回数より大きいＷブートセクタＢ２０３が選択される。
【００６７】
ここで、メモリ書き換えによりＷブートセクタＢ２０３及びメインセクタ２０２のバージョン文字列が共に「Ｖｅｒ１．００」から「Ｖｅｒ１．０１」に更新されたことが検証されるとＷブートセクタＢ２０３によるプリンタ１の起動処理後メインセクタ２０２内に格納されたメインデータによる処理が実行される。すなわち、このように書き換え成功時には、メインデータのバージョン文字列と書き換えが行われたＷブートセクタＢのバージョン文字列が一致していることが確認され、双方のセクタが同時に書き換えられたことが保証された上で、通常起動が完了する。
【００６８】
（Ｗブートの書き換え失敗例）
一方、メモリ書き換え処理が実行され、メインセクタ２０２は書き換えられたがＷブートセクタＢ２０３の書き換えに失敗すると、ＷブートセクタＢ２０３は壊れた状態となり、その後プリンタ１が電源再投入あるいはリセットされるとＷブート選択処理によってＷブートセクタＡ２０４が選択される。
【００６９】
このような状態では、ＷブートセクタＡ２０４は書き換え対象セクタではなかったためＷブートセクタＡ２０４のバージョン文字列は「Ｖｅｒ１．００」のままで、書き換えによりバージョン文字列だけが「Ｖｅｒ１．００」から「Ｖｅｒ１．０１」に更新されたメインセクタ２０２のバージョン文字列と一致しない。
【００７０】
本実施形態では、このように、Ｗブート選択処理で選択されたＷブートセクタＡ２０４のバージョン文字列とメインセクタ２０２のバージョン文字列が一致しない場合には、図５のステップＳ５０４の分岐にて示すように、ＷブートセクタＡ２０４のメモリ書き換えプログラムによって再度メモリ書き換え処理を実行する。
【００７１】
このように、本実施形態では、バージョン文字列の一致・不一致を確認することにより、メインデータだけが書き換えられ、Ｗブートデータの書き換えに失敗したにもかかわらず、そのまま通常モードにて処理が実行されることを防いでいる。言い換えると、本実施懈怠では、Ｗブートセクタとメインセクタ２０２が共に正常に書き換えできた場合にのみメインデータ処理による通常モードで処理が行われるように構成されている。したがってユーザが、実際にはＷブート書き換え処理に失敗していたにもかかわらず正常に書き換えできたかのように誤解したまま、処理を続行してしまう虞がなくなる。
【００７２】
以上説明したように、本実施形態によれば、プリンタ１の電源再投入時あるいはリセット時には、ＷブートセクタＡ２０４とメインセクタ２０２のバージョン文字列あるいはＷブートセクタＢ２０３とメインセクタ２０２のバージョン文字列が同じである場合のみメインデータを実行するため、プリンタ１のファームウェアバージョンアップの際に、メインデータとブートデータが共に正常に書き換えできたかを確実に判断することが可能である。また、ブートセクタとメインセクタに同一のバージョン文字列が存在するかどうかを確認するだけの比較的容易な方法で書き換えの成功・不成功を確認できる。
【００７３】
また、本実施形態によれば、ブートセレクタデータ実行後、何らかの事情によりＷブートセクタＡ２０４あるいはＷブートセクタＢ２０３のいずれか一方のブートデータ書き換えに失敗しメインデータのみ書き換えが行われた場合でも、再度書き換えに失敗したブートデータの書き換えを行うことができる。このため、電源再投入時、書き換え対象とならなかった旧バージョン文字列が書き込まれているブートセクタによる起動処理後、書き換え対象となった新しいバージョン文字列が書き込まれているメインデータが実行されることがなくなる。したがって、再度プリンタ１を起動した場合でも書き換えが為されないことによりによるプリンタ１の起動プログラムがアップデートされないという問題を回避することが可能である。
【００７４】
また、本実施形態によれば、メインデータの書き換えに失敗した場合でも再度メインデータの書き換え処理を実行するため、異常状態のメインデータが実行されることなく、プリンタ１の異常動作を回避することが可能である。また、ＷブートセクタＡ２０４あるいはＷブートセクタＢ２０３の何れか一方が異常状態にあっても他方の正常状態のブートセクタによるプリンタ１の起動処理後にメインデータ処理を行うことが可能である。
【００７５】
また、本実施形態によれば、常に最新の更新状態かつ正常状態のブートセクタを選択して起動することができる。また、Ｗブートセクタ２０４ＡあるいはＷブートセクタ２０３Ｂの何れか一方が正常状態にあればプリンタは起動できるため、プリンタの起動不能となることを回避できる。
【図面の簡単な説明】
【００７６】
【図１】本発明に係るプリンタを示す斜視図である。
【図２】本発明に係るプリンタのハードウェアの構成を示す図である。
【図３】フラッシュＲＯＭにおけるセクタの構成を示す図である。
【図４】本発明に係るプリンタのＣＰＵのブロック図である。
【図５】本発明に係るバージョンチェック方法の処理の流れを示す図である。
【図６】本発明に係るプリンタのＷブート選択処理の流れを示す図である。
【図７】本発明に係るプリンタが通常モードからメモリ書き換えモードへ移行する流れを示す図である。
【図８】フラッシュＲＯＭの書き換え状態の遷移を示す図である。
【図９】Ｗブートの書き換え成功例と書き換え失敗例に分けて移行するモードを示した図である。
【符号の説明】
【００７７】
１・・・プリンタ、３・・・下部ケース、５・・・上部ケース、７・・・装置ケース、９・・・用紙カセット、１１・・・排紙トレイ、１３・・・表示部、１４・・・操作部、１０１・・・フラッシュＲＯＭ、１０２・・・ＲＡＭ、２０１・・・ブートセレクタ、２０２・・・メインセクタ、２０４・・・第1ブートセクタ、２０３・・・第２ブートセクタ、１０３・・・ＣＰＵ、４０１・・・ブートセレクタ選択部、４０５・・・バージョン文字列検証部、４０６・・・メインセクタチェックサム検証部、４０７・・・メインデータ処理部、４０４・・・メモリ書き換え部
【図１】
2006227830.tif 000003
【図２】
2006227830.tif 000004
【図３】
2006227830.tif 000005
【図４】
2006227830.tif 000006
【図５】
2006227830.tif 000007
【図６】
2006227830.tif 000008
【図７】
2006227830.tif 000009
【図８】
2006227830.tif 000010
【図９】
2006227830.tif 000011