(57)【特許請求の範囲】
【請求項１】
ネットワークに接続される通信装置であって、
スリープ状態と非スリープ状態との間で状態が移行し、前記非スリープ状態である場合に、前記ネットワークを介して受信する第１のデータを処理する第１処理部と、
前記第１処理部が前記スリープ状態である場合に、前記ネットワークを介して受信する第２のデータに対して、前記第１処理部に代理して代理応答処理を実行する第２処理部と、を備え、
前記第２処理部は、前記第１処理部が前記スリープ状態である場合に、前記ネットワークの第１のトラフィック量であって、所定数の単位データを受信する期間を用いて決定される値を含む前記第１のトラフィック量を検出し、前記第１のトラフィック量が第１の閾値よりも大きい場合に、前記第１処理部を前記スリープ状態から前記非スリープ状態に移行させる、通信装置。
【請求項２】
前記第２処理部は、さらに、前記第１処理部が前記スリープ状態である場合において、前記第１処理部によって処理されるべき特定のデータを受信する場合に、前記第１処理部を前記スリープ状態から前記非スリープ状態に移行させる、請求項１に記載の通信装置。
【請求項３】
前記第１処理部が前記非スリープ状態である場合に使用される第１メモリであって、第１状態と、前記第１状態よりも消費電力が小さい第２状態と、の間で状態が移行する前記第１メモリと、
前記第１処理部が前記スリープ状態である場合に使用される第２メモリと、をさらに備え、
前記第１メモリは、前記第１処理部が前記スリープ状態から前記非スリープ状態に移行する場合に、前記第２状態から前記第１状態に移行し、
前記第２処理部は、前記第１メモリが前記第２状態から前記第１状態に移行する移行期間中に、前記ネットワークを介して順次受信する複数の第３のデータを、前記第２メモリのデータ記憶領域に順次格納し、
前記第１処理部は、前記非スリープ状態に移行した後に、前記データ記憶領域に格納された前記複数の第３のデータを処理し、
前記第１の閾値は、前記第１メモリの前記移行期間中に前記データ記憶領域に格納されるべき前記複数の第３のデータの合計データ量が、前記データ記憶領域の容量を超えないように、設定されている、請求項１又は２に記載の通信装置。
【請求項４】
前記第１処理部は、
前記非スリープ状態である場合に、前記ネットワークの第２のトラフィック量を検出し、
前記第２のトラフィック量が第２の閾値よりも大きい場合に、前記第１処理部が前記非スリープ状態から前記スリープ状態に移行することを禁止し、
前記第２のトラフィック量が前記第２の閾値よりも小さい場合に、前記第１処理部が前記非スリープ状態から前記スリープ状態に移行することを許容する、請求項１から３のいずれか一項に記載の通信装置。
【請求項５】
前記第１処理部は、
前記第２のトラフィック量が前記第２の閾値よりも小さく、かつ、前記第１処理部の処理待ち状態が所定期間だけ継続した場合に、前記第１処理部が前記非スリープ状態から前記スリープ状態に移行することを許容する、請求項４に記載の通信装置。
【請求項６】
前記トラフィック量は、さらに、所定期間中に受信する単位データの数を用いて決定される値を含む、請求項１から５のいずれか一項に記載の通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークに接続される通信装置に関する。
【背景技術】
【０００２】
特許文献１に、第１処理部と第２処理部とを備える通信装置が開示されている。第１処理部は、消費電力が比較的に小さいスリープ状態と、消費電力が比較的に大きい非スリープ状態と、の間で状態が移行する。この通信装置では、第１処理部が最後に処理を実行してから所定期間経過すると、第１処理部がスリープ状態に移行する。これにより、通信装置の省電力化が実現される。この通信装置では、第１処理部がスリープ状態である場合に、ネットワークを介して第１処理部が処理すべき特定のデータを受信すると、第２処理部は、第１処理部をスリープ状態から非スリープ状態に移行させる移行処理を開始する。第１処理部は、非スリープ状態に移行した後に、上記した特定のデータを処理する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−５０２９号公報
【特許文献２】特開２００１−３４４３７号公報
【特許文献３】特開２００５−６６８９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の技術では、第１処理部が処理すべき特定のデータが受信された後に、第１処理部をスリープ状態から非スリープ状態に移行させる。第１処理部をスリープ状態から非スリープ状態に移行させるには、移行期間が必要である。第１処理部の移行期間中に、多くのデータを受信する可能性がある。第１処理部は、移行期間中にデータを処理することができない。このために、移行期間中に受信した全てのデータを処理し終えるまでに、多くの時間がかかる。本明細書では、第１処理部をスリープ状態から非スリープ状態に適切なタイミングで移行させることにより、受信したデータを処理し終えるのが大幅に遅れることを抑制することができる技術を提供する。
【課題を解決するための手段】
【０００５】
本明細書によって開示される技術は、ネットワークに接続される通信装置であって、スリープ状態と非スリープ状態との間で状態が移行し、前記非スリープ状態である場合に、前記ネットワークを介して受信する第１のデータを処理する第１処理部と、前記第１処理部が前記スリープ状態である場合に、前記ネットワークを介して受信する第２のデータに対して、前記第１処理部に代理して代理応答処理を実行する第２処理部と、を備え、前記第２処理部は、前記第１処理部が前記スリープ状態である場合に、前記ネットワークの第１のトラフィック量であって、所定数の単位データを受信する期間を用いて決定される値を含む前記第１のトラフィック量を検出し、前記第１のトラフィック量が第１の閾値よりも大きい場合に、前記第１処理部を前記スリープ状態から前記非スリープ状態に移行させる。
本明細書によって開示される他の技術は、ネットワークに接続される通信装置に関する。この通信装置は、第１処理部と第２処理部を備える。第１処理部は、スリープ状態と非スリープ状態との間で状態が移行する。第１処理部は、非スリープ状態である場合に、ネットワークを介して受信する第１のデータを処理する。なお、上記した非スリープ状態は、例えば、スリープ状態と比べて消費電力が大きい状態と言い換えてもよい。第２処理部は、第１処理部がスリープ状態である場合に、ネットワークを介して受信する第２のデータに対して、第１処理部に代理して代理応答処理を実行する。第２処理部は、第１処理部がスリープ状態である場合に、ネットワークの第１のトラフィック量を検出し、第１のトラフィック量が第１の閾値よりも大きい場合に、第１処理部をスリープ状態から非スリープ状態に移行させる。なお、第１のトラフィック量は、通信装置が受信するデータ量を用いて求められてもよいし、通信装置が受信するのか否かに関わらずネットワーク上で通信されるデータ量を用いて求められてもよい。また、ネットワークの第１のトラフィック量は、例えば、ネットワークの現在の第１のトラフィック量と言い換えてもよい。
【０００６】
トラフィック量が小さい場合と比べると、トラフィック量が大きい場合は、通信装置が処理すべき多くのデータを受信することになる。上記した通信装置では、第２処理部は、第１のトラフィック量が第１の閾値よりも大きくなると、第１処理部をスリープ状態から非スリープ状態に移行させる。第１の閾値を適切な値に設定すれば、通信装置が処理すべきデータがそれほど多くない状態で第１処理部をスリープ状態から非スリープ状態に移行させることができる。このため、通信装置が処理すべきデータが非常に多い状態で第１処理部がスリープ状態から非スリープ状態に移行されることがなく、データを処理するのが大幅に遅れるという事態が発生するのを抑制することができる。
【０００７】
第２処理部は、さらに、第１処理部がスリープ状態である場合において、第１処理部によって処理されるべき特定のデータを受信する場合に、第１処理部をスリープ状態から非スリープ状態に移行させてもよい。
【０００８】
上記した通信装置は、第１メモリと第２メモリとをさらに備えていてもよい。第１メモリは、第１処理部が非スリープ状態である場合に使用されてもよい。第１メモリは、第１状態と、第１状態よりも消費電力が小さい第２状態と、の間で状態が移行してもよい。第２メモリは、第１処理部がスリープ状態である場合に使用されてもよい。第１メモリは、第１処理部がスリープ状態から非スリープ状態に移行する場合に、第２状態から第１状態に移行してもよい。第２処理部は、第１メモリが第２状態から第１状態に移行する移行期間中に、ネットワークを介して順次受信する複数の第３のデータを、第２メモリのデータ記憶領域に順次格納してもよい。第１処理部は、非スリープ状態に移行した後に、データ記憶領域に格納された複数の第３のデータを処理してもよい。第１の閾値は、第１メモリの移行期間中にデータ記憶領域に格納されるべき複数の第３のデータの合計データ量が、データ記憶領域の容量を超えないように、設定されてもよい。
この通信装置では、第１処理部がスリープ状態から非スリープ状態に移行するのに伴って、第１メモリも、第２状態から第１状態に移行する。第２処理部は、第１メモリが第２状態から第１状態に移行する移行期間中に順次受信する複数の第３のデータを、第２メモリのデータ記憶領域に順次格納する。このため、第１メモリの第２状態から第１状態への移行期間中に、データ記憶領域の容量を超えるデータ量の第３のデータを受信すると、第３のデータをデータ記憶領域に格納することができなくなってしまう。この通信装置では、第１の閾値は、第１メモリの移行期間中にデータ格納領域に格納されるべき複数の第３のデータの合計データ量が、データ記憶領域の容量を超えないように、設定されている。この結果、第１メモリの移行期間中に、第３のデータをデータ格納領域に格納しきれないという事態が発生するのを抑制することができる。
【０００９】
第１の閾値は、特定の値より小さくてもよい。特定の値は、第２メモリのデータ記憶領域の最大容量がｎであり、移行期間がＴＩＭＥである場合に、ｎ／ＴＩＭＥであってもよい。即ち、特定の値は、仮に、通信装置に受信される単位時間当りのデータ量が特定の値である状態で移行期間を経ると、移行期間中に受信するデータ量が第２メモリのデータ記憶領域の最大容量に一致するように設定されていてもよい。
【００１０】
第１処理部は、非スリープ状態である場合に、ネットワークの第２のトラフィック量を検出してもよい。第１処理部は、第２のトラフィック量が第２の閾値よりも大きい場合に、第１処理部が非スリープ状態からスリープ状態に移行することを禁止してもよい。また、第２のトラフィック量が第２の閾値よりも小さい場合に、第１処理部が非スリープ状態からスリープ状態に移行することを許容してもよい。なお、第２のトラフィック量は、通信装置が受信するデータ量を用いて求められてもよいし、通信装置が受信するのか否かに関わらずネットワーク上で通信されるデータ量を用いて求められてもよい。また、ネットワークの第２のトラフィック量は、例えば、ネットワークの現在の第２のトラフィック量と言い換えてもよい。また、上記した第２の閾値は、上記した第１の閾値と同じ値であってもよいし、小さくてもよい。
仮に、トラフィック量が比較的に大きい状態で、第１処理部が非スリープ状態からスリープ状態に移行されると、第１のトラフィック量が第１の閾値よりも大きくなり、第１処理部がスリープ状態から非スリープ状態に移行される可能性が高い。この通信装置では、第１処理部は、第２のトラフィック量が第２の閾値よりも大きい場合に、第１処理部が非スリープ状態からスリープ状態に移行することを禁止する。第２の閾値を適切な値に設定すれば、第１処理部が非スリープ状態からスリープ状態に移行された後、すぐに、非スリープ状態に移行される事態を防止することができる。これにより、第２処理部が不要な処理を実行することを防止することができる。
第１処理部は、第２のトラフィック量が第２の閾値よりも小さく、かつ、第１処理部の処理待ち状態が所定期間だけ継続した場合に、第１処理部が非スリープ状態からスリープ状態に移行することを許容してもよい。
【００１１】
トラフィック量は、所定期間中に受信するパケット数を用いて決定されていてもよく、所定数のパケットを受信する期間を用いて決定されていてもよい。また、トラフィック量は、通信装置が受信する単位時間当りのデータ量であってもよい。
【００１２】
なお、上記した通信装置を実現するための制御方法、及び、コンピュータプログラムも新規で有用である。
【図面の簡単な説明】
【００１３】
【図１】通信システムの構成を示す。
【図２】プリンタの状態移行の一例を示す。
【図３】プリンタの状態に対応する各部の状態の一例を示す。
【図４】プリンタの状態に対応するＲＡＭの格納状態の一例を示す。
【図５】メインＣＰＵでの省電力処理のフローチャートを示す。
【図６】メインＣＰＵでの許可フラグ値決定処理のフローチャートを示す。
【図７】メインＣＰＵでの状態移行判断処理のフローチャートを示す。
【図８】サブＣＰＵでの省電力処理のフローチャートを示す。
【図９】サブＣＰＵでのパケット受信処理のフローチャートを示す。
【発明を実施するための形態】
【００１４】
図面を参照して実施例を説明する。図１は、本実施例の通信システム２の概略図を示す。通信システム２は、ＬＡＮ４と外部装置６とプリンタ１０とを備える。外部装置６とプリンタ１０は、ＬＡＮ４に接続されている。外部装置６とプリンタ１０は、ＬＡＮ４を介して、相互に通信可能である。
【００１５】
（プリンタの構成）
図１に示すように、プリンタ１０は、制御部１２と、ネットワークインターフェイス３０（以下では、「ネットワークＩ／Ｆ３０」という）と、プリントエンジン３４と、表示パネル３８等を備える。制御部１２は、メインＣＰＵ１４と、メイン用クロック回路１６と、ＲＯＭ１８と、２つのＲＡＭ２０，２２と、サブＣＰＵ２４と、サブ用クロック回路２６と、ＭＡＣコントローラ２８と、エンジン制御回路３２と、パネル制御回路３６等を備える。
【００１６】
メインＣＰＵ１４は、ＤＲＡＭ２２に格納されているプログラムに従って様々な処理を実行する。メインＣＰＵ１４は、２つタイマ機構を内蔵している。以下では、一方のタイマのことを待機状態タイマと呼び、他方のタイマのことをメイン用パケット受信タイマと呼ぶ。また、メインＣＰＵ１４は、時計機構を内蔵している。メイン用クロック回路１６は、メインＣＰＵ１４にクロック信号を供給する。メインＣＰＵ１４にクロック信号が供給されている間は、メインＣＰＵ１４は非スリープ状態である。メインＣＰＵ１４にクロック信号が供給されていない間は、メインＣＰＵ１４はスリープ状態である。なお、後述するように、メイン用クロック回路１６は、サブＣＰＵ２４によって制御される。
【００１７】
サブＣＰＵ２４は、ＳＲＡＭ２０に格納されているプログラムに従って様々な処理を実行する。サブＣＰＵ２４は、時計機構を内蔵している。また、サブＣＰＵ２４は、タイマ機構を内蔵している。以下では、このタイマのことをサブ用パケット受信タイマと呼ぶ。サブ用クロック回路２６は、サブＣＰＵ２４にクロック信号を供給する。サブ用クロック回路２６のクロック信号の周波数は、メイン用クロック回路１６のクロック信号の周波数よりも低い。従って、メインＣＰＵ１４を駆動するための消費電力と比べて、サブＣＰＵ２４を駆動するための消費電力は小さい。サブ用クロック回路２６は、プリンタ１０の電源がＯＮにされると、サブＣＰＵ２４にクロック信号を供給する。また、プリンタ１０の電源がＯＦＦにされると、サブＣＰＵ２４へのクロック信号を停止する。即ち、サブＣＰＵ２４は、プリンタ１０の電源がＯＮされている間、スリープ状態には設定されず、非スリープ状態で維持される。
【００１８】
ＲＯＭ１８には、メインＣＰＵ１４及びサブＣＰＵ２４によって実行される複数のプログラムがそれぞれ圧縮された状態で格納されている。各プログラムは、プリンタ１０の電源がＯＮされたときに、ＳＲＡＭ２０又はＤＲＡＭ２２に展開される。メインＣＰＵ１４又はサブＣＰＵ２４は、ＳＲＡＭ２０又はＤＲＡＭ２２に展開されたプログラムを使用して処理を実行する。ＲＯＭ１８に格納されている全てのプログラムは、プリンタ１０の電源がＯＮにされると、一旦、ＤＲＡＭ２２に展開される。次いで、ＤＲＡＭ２２に展開された複数のプログラムのうち、予め決められているプログラムが、ＳＲＡＭ２０にロードされる。なお、図示省略されているが、制御部１２は、ＳＲＡＭ２０とＤＲＡＭ２２のそれぞれに対してクロック信号を供給するための回路も有する。
【００１９】
ＳＲＡＭ２０は、メインＣＰＵ１４とサブＣＰＵ２４からアクセス可能である。ＳＲＡＭ２０は、パケット格納領域２１を備える。パケット格納領域２１は、後述するように、ＤＲＡＭ２２が通常動作モードでない場合（図４の期間６１，６２，６６）に、ＬＡＮ４を介して受信するパケットを格納する。パケット格納領域２１は、ｎ個（ｎは２以上の整数）の領域を備える。本実施例では、ｎ個の領域のそれぞれの容量は、１２８Ｂｙｔｅに設定されている。１２８Ｂｙｔｅ以下のパケットを受信すると、そのパケットは、１個の領域に格納される。一方、１２８Ｂｙｔｅを超えるサイズのパケットを受信すると、そのパケットのサイズに合わせて、１つのパケットが２個以上の領域に亘って格納される。
【００２０】
ＳＲＡＭ２０には、後述するように、サブＣＰＵ２４が実行する省電力処理（図８参照）を実行するためのプログラムや、サブＣＰＵ２４がメインＣＰＵ１４に代理して処理を実行する（図９のＳ１８４）際に使用するプログラムが格納される。メインＣＰＵ１４は、プリンタ１０の電源がＯＮされると、ＤＲＡＭ２２に展開された複数のプログラムのうち、予め設計者等によって決められているサブＣＰＵ２４用のプログラムをＳＲＡＭ２０にロードして格納する。
【００２１】
ＳＲＡＭ２０には、さらに、サブＣＰＵ２４がメインＣＰＵ１４に代理して処理を実行するために必要な情報が格納される。この情報の一例として、プリンタ１０のＩＰアドレス、ＭＡＣアドレス、ノード名等が挙げられる。メインＣＰＵ１４は、スリープ状態に移行可能となると（図５のＳ２６でＹＥＳ）、サブＣＰＵ２４がメインＣＰＵ１４に代理して処理を実行するために必要な情報を、ＳＲＡＭ２０に格納する。また、ＳＲＡＭ２０には、後述する各処理を実行するために必要な情報が格納される。ＳＲＡＭ２０に格納される情報は、各処理の説明に併せて説明する。
【００２２】
さらに、ＳＲＡＭ２０には、プリンタ１０の状態を示す状態変数が格納される。プリンタ１０は、「処理状態」、「待機状態」、「ライトスリープ状態（Ｌスリープ状態）」、「ディープスリープ状態（Ｄスリープ状態）」のいずれかの状態で動作する。従って、ＳＲＡＭ２０には、４つの状態に対応する４つの値のうちの１つの値が格納される。
【００２３】
ＤＲＡＭ２２は、メインＣＰＵ１４からアクセス可能である。ＤＲＡＭ２２は、ＳＲＡＭ２０よりもメモリの総容量が大きい。このため、ＤＲＡＭ２２は、ＳＲＡＭ２０と比べて、その消費電力が高い。ＤＲＡＭ２２には、メインＣＰＵ１４がネットワークを介して通信する処理を実行するためのネットワーク処理プログラムが格納される。このネットワーク処理プログラムは、ＡＲＰ、ＮｅｔＢＩＯＳ−ＮＳ、ＩＣＭＰ等に関する応答処理（即ちメインＣＰＵ１４が非スリープ状態の間に実行すべき応答処理）を実行するためのプログラム、印刷指示に応じて印刷処理を実行するためのプログラム等を含む。ネットワーク処理プログラムは、さらに、ＭＡＣコントローラ２８を制御するためのプログラム、ＴＣＰ／ＩＰを利用して処理を実行するためのＴＣＰ／ＩＰプロトコルスタック、各種のアプリケーションプロトコルを利用して処理を実行するためのプログラム等を含む。また、ＤＲＡＭ２２には、後述するメインＣＰＵ１４が実行する省電力処理（図５参照）を実行するためのプログラムが格納される。メインＣＰＵ１４は、プリンタ１０の電源がＯＮされると、ＲＯＭ１８に格納されているネットワーク処理プログラムをＤＲＡＭ２２に展開して格納する。
【００２４】
さらに、ＤＲＡＭ２２には、メインＣＰＵ１４が処理を実行する際に必要な情報が格納される。例えば、プリンタ１０のＩＰアドレス、ＭＡＣアドレス、ノード名、ステータス情報等が格納される。メインＣＰＵ１４は、情報に変更があった場合、格納されている情報を修正する。また、ＤＲＡＭ２２には、さらに、後述する各処理に必要な情報が格納される。ＤＲＡＭ２２が格納する情報は、各処理の説明に併せて説明する。
【００２５】
図１に示すネットワークＩ／Ｆ３０は、ＬＡＮ４に接続されている。ＭＡＣコントローラ２８は、ネットワークＩ／Ｆ３０によって受信されたパケットをプリンタ１０が処理可能な形式に変換する。エンジン制御回路３２は、メインＣＰＵ１４からの指示に従って、プリントエンジン３４を制御する。パネル制御回路３６は、メインＣＰＵ１４からの指示に従って、表示パネル３８を制御する。表示パネル３８は、ＬＣＤである。パネル制御回路３６は、表示パネル３８をＯＮ状態とＯＦＦ状態との間で移行させる。即ち、パネル制御回路３６は、表示パネル３８に電圧を印加することによって表示パネル３８をＯＮ状態とし、電圧の印加を停止することによって表示パネル３８をＯＦＦ状態とする。
【００２６】
（プリンタの状態移行）
図２は、プリンタ１０の状態が移行する様子を示す。プリンタ１０は、処理状態４２と待機状態４４とＬスリープ状態４６とＤスリープ状態４８との間で状態が移行する。図３は、プリンタ１０が各状態４２，４４，４６，４８の場合に、メインＣＰＵ１４、サブＣＰＵ２４、２つのＲＡＭ２０，２２、及び、表示パネル３８の状態を表わす表６０を示す。プリンタ１０の電源がＯＮされると、プリンタ１０は、待機状態４４となる。図３に示すように、待機状態４４では、２つのＣＰＵ１４，２４にクロックが供給されている（即ち、２つのＣＰＵ１４，２４は非スリープ状態である）。２つのＲＡＭ２０，２２は通常動作モードであり、表示パネル３８はＯＮ状態である。
【００２７】
プリンタ１０が待機状態４４である場合に、外部装置６からの要求（パケット）に応答する処理以外の通常の処理を実行する場合、プリンタ１０は、処理状態４２に移行する。なお、上記の通常の処理は、印刷指示に応じて実行される印刷処理、ユーザによって表示パネル３８の操作が為された場合に実行される表示処理等を含む。処理状態４２は、待機状態４４と同様、２つのＣＰＵ１４，２４は非スリープ状態であり、２つのＲＡＭ２０，２２は通常動作モードであり、表示パネル３８はＯＮ状態である。処理状態４２と待機状態４４との相違点は、メインＣＰＵ１４が上記の通常の処理を実行しているか否かである。メインＣＰＵ１４が上記の通常の処理を終了すると、プリンタ１０は、待機状態４４に移行する。
【００２８】
メインＣＰＵ１４は、待機状態４４に移行すると、上記した待機状態タイマをスタートする。待機状態４４が所定時間継続すると、メインＣＰＵ１４は、パネル制御回路３６（図１参照）に、表示パネル３８をＯＦＦ状態にするように指示する。この結果、プリンタ１０は、Ｌスリープ状態４６に移行する。Ｌスリープ状態４６では、２つのＣＰＵ１４，２４は非スリープ状態であり、２つのＲＡＭ２０，２２は通常動作モードであり、表示パネル３８はＯＦＦ状態である。これにより、表示パネル３８で消費される電力を低減させることができる。Ｌスリープ状態４６において、メインＣＰＵ１４が上記の通常の処理（印刷処理、表示処理等）を実行すべき場合には、プリンタ１０は、処理状態４２に移行する。
【００２９】
プリンタ１０は、後述する省電力処理（図５参照）を実行することによって、Ｌスリープ状態４６からＤスリープ状態４８に移行する。Ｄスリープ状態４８では、メインＣＰＵ１４はスリープ状態（クロック信号が供給されない状態）であり、サブＣＰＵ２４は非スリープ状態であり、ＳＲＡＭ２０は通常動作モードであり、ＤＲＡＭ２２はセルフリフレッシュモード（即ち、通常動作モードよりも消費電力が低いモード）であり、表示パネル３８はＯＦＦ状態である。Ｄスリープ状態４８において、メインＣＰＵ１４が上記の通常の処理（印刷処理、表示処理等）を実行すべき場合には、プリンタ１０は、Ｌスリープ状態４６を経て処理状態４２に移行する。プリンタ１０がＤスリープ状態４８からＬスリープ状態４６に移行する期間では、ＤＲＡＭ２２がセルフリフレッシュモードから通常動作モードに移行するとともに、メインＣＰＵ１４がスリープ状態から非スリープ状態に移行する。以下では、ＤＲＡＭ２２がセルフリフレッシュモードから通常動作モードに移行する期間を移行期間５０と呼ぶ。
【００３０】
プリンタ１０が各状態４２，４４，４６，４８の場合に、プリンタ１０がＬＡＮ４を介して受信するパケットが、２つのＲＡＭ２０，２２のいずれに格納されるかを説明する。図４は、各状態４２，４４，４６，４８において、パケットが２つのＲＡＭ２０，２２のいずれに格納されるのかを模式的に示す。ここでは、プリンタ１０がＤスリープ状態４８から移行期間５０を経て、Ｌスリープ状態４６、待機状態４４、又は、処理状態４２に移行し、その後、Ｄスリープ状態４８に移行する場合について説明する。
【００３１】
プリンタ１０がＤスリープ状態４８である場合、サブＣＰＵ２４は、ＬＡＮ４を介して受信する受信パケットをＳＲＡＭ２０に格納する。即ち、期間６１では、受信パケットを通常動作モードであるＳＲＡＭ２０に格納する。Ｄスリープ状態４８では、サブＣＰＵ２４は、受信パケットに対して、メインＣＰＵ１４に代理して代理応答処理を実行する。移行期間５０である場合、サブＣＰＵ２４は、受信パケットをＳＲＡＭ２０に格納する。即ち、期間６２では、受信パケットをＳＲＡＭ２４に格納する。移行期間５０中では、サブＣＰＵ２４は、代理応答処理を実行しない。従って、移行期間５０中の受信パケットは、ＳＲＡＭ２０に順次格納される。移行期間５０が終了し、メインＣＰＵ１４が非スリープ状態に移行した時点６３において、メインＣＰＵ１４は、移行期間５０中にＳＲＡＭ２０に蓄積された受信パケットをＤＲＡＭ２２に移動させる。
【００３２】
プリンタ１０がＬスリープ状態４６、待機状態４４、又は、処理状態４２である場合、メインＣＰＵ１４は、受信パケットを通常動作モードであるＤＲＡＭ２２に格納する。即ち、期間６４では、受信パケットは、ＤＲＡＭ２２に格納される。メインＣＰＵ１４は、受信パケットをＳＲＡＭ２０に格納しない。メインＣＰＵ１４は、ＤＲＡＭ２２に格納されている受信パケットを処理する。プリンタ１０が再びＤスリープ状態４８に移行した時点６５以降の期間６６では、サブＣＰＵ２４は、受信パケットをＳＲＡＭ２０に格納する。
【００３３】
（メインＣＰＵでの省電力処理）
次いで、メインＣＰＵ１４が実行する処理の内容について説明する。図５は、メインＣＰＵ１４によって実行される省電力処理のフローチャートを示す。図５の処理は、プリンタ１０の電源がＯＮされ、メインＣＰＵ１４が待機状態タイマをリセットすると開始される。なお、メインＣＰＵ１４は、省電力処理と、後述する許可フラグ値決定処理（図６参照）と、を並行して実行する。プリンタ１０の電源がＯＮされた時点では、プリンタ１０は待機状態４４である。メインＣＰＵ１４は、ＳＲＡＭ２０に待機状態４４を示す状態変数を格納する。メインＣＰＵ１４は、ＤＲＡＭ２２に格納されているプログラムを使用して以下の処理を実行する。
【００３４】
メインＣＰＵ１４は、ＳＲＡＭ２０に格納されている状態変数が待機状態４４を示すのか否かを判断する（Ｓ１２）。ここでは、プリンタ１０は、Ｌスリープ状態４６と待機状態４４と処理状態４２のいずれかである。即ち、ＤＲＡＭ２２は、通常動作モードであり、ＬＡＮ４を介して受信する受信パケットは、ＤＲＡＭ２２に格納される（図４の期間６４）。ここでＹＥＳの場合、Ｓ１４に進み、ＮＯの場合、メインＣＰＵ１４は、Ｓ１２の判断を繰り返す。Ｓ１４では、メインＣＰＵ１４は、待機状態タイマの計測時間が所定時間を経過したのか否かを判断する。なお、待機状態タイマは、プリンタ１０が待機状態４４に移行する毎にリセットされる。Ｓ１４でＮＯの場合はＳ１２に戻り、Ｓ１４でＹＥＳの場合はＳ１６に進む。Ｓ１６では、メインＣＰＵ１４は、ＳＲＡＭ２０に格納されている状態変数を、Ｌスリープ状態４６を示す状態変数に変更する。続いて、メインＣＰＵ１４は、パネル制御回路３６に表示パネル３８への電圧の印加を停止するように指示する（Ｓ１８）。これにより、電圧の印加が停止され、表示パネル３８はＯＦＦ状態になる。
【００３５】
次いで、メインＣＰＵ１４は、ＳＲＡＭ２０に格納されている状態変数がＬスリープ状態４６を示すのか否かを判断する（Ｓ２０）。状態変数は、メインＣＰＵ１４又はサブＣＰＵ２４が図５以外の処理を実行することによって変更される可能性がある。例えば、メインＣＰＵ１４は、後述の図８のＳ１３８においてクロック供給が再開されると、受信したパケットに応じた処理を実行する。メインＣＰＵ１４は、上記の通常の処理（印刷処理、表示処理等）を実行する場合、プリンタ１０を処理状態４２に移行し、状態変数を処理状態４２を示す状態変数に変更する。一方において、メインＣＰＵ１４は、通常の処理以外の処理を実行する場合、プリンタ１０をＬスリープ状態４６に維持した状態で処理を実行する。状態変数が処理状態４２を示す状態変数に変更されると、Ｓ２０でＮＯと判断され、メインＣＰＵ１４は、パネル制御回路３６に表示パネル３８に電圧を印加するように指示する（Ｓ２２）。これにより、表示パネル３８はＯＮ状態になる。後述するように、メインＣＰＵ１４がスリープ状態である間、又は、移行期間５０中に、ＳＲＡＭ２０のパケット格納領域２１（図１参照）にパケットが格納されることがある。この場合、メインＣＰＵ１４は、パケット格納領域２１に格納されているパケット群をＤＲＡＭ２２に移動する（Ｓ４２参照）。メインＣＰＵ１４は、ＤＲＡＭ２２に格納されているネットワーク処理プログラムに従って、ＤＲＡＭ２２に移動されたパケットを処理する。メインＣＰＵ１４は、Ｓ２２を終えると、処理したパケットを削除して、Ｓ１２に戻る。
【００３６】
一方において、Ｓ２０でＹＥＳの場合、メインＣＰＵ１４は、後述する状態移行判断処理（図７参照）を実行することによって、Ｄスリープ状態４８に移行可能であるか否かを判断する（Ｓ２４）。Ｓ２４の処理が終了すると、メインＣＰＵ１４は、Ｓ２４の処理でＤスリープ状態４８に移行可能と判断されたか否かを判断する（Ｓ２６）。ここでＹＥＳの場合はＳ３０に進む。なお、Ｓ２６でＹＥＳの場合、メインＣＰＵ１４は、並行して実行されている後述の許可フラグ値決定処理（図６参照）を停止する。一方において、メインＣＰＵ１４は、Ｓ２６でＮＯの場合、Ｓ２８に進む。Ｓ２８では、メインＣＰＵ１４は、ＷＡＩＴ命令を実行する。ＷＡＩＴ命令が実行されると、メインＣＰＵ１４は、割り込み要求を受けるまで待機する実行停止状態となる。これにより、メインＣＰＵ１４の消費電力を低減させることができる。メインＣＰＵ１４は、Ｓ２８において割り込み要求を受けると、Ｓ２０に戻る。
【００３７】
Ｓ３０では、メインＣＰＵ１４は、ＬＡＮ４を介して受信する受信パケットを格納するＲＡＭを、ＤＲＡＭ２２からＳＲＡＭ２０に切り替える。より詳細には、メインＣＰＵ１４は、ＤＲＡＭ２２へのＤＭＡ（Direct Memory Access）転送を停止する。これにより、受信パケットがＤＲＡＭ２２に格納されることが禁止される。続いて、メインＣＰＵ１４は、ＳＲＡＭ２０へのＤＭＡ転送を可能な状態にする。このとき、メインＣＰＵ１４は、サブＣＰＵ２４がメインＣＰＵ１４に代理して処理を実行するために必要な情報（例えばプリンタ１０のＩＰアドレス等）を、ＳＲＡＭ２０に格納する。これにより、ＬＡＮ４を介して受信する受信パケットが、ＤＲＡＭ２２からＳＲＡＭ２０に切り替わる（図４の時点６５）。続いて、メインＣＰＵ１４は、サブＣＰＵ２４以外からの割り込み要求をマスク（禁止）する（Ｓ３４）。メインＣＰＵ１４は、ＳＲＡＭ２０に格納されているＬスリープ状態４６を示す状態変数を、Ｄスリープ状態４８を示す状態変数に変更する（Ｓ３６）。メインＣＰＵ１４は、サブＣＰＵ２４に、処理を実行するように、割り込み要求を発行する（Ｓ３８）。メインＣＰＵ１４は、ＷＡＩＴ命令を実行する（Ｓ４０）。ＷＡＩＴ命令が実行されると、メインＣＰＵ１４は、割り込み要求を受けるまで待機する実行停止状態となる。メインＣＰＵ１４は、Ｓ４０において割り込み要求を受ける（後述の図８のＳ１４０参照）と、Ｓ４２に進む。Ｓ４２では、メインＣＰＵ１４は、ＳＲＡＭ２０のパケット格納領域２１に格納されているパケット（即ちＤスリープ状態４８中又は移行期間５０中に受信されたパケット）を、ＤＲＡＭ２２に移動させる（図４の時点６３）。次いで、メインＣＰＵ１４は、Ｓ３４で実行したサブＣＰＵ２４に対する割り込み要求のマスクを解除して（Ｓ４４）、Ｓ２０に戻る。即ち、メインＣＰＵ１４は、割り込み要求を受けると、Ｓ２０の処理を実行する。この場合、メインＣＰＵ１４は、Ｓ２０でＹＥＳと判断する。
【００３８】
（メインＣＰＵでの許可フラグ値決定処理）
続いて、メインＣＰＵ１４が実行する許可フラグ値決定処理の内容を説明する。図6は、メインＣＰＵ１４によって実行される許可フラグ値決定処理のフローチャートを示す。許可フラグ値決定処理は、省電力処理（図５参照）と並行して実行される。なお、ＤＲＡＭ２２には、メインＣＰＵ１４が許可フラグ値決定処理を実行するために必要な情報である、Ｔｒｔｏｔａｌ、Ｔｒｎｕｍ、Ｔｒｎｕｍ１、Ｔｒｎｕｍ２、ｔ１及びｔ２が格納される。なお、メインＣＰＵ１４は、許可フラグ値決定処理を開始する際に、ＤＲＡＭ２２に格納されているＴｒｔｏｔａｌとＴｒｎｕｍとをリセット（Ｔｒｔｏｔａｌ＝Ｔｒｎｕｍ＝０）する。メインＣＰＵ１４は、Ｓ６２〜Ｓ７８の処理と、Ｓ８２〜Ｓ９４の処理と、を並行して実行する。
【００３９】
まず、Ｓ６２〜Ｓ７８の処理について説明する。まず、メインＣＰＵ１４は、時計機構で示される現在の時刻ｔ１をＤＲＡＭ２２に格納する（Ｓ６２）。メインＣＰＵ１４は、ＬＡＮ４を介してパケットを受信したか否かを監視し、パケットを受信するごとに、ＴｒｎｕｍとＴｒｔｏｔａｌとに所定値を加算する（Ｓ６４）。受信したパケットのサイズが１２８Ｂｙｔｅよりも小さい場合は、ＴｒｎｕｍとＴｒｔｏｔａｌとに１ずつ加算する。受信したパケットのサイズが１２８Ｂｙｔｅよりも大きい場合は、１２８Ｂｙｔｅごとに、ＴｒｎｕｍとＴｒｔｏｔａｌとに１ずつ加算する。即ち、２００Ｂｙｔｅのパケットを受信するとＴｒｎｕｍとＴｒｔｏｔａｌとに２ずつ加算し、３００Ｂｙｔｅのパケットを受信すると、ＴｒｎｕｍとＴｒｔｏｔａｌとに３ずつ加算する。メインＣＰＵ１４は、ＴｒｎｕｍがＮ以上（例えばＮ＝５０）になることを監視している（Ｓ６６）。Ｓ６６でＹＥＳの場合、メインＣＰＵ１４は、その時点での現在の時刻ｔ２をＤＲＡＭ２２に格納する（Ｓ６８）。続いて、メインＣＰＵ１４は、トラフィック量Ｔｒ１を算出する（Ｓ７０）。具体的には、メインＣＰＵ１４は、Ｔｒ１＝Ｔｒｎｕｍ／（ｔ２−ｔ１）を計算する。トラフィック量Ｔｒ１は、１個のパケットを１２８Ｂｙｔｅ以下とした場合に、単位時間（本実施例では１ｍｓ）当りの受信パケット数（即ち受信パケットのデータ量）である。メインＣＰＵ１４は、Ｔｒ１と、予め決められている閾値ＴＨ１と、を比較する（Ｓ７２）。「１個のパケットを１２８Ｂｙｔｅ以下とした場合」は、パケットのサイズが１２８Ｂｙｔｅ以下ではあれば１個のパケットであり、１２９Ｂｙｔｅ以上であれば、パケットのサイズを１２８Ｂｙｔｅで除算し、小数点以下を繰り上げた値をパケットの個数とする。例えば、パケットのサイズが２００Ｂｙｔｅである場合、このパケットは、２００／１２８＝１．５６・・となるため、２個のパケットとして取り扱われる。
【００４０】
閾値ＴＨ１について説明する。ＴＨ１は、ＴＨ１＝（ｎ／ＴＩＭＥ）×ｋで算出される。ここで、ｎは、１個のパケットを１２８Ｂｙｔｅ以下とした場合に、上記したパケット格納領域２１（図２参照）に格納可能なパケット数である。ＴＩＭＥは、ＤＲＡＭ２２がセルフリフレッシュモードから通常動作モードに移行する移行期間５０に掛かる時間（ｍｓ）である。ｋは、０＜ｋ＜１の任意の係数であり、設計者等によって適宜決定される。例えば、ｋは、パケット格納領域２１が使用環境によって変化する場合の誤差を考慮して、ｋ＝０．９としてもよい。
【００４１】
Ｓ７２でＮＯの場合、メインＣＰＵ１４は、ＳＲＡＭ２０に格納されている移行許可フラグをＯＮにする（Ｓ７４）。移行許可フラグがONであり、かつ、他の条件（図７参照）が満足される場合に、Ｄスリープ状態４８への移行が許可される。一方において、Ｓ７２でＹＥＳの場合、メインＣＰＵ１４は、移行許可フラグをＯＦＦにする（Ｓ７６）。これにより、Ｄスリープ状態４８への移行が禁止される。続いて、メインＣＰＵ１４は、Ｔｒｎｕｍとｔ１とｔ２をリセット（Ｔｒｎｕｍ＝ｔ１＝ｔ２＝０）して（Ｓ７８）、Ｓ６２に戻る。Ｓ７８では、Ｔｒｔｏｔａｌはリセットされない。即ち、Ｔｒｔｏｔａｌは、１個のパケットを１２８Ｂｙｔｅ以下とした場合に、本処理が開始されてから受信するパケットの総数（累積数）である。
【００４２】
次いで、Ｓ８２〜Ｓ９４の処理について説明する。まず、メインＣＰＵ１４は、Ｔｒｎｕｍ１とＴｒｎｕｍ２とをリセットする（Ｓ８２）。続いて、メインＣＰＵ１４は、メイン用パケット受信タイマをスタートする（Ｓ８４）。メインＣＰＵ１４は、メイン用パケット受信タイマがＴｍｓ（例えば１００ｍｓ）経過することを監視している（Ｓ８６）。Ｓ８６でＹＥＳの場合、メインＣＰＵ１４は、トラフィック量Ｔｒ２を算出する（Ｓ８８）。具体的には、メインＣＰＵ１４は、（Ｔｒｎｕｍ２−Ｔｒｎｕｍ１）／Ｔを計算する。ここで、Ｔｒｎｕｍ１は、サブ用パケット受信タイマでＴｍｓを計測する前のＴｒｔｏｔａｌの値であり、Ｔｒｎｕｍ２は、Ｔｍｓ経過後のＴｒｔｏｔａｌの値である。トラフィック量Ｔｒ２は、トラフィック量Ｔｒ１と同様に、１個のパケットを１２８Ｂｙｔｅ以下とした場合に、単位時間（本実施例では１ｍｓ）当りの受信パケット数（受信パケットのデータ量）である。ただし、２つのトラフィック量Ｔｒ１，Ｔｒ２を算出するための手法が異なる。１個のパケットを１２８Ｂｙｔｅ以下とした場合に、トラフィック量Ｔｒ１は、Ｎ個のパケットを受信する期間の長さから算出され、トラフィック量Ｔｒ２は、Ｔｍｓの間に受信するパケット数から算出される。メインＣＰＵ１４は、Ｔｒ２と予め決められている閾値ＴＨ１とを比較する（Ｓ９０）。Ｓ９０でＮＯの場合、メインＣＰＵ１４は、ＳＲＡＭ２０に格納されている移行許可フラグをＯＮにする（Ｓ９２）。移行許可フラグがONであり、かつ、他の条件（図７参照）が満足される場合に、Ｄスリープ状態４８への移行が許可される。一方において、Ｓ９０でＹＥＳの場合、メインＣＰＵ１４は、移行許可フラグをＯＦＦにする（Ｓ９４）。これにより、Ｄスリープ状態４８への移行が禁止される。Ｓ９２又はＳ９４の処理が終了すると、メイン用パケット受信タイマをリセットして、Ｓ８４に戻る。
【００４３】
（メインＣＰＵでの状態移行判断処理）
続いて、メインＣＰＵ１４が図５のＳ２４で実行する状態移行判断処理の内容を説明する。図７は、状態移行判断処理のフローチャートを示す。メインＣＰＵ１４は、外部装置６等にパケットを送信しているか否かを判断する（Ｓ１０２）。例えば、メインＣＰＵ１４が外部装置６等からのプリンタ１０のステータスの要求に対するレスポンスを返信している途中の場合、Ｓ１０２でＹＥＳと判断される。Ｓ１０２でＹＥＳの場合、Ｓ１１２に進む。一方において、Ｓ１０２でＮＯの場合、メインＣＰＵ１４は、メインＣＰＵ１４が処理すべきパケットがＤＲＡＭ２２に格納されているか否かを判断する（Ｓ１０４）。例えば、メインＣＰＵ１４が外部装置６等からプリンタ１０のステータスの要求を受信しており、未だ処理していない場合、Ｓ１０４でＹＥＳと判断される。Ｓ１０４でＹＥＳの場合にＳ１１２に進み、Ｓ１０４でＮＯの場合にＳ１０６に進む。Ｓ１０６では、メインＣＰＵ１４は、プリンタ１０に接続中の外部装置６等があるか否かを判断する。例えば、プリンタ１０がＷｅｂサーバ機能を有しており、外部装置６がプリンタ１０のＷｅｂサーバにＴＣＰ接続中である場合、Ｓ１０６でＹＥＳと判断される。Ｓ１０６でＹＥＳの場合にＳ１１２に進み、ＮＯの場合にＳ１０８に進む。Ｓ１０８では、メインＣＰＵ１４は、図６のＳ７４，Ｓ７６，Ｓ９２，Ｓ９４で設定される移行許可フラグがＯＮであるか否かを判断する。Ｓ１０８でＹＥＳの場合にＳ１１０に進み、ＮＯの場合にＳ１１２に進む。
【００４４】
Ｓ１１２では、メインＣＰＵ１４は、Ｄスリープ状態４８に移行不可であると判断する。この場合には、メインＣＰＵ１４は、上記した図５のＳ２６でＮＯと判断する。一方、Ｓ１１０では、メインＣＰＵ１４は、Ｄスリープ状態４８に移行可能であると判断する。この場合には、メインＣＰＵ１４は、上記した図５のＳ２６でＹＥＳと判断する。
【００４５】
（サブＣＰＵでの省電力処理）
続いて、サブＣＰＵ２４が実行する省電力処理の内容を説明する。図８は、サブＣＰＵ２４によって実行される省電力処理のフローチャートを示す。図８の処理は、プリンタ１０の電源がＯＮされたことをトリガとして開始される。サブＣＰＵ２４は、ＳＲＡＭ２０に格納されているプログラムを使用して、以下の処理を実行する。最初に、サブＣＰＵ２４は、ＷＡＩＴ命令を実行する（Ｓ１２２）。サブＣＰＵ２４は、割り込み要求を受けるまで待機する（即ち実行停止状態に移行する）。上述したように、メインＣＰＵ１４は、図５のＳ３８において、サブＣＰＵ２４に割り込み要求を発行する。これにより、サブＣＰＵ２４の実行停止状態が解除され、Ｓ１２４に進む。
【００４６】
Ｓ１２４では、サブＣＰＵ２４は、ＳＲＡＭ２０に格納されている状態変数がＤスリープ状態４８を示すか否かを判断する。Ｓ１２４でＮＯの場合、Ｓ１２２に戻る。即ち、サブＣＰＵ２４は、状態変数がＤスリープ状態４８以外を示す場合、実行停止状態で待機する。
【００４７】
Ｓ１２４でＹＥＳの場合、サブＣＰＵ２４は、メイン用クロック回路１６（図１参照）にクロック供給の停止を指示する（Ｓ１２６）。この結果、メインＣＰＵ１４は、非スリープ状態からスリープ状態に移行する。続いて、サブＣＰＵ２４は、ＤＲＡＭ２２を通常動作モードからセルフリフレッシュモードに移行させる（Ｓ１２８）（図４の時点６５）。ＤＲＡＭ２２がセルフリフレッシュモードである間は、ＤＲＡＭ２２にパケットを格納することができない（図４の期間６１，６６）。なお、ＤＲＡＭ２２がセルフリフレッシュモードである場合、通常動作モードと比べて、ＤＲＡＭ２２の消費電力は低い。次いで、サブＣＰＵ２４は、パケット受信処理を実行する（Ｓ１３０）。パケット受信処理が終了すると、サブＣＰＵ２４は、ＤＲＡＭ２２を通常動作モードに移行させる（Ｓ１３２）。Ｓ１３２を実行する期間が、上記の移行期間５０である。前述のように、移行期間５０中に受信されるパケットは、ＳＲＡＭ２０に順次格納される（図４の期間６２）。ＤＲＡＭ２２の通常動作モードへの移行が完了すると、サブＣＰＵ２４は、ＬＡＮ４を介して受信される受信パケットを格納するＲＡＭを、ＳＲＡＭ２０からＤＲＡＭ２２に切り替える（図４の時点６３）。より詳細には、サブＣＰＵ２４は、ＳＲＡＭ２０へのＤＭＡ（Direct Memory Access）転送を停止する。これにより、受信パケットをＳＲＡＭ２０に格納することが禁止される。続いて、サブＣＰＵ２４は、ＤＲＡＭ２２へのＤＭＡ転送を可能な状態にする。サブＣＰＵ２４は、以下のＳ１３６〜Ｓ１４０の処理が終了するまでの間、即ち、メインＣＰＵ１４のスリープ状態から非スリープ状態への移行が完了するまでの間にパケットを受信すると、ＤＲＡＭ２２にパケットを格納する。
【００４８】
次いで、サブＣＰＵ２４は、ＳＲＡＭ２０のＤスリープ状態４８を示す状態変数を、Ｌスリープ状態４６を示す状態変数に変更する（Ｓ１３６）。続いて、サブＣＰＵ２４は、メイン用クロック回路１６（図１参照）に、メインＣＰＵ１４にクロック供給を開始するよう指示する（Ｓ１３８）。この結果、メインＣＰＵ１４にクロックが供給され、スリープ状態から非スリープ状態に移行する。サブＣＰＵ２４は、メインＣＰＵ１４に割り込み要求を発行する（Ｓ１４０）。
【００４９】
（サブＣＰＵでのパケット受信処理）
続いて、サブＣＰＵ２４が図８のＳ１３０で実行するパケット受信処理の内容を説明する。図９は、サブＣＰＵ２４によって実行されるパケット受信処理のフローチャートを示す。なお、ＳＲＡＭ２０には、サブＣＰＵ２４がパケット受信処理を実行するために必要な情報である、Ｔｒｔｏｔａｌ’、Ｔｒｎｕｍ’、Ｔｒｎｕｍ１’、Ｔｒｎｕｍ２’、ｔ１’及びｔ２’が格納される。なお、サブＣＰＵ２４は、パケット受信処理を開始する際に、ＳＲＡＭ２０に格納されているＴｒｔｏｔａｌ’とＴｒｎｕｍ’とをリセット（Ｔｒｔｏｔａｌ’＝Ｔｒｎｕｍ’＝０）する。サブＣＰＵ２４は、Ｓ１６２〜Ｓ１８４の処理と、Ｓ１９２〜Ｓ２００の処理と、を並行して実行する。
【００５０】
まず、Ｓ１６２〜Ｓ１８４の処理について説明する。サブＣＰＵ２４は、パケットを受信するかを監視している（Ｓ１６２）。Ｓ１６２でＹＥＳの場合、サブＣＰＵ１６２は、ＳＲＡＭ２０に格納されているＴｒｎｕｍ’が０であるか否かを判断する（Ｓ１６４）。Ｓ１６４でＹＥＳの場合、サブＣＰＵ２４は、現在の時刻ｔ１’をＳＲＡＭ２０に格納して（Ｓ１６６）、Ｓ１６８に進む。一方、Ｓ１６４でＮＯの場合、Ｓ１６８に進む。Ｓ１６４でＮＯの場合には、既にＳＲＡＭ２０に現在の時刻ｔ１’が格納されている。Ｓ１６８では、サブＣＰＵ２４は、Ｔｒｎｕｍ’とＴｒｔｏｔａｌ’とに所定値を加算する。ここでは、図６のＳ６４と同様に、受信したパケットのサイズに応じた値だけ、Ｔｒｎｕｍ’とＴｒｔｏｔａｌ’とに加算する。サブＣＰＵ２４は、Ｔｒｎｕｍ’がＮ’以上（例えばＮ’＝５０）であるか否かを判断する（Ｓ１７０）。Ｓ１７０でＮＯの場合、Ｓ１８０に進む。一方において、Ｓ１７０でＹＥＳの場合、サブＣＰＵ２４は、その時点での現在の時刻ｔ２’をＳＲＡＭ２０に格納する（Ｓ１７２）。続いて、サブＣＰＵ２４は、トラフィック量Ｔｒ１’を算出する（Ｓ１７４）。具体的には、サブＣＰＵ２４は、Ｔｒ１’＝Ｔｒｎｕｍ’／（ｔ２’−ｔ１’）を計算する。トラフィック量Ｔｒ１’は、トラフィック量Ｔｒ１と同様に、１個のパケットを１２８Ｂｙｔｅ以下とした場合に、単位時間（本実施例では１ｍｓ）当りの受信パケット数（即ち受信パケットのデータ量）である。サブＣＰＵ２４は、Ｔｒ１’と予め決められている閾値ＴＨ２とを比較する（Ｓ１７６）。なお、本実施例では、閾値ＴＨ２は、図６のＳ７２及びＳ９０で利用される閾値ＴＨ１と同じ値である。
【００５１】
Ｓ１７６でＹＥＳの場合、処理を終了して、図８のＳ１３２に進む。一方において、Ｓ１７６でＮＯの場合、Ｔｒｎｕｍ’とｔ１’とｔ２’をリセット（Ｔｒｎｕｍ’＝ｔ１’＝ｔ２’＝０）して（Ｓ１７８）、Ｓ１８０に進む。Ｓ１８０では、サブＣＰＵ２４は、受信したパケットの送信先のＩＰアドレスが、プリンタ１０のＩＰアドレスと一致するか否かを判断する。Ｓ１８０でＮＯの場合、Ｓ１６２に戻る。Ｓ１８０でＹＥＳの場合、サブＣＰＵ２４は、代理応答処理が可能なパケットであるか否かを判断する（Ｓ１８２）。ＳＲＡＭ２０には、代理応答処理が可能であるプロトコルが格納されている。サブＣＰＵ２４は、受信したパケットのプロトコルがＳＲＡＭ２０に格納されているか否かを判断し、格納されている場合には、Ｓ１８２でＹＥＳと判断する。Ｓ１８２でＹＥＳの場合、サブＣＰＵ２４は、代理応答処理を実行して（Ｓ１８４）、Ｓ１６２に戻る。一方において、Ｓ１８２でＮＯの場合、処理を終了して、図８のＳ１３２に進む。
【００５２】
次いで、Ｓ１９２〜Ｓ２００の処理について説明する。まず、サブＣＰＵ２４は、ＳＲＡＭ２０に格納されているＴｒｎｕｍ１’とＴｒｎｕｍ２’とをリセット（Ｔｒｎｕｍ１’＝Ｔｒｎｕｍ２’＝０）する（Ｓ１９２）。続いて、サブＣＰＵ２４は、サブ用パケット受信タイマをスタートする（Ｓ１９４）。サブＣＰＵ２４は、サブ用パケット受信タイマがＴ’ｍｓ（例えば１００ｍｓ）経過することを監視している（Ｓ１９６）。Ｓ１９６でＹＥＳの場合、サブＰＵ２４は、トラフィック量Ｔｒ２’を算出する（Ｓ１９８）。具体的には、サブＣＰＵ２４は、（Ｔｒｎｕｍ２’−Ｔｒｎｕｍ１’）／Ｔ’を計算する。ここで、Ｔｒｎｕｍ１’は、サブ用パケット受信タイマでＴ’ｍｓを計測する前のＴｒｔｏｔａｌ’の値であり、Ｔｒｎｕｍ２’は、Ｔ’ｍｓ経過後のＴｒｔｏｔａｌ’の値である。トラフィック量Ｔｒ２’は、トラフィック量Ｔｒ１’と同様に、１個のパケットを１２８Ｂｙｔｅ以下とした場合に、単位時間（本実施例では１ｍｓ）当りの受信パケット数（受信パケットのデータ量）である。ただし、２つのトラフィック量Ｔｒ１’，Ｔｒ２’を算出するための手法が異なる。１個のパケットを１２８Ｂｙｔｅ以下とした場合に、トラフィック量Ｔｒ１’は、Ｎ’個のパケットを受信する期間の長さから算出され、トラフィック量Ｔｒ２’は、Ｔ’ｍｓの間に受信するパケット数から算出される。サブＣＰＵ２４は、Ｔｒ２’と予め決められている閾値ＴＨ２とを比較する（Ｓ２００）。Ｓ２０４でＮＯの場合、処理を終了して、図９のＳ１３２に進む。
【００５３】
上記したように、サブＣＰＵ２４は、以下の（１）から（３）のいずれかの場合に、図8のＳ１３２以下の処理、即ち、Ｄスリープ状態４８からＬスリープ状態４６への移行処理を開始する。
（１）Ｔｒ１’≧ＴＨ１（Ｓ１７６でＹＥＳ）の場合、
（２）Ｔｒ２’≧ＴＨ１（Ｓ２００でＹＥＳ）の場合、
（３）受信したパケットの送信先のＩＰアドレスがプリンタ１０のＩＰアドレスであり（Ｓ１８０でＹＥＳ）、かつ、サブＣＰＵ２４が、受信したパケットに対して代理応答処理を実行することができない（Ｓ１８２でＮＯ）場合（即ち受信したパケットがメインＣＰＵ１４が処理すべきパケットである場合）。
【００５４】
以上説明したように、このプリンタ１０では、メインＣＰＵ１４が非スリープ状態である場合に、メインＣＰＵ１４は、トラフィック量Ｔｒ１とＴｒ２とを算出する（図６のＳ７０、Ｓ８８）。これらのトラフィック量Ｔｒ１とＴｒ２の少なくとも一方が閾値ＴＨ１よりも大きい場合に、メインＣＰＵ１４は、プリンタ１０がＤスリープ状態４８に移行することを禁止する。
ＤＲＡＭ２２がセルフリフレッシュモードから通常動作モードに移行する移行期間５０中に受信したパケットは、ＳＲＡＭ２０のパケット格納領域２１に格納される（図４参照）。パケット格納領域２１は、１個のパケットを１２８Ｂｙｔｅ以下とした場合に、ｎ個のパケットを格納することができる。言い換えれば、移行期間５０中に受信するパケット数がｎ個を超えると、パケット格納領域２１内に格納することができなくなる。従って、仮に、１ｍｓ当たりにプリンタ１０が受信するパケット数が（ｎ／ＴＩＭＥ（移行期間５０に必要な時間））個を超えているときに、Ｄスリープ状態４８からＬスリープ状態４６に移行すべき事態（即ち、メインＣＰＵ１４が処理すべきパケットを受信する事態）が発生すると、移行期間５０中に受信するパケットの全てをパケット格納領域２１に格納することができなくなってしまう。本実施例では、（ｎ／ＴＩＭＥ）×ｋ（０＜ｋ＜１）を、図６のＳ７２及びＳ９０の判断の閾値ＴＨ１として利用している。トラフィック量Ｔｒ１又はＴｒ２が閾値ＴＨ１よりも大きい場合に、メインＣＰＵ１４をスリープ状態に移行させない。即ち、仮に、現在のトラフィック量で移行期間５０中にパケットを受信すると、パケットを格納しきれなくなる状況では、メインＣＰＵ１４をスリープ状態に移行させない。このために、パケットをパケット格納領域２１に格納することができない事態が発生するのを抑制することができ、この結果、移行期間５０中に受信するパケットを、メインＣＰＵ１４が確実に処理することができる。
【００５５】
また、トラフィック量Ｔｒ１とＴｒ２の少なくとも一方が閾値ＴＨ１よりも大きい場合に、メインＣＰＵ１４がスリープ状態に移行されると、サブＣＰＵ２４でのパケット受信処理（図９参照）において、トラフィック量Ｔｒ１’又はＴｒ２’が閾値ＴＨ２（＝ＴＨ１）よりも大きいと判断され（Ｓ１７６又はＳ２００でＹＥＳ）、メインＣＰＵ１４が非スリープ状態からスリープ状態に移行された後、すぐに、非スリープ状態に移行しなければならなくなる。このプリンタ１０では、トラフィック量Ｔｒ１とＴｒ２の少なくとも一方が閾値ＴＨ１よりも大きい場合に、メインＣＰＵ１４は、プリンタ１０がＤスリープ状態４８に移行することを禁止することによって、上記した事態を防止することができる。
【００５６】
このプリンタ１０では、メインＣＰＵ１４がスリープ状態である場合に、メインＣＰＵ１４が処理すべきパケットを受信しなくても、トラフィック量Ｔｒ１’とＴｒ２’の少なくとも一方が閾値ＴＨ２よりも大きい場合（図９のＳ１７６でＹＥＳ、又は、Ｓ２００でＹＥＳ）に、メインＣＰＵ１４をスリープ状態から非スリープ状態に移行させる（図８のＳ１３８）。トラフィック量が小さい場合と比べると、トラフィック量が大きい場合は、メインＣＰＵ１４が処理すべきパケットを受信する可能性が高い。サブＣＰＵ２４は、メインＣＰＵ１４が処理すべきパケットを受信する前に、トラフィック量Ｔｒ１’とＴｒ２’の少なくとも一方が閾値ＴＨ２よりも大きくなると、メインＣＰＵ１４をスリープ状態から非スリープ状態に移行させる処理を開始することができる。これにより、仮に、メインＣＰＵ１４の移行処理を開始した後にメインＣＰＵ１４が処理すべきパケットを受信した場合に、メインＣＰＵ１４が処理すべきパケットに対する処理を迅速に開始することができる。
【００５７】
また、プリンタ１０がＤスリープ状態４８である場合に、サブＣＰＵ２４は、トラフィック量Ｔｒ１’とＴｒ２’とを算出する（図１０のＳ１７４、Ｓ１９８）。これらのトラフィック量Ｔｒ１’とＴｒ２’の少なくとも一方が閾値ＴＨ２よりも大きい場合に、サブＣＰＵ２４は、プリンタ１０をＤスリープ状態４８からＬスリープ状態４６に移行する。閾値ＴＨ２は、（ｎ／ＴＩＭＥ）に１未満のｋを乗算することによって得られるために、（ｎ／ＴＩＭＥ）よりも小さい値である。従って、本実施例では、トラフィック量Ｔｒ１’とＴｒ２’の少なくとも一方が（ｎ／ＴＩＭＥ）を超える前に、プリンタ１０をＤスリープ状態４８からＬスリープ状態４６に移行させる。これにより、トラフィック量Ｔｒ１’とＴｒ２’の少なくとも一方が（ｎ／ＴＩＭＥ）を超えた状態で移行期間５０になることを抑制することができ、パケットをパケット格納領域２１に格納することができない事態が発生するのを抑制することができる。
【００５８】
なお、以上の説明から明らかなように、本実施例のプリンタ１０が、本発明における通信装置に対応する。メインＣＰＵ１４，サブＣＰＵ２４が、それぞれ、第１処理部，第２処理部に対応する。ＳＲＡＭ２０，ＤＲＡＭ２２が、それぞれ、第２メモリ、第１メモリに対応する。ＳＲＡＭ２０内のパケット格納領域２１が、データ記憶領域に対応する。本実施例のトラフィック量Ｔｒ１’とＴｒ２’が、第１のトラフィック量に対応し、トラフィック量Ｔｒ１とＴｒ２が、第２のトラフィック量に対応する。本実施例の閾値ＴＨ１が第２の閾値に対応し、閾値ＴＨ２が第１の閾値に対応する。また、本実施例のパケット格納領域２１のｎ個の領域のうちの１つの領域に格納されるパケットが、単位データに対応する。
【００５９】
（変形例）
（１）本実施例では、閾値ＴＨ１とＴＨ２が（ｎ／ＴＩＭＥ）×ｋで算出される固定値である。しかしながら、閾値ＴＨ１とＴＨ２は可変値であってもよい。例えば、サブＣＰＵ２４は、移行期間５０の時間（ｍｓ）であるＴＩＭＥを毎回測定してＳＲＡＭ２０に格納しておき、所定のタイミング（例えば電源ＯＮのタイミング）において、過去の複数回の移行期間５０の時間（ｍｓ）の平均値をＴＩＭＥaveとして算出してもよい。この場合、ＴＨ１＝（ｎ／ＴＩＭＥave）×ｋが可変値になる。
【００６０】
（２）本実施例では、トラフィック量Ｔｒ１，Ｔｒ２と比較する閾値ＴＨ１（図６のＳ７２，Ｓ９０の判断処理で利用される閾値）と、トラフィック量Ｔｒ１’，Ｔｒ２’と比較する閾値ＴＨ２（図９のＳ１７６，Ｓ２００の判断処理で利用される閾値）とが、同じ値である。しかしながら、閾値ＴＨ１とＴＨ２とは、異なる値であってもよい。また、閾値ＴＨ１は、判断処理ごとに異なっていてもよく、閾値ＴＨ２も、判断処理ごとに異なっていてもよい。なお、Ｔｒ１と比較する閾値は、Ｔｒ１’と比較する閾値以下であってもよく、Ｔｒ２と比較する閾値は、Ｔｒ２’と比較する閾値以下であってもよい。
【００６１】
（３）本実施例では、メインＣＰＵ１４は、許可フラグ値決定処理（図６参照）として、Ｓ６２〜Ｓ７８の処理と、Ｓ８２〜Ｓ９４の処理との２つの処理を並行して実行している。しかしながら、メインＣＰＵ１４は、いずれか一方の処理のみを実行してもよい。Ｓ８２〜Ｓ９４の処理のみを実行する場合、メインＣＰＵ１４は、処理を開始する際に、受信パケット数Ｔｒｔｏｔａｌのカウントを開始する。サブＣＰＵ２４も同様に、Ｓ１６２〜Ｓ１７８の処理と、Ｓ１９２〜Ｓ２００の処理のいずれか一方の処理のみを実行してもよい。Ｓ１９２〜Ｓ２００の処理のみを実行する場合、Ｓ２００でＮＯの場合に、Ｓ１８０からＳ１８４の処理を実行する。
【００６２】
（４）本実施例では、トラフィック量Ｔｒ１，Ｔｒ２，Ｔｒ１’，Ｔｒ２’は、プリンタ１０が受信するパケットの個数を用いて算出する。しかしながら、トラフィック量Ｔｒ１，Ｔｒ２，Ｔｒ１’，Ｔｒ２’は、ＬＡＮ４を介して通信されるパケットの個数、即ち、プリンタ１０が受信するパケットの個数と、ＬＡＮ４に接続された他のプリンタが受信するパケットの個数と、の和を用いて算出してもよい。
【００６３】
（５）本実施例では、メインＣＰＵ１４がスリープ状態から非スリープ状態に移行すると、メインＣＰＵ１４は、ＳＲＡＭ２０のパケット格納領域２１に格納されているパケット（移行期間５０中に受信されたパケット）を、ＤＲＡＭ２２に移動させた後（図４の時点６３、図５のＳ４２）で、ＤＲＡＭ２２に移動されたパケットを処理する。しかしながら、メインＣＰＵ１４は、非スリープ状態に移行した後に、パケット格納領域２１に格納されているパケットを、ＤＲＡＭ２２に移動させずに処理してもよい。即ち、メインＣＰＵ１４は、非スリープ状態に移行した後に、移行期間５０中にパケット格納領域２１に格納されたパケットを処理する構成であればよい。
【００６４】
（６）本実施例では、プリンタ１０について説明したが、本明細書に開示された技術は、プリンタ１０以外の通信装置、例えば、サーバ、スキャナ、多機能機等に利用することができる。
【００６５】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【００６６】
４：ＬＡＮ、６：外部装置、１０：プリンタ、１２：制御部、１６：メイン用クロック回路、２０：ＳＲＡＭ、２１：パケット格納領域、２２：ＤＲＡＭ、２６：サブ用クロック回路
【図１】
0005381392.tif 000002
【図２】
0005381392.tif 000003
【図３】
0005381392.tif 000004
【図４】
0005381392.tif 000005
【図５】
0005381392.tif 000006
【図６】
0005381392.tif 000007
【図７】
0005381392.tif 000008
【図８】
0005381392.tif 000009
【図９】
0005381392.tif 000010