(57)【要約】【課題】エレクトリックシグネチャを用いることなく、当該プリンタに適合したフラッシュメモリが実装されているか否かを判定する。【解決手段】フラッシュメモリの所定のセクタのデータを消去し、当該セクタに含まれないアドレスのデータが消去されたか否かに基づいて、当該フラッシュメモリのセクタ構成が前記プリンタに適合しているかを判定するステップと、フラッシュメモリに対して所定の手順でデータの消去／書込み処理を行い、データの書込みおよび消去が正しく行えたか否かに基づいて、前記所定の手順が当該フラッシュメモリに適合しているかを判定するステップと、フラッシュメモリから所定アドレスを指定して読出したデータに基づいてメモリサイズを判定するステップとを実行する。【選択図】　　　図４
2004094342.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリが実装されたプリンタにおける当該フラッシュメモリの判定方法であって、
前記フラッシュメモリへのアクセス結果に基づいて、当該フラッシュメモリが前記プリンタに適合しているか否かを判定するメモリ判定ステップを備えることを特徴とする方法。
【請求項２】
請求項１記載の方法において、前記メモリ判定ステップは、
前記フラッシュメモリの所定のセクタのデータを消去して、当該所定のセクタに含まれないアドレスのデータが消去されたか否かに基づいて、当該フラッシュメモリのセクタ構成が前記プリンタに適合しているか否かを判定するセクタ判定ステップと、
前記フラッシュメモリに対して所定の消去手順でのデータの消去処理および所定の書込み手順でのデータ書込み処理を行い、データの書込みおよび消去が正しく行えたか否かに基づいて、前記所定の消去手順および前記所定の書込み手順が当該フラッシュメモリに適合しているか否かを判定する消去／書込み手順判定ステップと、
前記フラッシュメモリから所定アドレスを指定して読出したデータに基づいて前記フラッシュメモリのサイズを判定するメモリサイズ判定ステップと、
を含むことを特徴とする方法。
【請求項３】
請求項２記載の方法において、前記セクタ判定ステップでは、前記所定のセクタとして、前記プリンタに適合しないセクタ構成の場合には単一のセクタに属するアドレス領域内に割り付けられた複数のセクタのうちの一つを用いることを特徴とする方法。
【請求項４】
請求項３記載のフラッシュメモリの判定方法において、前記プリンタに適合したセクタ構成がボトムセクタタイプである場合には、前記所定のセクタとして最下位６４Ｋバイトのアドレス領域に割り付けられた何れかのセクタを用い、前記プリンタに適合したセクタ構成がトップセクタタイプである場合には、前記所定のセクタとして最上位６４Ｋバイトのアドレス領域に割り付けられた何れかのセクタを用いることを特徴とする方法。
【請求項５】
請求項４記載の方法において、前記最下位または最上位の６４Ｋバイトのアドレス領域に割り付けられた複数のセクタのうちの何れかのセクタにはブートプログラムが格納されており、
前記セクタ判定ステップでは、前記所定のアドレスとして、前記複数のセクタのうちブートプログラムが格納されていない何れかのセクタを用い、前記所定のセクタのデータ消去後に前記ブートプログラムが作動しなくなった場合に、適合しないセクタ構成のフラッシュメモリが実装されていると判定することを特徴とする方法。
【請求項６】
請求項２〜５のうち何れか１項記載の方法において、
前記フラッシュメモリのサイズはＳ１〜Ｓｎのｎ種類（ただし、Ｓｉ＜Ｓｉ＋１；ｉ＝１〜ｎ−１）のうち何れかであるとし、
前記メモリサイズ判定ステップにおける前記所定のアドレスとして、次の条件（１）および（２）を満たすアドレスＭ０〜Ｍｎ−１を用いることを特徴とする方法。
（１）アドレスＭ１はメモリサイズＳ１〜Ｓｎの全てに含まれ、アドレスＭｊ（ｊ＝２〜ｎ−１）は、メモリサイズＳ１〜Ｓｊ−１には含まれず、メモリサイズＳｊ〜Ｓｎには含まれる。
（２）メモリサイズＳ１の最大アドレスのビット数をＮとすると、各アドレスＭｊ（ｊ＝２〜ｎ−１）の下位ＮビットはアドレスＭ１に一致する。
【請求項７】
請求項６記載の方法において、前記アドレスＭｊ（ｊ＝２〜ｎ）のうち、そのアドレスを指定して読出した値が、前記アドレスＭ１を指定して読出した値と一致するようなｊの最小値をＫとした場合、前記フラッシュメモリのサイズはＳＫ−１であると判定し、前記アドレスＭｊを指定して読出した値が、何れも、前記アドレスＭ１を指定して読出した値と一致しなければ、前記フラッシュメモリのサイズはＳｎであると判定することを特徴とする方法。
【請求項８】
請求項２〜７のうち何れか１項記載の方法において、前記プリンタは、基本ＲＯＭとしてのフラッシュメモリと拡張ＲＯＭとしてのフラッシュメモリとが実装されるように設計されており、
前記メモリ判定ステップは、前記拡張ＲＯＭが実装されているか否かを判定する拡張ＲＯＭ実装判定ステップを更に含むことを特徴とする方法。
【請求項９】
請求項２〜７のうち何れか１項記載の方法において、前記プリンタは、基本ＲＯＭとしてのフラッシュメモリと拡張ＲＯＭとしてのフラッシュメモリとが実装されるように設計されており、
前記セクタ判定ステップ、前記消去／書込み手順判定ステップ、および前記メモリサイズ判定ステップを、前記基本ＲＯＭとしてのフラッシュメモリおよび前記拡張ＲＯＭとしてのフラッシュメモリの夫々について実行することを特徴とする方法。
【請求項１０】
請求項９記載の方法において、
前記メモリ判定ステップは、前記拡張ＲＯＭが実装されているか否かを判定する拡張ＲＯＭ実装判定ステップを更に含み、前記拡張ＲＯＭが実装されていないと判定された場合には、前記拡張ＲＯＭとしてのフラッシュメモリについて前記セクタ判定ステップ、前記消去／書込み手順判定ステップ、および前記メモリサイズ判定ステップの実行を省略することを特徴とする方法。
【請求項１１】
請求項８または１０記載の方法において、
前記拡張ＲＯＭ実装判定ステップでは、前記拡張ＲＯＭへのデータ書込みが正しく行えたか否かに基づいて、当該拡張ＲＯＭが実装されているか否かを判定することを特徴とする方法。
【請求項１２】
請求項１０または１１記載の方法において、前記拡張ＲＯＭとしてのフラッシュメモリについて前記メモリサイズ判定ステップで判定されたメモリサイズを、前記基本ＲＯＭおよび前記拡張ＲＯＭに夫々格納し、前記基本ＲＯＭに格納されているメモリサイズと前記拡張ＲＯＭに格納されているメモリサイズとが一致する場合には、前記拡張ＲＯＭとしてのフラッシュメモリについて前記消去／書込み手順判定ステップおよび前記メモリサイズ判定ステップの実行を省略することを特徴とする方法。
【請求項１３】
前記プリンタの電源が投入される毎に実行されることを特徴とする請求項１〜１２のうち何れか１項記載の方法。
【請求項１４】
フラッシュメモリが実装されたプリンタであって、
前記フラッシュメモリの所定のセクタのデータを消去して、当該所定のセクタに含まれないアドレスのデータが消去されたか否かに基づいて、当該フラッシュメモリのセクタ構成が当該プリンタに適合しているか否かを判定するセクタ判定手段と、
前記フラッシュメモリに対して所定の消去手順でのデータの消去処理および所定の書込み手順でのデータ書込み処理を行い、データの書込みおよび消去が正しく行えたか否かに基づいて、前記所定の消去手順および前記所定の書込み手順が当該フラッシュメモリに適合しているか否かを判定する消去／書込み手順判定手段と、
前記フラッシュメモリから所定アドレスを指定して読出したデータに基づいて前記フラッシュメモリのサイズを判定するメモリサイズ判定手段と、を備えることを特徴とするプリンタ。
【請求項１５】
フラッシュメモリを備えるプリンタに搭載されたコンピュータに、
前記フラッシュメモリの所定のセクタのデータを消去して、当該所定のセクタに含まれないアドレスのデータが消去されたか否かに基づいて、当該フラッシュメモリのセクタ構成が当該プリンタに適合しているか否かを判定するステップと、
前記フラッシュメモリに対して所定の消去手順でのデータの消去処理および所定の書込み手順でのデータ書込み処理を行い、データの書込みおよび消去が正しく行えたか否かに基づいて、前記所定の消去手順および前記所定の書込み手順が当該フラッシュメモリに適合しているか否かを判定するステップと、
前記フラッシュメモリから所定アドレスを指定して読出したデータに基づいて前記フラッシュメモリのサイズを判定するステップと、を実行させるプログラム。
【請求項１６】
前記プリンタのブートプログラムの一部として構成された請求項１５記載のプログラム。
【請求項１７】
請求項１５または１６記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フラッシュメモリが実装されたプリンタにおいて当該フラッシュメモリがプリンタに適合しているか否かを判定するフラッシュメモリの判定方法、この方法をコンピュータに実行させるプログラム、このプログラムを記録した記録媒体、および、フラッシュメモリを備えるプリンタに関する。
【０００２】
【従来の技術】
プリンタでは、制御プログラムやフォントデータ等の各種データを記憶するためのＲＯＭとしてフラッシュメモリが用いられる場合が多い。フラッシュメモリは、オンボードでデータの書換えが可能な不揮発性のメモリであり、プリンタを始めとする各種電子機器において広く用いられつつある。かかるフラッシュメモリには種々の仕様のものがあるが、ピン配置等の外観構成では共通するものも多く、プリンタの設計とは異なる仕様のフラッシュメモリを基盤に実装してしまうおそれがある。そして、異なる仕様のフラッシュメモリが実装されてしまうと、以下に示すように、フラッシュメモリへのアクセスが正しく行われず、プリンタの動作異常が発生してしまう。
【０００３】
先ず、フラッシュメモリでは、データの消去は、セクタというひとまとまりのアドレス領域単位で行われる。図１２は、例えば８Ｍビットのフラッシュメモリのセクタの構成を示す。同図に示すように、セクタ構成には一般にボトムセクタタイプとトップセクタタイプとがあり、フラッシュメモリは何れかのセクタ構成を有する。同図（ａ）に示すように、ボトムセクタタイプでは、最下位の６４Ｋバイトの領域に、セクタＳＡ０（１６Ｋバイト）、セクタＳＡ１（８Ｋバイト），セクタＳＡ２（８Ｋバイト），セクタＳＡ３（３２Ｋバイト）の４つのセクタが割り付けられ、以降は６４Ｋバイト毎にセクタが割り付けられている。一方、トップセクタタイプでは、最上位の６４Ｋバイトの領域が４つのセクタに割り付けられ、それ以外のアドレス領域では６４Ｋバイト毎にセクタが割り付けられている。
【０００４】
フラッシュメモリのデータを消去する場合には、消去対象となるセクタを指定して消去処理を実行する。その際、図１２に示すように、ボトムセクタタイプとトップセクタタイプとでセクタ構成が異なっているため、プリンタの設計と異なるセクタタイプのフラッシュメモリが搭載されていると、予期しないアドレス領域のデータが消去されるおそれがある。例えば、プリンタがボトムセクタのフラッシュメモリを使用するように設計されている場合に、誤ってトップセクタのフラッシュメモリが搭載されたとする。この場合、プリンタの制御プログラムがボトムセクタタイプにおけるセクタＳＡ３を消去しようとすると、トップセクタタイプにおけるセクタＳＡ０（最下位６４Ｋバイト）の全体が消去されてしまう。このように、設計と異なるセクタ構成のフラッシュメモリが実装されていると、データの誤消去が行われてしまうおそれがある。
【０００５】
また、フラッシュメモリにおけるデータの書込みや消去は、通常のＲＯＭやＲＡＭのように単にアドレスを指定してデータを書込むのではなく、フラッシュメモリの仕様で定められた所定手順の処理により行うことが必要である。したがって、不適合なフラッシュメモリが誤実装されると、プリンタの制御プログラムによるデータ書込み・消去処理が、実装されたフラッシュメモリの処理手順に適合せず、データの書込み・消去を正しく行うことができなくなる。
【０００６】
さらに、フラッシュメモリには、４Ｍビット、８Ｍビット、１６Ｍビット等のサイズのものがあり、設計と異なる容量のフラッシュメモリが搭載されると、プリンタが正しく動作しなくなる。例えば、８Ｍビットのフラッシュメモリを前提として制御プログラムが作成されている場合に、４Ｍビットのフラッシュメモリが搭載されていると、４Ｍビットを超えるアドレスからデータの読出しや、書込み・消去が行われた場合に、無関係なデータを読出したり、あるいは、意図しないアドレスのデータが破壊されることとなってしまう等の不都合が生ずるのである。
【０００７】
また、プリンタによっては、基本ＲＯＭの他に拡張ＲＯＭが搭載される場合がある。この拡張ＲＯＭが未実装であっても、拡張ＲＯＭのデータの書込み／読出しは見かけ上正常に行われてしまう。したがって、拡張ＲＯＭが実装されるようにプリンタが設計されている場合に、拡張ＲＯＭとしてのフラッシュメモリが未実装であると、書込んだはずのデータが実際には書込まれておらず、また、全く無関係なデータが読出されてしまうといった不都合が生じてしまう。
【０００８】
以上の理由から、プリンタが正しく動作することを保証するためには、プリンタに実装されたフラッシュメモリのセクタタイプ、データ書込み手順、メモリサイズが、プリンタ設計に適合した仕様のものであるかどうかを判定することが必要である。さらに、拡張フラッシュメモリが搭載される設計の場合には、拡張フラッシュメモリが実装されているかどうかを判定することも必要である。
【０００９】
従来は、このようなフラッシュメモリの判定は、フラッシュメモリに格納されたエレクトリックシグネチャに基づいて行われていた。エレクトリックシグネチャは、フラッシュメモリのメーカ・型番に固有の情報であり、フラッシュメモリから読出したエレクトリックシグネチャでフラッシュメモリのメーカー・型番を特定し、そのフラッシュメモリがプリンタの設計に適合したものであるかどうかを判定していたのである。
【００１０】
【発明が解決しようとする課題】
ところで、フラッシュメモリは様々なメーカーが製造販売しており、メーカー・型番が異なっていても互換性を有するものがある。したがって、プリンタのコストを抑えるためには、本来想定していた純正品だけではなく、互換性のあるフラッシュメモリを使用できることが望ましい。しかしながら、従来のように、エレクトリックシグネチャを利用してフラッシュメモリの適合・不適合を判定するものとすると、互換品であっても異なる型番のフラッシュメモリは不適合であると判定されてしまい、互換品を使用することができなくなってしまう。また、互換品を使用できるようにするには、当該互換品のエレクトリックシグネチャを、適合したフラッシュメモリであるとして登録し直すことが必要であり、互換性のあるフラッシュメモリが新たに入手可能になる都度、そのフラッシュメモリに対応できるようにフラッシュメモリ判定用のプログラムを変更しなければならない。
【００１１】
本発明は上記の点に鑑みてなされたものであり、エレクトリックシグネチャを用いることなく、当該プリンタに適合したフラッシュメモリが実装されているか否かを判定できるようにすることを目的とする。
【００１２】
【課題を解決するための手段】
上記の目的を達成するため、本発明は、フラッシュメモリが実装されたプリンタにおける当該フラッシュメモリの判定方法であって、
前記フラッシュメモリへのアクセス結果に基づいて、当該フラッシュメモリが前記プリンタに適合しているか否かを判定するメモリ判定ステップを備えることを特徴とする。
【００１３】
本発明によれば、フラッシュメモリへのアクセス結果に基づいて、当該フラッシュメモリが前記プリンタに適合しているか否かを判定するので、フラッシュメモリに格納されたエレクトリックシグネチャを用いることなく、同判定を行うことができる。したがって、プリンタに実装されたフラッシュメモリが互換品である場合にも、エレクトリックシグネチャに基づかずに、そのフラッシュメモリがプリンタに適合したものであると判定できるので、互換品のフラッシュメモリを用いることが可能となる。
【００１４】
また、本発明において、前記メモリ判定ステップは、
前記フラッシュメモリの所定のセクタのデータを消去して、当該所定のセクタに含まれないアドレスのデータが消去されたか否かに基づいて、当該フラッシュメモリのセクタ構成が前記プリンタに適合しているか否かを判定するセクタ判定ステップと、
前記フラッシュメモリに対して所定の消去手順でのデータの消去処理および所定の書込み手順でのデータ書込み処理を行い、データの書込みおよび消去が正しく行えたか否かに基づいて、前記所定の消去手順および前記所定の書込み手順が当該フラッシュメモリに適合しているか否かを判定する消去／書込み手順判定ステップと、
前記フラッシュメモリから所定アドレスを指定して読出したデータに基づいて前記フラッシュメモリのサイズを判定するメモリサイズ判定ステップと、を含むこととしてもよい。
【００１５】
セクタ構成が異なるフラッシュメモリでは、同じセクタが異なるアドレス領域に割り付けられる。このため、プリンタに適合しないセクタ構成のフラッシュメモリが実装されている場合に、プリンタに適合したセクタ構成を前提としてセクタ消去が行われると、消去したはずのセクタには含まれないアドレスのデータが消去されてしまう。したがって、セクタ判定ステップでは、所定のセクタのデータを消去して、当該セクタに含まれないアドレスのデータが消去されたか否かに基づいて、フラッシュメモリのセクタ構成がプリンタに適合しているか否かを判定できる。
【００１６】
また、フラッシュメモリはその仕様によって、データ消去およびデータ書込みの手順が規定されている。したがって、消去／書込み手順判定ステップでは、フラッシュメモリに対して所定の消去手順でのデータの消去処理および所定の書込み手順でのデータ書込み処理を行い、データの書込みおよび消去が正しく行えたか否かに基づいて、消去／書込み手順が当該フラッシュメモリに適合しているか否かを判定することができる。
【００１７】
また、実装されたメモリのサイズを超えるアドレス領域のデータを読出すと、アドレスの上位ビットが無視されて、この上位ビットを無視したアドレスのデータが読出される。したがって、メモリ判定ステップでは、フラッシュメモリから所定アドレスを指定して読出したデータに基づいてメモリサイズを判定できる。
【００１８】
そして、一般に、プリンタにおいては、フラッシュメモリのセクタ構成、消去／書込み手順、および、メモリサイズがプリンタ仕様に適合していれば、そのフラッシュメモリを使用することができる。したがって、上記のセクタ判定ステップ、消去／書込み手順判定ステップ、および、メモリサイズ判定ステップにより、フラッシュメモリがプリンタに適合しているか否かを適切に判定することができる。
【００１９】
この場合、前記セクタ判定ステップでは、前記所定のセクタとして、前記プリンタに適合しないセクタ構成の場合には単一のセクタに属するアドレス領域内に割り付けられた複数のセクタのうちの一つを用いることとしてもよい。このようにすれば、プリンタに適合しないセクタ構成のフラッシュメモリが実装された場合には、消去しようとしたセクタ以外のセクタを含む複数のセクタに対応するアドレス領域が、実際には単一のセクタに属することになり、当該単一のセクタ全体が消去されてしまう。このため、消去しようとしたセクタのアドレス領域以外のアドレス領域のデータも消去されることとなり、そのことをもって、プリンタに適合しないセクタ構成のフラッシュメモリが実装されていると判定できる。
【００２０】
なお、フラッシュメモリのセクタ構成としては、図１２に示すように、ボトムセクタタイプとトップセクタタイプが一般的である。同図に示すように、メモリの最下位６４Ｋバイトのアドレス領域において、ボトムセクタタイプでは４つのセクタが割り付けられ、トップセクタタイプでは単一のセクタが割り付けられている。一方、メモリの最上位６４Ｋバイトのアドレス領域において、ボトムセクタタイプでは単一のセクタが割り付けられ、トップセクタタイプでは４つのセクタが割り付けられている。したがって、前記プリンタに適合したセクタ構成がボトムセクタタイプである場合には、前記所定のセクタとして最下位６４Ｋバイトのアドレス領域に割り付けられた何れかのセクタを用い、前記プリンタに適合したセクタ構成がトップセクタタイプである場合には、前記所定のセクタとして最上位６４Ｋバイトのアドレス領域に割り付けられた何れかのセクタを用いることができる。
【００２１】
また、前記最下位または最上位の６４Ｋバイトのアドレス領域に割り付けられた複数のセクタのうちの何れかのセクタにブートプログラムが格納されている場合には、前記セクタ判定ステップでは、前記所定のアドレスとして、前記複数のセクタのうちブートプログラムが格納されていない何れかのセクタを用い、前記所定のセクタのデータ消去後に前記ブートプログラムが作動しなくなった場合に、適合しないセクタ構成のフラッシュメモリが実装されていると判定することができる。
【００２２】
すなわち、プリンタに適合しないセクタ構成のフラッシュメモリが実装された場合、所定のセクタのデータが消去されると、ブートプログラムが格納されたセクタのデータも消去される。したがって、データ消去処理の終了後、ブートプログラムが消去されて、プリンタが動作しなくなるので、そのことをもって、プリンタに適合しないセクタ構成のフラッシュメモリが実装されていると判定できるのである。
【００２３】
また、本発明において、前記フラッシュメモリのサイズはＳ１〜Ｓｎのｎ種類（ただし、Ｓｉ＜Ｓｉ＋１；ｉ＝１〜ｎ−１）のうち何れかであるとし、
前記メモリサイズ判定ステップにおける前記所定のアドレスとして、次の条件（１）および（２）を満たすアドレスＭ０〜Ｍｎ−１を用いることとしてもよい。
（１）アドレスＭ１はメモリサイズＳ１〜Ｓｎの全てに含まれ、アドレスＭｊ（ｊ＝２〜ｎ−１）は、メモリサイズＳ１〜Ｓｊ−１には含まれず、メモリサイズＳｊ〜Ｓｎには含まれる。
（２）メモリサイズＳ１の最大アドレスのビット数をＮとすると、各アドレスＭｊ（ｊ＝２〜ｎ−１）の下位ＮビットはアドレスＭ１に一致する。
【００２４】
このようにすれば、例えば、メモリサイズがＳｃ（１≦ｃ≦ｎ）のフラッシュメモリが実装された場合、アドレスＭ１〜Ｍｃは当該フラッシュメモリのアドレス領域に含まれるが、アドレスＭｃ＋１〜Ｍｎは当該フラッシュメモリのアドレス領域には含まれない。そして、フラッシュメモリのアドレス領域に含まれないアドレスＭｃ＋１〜Ｍｎが読出しアドレスとして指定された場合、それらの下位ＮビットはアドレスＭ１に一致するから、当該アドレスＭ１の値が読出されることになる。すなわち、アドレスＭｃ＋１〜Ｍｎを指定して読出された値は、アドレスＭ１から読出された値に一致する。したがって、アドレスＭ１〜Ｍｎを指定して読出した値に基づいて、フラッシュメモリのサイズを判定することができる。
【００２５】
この場合、前記アドレスＭｊ（ｊ＝２〜ｎ）のうち、そのアドレスを指定して読出した値が、前記アドレスＭ１を指定して読出した値と一致するようなｊの最小値をＫとした場合、前記フラッシュメモリのサイズはＳＫ−１であると判定し、前記アドレスＭｊを指定して読出した値が、何れも、前記アドレスＭ１を指定して読出した値と一致しなければ、前記フラッシュメモリのサイズはＳｎであると判定することができる。
【００２６】
また、本発明において、前記プリンタが、基本ＲＯＭとしてのフラッシュメモリと拡張ＲＯＭとしてのフラッシュメモリとが実装されるように設計されており、前記メモリ判定ステップは、前記拡張ＲＯＭが実装されているか否かを判定する拡張ＲＯＭ実装判定ステップを更に含むこととしてもよい。
【００２７】
また、本発明において、前記プリンタは、基本ＲＯＭとしてのフラッシュメモリと拡張ＲＯＭとしてのフラッシュメモリとが実装されるように設計されており、
前記セクタ判定ステップ、前記消去／書込み手順判定ステップ、および前記メモリサイズ判定ステップを、前記基本ＲＯＭとしてのフラッシュメモリおよび前記拡張ＲＯＭとしてのフラッシュメモリの夫々について実行することとしてもよい。
【００２８】
このようにすれば、拡張ＲＯＭについても、フラッシュメモリのエレクトリックシグネチャに基づかずに、セクタ判定ステップおよび消去／書込み手順判定ステップにより当該フラッシュメモリのセクタおよびデータ消去／書込み手順がプリンタに適合しているかどうかを判定でき、また、メモリサイズ判定ステップによりフラッシュメモリのサイズを判定できる。このため、拡張ＲＯＭについても互換品のフラッシュメモリを用いることが可能となる。
【００２９】
この場合、前記メモリ判定ステップは、前記拡張ＲＯＭが実装されているか否かを判定する拡張ＲＯＭ実装判定ステップを更に含み、前記拡張ＲＯＭが実装されていないと判定された場合には、前記拡張ＲＯＭとしてのフラッシュメモリについて前記セクタ判定ステップ、前記消去／書込み手順判定ステップ、および前記メモリサイズ判定ステップの実行を省略することとしてもよい。このようにすれば、拡張ＲＯＭが未実装の場合に、拡張ＲＯＭについての不必要な処理が行われるのを防止して、処理時間を短縮できる。
【００３０】
また、前記拡張ＲＯＭ実装判定ステップでは、前記拡張ＲＯＭへのデータ書込みが正しく行えたか否かに基づいて、当該拡張ＲＯＭが実装されているか否かを判定することとしてもよい。
【００３１】
また、前記拡張ＲＯＭとしてのフラッシュメモリについて前記メモリサイズ判定ステップで判定されたメモリサイズを、前記基本ＲＯＭおよび前記拡張ＲＯＭに夫々格納し、前記基本ＲＯＭに格納されているメモリサイズと前記拡張ＲＯＭに格納されているメモリサイズとが一致する場合には、前記拡張ＲＯＭとしてのフラッシュメモリについて前記消去／書込み手順判定ステップおよび前記メモリサイズ判定ステップを省略することとしてもよい。
【００３２】
基本ＲＯＭに格納されているメモリサイズと前記拡張ＲＯＭに格納されているメモリサイズとが一致する場合には、本方法の前回実行時の後、拡張ＲＯＭの交換は行われていないと判断できる。したがって、このような場合には、拡張ＲＯＭとしてのフラッシュメモリについて消去／書込み手順判定ステップおよびメモリサイズ判定ステップを省略して、処理時間を短縮できる。
【００３３】
また、本発明の方法は、前記プリンタの電源が投入される毎に実行されることとしてもよい。このようにすれば、電源投入の都度、フラッシュメモリの判定処理を行える。このため、工場出荷後のユーザ使用中にフラッシュメモリに異常が生じた場合にも、そのことを検知できる。
【００３４】
【発明の実施の形態】
図１は、本発明の一実施形態であるプリンタ１０のシステム構成図である。同図に示すように、プリンタ１０は、中央制御ユニット（ＣＰＵ）１２、基本ＲＯＭ１４、拡張ＲＯＭ１６、ＲＡＭ１８、印字部２０、用紙搬送部２２、表示部２４等を備えている。基本ＲＯＭ１４には制御プログラムが格納されており、ＣＰＵ１２はこの制御プログラムを実行することにより、印字部２０および搬送部２２等を制御する。基本ＲＯＭ１４に格納された制御プログラム（以下、ファームウェアという）には、以下に詳細に述べるように、基本ＲＯＭ１４や拡張ＲＯＭ１６について各種判定処理を行うルーチンが含まれている。表示部２４には、ユーザ向けにプリンタステータスやメッセージの表示が行われるほか、各ＲＯＭについての判定処理の結果の表示が行われる。なお、プリンタ１０は、ドットインパクトプリンタ、インクジェットプリンタ、サーマルプリンタ、レーザープリンタなど何れの方式のプリンタであってもよい。
【００３５】
ＲＡＭ１８には印刷バッファが設けられており、ＣＰＵ１２がホストコンピュータから受信した印刷データや印刷コマンドは、いったん、この印刷バッファに格納される。また、拡張ＲＯＭ１６には、ファームウェアのうち基本ＲＯＭ１４に入りきらなかった部分、フォントデータ、ユーザ定義データ、メンテナンス情報（印刷行数や用紙カット回数等の使用履歴を表す情報）等が格納される。
【００３６】
図２は、基本ＲＯＭ１４の最下位６４Ｋバイト（０ｈ〜ＦＦＦＦｈ）のアドレス領域のメモリ構成を示す図である。同図に示すように、基本ＲＯＭ１４には、ベクタテーブル／ブートプログラム領域１４ａ、ＮＶデータ情報領域１４ｂ、ユーザＮＶ領域１４ｃ、およびバックアップ領域１４ｄが設けられており、これらの領域１４ａ〜１４ｄは、夫々、セクタＳＡ０〜ＳＡ３に割り付けられている。
【００３７】
図３は、拡張ＲＯＭ１６の最下位６４Ｋバイト（２０００００ｈ〜２０ｆｆｆｆｈ）のアドレス領域のメモリ構成を示す図である。同図に示すように、拡張ＲＯＭ１６には、第１試験領域１６ａ、第２試験領域１６ｂ、第１自由使用領域１６ｃ、および第２自由使用領域１６ｄが設けられており、夫々、セクタＳＡ０、ＳＡ１、ＳＡ２、およびＳＡ３に割り付けられている。
【００３８】
なお、一般に、フラッシュメモリのデータ書込み／消去中は、読出したデータの値は不定となるので、データの書込み／消去中は、データの読出しを禁止する必要がある。このため、メンテナンスデータのように頻繁に書込まれるデータを基本ＲＯＭ１４に記憶させた場合には、その書込みの都度、基本ＲＯＭ１４からのデータを読出せなくなってファームウェアの実行を停止することが必要となる。これに対して、本実施形態では、拡張ＲＯＭ１６にメンテナンス情報を記憶することで、頻繁に行われるメンテナンス情報の書込み処理中にもファームウェアの実行を継続できるようにしている。
【００３９】
ところで、上記従来技術で述べたように、フラッシュメモリは、そのメーカーや型番によって、セクタ構成、データ消去・書込み手順、メモリサイズ等の仕様が異なっており、プリンタ１０のファームウェアは特定仕様のフラッシュメモリを前提として作成されている。このため、ファームウェアに適合しない不適正なフラッシュメモリが誤実装されたままプリンタ１０が出荷されてしまうと、ユーザが使用した際に動作不良が発生してしまう。したがって、プリンタ１０の出荷前に、基本ＲＯＭ１４および拡張ＲＯＭ１６として、ファームウェアに適合した（つまり、プリンタの設計に適合した）適正なフラッシュメモリが実装されているかどうかを判定することが必要である。
【００４０】
本実施形態では、プリンタ１０は、基本ＲＯＭ１４および拡張ＲＯＭ１６として例えば型番ＭＢＭ２９ＬＶ８００ＢＡ（富士通製、８Ｍビット、ボトムセクタタイプ）のフラッシュメモリを使用するように設計されているものとする。そして、基本ＲＯＭ１４および拡張ＲＯＭ１６に対して、データ書込み、消去、読出しといったアクセスを行うことにより、ＲＯＭ１４，１６として実装されたフラッシュメモリのセクタ構成およびデータ書込み手順がファームウェアに適合しているかどうかの判定、ＲＯＭ１４，１６のメモリサイズの判定、および、拡張ＲＯＭ１６の実装／未実装の判定等の判定処理（以下、これらの判定処理をメモリ判定処理という）を行う。
【００４１】
図４は、本実施形態においてメモリ判定処理を行うべくＣＰＵ１２が実行するメインルーチンのフローチャートである。このメインルーチンは、基本ＲＯＭ１４のベクタテーブル／ブートプログラム領域１４ａに格納されたブートプログラムに含まれており、プリンタ１０の電源が投入される毎に起動される。先ず、この図４を参照して、メモリ判定処理の概要を説明する。
【００４２】
図４に示す如く、メモリ判定処理では、先ず、ステップ１００において、基本ＲＯＭ１４のデータ消去／書込み手順およびセクタ構成の判定処理が実行される。その結果、データ消去／書込みに失敗した場合は、不適合なフラッシュメモリが実装されていると判断され、ステップ１４０において復帰不能エラーの判定がなされる。この場合、例えばエラーメッセージあるいはエラーコード等が表示部２４に表示されたうえで、メモリ判定処理は終了する。また、後述するように、セクタ構成が適合しない場合は、ファームウェア自体が動作不能となってハングアップ状態になるから、そのことをもって、フラッシュメモリが不適合であると判断できる。
【００４３】
一方、ステップ１００でデータ消去／書込みに成功し、かつ、セクタ構成も適合していると判別された場合は、ステップ１５０において、基本ＲＯＭ１４のメモリサイズの判定処理が行われる。
【００４４】
次に、ステップ２００において、基本ＲＯＭ１４に格納された拡張ＲＯＭ情報に基づいて、拡張ＲＯＭ１６が実装されているか否かが判別される。すなわち、後述するステップ４５０では、拡張ＲＯＭ１６が実装されていればそのメモリサイズを、また、未実装であれば例えば”００ｈ”を、夫々、拡張ＲＯＭ情報として基本ＲＯＭ１４に書込むようにしており、ステップ２００では、この拡張ＲＯＭ情報に基づいて、拡張ＲＯＭ１６の実装の有無を判定する。なお、拡張ＲＯＭ情報は拡張ＲＯＭ１６自体にも書込まれており、この情報は後述するステップ４００で用いられる。
【００４５】
ステップ２００における判定処理の結果、拡張ＲＯＭ情報が”００ｈ”（拡張ＲＯＭ未実装）であれば、ステップ２５０において、拡張ＲＯＭ１６へアクセスすることにより拡張ＲＯＭ１６が実装されているか否かが判別される。その結果、拡張ＲＯＭ１６が実装されている場合は、メモリ判定処理の前回の実行時（つまり前回の電源投入時）から今回の実行時（つまり今回の電源投入時）までの間に、拡張ＲＯＭ１６が新たに実装されたと判断できる。この場合、ステップ３００において、拡張ＲＯＭ１６について消去／書込み手順およびセクタ構成の判定処理が行なわれる。その結果、消去／書込みに成功し、かつ、セクタ構成が適合している場合は、ステップ３５０において拡張ＲＯＭ１６のメモリサイズ判定処理が実行される。
【００４６】
一方、ステップ２００において、拡張ＲＯＭ情報が”００ｈ”でなければ、拡張ＲＯＭ１６が実装済みであるか、または、本ルーチンは今回初めて実行された（つまり、プリンタ１０の電源が初めて投入された）と判断される。このような判断ができるのは、拡張ＲＯＭ１６が実装済みであり、かつ、今回のメモリ判定処理が２回目以降に実行されたのであれば、本ルーチンの前回以前の実行時に、拡張ＲＯＭ１６のメモリサイズが拡張ＲＯＭ情報として基本ＲＯＭ１４に記憶されているはずであり、一方、メモリ判定処理が今回初めて実行されたのであれば、拡張ＲＯＭ情報は記憶されていないためその値は”ＦＦｈ”となるからである。このように判断された場合、次にステップ４００の処理が実行される。
【００４７】
ステップ４００では、基本ＲＯＭ１４および拡張ＲＯＭ１６から夫々読出された拡張ＲＯＭ情報で表されるメモリサイズが、４Ｍビット、８Ｍビット、または１６Ｍビットの何れかで互いに一致するか否かが判別される。その結果、両メモリサイズが不一致である場合は、拡張ＲＯＭ１６は未実装であるか、または、拡張ＲＯＭ１６が前回の電源投入時から今回の電源投入時の間にフラッシュメモリが交換されたと判断できる。この場合、上記ステップ３００において、拡張ＲＯＭ１６についての消去／書込み手順およびセクタ構成の判定処理が行なわれたうえで、ステップ３５０において拡張ＲＯＭ１６のメモリサイズが判定される。一方、基本ＲＯＭ１４および拡張ＲＯＭ１６から読出されたメモリサイズが互いに一致する場合は、前回の電源投入時の後、拡張ＲＯＭ１６の交換は行われておらず、拡張ＲＯＭ１６のサイズは、基本ＲＯＭ１４および拡張ＲＯＭ１６に格納された通りの値であると判断できる。この場合、ステップ３００，３５０を実行することなく、後述するステップ４５０へ進む。
【００４８】
このように、拡張ＲＯＭ１６が前回から交換されていない場合に、拡張ＲＯＭ１６の消去／書込み手順・セクタ構成やメモリサイズについての判定処理を省略することで、メモリ判定処理に要する時間を短縮することが可能となっている。メモリ判定処理は、プリンタ１０の工場出荷後もユーザの下で電源が投入される毎に実行されるが、その所要時間が短縮されることにより、プリンタ１０の起動時間も短縮できることになる。
【００４９】
上記ステップ２５０または３００での拡張ＲＯＭ１６の実装・未実装の判定結果、および、ステップ３５０での拡張ＲＯＭ１６のメモリサイズの判定結果は、ＲＡＭ１８に一時的に保持されている。ステップ４５０では、ＲＡＭ１８に保持されたこれらの判定結果が、基本ＲＯＭ１４および拡張ＲＯＭ１６に格納済みの拡張ＲＯＭ情報と一致しない場合に限り、拡張ＲＯＭ情報として基本ＲＯＭ１４および拡張ＲＯＭ１６に書込まれる。このように、ＲＡＭ１８に保持された判定結果と、ＲＯＭ１４，１６に記憶済みの拡張ＲＯＭ情報とが一致しない場合にのみ、ＲＯＭ１４，１６への書込みを行うことで、書込みの頻度を減らしてフラッシュメモリの寿命を向上させることができる。ただし、書込み頻度が問題にならなければ、毎回、判定結果をＲＯＭ１４，１６へ書込むようにしてもよい。なお、本実施形態では、基本ＲＯＭ１４には拡張ＲＯＭ１６のメモリサイズ（未実装の場合は「００ｈ」）のみを書込み、一方、拡張ＲＯＭ１６には、メモリサイズと共に、判定処理済みであることを示すデータを書込むようにしている。
【００５０】
上記ルーチンにおける拡張ＲＯＭの実装有無の判定結果およびＲＯＭサイズの判定結果は、例えば表示部２４に表示される。その場合、ＲＯＭサイズについては、メモリサイズそのものを表示してもよいし、あるいは、プリンタ１０の仕様で定められたサイズに満たないメモリが実装されている場合にメモリサイズエラーメッセージを表示するようにしてもよい。例えば、プリンタ仕様で８Ｍビットのメモリが指定されている場合に、メモリサイズが４Ｍビットであればエラーメッセージを表示するが、８Ｍビットまたは１６Ｍビットであれば、メモリサイズＯＫのメッセージを表示する。
【００５１】
以上説明したように、本実施形態では、基本ＲＯＭ１４へのアクセス結果に基づいて、基本ＲＯＭ１４として実装されたフラッシュメモリがファームウェアに適合しているかどうか（つまり、プリンタの設計に適合しているかどうか）を判定する。より具体的には、ステップ１００の判定処理（基本ＲＯＭ１４についてのセクタ判定ステップおよび消去／書込み手順判定ステップ）により、基本ＲＯＭ１４として実装されたフラッシュメモリのデータ消去／書込み手順およびセクタ構成がプリンタ１０のファームウェアに適合しているかどうかを判定でき、また、ステップ１５０の判定処理（基本ＲＯＭ１４についてのメモリサイズ判定ステップ）により当該フラッシュメモリのサイズを判定できる。
【００５２】
このように、フラッシュメモリに格納されたエレクトリックシグネチャを用いることなく上記の各判定を行える。このため、互換品のフラッシュメモリが実装された場合にも、そのフラッシュメモリがプリンタに適合したものであると判定できる。したがって、本実施形態によれば、ファームウェアを変更することなく、フラッシュメモリとして互換品を用いることができる。
【００５３】
また、ステップ２５０の判定処理（拡張ＲＯＭ実装判定ステップ）で拡張ＲＯＭ１６の実装の有無を判定することができる。そして、拡張ＲＯＭ１６が実装されている場合には、この拡張ＲＯＭ１６についても、ステップ３００（拡張ＲＯＭについてのセクタ判定ステップおよび消去／書込み手順判定ステップ）により、拡張ＲＯＭ１６として実装されたフラッシュメモリのデータ消去／書込み手順およびセクタ構成がプリンタ１０のファームウェアに適合しているかどうかを判定でき、また、ステップ３５０（拡張ＲＯＭについてのメモリサイズ判定ステップ）により拡張ＲＯＭ１６のメモリサイズを判定できる。
【００５４】
さらに、図４のメモリ判定処理は、電源が投入される毎に実行されるので、工場出荷後、ユーザの使用時にフラッシュメモリに異常が発生した場合にも、その異常を判定することができる。
【００５５】
ところで、上記図４に示すメインルーチンに含まれる各判定処理では、基本ＲＯＭ１４や拡張ＲＯＭ１６へのデータ書込み／消去処理が行われる。フラッシュメモリへのデータ書込み／消去は、メモリ毎に定められた手順で処理を行うことが必要である。そこで、各判定処理の詳細について説明する前に、フラッシュメモリのデータ消去／書込みの手順について説明する。
【００５６】
なお、フラッシュメモリはその構造上、「１」→「０」の書換えは行えるが、「０」→「１」の書換えは行えず、また、セクタの消去処理が行われるとそのセクタの全アドレスのデータ値は「ＦＦｈ」となる。そこで、フラッシュメモリでデータ書換えを行う場合は、先ず、データ消去処理により対象セクタの全データを「ＦＦｈ」にした後、データ書込み処理によって必要なビットに「０」を書込むという手順を踏む。
【００５７】
先ず、図５のフローチャートを参照してデータ消去処理を説明する。同図に示すように、ステップ５００〜５１０において、６回のバスライトサイクルによりフラッシュメモリに対してコマンドが書込まれる。本実施形態で用いられるフラッシュメモリでは、各バスライトサイクルでのコマンドの書込みアドレスおよびコマンド値は次の通りである。
2004094342.tif 000003
【００５８】
次に、ステップ５１２において、フラッシュメモリのデータ入出力ビットＤＱ７の出力値に基づいて、データ消去動作が完了したか否かが判別される。すなわち、本実施形態で用いられるフラッシュメモリでは、データ消去動作が行われている間は、データ入出力ビットＤＱ７に「０」が出力され、データ消去動作が完了するとＤＱ７に「１」が出力されるように設計されていることから、このＤＱ７の値に基づいて、データ消去動作が完了したか否かを判定できるのである。その結果、データ消去動作が未完了である場合は、次にステップ５１４の処理が実行される。
【００５９】
ステップ５１４では、フラッシュメモリのデータ出力ビットＤＱ５の出力値に基づいて、データ消去時間が規定限界を超えたか否かが判別される。すなわち、本実施形態で用いられるフラッシュメモリでは、データ消去動作時間が規定限界を超えるとデータ出力ビットＤＱ５に「１」が出力されるように設計されていることから、このＤＱ５の値に基づいて、データ消去動作時間が規定限界を超えたか否かを判定できるのである。その結果、規定限界を超えている場合は、ステップ５１６で、再度、データ入出力ビットＤＱ７の出力値に基づいて、データ消去動作が完了したか否かが判別される。その結果、データ消去動作が未完了であれば、データ消去に失敗したと判定され、ステップ５１８においてフラッシュメモリにリセットコマンドが書込まれた後、データ消去処理は終了する。
【００６０】
一方、ステップ５１２または５１６において、データ消去動作が完了している場合は、データ消去に成功したと判定されてデータ消去処理は終了する。
【００６１】
なお、ファームウェアに適合しないフラッシュメモリが実装されている場合には、データ消去動作時間が規定限界を超えてもＤＱ５に「１」が出力されるとは限らない。そこで、そのような場合に対するガードとして、ステップ５１４でデータ消去動作時間が規定限界に達していない場合は、ステップ５２０において、消去コマンドが書込まれた後、所定時間（例えば２０秒）が経過したか否かが判別される。その結果、所定時間が経過した場合は、書込みに失敗したと判定され、ステップ５１８の処理が行われた後、本ルーチンは終了する。一方、ステップ５２０で所定時間が経過していない場合は、ステップ５１２に戻る。
【００６２】
次に、図６を参照して、データ書込み処理について説明する。同図に示すように、データ書込み処理では、ステップ６００〜６０６における４回のバスライトサイクルを実行することによりデータの書込みが行われる。各コマンド書込み処理での書込みアドレスおよびコマンド値は次の通りである。
2004094342.tif 000004
【００６３】
次に、ステップ６０８において、フラッシュメモリのデータ入出力ビットＤＱ７の出力値に基づいて、データ書込み動作が完了したか否かが判別される。すなわち、本実施形態で用いられるフラッシュメモリでは、データ書込み動作が行われている間は、最後に書込まれたデータの反転データがデータ入出力ビットＤＱ７に出力され、データ書込み動作が完了すると最後に書込まれたデータがＤＱ７に出力されるように設計されていることから、このＤＱ７の値に基づいて、データ書込み動作が完了したか否かを判定できるのである。その結果、データ書込み動作が未完了である場合は、次にステップ６１０の処理が実行される。
【００６４】
ステップ６１０では、フラッシュメモリのデータ出力ビットＤＱ５の出力値に基づいて、データ書込み時間が規定限界を超えたか否かが判別される。すなわち、本実施形態で用いられるフラッシュメモリでは、データ書込み動作時間が規定限界を超えるとデータ出力ビットＤＱ５に「１」を出力するように設計されていることから、このＤＱ５の値に基づいて、データ書込み動作時間が規定限界を超えたか否かを判定できるのである。その結果、規定限界を超えている場合は、ステップ６１２で、再度、データ入出力ビットＤＱ７の出力値に基づいて、データ書込み動作が完了したか否かが判別される。その結果、データ書込み動作が未完了であれば、データ書込みに失敗したと判定され、ステップ６１４においてフラッシュメモリにリセットコマンドが書込まれた後、データ書込み処理は終了する。
【００６５】
一方、ステップ６０８または６１２において、データ書込み動作が完了したと判別された場合は、データ書込みに成功したと判定されて本ルーチンは終了する。
【００６６】
また、データ消去処理の場合と同様に、ファームウェアに適合しないフラッシュメモリが実装された場合のガードとして、ステップ６１０でデータ書込み動作時間が規定限界に達していないと判別された場合、ステップ６１６において、書込みコマンドが書込まれた後の経過時間が所定時間（例えば１ｍｓ秒）に達していれば、データ書込みに失敗したと判定するようにしている。
【００６７】
なお、フラッシュメモリのデータ消去／書込み処理中は、データの読出しを行えないため、基本ＲＯＭ１４についてデータ消去／書込み処理は、処理プログラムをＲＡＭ１８に展開し、そのプログラムを読み出すことにより行うものとする。
【００６８】
以下、図４に示すメインルーチンに含まれる各処理ルーチンについて詳細に説明する。
【００６９】
図７は、図４のステップ１００における基本ＲＯＭ１４のデータ消去・書込み手順およびセクタ構成の判定処理を行うルーチンのフローチャートである。同図に示すように、先ず、ステップ１０２において、今回のルーチンがプリンタ１０の初回の電源投入時に実行されたものであるか否かが判別される。後述するように、本ルーチンでは、基本ＲＯＭ１４のＮＶデータ情報領域１４ｂに、所定の初期値とチェックサムが書込まれる。このチェックサムは、初期値格納アドレスを含む所定のチェックサム計算領域におけるチェックサム計算値を所定の期待値（例えば”００ｈ”または”ＦＦｈ”）とするような値に設定される。したがって、本ルーチンが２回目以降の電源投入時に実行されたものである場合は、前回以前の実行時にチェックサムが書込み済みであるため、チェックサム計算領域におけるチェックサムの計算結果は期待値と一致する。一方、最初の電源投入時は、ＮＶデータ情報領域１４ｂには何もデータが書込まれていない（全て”ＦＦｈ”となっている）ため、チェックサム計算結果は期待値と一致しない。ただし、チェックサム計算領域のサイズは、ＮＶデータ情報領域１４ｂのデータが全て”ＦＦｈ”である場合のチェックサムの計算結果が期待値と一致しないように設定しているものとする。したがって、チェックサムの計算結果が期待値と一致しない場合は、初回の電源投入時であり、期待値と一致した場合は、２回目以降の電源投入時であると判断する。
【００７０】
基本ＲＯＭ１４としてファームウェアに適合しないフラッシュメモリが実装されている場合は、初回の電源投入時に本ルーチンが実行された際に、そのことが検知されてメモリ交換等の措置がとられるから、同じ基本ＲＯＭ１４のままで本ルーチンが２度と実行されることはない。したがって、ステップ１０２において、初回電源投入時でないと判別された場合は、前回の電源投入時前に、ファームウェアに適合したフラッシュメモリが実装されていることが判定済みである。そこで、この場合は、ステップ１０３において基本ＲＯＭ１４としてファームウェアに適合したフラッシュメモリが実装されているとの判定（ＯＫ判定）がなされて本ルーチンを終了する。一方、ステップ１０２において、初回電源投入時であると判別された場合は、ステップ１０４以降の処理が実行される。
【００７１】
先ず、ステップ１０４では、図２に示すバックアップ領域１４ｄのデータが消去される。バックアップ領域１４ｄのデータが消去された場合、もし基本ＲＯＭ１４として、ファームウェアに適合しないトップセクタタイプ（図１２（ｂ）を参照）のフラッシュメモリが実装されていると、領域１４ａ〜１４ｄは全てトップセクタタイプのセクタＳＡ０に属することとなり、このセクタＳＡ０に属する領域１４ａ〜１４ｄ全体が消去される。したがって、ベクタテーブル／ブートプログラム領域１４ａのプログラムやデータが消去されてしまい、データ消去処理を終えてＲＡＭ１８から基本ＲＯＭ１４に戻った際にファームウェアは動作不能となってしまう。すなわち、ステップ１０４の終了後、動作不能となった場合には、ファームウェアに適合しないトップセクタタイプのフラッシュメモリが実装されていると判断できる。一方、ボトムセクタタイプのフラッシュメモリが実装されている場合は、バックアップ領域１４ｃのデータのみが消去されるから、データ消去が終了した後、ファームウェアは引き続いて正常に動作し、ステップ１０６へ進む。
【００７２】
ステップ１０６では、ＮＶデータ情報領域１４ｂのうち、所定の初期値格納アドレスを除く領域のデータがバックアップ領域１４ｄにコピーされる。次に、ステップ１０８では、ＮＶデータ情報領域１４ｂのデータが消去される。そして、ステップ１１０において、ＮＶデータ情報領域１４ｂのデータ消去に成功したか否かが判別される。その結果、データ消去に成功していれば、次にステップ１１２の処理が実行される。
【００７３】
ステップ１１２では、ＮＶデータ情報領域１４ｂに値”００ｈ”のデータが書込まれる。そして、ステップ１１４でＮＶデータ情報領域１４ｂのデータが”００ｈ”になったか否かが判別され、”００ｈ”になっていれば、データ書込みに成功したと判断される。この場合、次にステップ１１６において、ＮＶデータ情報領域１４ｂのデータを消去するための処理が実行される。そして、ステップ１１８でデータの消去に成功したか否かが判別され、データ消去に成功した場合は、ステップ１２０において、データ書込み／消去手順は正しいとの判定（ＯＫ判定）がなされる。そして、ステップ１２２において、バックアップ領域１４ｄの、ＮＶデータ情報領域１４ｂの上記初期値格納アドレスに対応するアドレスに所定の初期値およびそのチェックサム（上述のように、初期値格納アドレスを含む所定のチェックサム計算領域におけるチェックサム計算値を所定の期待値とするような値）が書込まれた後、ステップ１２４において、バックアップ領域１４ｄのデータがＮＶデータ情報領域１４ｂにコピーされて、本ルーチンは終了する。
【００７４】
一方、ステップ１１０または１１８においてデータ消去に失敗し、または、ステップ１１４においてデータ書込みに失敗した場合は、ステップ１２６において、実装されたフラッシュメモリが、ファームウェアによるデータ消去手順またはデータ書込み手順に適合していない、つまり、基本ＲＯＭ１４として不適合なフラッシュメモリが実装されているとの判定（ＮＧ判定）がなされて本ルーチンは終了する。
【００７５】
次に、図４のステップ３００における拡張ＲＯＭ１６の消去・書込み手順およびセクタ構成の判定処理について説明する。
図８は、拡張ＲＯＭ１６の消去・書込み手順およびセクタ構成の判定処理を行うルーチンのフローチャートである。同図に示すように、先ずステップ３０２において、図３に示す拡張ＲＯＭ１６の第１試験領域（セクタＳＡ０）および第２試験領域（セクタＳＡ１）のデータが消去される。次に、ステップ３０４においてデータ消去に成功したか否かが判別され、データ消去に成功した場合は、ステップ３０６において、第１試験領域１６ａの先頭アドレスから例えば１６バイトの領域に所定の第１の試験データが書込まれる。次に、ステップ３０８においてデータの書込みに成功したか否かが判別され、データ書込みに成功した場合は、ステップ３１０において第２試験領域１６ｂの先頭アドレスから例えば１６バイトの領域に所定の第２の試験データが書込まれる。そして、ステップ３１２においてデータの書込みに成功したか否かが判別され、データ書込みに成功した場合は、ステップ３１４の処理が行われる。
【００７６】
ステップ３１４では、第１試験領域１６ａのデータが消去される。次に、ステップ３１６においてデータ消去に成功したか否かが判別され、データ消去に成功した場合は、ステップ３１８において、上記ステップ３１０で第２試験領域１６ｂに書込んだ試験データが残っているか否かが判別される。この場合、もし、拡張ＲＯＭ１６として、ファームウェアに適合しないトップセクタタイプのフラッシュメモリが実装されていると、第１試験領域１６ａおよび第２試験領域１６ｂは共に同じセクタ（ＳＡ０）に属することとなるから、ステップ３１４での第１試験領域１６ａのデータ消去により、第２試験領域１６ｂのデータも消去されてしまう。一方、拡張ＲＯＭ１６として、ファームウェアに適合したボトムセクタタイプのフラッシュメモリが実装されていれば、ステップ３１４では第１試験領域１６ａのデータのみが消去され、第２試験領域１６ｂのデータは消去されずにそのまま残っている。したがって、ステップ３１８において第２試験領域１６ｂに試験データが残っている場合は、正しいセクタ構成のフラッシュメモリが実装されていると判断できる。この場合、ステップ３２０において、セクタ構成およびデータ消去／書込み手順は適正であるとの判定（ＯＫ判定）がなされ、ステップ３２２において、第１試験領域１６ａの先頭から再度第１の試験データが書込まれた後、本ルーチンは終了する。なお、最後に第１試験領域１６ａへ第１の試験データを書込んでいるのは、後述する拡張ＲＯＭ１６のメモリサイズ判定処理において当該第１の試験データが読出されるようにするためである。
【００７７】
一方、上記ステップ３０４、３０８、３１２、または３１６においてデータの消去または書込みに失敗したと判別され、または、ステップ３１８において第２試験領域の試験データが残っていない（セクタ構成が不適合である）と判別された場合は、ステップ３２６において、拡張ＲＯＭ１６は未実装であるか、または、拡張ＲＯＭ１６としてファームウェアに不適合なフラッシュメモリが実装されているとの判定（ＮＧ判定）がなされて、本ルーチンは終了する。
【００７８】
次に、図４に示すステップ１５０における基本ＲＯＭ１４のメモリサイズ判定処理について説明する。
図９は、基本ＲＯＭ１４のメモリサイズ判定処理の原理を説明するための図である。本実施形態では、メモリサイズ４Ｍビット、８Ｍビット、および１６ビットの３種類のうち何れかであるとして、６つのアドレスＡ：「０ｈ」，Ｂ：「３００ｈ」，Ｃ：「８００００ｈ」，Ｄ：「８０３００ｈ」，Ｅ：「１０００００ｈ」，Ｆ：「１００３００ｈ」から夫々読出した例えば３２バイトのデータの値に基づいてメモリサイズを判定する。図９に示すように、アドレスＡ，Ｂは、４Ｍビット、８Ｍビット、および１６Ｍビットの全サイズのアドレス領域に含まれ、アドレスＣ，Ｄは４Ｍビットのアドレス領域には含まれず８Ｍビットおよび１６ビットのアドレス領域に含まれ、アドレスＥ，Ｆは４Ｍビットおよび８Ｍビットのアドレス領域には含まれず１６Ｍビットのアドレス領域にのみ含まれる。そして、アドレスＣおよびアドレスＥの下位１９ビット（最小の４ＭビットのＲＯＭの最大アドレスのビット数）の値は共に”０ｈ”でアドレスＡに一致し、同様に、アドレスＤおよびアドレスＦの下位１９ビットの値は共に”３００ｈ”でアドレスＢに一致する。
【００７９】
例えば、４ＭビットのＲＯＭが実装されている場合に、アドレスＣ（８００００ｈ）を指定してデータ読出しが行われると、このアドレスＣの最上位ビットが無視されて、アドレスＡ（０ｈ）のデータが読出される。したがって、この場合、アドレスＡおよびＣから読出したデータの値は互いに一致する。同様に、アドレスＢおよびＤから読出したデータの値も互いに一致する。これに対して、８Ｍビットまたは１６ビットのＲＯＭが実装されている場合は、アドレスＣおよびＤに実際に格納されたデータが読出されるので、アドレスＡおよびＢから読出したデータとは一致しない。したがって、アドレスＡとアドレスＣから読出したデータ、および、アドレスＢとアドレスＤから読出したデータが、夫々、互いに一致する場合は、４ＭビットのＲＯＭが実装されていると判断できる。
【００８０】
また、８ＭビットのＲＯＭが実装されている場合に、アドレスＥ（１０００００ｈ）からのデータ読出しが行われると、このアドレスＥの最上位ビットが無視されて、アドレスＡ（０ｈ）のデータが読出される。したがって、この場合、アドレスＡおよびＥから読出したデータの値は互いに一致する。同様に、アドレスＢおよびＦから読出したデータの値も互いに一致する。これに対して、１６ビットのＲＯＭが実装されている場合は、アドレスＥおよびＦに実際に格納されたデータが読出されるので、アドレスＡおよびＢから読出したデータとは一致しない。したがって、アドレスＡとアドレスＥから読出したデータ、および、アドレスＢとアドレスＦから読出したデータが、夫々、互いに一致する場合は、８Ｍビット（または４Ｍビット）のＲＯＭが実装されていると判断できる。
【００８１】
以上の原理を一般化すると、フラッシュメモリのサイズの種類がＳ１〜Ｓｎのｎ種類（ただし、Ｓｉ＜Ｓｉ＋１；ｉ＝１〜ｎ−１）であるとして、次の条件（１）、（２）を満たすアドレスＭ１〜Ｍｎを用いてメモリサイズの判定を行う。（本実施形態では、Ｓ１＝４Ｍビット、Ｓ２＝８Ｍビット、Ｓ３＝１６Ｍビット、ｎ＝３である。）
（１）アドレスＭ１はメモリサイズＳ１〜Ｓｎの全てに含まれ、アドレスＭｊ（ｊ＝２〜ｎ−１）は、メモリサイズＳ１〜Ｓｊ−１には含まれず、メモリサイズＳｊ〜Ｓｎには含まれる。（本実施形態では、Ｍ１＝Ａ，Ｂ；Ｍ２＝Ｃ，Ｄ；Ｍ３＝Ｅ，Ｆである。）
（２）メモリサイズＳ１のフラッシュメモリの最大アドレスのビット数をＮとすると、各アドレスＭｊ（ｊ＝２〜ｎ−１）の下位Ｎビットの値はアドレスＭ１に一致する。（本実施形態ではＮ＝１９である。）
【００８２】
このようなアドレスＭ１〜Ｍｎを用いて、アドレスＭ１から読出した値とアドレスＭ２から読出した値とを比較して両者が互いに一致すれば、アドレスＭ２は実装されたフラッシュメモリのアドレス領域に含まれないといえるから、当該フラッシュメモリのサイズはＳ１と判断できる。一方、アドレスＭ１から読出した値とアドレスＭ２から読出した値とが不一致であれば、さらに、アドレスＭ１から読出した値とアドレスＭ３から読出した値とを比較する。その結果、両者が一致しない場合は、アドレスＭ３は実装されたフラッシュメモリのアドレス領域に含まれないといえるから、当該フラッシュメモリのサイズはＳ２と判断できる。このようにして、アドレスＭ２，Ｍ３，Ｍ４，・・・のようにアドレスの小さい方から順に、各アドレスから読出した値をアドレスＭ１から読出した値と比較して、アドレスＭｃで初めて一致したとすれば、メモリサイズはＳｃ−１であると判断できる。また、アドレスＭ２〜Ｍｎの何れもアドレスＭ１からの読出し値と一致しなければ、メモリサイズはＳｎと判断できる。
【００８３】
つまり、アドレスＭｊ（ｊ＝２〜ｎ）のうち、そのアドレスから読出した値が、前記アドレスＭ０から読出した値と一致するようなｊの最小値をＫとした場合、フラッシュメモリのサイズはＳＫ−１と判定でき、また、一致するアドレスがなければ、メモリサイズはＳｎと判定できるのである。
【００８４】
なお、本実施形態では、アドレスＡ（０ｈ）から始まる領域にはジャンプ先アドレスを表すベクタテーブルが格納され、また、アドレスＢ（３００ｈ）から始まる領域にはブートプログラムが格納されている。このため、アドレスＡおよびＢから始まる３２バイトのデータ値が、夫々、アドレスＣ，ＥおよびアドレスＤ，Ｆから始まる３２バイトのデータ値と偶然に一致する確率はゼロとみなすことができる。
【００８５】
図１０は以上の原理に基づく基本ＲＯＭサイズ判定ルーチンのフローチャートである。同図に示すように、先ずステップ１５２において、▲１▼アドレスＡから始まる３２バイトのデータとアドレスＣから始まる３２バイトのデータ、および、▲２▼アドレスＢから始まる３２バイトのデータとアドレスＤから始まる３２バイトのデータが夫々比較される。その結果、▲１▼及び▲２▼が共に一致する場合には、ステップ１５４でメモリサイズは４Ｍビットであると判定されて本ルーチンは終了する。一方、ステップ１５２において▲１▼および▲２▼の少なくとも一方が不一致の場合には、次にステップ１５６において、▲３▼アドレスＡから始まる３２バイトのデータとアドレスＥから始まる３２バイトのデータ、および、▲４▼アドレスＢから始まる３２バイトのデータとアドレスＦから始まる３２バイトのデータが夫々比較される。その結果、▲３▼及び▲４▼が共に一致する場合には、ステップ１５８で８Ｍビットのフラッシュメモリが実装されていると判定されて本ルーチンは終了する。一方、ステップ１５６において▲３▼および▲４▼の少なくとも一方が不一致の場合には、ステップ１６０で１６Ｍビットのフラッシュメモリが実装されていると判定されて本ルーチンは終了する。
【００８６】
なお、図４のステップ３５０における拡張ＲＯＭ１６のメモリサイズ判定処理も、上記した基本ＲＯＭ１４のメモリサイズ判定処理と同様にして行われる。ただし、メモリサイズ判定の基準となる６つのアドレスＡ〜Ｆとして、次のアドレスを用いている。
アドレスＡ：２０００００ｈ　　アドレスＢ：２０４０００ｈ
アドレスＣ：２８００００ｈ　　アドレスＤ：２８４０００ｈ
アドレスＥ：３０００００ｈ　　アドレスＦ：３０４０００ｈ
これらのアドレスＡ〜Ｆを用いて、上記図１０と同様のルーチンにより拡張メモリ１６のメモリサイズを判定することができる。
【００８７】
アドレスＡ（２００００ｈ）およびアドレスＢ（２０４０００ｈ）は、夫々、第１試験領域１６ａおよび第２試験領域１６ｂの先頭アドレス（図３を参照）であり、上記した拡張ＲＯＭ１６のセクタ構成および消去／書込み手順のチェック処理において所定の試験データが書込まれている。このため、基本ＲＯＭ１４のメモリサイズ判定の場合と同様に、アドレスＡおよびＢから始まる３２バイトのデータ値が、夫々、アドレスＣ，ＥおよびアドレスＤ，Ｆから始まる３２バイトのデータ値と偶然に一致する確率はゼロとみなすことができる。
【００８８】
なお、本実施形態では、各メモリサイズに対応してアドレスを２つずつ用いて、２組のアドレスからの読出し値が共に一致するかどうかを判別することで、メモリサイズの判定を確実に行えるようにした。しかしながら、これに限らず、各メモリサイズに対応してアドレスを１つずつ用いる（例えば、アドレスＡ，Ｃ，Ｅのみを用いる）ようにしてもよいし、あるいは、アドレスを３つずつ用いることで、更に確実なメモリサイズ判定を行えるようにしてもよい。
【００８９】
次に、図４に示すステップ２５０における拡張ＲＯＭ実装判定処理について説明する。
図１１は、拡張ＲＯＭ実装判定ルーチンのフローチャートである。本ルーチンでは、図３に示す第１試験領域１６ａ（セクタＳＡ０）および第２試験領域１６ｂ（セクタＳＡ１）について、元の値が「０」でないアドレスに「０」を書込んで、そのアドレスの値が「０」になったかどうかに基づいて書込みが成功したかどうかを判別する。そして、２回連続して書込みに成功した場合に、拡張ＲＯＭ１６が実装されていると判定する。
【００９０】
先ず、ステップ２５２において、アドレスポインタが第１試験領域１６ａの先頭アドレス（２０００００ｈ）に設定され、次にステップ２５４において、アドレスポインタが指すアドレスのデータが「０」であるか否かが判別される。その結果、当該アドレスのデータが「０」でなければ、ステップ２５６において、当該アドレスに「０」が書込まれる。そして、ステップ２５８において、当該アドレスのデータが読出され、その値が「０」であるか否かが判別される。その結果、「０」でなければデータの書込みに失敗したことになる。この場合、ステップ２６０において拡張ＲＯＭ１６は未実装と判定されて本ルーチンは終了する。
【００９１】
一方、ステップ２５８で読出したデータの値が「０」であれば、書込みに成功したことになる。この場合、ステップ２６２においてフラグＦがセットされているか否かが判別される。その結果、フラグＦがセットされていなければ、ステップ２６４においてフラグＦがセットされ、ステップ２６６においてアドレスポインタが次のアドレスを指すように更新された後、ステップ２５４へ戻る。一方、ステップ２６２でフラグＦがセットされていれば、２回連続してデータの書込みに成功したことになる。この場合、ステップ２６８において、拡張ＲＯＭ１６が実装されているとの判定がなされて本ルーチンは終了する。このように、２回連続して書込みに成功した場合に、拡張ＲＯＭ１６が実装されていると判定することで、拡張ＲＯＭの実装判定の信頼性を向上させている。なお、実装判定を行うための書込み成功回数は２回に限らず、例えば、３回またはそれ以上の回数だけ書込みに成功した場合に、拡張ＲＯＭ１６が実装されていると判定することとしてもよい。
【００９２】
上記ステップ２５４において、アドレスポインタが指すアドレスのデータが「０」に一致すれば、ステップ２７０において、アドレスポインタの値が第２試験領域１６ｂの最終アドレス（２０５ＦＦＦｈ）に一致するか否かが判別される。その結果、最終アドレスに一致すれば、第１試験領域１６ａおよび第２試験領域１６ｂの全領域のデータが「０」であることになる。この場合、上記ステップ２６０において、拡張ＲＯＭ１６は未実装と判定されて本ルーチンは終了する。一方、ステップ２７０でポインタアドレスの値が上記最終アドレスに一致しなければ、ステップ２７２において、アドレスポインタが次のアドレスを指すように更新された後、ステップ２５４へ戻る。
【００９３】
なお、上記実施形態において、図７および図８にルーチンでのセクタ判定処理では、ファームウェアがボトムセクタタイプのフラッシュメモリに対応しているものとして、最下位の６４Ｋバイトに属するセクタのデータを消去し、そのセクタ以外のアドレスのデータが消去された場合（基本ＲＯＭ１４のセクタ判定の場合は、ベクタテーブル／ブートプログラム領域１４ａのプログラムが消去されて動作不能となった場合）に、セクタ構成が不適合であると判定するものとした。しかしながら、本発明は、これに限らず、ファームウェアがトップセクタタイプのフラッシュメモリに対応している場合にも適用が可能である。この場合には、フラッシュメモリの最上位６４Ｋバイトに属する何れかのセクタを消去してそのセクタ以外のアドレスのデータが消去された場合に不適合なボトムセクタタイプのフラッシュメモリが実装されていると判断すればよい。
【図面の簡単な説明】
【図１】本発明の一実施形態であるプリンタのシステム構成図である。
【図２】基本ＲＯＭの最下位６４Ｋバイトのメモリ構成を示す図である。
【図３】拡張ＲＯＭの最下位６４Ｋバイトのメモリ構成を示す図である。
【図４】メモリ判定処理のメインルーチンのフローチャートである。
【図５】データ消去処理のフローチャートである。
【図６】データ書込み処理のフローチャートである。
【図７】基本ＲＯＭのデータ消去／書込み手順およびセクタ構成の判定処理を行うルーチンのフローチャートである。
【図８】拡張ＲＯＭの消去・書込み手順およびセクタ構成の判定処理を行うルーチンのフローチャートである。
【図９】基本ＲＯＭのメモリサイズ判定処理の原理説明図である。
【図１０】基本ＲＯＭサイズ判定ルーチンのフローチャート。
【図１１】拡張ＲＯＭ実装判定ルーチンのフローチャートである。
【図１２】フラッシュメモリのセクタ構成を示す図である。
【符号の説明】
１０　プリンタ、１２　中央処理ユニット（ＣＰＵ）、１４　基本ＲＯＭ、１６　拡張ＲＯＭ
【図１】
2004094342.tif 000005
【図２】
2004094342.tif 000006
【図３】
2004094342.tif 000007
【図４】
2004094342.tif 000008
【図５】
2004094342.tif 000009
【図６】
2004094342.tif 000010
【図７】
2004094342.tif 000011
【図８】
2004094342.tif 000012
【図９】
2004094342.tif 000013
【図１０】
2004094342.tif 000014
【図１１】
2004094342.tif 000015
【図１２】
2004094342.tif 000016