以下、本発明の実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省く。
(はじめに)
機器が消費するエネルギーを低減させる、いわゆる省エネのための電源制御方法が提案されている。CPUへの給電がオフとなるS2、S3、S4は、CPUへの給電がオンである稼働状態S0と比較すると電力を節約できる上に、起動中のプログラムなどを終了させることなく素早い復帰が可能となるといった利点がある。
CPUへの給電がオフとなるS2、S3、S4のうち、S2はCPUの電力供給がオフとなるモード、S3はメモリ以外の電力供給がオフとなるモード(いわゆる、システムサスペンド)である。S4はメモリ内のデータをHDD(Hard Disk Drive)に保存し、すべての電力供給を停止するモード(いわゆる、ハイバーネーション)である。S2、S3、S4は、Windows(登録商標)のOS搭載PCの規格であるACPI(Advanced Power&Configuration Interface)によるシステムの省エネ状態の定義の一つである。以下では、CPUの電力供給がオフとなるS2、S3、S4を総称して「スリープモード」という。なお、S0は、すべての電力供給がオンされている運用状態(稼働状態)である。S1は、低消費電力状態であるが、CPUには電力が供給されている状態である。S5は、OSをシャットダウンしてすべての電力供給を停止するモードである。
機器を省エネ状態にしたときの省エネ効果は、復帰時間と背反の関係にある。S4は、S3よりも電力を節約する効果は高いが、復帰時に保存したデータをHDDから読み込むのに時間が掛かるため、S3よりも復帰までに時間がかかる。S3は、メインメモリの内容をそのままバックアップしておき、そのための電源だけをオン、それ以外の電源をオフして実現される状態であり、S4やS5に較べ、高速復帰と省エネ効果のバランスのとれた省エネ状態となっている。
ところで、USBホスト機器(例えば、PC等)とUSB機器(例えば、マウス等)とがUSBインタフェースを介して接続されている場合の電源制御の一例を挙げて説明する。S0(稼働状態)からS3(システムサスペンド)へ移行中にUSB機器からUSBホスト機器にリジューム信号が通知されると、ドライバスタックの動作が部分的に停止された状態にあるため、USBホスト機器はリジューム信号を正常に制御できないことがある。その結果、リジューム信号の通知が中途半端にUSBホスト機器に受け取られた状態となって不具合が生じることがある。
この不具合は、再操作で救済されるものや、システムがハングし、USBホスト機器の電源を再投入しなければならないもの等様々である。特にUSBホスト機器の電源の再投入が必要になる不具合が生じると、S3状態で処理途中のデータが失われてしまう恐れがある。
これらの不具合に対する対処法として、S0からS3への移行が開始されてから一定期間の操作を控えるというような操作制限事項をマニュアルに記載することも考えられる。しかしながら、この種の操作制限事項を操作者に徹底させるには困難がある。
上記不具合を解消するために、S3への移行時には、USBホスト機器がS3への移行を完了するまでUSB機器側でリジューム信号の発行を一律に遅らせることが考えられる。しかしながら、リモートウェイクアップのリジューム信号の反応を一律に遅らせてしまうことは、システム全体のスループットを低下させてしまうことになるため望ましくない。従って、リモートウェイクアップのリジューム信号の発行を、一律ではなく、USBホスト機器の状態に応じて遅らせることが望ましい。
しかしながら、現状のUSBの仕様では、リジューム信号の発行タイミングを遅らせる仕組みは備えていない。そこで、以下の本発明にかかる実施形態では、USB機器側でリジューム信号のタイミングを、USBホスト機器毎に機器の状態に応じて区別する方法を提供する。
[USB機器側コントローラのハードウェア構成例]
まず、本発明の一実施形態に係るUSB機器側のコントローラ1について、図1を参照しながら説明する。図1は、一実施形態にかかるUSB機器側のコントローラ1のハードウェア構成の一例を示す。
USB機器側のコントローラ1は、MCU(Micro Controller Unit)9、ROM(Read Only Memory)10、RAM(Random Access Memory)11及SRAM(Static Random Access Memory)12を有し、それぞれがバスで相互に接続されている。
コントローラ1はまた、P3.0〜P3.4の5ビットのGPIO(General Purpose Input/Output)、RTS/CTS/DTR/DSR他の信号の、シリアルの入出力インタフェース信号線を備えている。それらのインタフェースはプリンタやモデムなど、様々なメカや電気回路(省略)と内部的に接続され、USB機器2(図3を参照)を構成する。
MCU9は、CPU(Central Processing Unit)と同様の機能を有し、USB機器2における主な処理回路である。USB機器2は、MCU9を中心として、USBのデバイス側インタフェースを備えた構成となっている。MCU9には、割り込みコントローラ、IRCが接続され、チップ内で発生する様々な割り込みをMCU9に通知する。MCU9は、IRCからの入力の他、外部割り込み、タイマ割り込みを受ける。
ROM10は、不揮発性メモリであり、MCU9によって実行されるプログラムを格納する。ROM10が格納するプログラムには、「ブートコード」と呼ばれる、PCのBIOSに相当する機能を受け持つプログラムが含まれる。
RAM11は、揮発性メモリであり、RAM11にはROM10のブートコードによってチップ外付EEPROMに格納したファームウェアがロードされ、運用時には高速なROMとして働くプログラムメモリである。RAM11はROM10の代替としてEEPROMのファームウェアのロードの後はリードオンリーになる。
SRAM12は、ファームウェアが必要に応じて随時使用する読み書き可能なメモリで、汎用メモリの役割を担う。
さらに、コントローラ1は、タイマー15、Port3のレジスタ16、I2Cコントローラ17、DMA(DMA−1、DMA−3)18、UART(UART−1)19等のUSB機器2の外部回路と接続されている。
タイマー15は、所定の時間を計時する。I2Cコントローラ17は、チップ外付EEPROMと接続され、MCU9及びEEPROM間のインタフェースとして機能する。MCU9は、I2Cコントローラ17を通じて、EEPROMに格納されたファームウェアをRAM11にロードし、またファームウェアの更新の際には、USBホスト機器(後述されるPC)からのデータをEEPROMに書き込む。チップ外付EEPROMはフラッシュROMであり、MCU9の直接動作を想定したものでは無く、PCのファイルに相当する書き込み可能不揮発性メモリである。
Port3のレジスタ16、UART(UART−1)19は、メカ部分とのインタフェースを担う。Port3のレジスタ16、UART(UART−1)19は、MCU9からの指示を受け、GPIOの信号線、UART(UART−1)19のシリアルインタフェースの信号線を通じてUSB機器2に内蔵するメカや電気回路とのインタフェースを取り持つ。
USBシルアルインタフェースエンジン20は、UART(Universal Asynchronous Receiver Transmitter)に相当し、USBホスト機器とのインタフェースである。USB機器2は、USBシルアルインタフェースエンジン20をインタフェースとしてUSBバスを介してUSBホスト機器と接続される。
USBバスには、信号線が2本(D+、D−)ある。D+、D−でやりとりされる信号は、パルス信号であり、互いに極性が背反の信号である。システムサスペンドの状態(つまり、S3)では、例えばD+がHigh、D−がLowになる。
DMA(DMA−1、DMA−3)18はDMAコントローラである。DMA−1はUSBシルアルインタフェースエンジン20及びSRAM12間のDMA(Direct Memory Access)を行うのに使われる。DMA−3はSRAM12及びUART19間のDMAを行うのに使われる。DMAは、メモリとメモリ、又はメモリとI/Oデバイス間の直接のデータ転送に使われる。UART19は、調歩同期方式によるシリアル信号からパラレル信号への変換、その逆方向の変換を行う。
[PCのハードウェア構成例]
次に、本発明の一実施形態にかかる図3のPC3のハードウェア構成について、図2を参照しながら説明する。図2は、一実施形態にかかるPC3のハードウェア構成の一例を示す。
PC3は、USBインタフェースを介してUSB機器2と通信可能な情報処理装置の一例である。つまり、本実施形態にかかる情報処理装置は、USBインタフェースを介してUSB機器と通信可能な機器であれば、PC3の形態に限らず、例えば、タブレット型の機器等であってもよい。
本実施形態にかかるPC3は、CPU(Central Processing Unit)101、MainMemory102、HDD(Hard Disk Drive)103及びSlim−ODD(Optical Disk Drive)104を有している。また、PC3は、BIOS(Basic Input/Output System)109、HDMI(登録商標)(High Definition Multimedia Interface)110及びDVI(Digital Visual Interface)111のインタフェースコネクタを有している。さらに、PC3は、USBインタフェースのUSBCN12、USBCN113のコネクタ及びPowerSupplyUnit114を有している。
CPU101は、PC3における主な処理回路である。MainMamory102は、OSやアプリケーションプログラムを格納し実行するメインメモリである。HDD103及びSlim−ODD104は、メインメモリにロードされるOSやアプリケーションプログラムを格納する補助記憶装置である。SuperIO108は入出力インターフェイス回路、BIOS109はシステム立ち上げ時点の初期化処理、OSのロードを行うファームウェアの格納された不揮発性メモリである。
HDMI110は、デジタル映像や音声を伝送させるためのインタフェースである。DVI111は、例えば、モニタと接続されてもよく、PC3で保存された画像データ等をモニタに出力するインタフェースである。USBCN112、113は、PC3が有するUSBコネクタに接続されたUSB機器2の制御回路である。USBCN112、113は、USB機器2をPC3に接続するためのUSBインタフェースである。PowerSupplyUnit114は、CPU101等の各部に電力を供給する電源である。
[USB機器の構成例]
USB機器2の構成例を図3に示す。図3では、USB機器2の一例としてUSB電気スタンドを示している。しかしながら、USB機器2は、これに限らず、マウスやキーボード、その他の機器であってもよい。
USB機器2は、図1に示したコントローラ1、スイッチSW33及びランプLP34を有する。USB機器2には、コントローラ1のチップが内蔵され、コントローラ1による制御に基づき、LP34のオン及びオフの制御が行われる。またUSB機器2のSW33は、消灯されたLP34を点灯する際、ユーザーがオンするために使われる。
LP34には、コントローラ1のチップのGPIO、P3.0の端子(図1を参照)に接続され、またSW33は、コントローラ1のチップのWAKEUP#(ウェイクアップ)の端子に接続されている。
USB機器2は、ホスト機器(PC3)からのサスペンドのUSBバスの状態(3ms以上のUSBバスにパケットの何も出力されないバスアイドル状態)と連動してサスペンド状態に移行する。またUSB機器2は、USBバスからのリジューム信号によるリジュームの指示と連動してサスペンド状態から復帰する。
コントローラ1には、リモートウェイクアップの機能がある。リモートウェイクアップの指示はコントローラ1に対して、図1に示すWAKEUP#の信号線に与えられるリジューム信号によって実現される。リモートウェイクアップの指示を受けたコントローラ1は、リジューム信号をUSBインタフェースに出力し、PC3に通知する。
[リジューム信号の発行タイミング]
次に、図4を参照しながら、図3に示したUSB機器2から発行されるリジューム信号(図1に示すWAKEUP#の信号線に与えられるリジューム信号)の発行タイミングについて説明する。
USBホスト機器側であるPC3側のアプリケーションプログラムが起動されることでUSB機器2に対してUSBインタフェース(USBバス)を通じてLP34を点灯するリクエストが発せられる。これに応じて、USB機器2は自動的にLP34を点灯する(図4の(1)参照)。
その後一定期間を経て、USB機器2は、PC3からのサスペンドの指示(つまり、USBバスの3ms以上のアイドル状態を検出)を受け、LP34を消灯する(図4の(3)参照)。LP34の消灯(3)は、USBバスのサスペンド状態(J状態)で指示されているため、コントローラ1はサスペンド状態になる。
また、PC3は、LP34の消灯(3)の指示に先立ってUSB機器2からのリジューム信号を受けるために、リジューム信号の発行を許可する、リモートウェイクアップの指示を行う(図4の(2)参照)。
LP34の消灯後、操作者は、再度LP34を点灯したいときにはSW33を押下(オン)して再点灯を要求する。SW33のオンは、リジューム信号としてコントローラ1のWAKEUP#の信号線に与えられる。コントローラ1は、この信号を受けてサスペンド状態から復帰し、USBインタフェース(USBバス)にリジューム信号を発行し(図4の(4)参照)、再点灯を要求する。これにより、USBバスはアイドル状態から復帰し(K状態)、要求を受けたPC3は、LP34を点灯するリクエストを発行し、LP34の点灯を指示する。USB機器2は、このリクエストを受け、LP34を再点灯する(図4の(5)参照)。
この一連のシーケンスで不具合が生じるおそれがあるのは、図4の(4)にて示されるUSB機器2が出力するリジューム信号の発行タイミングである。USB機器2はPC3からリモートウェイクアップの指示(2)を受けた後、PC3側がリジューム信号を正しく受け取られる好適なタイミングが判らない。このため、USB機器2はPC3からリモートウェイクアップを指示するリクエスト(2)を受けた直後にSW33がオンされた場合には、コントローラ1は、図4の点線の矢印で示したタイミングで、すぐさまリジューム信号(4)'を発行してしまう。これにより、PC3側がそのジューム信号(4)'を受け取れないという不具合が生じる場合がある。
これに対して、後述されるように、本実施形態では、サスペンドの後、USBホスト機器であるPC3にとって適正なリジューム信号の待ち時間(以下では、「遅れ時間」ともいう)をPC3側から指示し、この指示を受けたUSB機器2は、指定された遅れ時間経過後リジューム信号を発行する。これにより、PC3側は正しくリジューム信号を受け取ることができ、PC3側のリジューム動作を不具合なく行うことが出来る。
[USB機器及びPCの機能構成]
次に、本実施形態に係るUSB機器2及びPC3の機能構成について、図5を参照しながら説明する。図5は、一実施形態に係るUSB機器2及びPC3の機能構成の一例を示す。なお、図5は、USB機器制御部分に着目した機能構成を示し、その物理構成については、図2(PC3)及び図3(USB機器2)に示されている。
USB機器2は、受信部201、送信部202、スイッチ(SW)33及びランプ(LP)34を有する。受信部201は、リモートウェイクアップを指示するリクエストをPC3から受信する。そのリクエストには、遅れ時間の情報が付加されている。遅れ時間は、リジューム信号の発行を遅らせるための時間であってUSB機器2と通信するPC3の状態に応じた時間である。
送信部202は、PC3からのリクエストに応じて遅れ時間分遅らせてリジューム信号をPC3に送信する。
スイッチ(SW)33は、操作者によりオン及びオフに設定される。スイッチ33がオンに設定されるとLP34は点灯し、オフに設定されるとLP34は消灯する。
PC3は、電力供給部301、記憶部302、受信部303、リクエスト発行部304及び送信部306を有する。電力供給部301は、スリープモードへ移行した場合、給電を省エネモードに制御する。例えば、S2へ移行した場合、電力供給部301は、図2のCPU101の電力供給をオフに制御する。例えば、S3へ移行した場合、電力供給部301は、メモリ以外の電力供給をオフに制御する。例えば、S4へ移行した場合、メモリ内のデータを図2のHDD103に保存した後、電力供給部301はすべての電力供給を停止する
記憶部302は、メモリ内のデータを保存するHDD103等の記憶領域である。受信部303は、USB機器2により発行されたリジューム信号やその他の情報を受信する。
リクエスト発行部304は、スリープモードへの移行時に、リジューム信号の発行を遅らせるための時間であってPC3の状態に応じた遅れ時間の情報をリモートウェイクアップを指示するリクエストに付加し、所定のタイミングに発行する。例えば、PC3が稼働モードS0からスリープモードS2、S3、S4のいずれかへ移行する場合、リクエスト発行部304は、PC3の状態に応じて遅れ時間を特定する。例えば、記憶部302には、PC3の状態がS0からS2への移行のときの遅れ時間T2、S3への移行のときの遅れ時間T3、S4への移行のときの遅れ時間T4が記憶されているとする。この場合、リクエスト発行部304は、記憶部302に記憶された遅れ時間T2,T3,T4からPC3の状態に応じた遅れ時間を選択する。遅れ時間T2には、S0からS2への移行時間よりもαだけ長い時間が設定される。遅れ時間T3には、S0からS3への移行時間よりもαだけ長い時間が設定される。遅れ時間T4には、S0からS4への移行時間よりもαだけ長い時間が設定される。αは、リモートウェイクアップを指示するリクエストの発行タイミングに応じて設定される。
遅れ時間は、省エネ効果と背反の関係にある、遅れ時間は、モード移行の所要時間に応分な時間を指定する。遅れ時間T2は、モード移行は短時間であるが省エネ効果は低いスリープモードS2の装置状態のときに設定される時間である。遅れ時間T4は、モード移行にデータセーブが必要であり時間が掛かるが省エネ効果は高いスリープモードS4の装置状態のときに設定される時間である。遅れ時間T3は、スリープモードS2、S4の中間のモード移行時間と省エネ効果を有するS3の装置状態のときに設定される時間である。よって、モード移行時間S2<S3<S4に比例してT2<T3<T4となる段階的な遅れ時間が設定されてもよい。
但し、リクエスト発行部304は、PC3の状態の全てに対して細かな遅れ時間を設定する制御に限らず、例えばS2及びS3の遅延時間は同じ値に設定し、S4の遅延時間はS2及びS3の遅延時間と異なる値に設定してもよい。リクエスト発行部304は、USBインタフェースの仕様等を考慮して遅延時間を設定することもできる。
この結果、リジューム信号は、リモートウェイクアップを指示するリクエストに対して、そのリクエストに付加された遅れ時間だけ遅らせて発行される。なお、リジューム信号の発行を遅らせる必要がない場合には、遅延時間を「0」に設定してもよい。つまり、遅れ時間にはPC3の状態に応じて0以上の値が設定され得る。また、遅れ時間は、リジューム信号の発行を遅らせるための時間であるが、遅れ時間が「0」に設定された場合、実質的にはリジューム信号の発行を遅らせる制御は行われない。
このようにして、リクエスト発行部304は、スリープモードへの移行時に、PC3の状態に応じた遅れ時間の情報をリモートウェイクアップを指示するリクエストに付加し、所定のタイミングに発行する。
リクエスト発行部304がリモートウェイクアップを指示するリクエストを発行するタイミングとしては、例えば、PC3がUSBバスをアイドル状態とする直前が挙げられる。
送信部306は、発行されたリクエストをUSB機器2に送信する。
(S3移行時のUSBバス状態)
次に、S3移行時のUSBバス状態について説明する。図6は、S3移行時のサスペンド及びリジュームのバス状態とホスト状態を示すPC3がS0からS3に移行するときの動作を示す。PC3(図6のホスト)は、USB機器2に対して「SetFeature/RemoteWakeUp」のリクエストを発行する。「SetFeature/RemoteWakeUp」のリクエストは、リモートウェイクアップのイネーブルを指示するリクエストである。リクエストを発行後、PC3は、USBバスをアイドル(バスにパケットが何も出力されていない状態)とし、S3に移行する。
USB機器2は、バスの一定期間以上のアイドルによってサスペンドの指示を検出し、サスペンド状態になる。そしてサスペンド状態では、USB機器2は、USB機器2の操作(例えば、マウスボタンのクリックやSWのオンなど)を検出するとリジューム信号を発行し、PC3に通知する。
ここで、リジューム信号がアサート(発行)されるポイントが、図6の右側(1)に示す様に、PC3の状態が完全にS3に移行した後であれば、PC3はリジューム信号を受け、PC3自身もリジューム信号を、今度はUSB機器2に向けて折り返し発行する。そして、PC3は、S0の運用状態に戻り、「ClearFeature/RemoteWakeUp」のリクエストを発行する。「ClearFeature/RemoteWakeUp」のリクエストは、リモートウェイクアップをディセーブルを指示するリクエストである。
しかしながら、図6の左側(2)に示す様にPC3がまだS3への移行過程にある状態でリジューム信号がアサート(発行)されると、不具合が生じることがある。
そこで、本実施形態では、リジューム信号の発行タイミングを、上記不具合の起こらない図6(A)や(B)に示した「RemoteWakeUp_A」、「RemoteWakeUp_B」のリクエストに対応した位置へ意図的に遅らせる。これにより、上記移行期間中にUSB機器2がリジューム信号をアサートしないようにすることができる。なお、S0→S3、S3→S0の移行時の斜線は論理的、物理的な移行過程を概念的に示したもので、電源状態だけを示したものではない。
(セレクティブサスペンド移行時のUSBバス状態)
次に、セレクティブサスペンド移行時のUSBバス状態について説明する。図7は、リモートウェイクアップがセレクティブサスペンドのためにイネーブルされた状態を示す。このタイムチャートは、PC3の状態(ホスト状態)がS0を保持している以外は図6の図と外面的に変わることは無い。つまり、PC3は、USB機器2に対してはS3のときと同様にリモートウェイクアップのイネーブルを指示するSetFeature/RemoteWakeUpのリクエストを発行する。また、PC3は、リモートウェイクアップのディセーブルを指示するClearFeature/RemoteWakeUpのリクエストを発行する。
セレクティブサスペンドとは、SO状態でUSBホスト機器に接続されたUSB機器毎に個別にサスペンドとして省エネを図るホスト側の仕組みを指す。
現実にUSB機器2が省エネ状態となるのは、USBバスの3ms以上のアイドルを検出してからであるが、図6、図7では、このタイミングの詳細を省略している。またUSBバスのアイドル状態とは、USBバスにパケットが全く出力されていない状態を指すが、現実のUSBバス状態はUSB機器のスピードによって異なり、図7を含め、本実施形態のUSBバス状態はUSBの、フルスピードのバス状態で示している。
図8〜図11は、本実施形態の一例であり、PC3がリクエストによってリジューム信号のアサートタイミングを通知し、USB機器2がそれに応じてリジューム信号を遅れ時間だけ遅らせて発行する様子を示す。なお、図8〜図11に示される「遅れ時間」は、USB機器2がリジューム信号を発行するまでに確保される「時間」の一例である。
(第一の例)
図8の例では、SetFeature/RemoteWakeUp_A、SetFeature/RemoteWakeUp_Bのリクエストの違いによるリジューム信号のアサート(発行)タイミングの違いを示す。
一例としては、リクエスト発行部304は、S2への移行を想定して、SetFeature/RemoteWakeUp_Aのリクエストを発行し、S3への移行を想定して、SetFeature/RemoteWakeUp_Bのリクエストを発行する場合が挙げられる。
その際、リクエスト発行部304は、SetFeature/RemoteWakeUp_Aのリクエストに遅れ時間T2を付加し、例えば、USBバスがアイドル状態となる直前にそのリクエストを発行する。送信部306は、発行されたSetFeature/RemoteWakeUp_AのリクエストをUSB機器2に送信する。
USB機器2は、SetFeature/RemoteWakeUp_Aのリクエストに応じて、リジューム信号の発行タイミングをリクエストに付加された遅れ時間T2だけ遅らせてリジューム信号を発行する。これにより、S2への移行期間後にリジューム信号を発行することができる。また、次に説明するS3への移行時のリジューム信号の発行タイミングよりも遅れの少ないタイミングでリジューム信号を発行することができる。
また、リクエスト発行部304は、SetFeature/RemoteWakeUp_Bのリクエストに、S3への移行を想定した遅れ時間T3を付加する。SetFeature/RemoteWakeUp_Bのリクエストの発行タイミングは、例えば、USBバスがアイドル状態となる直前である。送信部306は、発行されたSetFeature/RemoteWakeUp_BのリクエストをUSB機器2に送信する。
USB機器2は、SetFeature/RemoteWakeUp_Bのリクエストに応じて、リジューム信号の発行タイミングをリクエストに付加された遅れ時間T3だけ遅らせたリジューム信号を発行する。T2<T3であるから、SetFeature/RemoteWakeUp_Aのリクエストよりも移行時間の長いS3への移行を想定したタイミングでリジューム信号がアサートされる。これにより、S3への移行期間後にリジューム信号をアサートすることができる。
以上に説明したように、リクエスト発行部304は、PC3の状態に応じて_SetFeature/RemoteWakeUp_A、Bのリクエストを選択して使用する。これにより、PC3がUSB機器2に対してリモートウェイクアップのイネーブルを指示(リクエスト)し、USBバスをアイドルとした後、即刻リジューム信号が発行される場合に生じるS0→S2やS0→S3の移行期間の不具合を回避出来る。
ここで、S2及びS3への移行時にUSB機器2側でリジューム信号の発行を一律に遅らせることが考えられる。しかしながら、リモートウェイクアップの指示のリクエストに対するリジューム信号の発行を一律に遅らせてしまうことは、システム全体のスループットを低下させてしまうことになるため望ましくない。
これに対して、本実施形態では、リモートウェイクアップのリジューム信号の発行を、一律ではなく、PC3の状態に応じた時間だけ遅らせることができる。これにより、システム全体のスループットの低下を防止できる。
なお、SetFeature/RemoteWakeUp_A,Bのリクエストは、例えば、PC3の状態がS0→S2、S0→S3だけでなくS0→S4へ移行する場合等、移行時間に長短がある場合に用いることが好適である。
(第二の例)
図9の例は、リクエストのパラメータによりアサートタイミングを指定する本実施形態の他の例を示す。この例ではSetFeature/RemoteWakeUp(X)のリクエストのパラメータとして、X=A〜(A〜:前述のタイミングを示す値)のいずれかを設定することで、遅れ時間を指定可能である。これにより、同じリクエストによってリジューム信号のアサートのタイミングを可変に指定できる。
第一の例と第二の例の違いは、リモートウェイクアップのイネーブルを指示するA、Bのリクエストをセレクタで指定して遅延時間を設定するか(第一の例の場合)、セレクタ以外のパラメータの値で指定して遅延時間を設定するか(第二の例の場合)の点である。
(第三の例)
次に、リクエストの発行タイミングで、リジューム信号のアサートのタイミングを指定する方法について、図10を参照しながら説明する。図10は、リクエストの発行タイミングで、リジューム信号のアサートのタイミングを指定する方法の一例を示す。
この方法は、USB機器2に対するリジューム信号のアサートのタイミングの指定をSetFeature/RemoteWakeUpなどのリクエストの発行タイミングによって行う。図10の例では、USBバスのアイドル状態に対して早めのリクエストの発行では、大きな遅れ時間を確保したS3のリモートウェイクアップの指定になる。USBバスのアイドル状態に対して遅めのリクエストの発行では、セレクティブサスペンドのための、遅れ時間の少ない、リモートウェイクアップの指定となる。
この方法によれば、PC3側は特別なリクエストを新たに定義しなくとも実施が可能で、リジューム信号の遅れを設定出来ないUSB機器2に対しても互換が維持出来る。この方法を実施するに当たって本実施形態に限定はなく、例えば、リクエストを拡張ないしは増設するかどうか、またリクエストの発行位置と遅れの時間関係について特定の条件に限定されることはない。
(第四の例)
第四の例の方法では、第三の例の方法と同様に、リクエストを新たに定義しなくとも実施出来る。この方法では、一回のリクエストの発行に対してリジューム信号のアサートの遅れの時間的粒度を与え、例えば一回のリクエストの発行当たり250msの遅れ時間を確保するものと定義する。図11の例では3回、リクエストを発行しているため、250ms+250ms+250msの、750msの遅れ時間を確保する例を示している。
リクエストが一つである場合と、リクエストが二つ以上である場合とではリクエストの意味付け(定義)を変えてもよい。また、リクエストの個数と指定時間は図の様に均等とする以外に指数的な意味付とする(リクエストの個数がXnのnを指定する)など、リクエストの個数と遅れ時間の関係は1:1で無くとも良い。本実施形態はそれら実装の条件に特定されない。
(本実施形態に好適なUSB機器の動作)
次に、本実施形態のUSB機器2の動作について、図12を参照しながら説明する。図12は、USB機器2が行う初期化シーケンスのフローチャートを示す。図12のフローチャートは、USB機器2がPC3にアタッチされ、USB機器2の電源がオン状態になったときにコントローラ1により実行される。
コントローラ1のROM10には、ブートコード(PC3のBIOSに相当する機能を受け持つプログラム)が内蔵されている。ブートコードは、コントローラ1内のレジスタの初期化の後、PC3からの初期化関連(SETUPトークンパケットで始まるコントロール転送のパケット)のパケットを待ち、それに応答する処理を行う(ステップS101)。
ブートコードがPC3からの初期化関連のリクエストに応答するためには、USB機器2のベンダID、プロダクトIDの他のディスクリプタ情報が必要である。それらディスクリプタ情報は事前にI2Cコントローラ17に接続された外部EEPROMから取得される(ステップS100)。
ブートコードは、PC3からゲットディスクリプタ(GetDesc)のリクエストを受けると(ステップS103)、EEPROMからRAM11にファームウェアのダウンロードを行う(ステップS104)。ダウンロードが終了すると、RAMのファームウェアが実行待機状態となる。(ステップS105)。
PC3からのパケット入力の通知はISRを経由して入力される割り込みによってMCU9に通知される。また、ROMのブートコードは制御がRAMに渡った以降もMCU9のメモリ上にマップされる。このため、MCU9の制御がRAMのファームウェアに渡された後も、MCU9は、パケット処理の割り込みハンドラとして機能し、以降のセットアドレス(SetAdd)、セットコンフィグレーション(SetConfig)のリクエストの処理を行う。
初期化時点ではUSBのコントロール転送と呼ぶ転送モードが使われ、それはSETUPのパケットで始まる一連のパケットになっている。コントローラ1のROM10には、USB機器2が共通に受けるセットアップ(SETUP)のリクエストの応答処理を含み、コントローラ1は前述のUSB機器2がアタッチされた時点で事前に取得したディスクリプタ情報を使ってそれらリクエストの応答処理を行う。図12のステップS103の「GetDesc」に始まるパケット判断と応答処理のリンクは、SEUPの割り込み(ステップS102)に応じた、ROMの割り込みハンドラとして実現される。
初期化時点では、「GetDesc」パケット判断(ステップS103)とその応答処理(ステップS107)が実行される。また、「SetAdd」パケット判断(ステップS108)とその応答処理(ステップS109)が実行される。また、「SetConfig」パケット判断(ステップS110)とその応答処理(ステップS111)が実行される。
SETUPのパケットに始まるコントロール転送は全てのUSB機器共通の、初期化用のもの以外にも、実使用時に随時要求される、またUSB機器固有の制御の目的で設けられたリクエストのものがある。それらはROMのブートコードによって認識されないパケットとして、図12のステップS112に示すUSB機器固有のリクエスト処理としてROによって判断される。リクエスト処理は、S104においてROMからRAMにダウンロードされたファームウェアに対して配信される。
本実施形態にかかるリジューム信号の発行を遅らせるための遅れ時間の設定は、コントロール転送のリクエストの拡張によって可能である。この新たなリクエストは、標準のリクエストとしてROMのブートコードによって処理することも、またRAMのファームウェアによって処理することも可能である。
図13に本実施形態にかかるリジューム信号の発行を遅らせるための遅れ時間の設定の一例を示す。図中の「SetFea/X」は、第一の例のUSBのリクエストを拡張する「SetFeature/RemoteWakeUp_X」の_Xによりタイミングを区別するリクエストを示す。ここでの「_X」は、第二の方法の(X)の意味では無く、第一の例の「_A」や「_B」で示すA、Bと同じ意味を持つ。しかし、発行タイミングを区別するリクエストは、この二種類に限らず、装置の状態や装置の利用状況や装置の機種の違いに応じて複数のリクエストの定義を行うことが可能であり、リクエストの数は限定されない。
本実施形態のこれらリクエストは、割り込みハンドラにその判定と処理が追加され、図13では、MCU9によって拡張されたリクエストの種類に基づきリジューム信号の発行を遅らせるための遅れ時間が認識され、遅れ時間経過後にリジューム信号が発行される。SEUPの割り込みハンドラ(MCU9)によって「SetFea/X」のリクエストが認識されると(ステップS200)、ハンドラは指定された遅延時間をセットしたタイマー15を起動した後(ステップS202)、割り込み処理を抜ける。「SetFea/X」のリクエストが認識されない場合(ステップS200)、次の判定処理が実行される(ステップS201)。
タイマー15にセットした遅延時間が経過すると、タイマ割り込みが起こり(ステップS203)、タイマ割り込みのハンドラが起動される。タイマ割り込みのハンドラはEnableRemoteWake()のルーチンをコールする(ステップS204)。
EnableRemoteWake()は、コントローラ1のUSBMSKレジスタのリモートウェイクアップの割り込みのマスクを解除する。その結果、WAKEUP#の信号線によるWAKEUPの割り込みの受け付けが許可され(つまり、レジューム信号がアサートされる)、レジューム信号のアサートに伴ってその割り込みハンドラによってリジューム信号がPC3に対して発行される。
SetFeature/RemoteWakeUpのリクエストを受けると、直ちにEnableRemoteWake()のコールが行われる場合に比べて、本実施形態では、タイマーによって遅れ時間を確保することができる。これにより、本実施形態では、WAKEUP#のリジューム信号の割り込み入力を抑え、リジューム信号の発行を遅れ時間分遅らせることができる。また、SetFeature/RemoteWakeUp_A、SetFeature/RemoteWakeUp_Bの二つのリクエストの種類によって、遅れ時間の長さを変えることで、リジューム信号の発行タイミングを遅らせることができる。
以下に、本実施形態の前述のリクエストを使ったリモートウェイクアップのリジュームタイミングを最適化する方法について説明する。
[システムのサスペンド]
システムのサスペンドは以下の手順で行われる。なお、サスペンド状態は、例えば、所定時間PC3が使用されないとディスプレイの画面が消える状態であり、USBバスに接続された入力機器(マウス、キーボード)からの入力又はその他のPC3のボタンを押す行為等により復帰(ウェイクアップ)する。
図14は、サスペンド移行のシーケンスの一例を示す。
パワーマネージャは、PC3に搭載されたソフトウェア(OS)であり、システム全体のパワーの制御に関するサービスを受け持つ。ドライバ、デバイスドライバは、USB機器2(デバイス)に設けられたドライバであり、パワーマネージャの上位階層に対して下位階層に属する。
PC3に搭載されたOS側は、タイマイベントや操作者の操作を受け、S3の指示を各デバイスの階層に発行する。各階層のドライバ(パワーポリシィオーナーのドライバ)は自身をD2とするためのリクエスト発行要求をパワーマネージャに発行して、S3のリクエストを下位ドライバに渡す。なお、D0〜D4は、デバイス側の省エネレベル(デバイスステート)であり、システム(PC3)をS3にし、かつデバイスからのウェイクアップ要求を指示するときにはデバイスをD2とする。
その後、ドライバは、自身の発行したD2のリクエストを受け、バスドライバにリモートウェイクアップ待ちを通知する。ドライバは、デバイスに対するリモートウェイクアップのイネーブルのUSBパケットの発行をバスドライバに指示し、その後デバイスにサスペンド状態移行を指示する。
また、デバイスに対するサスペンドの指示は、デバイスドライバからのバスドライバに対するデバイスの接続ポートのUSBバスのアイドル状態の指示によって成される。これにより、デバイスは、サスペンドの指示を認識することができる。ここで、アイドル状態とは、フレームマーカーパケットを含め、何もパケットの送信されていない状態である。
つまり、デバイスのパワー状態の変更の指示はOS側が直接行ってはおらず、デバイスからの要求を受けて指示する形をとり、またそれらリクエストは、デバイスと直接の関係を持たない、階層の他ドライバを経由してドライバに到達する。このため、システム内に複数存在するデバイスに対して渡されるリクエストの処理時間は様々で、USB機器のデバイスドライバが機器に対してリモートウェイクアップを指示した後も、他デバイスの処理が継続されている場合がある。この間にUSB機器からのウェイク信号を受けるとシステムは不具合を発生することがある。
[ウェイクタイミングの最適化]
本実施形態によれば、以下の方法によって、USBインタフェースを有するシステムに最適化した、冗長な待ち時間を待ち、機器の反応を鈍らせることが無く、かつシステムに不具合をもたらさない、最適なリモートウェィクアップが実現される。
本実施形態によってリモートウェイクアップの最適化を行うには、例えば、デバイスに対して最初のリモートウェィクアップのイネーブルに、リモートウェィクアップ信号の長い待ち時間を要求する。PC3側では、デバイスドライバは、D2のリクエストを受け、最初にデバイスに対してリモートウェィクアップをイネーブルしてから、パワーマネージャ(PC3)から電源オフやそれに類するシステムの省エネステートの指示が成されたとき、までの時間を保持、次回のリモートウェィクアップのイネーブル時点では、この時間に基づいて、最適化した待ち時間を設定する方法をとる。
図15に本実施形態にかかるサスペンド移行のタイムチャートの一例を示す。図の上側には例えば電源オン後の最初のサスペンド移行のシーケンスを示し、下側は二回目以降のサスペンド移行のシーケンスを示す。これら二つのシーケンスは基本的には同じもので、前述の説明の如くのシーケンスをとっている。二つの違いは、最初のシーケンスには、本発明のサスペンド移行期のタイミング情報の経験値が無いことである。このためデバイスドライバは、本実施形態にかかるリモートウェィクアップイネーブルのコマンドの発行に際して、リモートウェィクアップ信号の、安全を考慮した長い待ち時間を指定する。このことによってシステムは、サスペンド直後のウェィクアップ信号によって不具合を誘発することを回避することができる。
また、最初のサスペンド移行の際には、デバイスドライバはBIOSに対して、例えばD2のリクエストを受け取ると、Poffまでの経過時間の計測の開始を指示する。一方、BIOSはデバイスドライバからの指示を受け、BIOSがサスペンド移行の最終的なPoffのコントロールを行う、BIOSのS3のACPIメソッドがコールされるまでの経過時間をカウントし、この値を保持しておく。
二回目のサスペンド移行の指示が成されると、デバイスドライバはD3のリクエストを受けた時点でBIOSに前記経過時間を問い合わせる。デバイスドライバは、本実施形態にかかるリモートウェィクアップイネーブルのコマンドの発行に際して、このフィードバック値を根拠とした、最適化された待ち時間を指定する。
これにより、デバイスはいままでの経験から導かれた、不具合を生じる可能性を有する待ち時間に拠ることなく、システム固有の待ち時間の設定を受け、サスペンド移行期の不具合の回避も行える。
以上に説明した本実施形態による電源制御によれば、リジューム信号の発行をUSBホスト機器の状態に応じて遅らせることで、リジューム信号の入力タイミングによる不具合を回避できる。
以上、情報処理装置、電源制御プログラム及びUSB機器を上記実施形態により説明したが、本発明は上記実施形態に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能である。
例えば図1のUSB機器2のコントローラ1のハードウェア構成は、USB機器2に組み込まれるコントローラの一例であり、コントローラの一部又は全部はハードウェアで構成されてもよいし、ソフトウェアで構成されてもよい。また、図2に示したPC3も同様に、一部又は全部がハードウェアで構成されてもよいし、ソフトウェアで構成されてもよい。
また、上記実施形態及び変形例が複数存在する場合、矛盾しない範囲で組み合わせることができる。例えば図8〜図11に示し、上記実施形態にて説明したリクエストによりアサートのタイミング(遅れ時間)を指定する例を組み合わせて、アサートのタイミングを指定してもよい。つまり、リクエストの種類、リクエストの発行タイミング又はリクエストの発行回数のいずれかにより所定の遅れ時間を指定してもよい。これにより、コストアップを生じること無く、S3への移行時のPC3の不具合の発生を回避出来る。
以上の説明に関し、更に以下の項を開示する。
(付記1)
スリープモードから稼働モードへの移行を指示するリジューム信号を発行するUSB機器と通信可能な情報処理装置であって、
前記スリープモードへの移行時に、前記リジューム信号の発行を遅らせるための時間であって前記情報処理装置の状態に応じた遅れ時間の情報をリモートウェイクアップを指示するリクエストに付加し、所定のタイミングに発行するリクエスト発行部と、
前記発行されたリクエストを前記USB機器に送信する送信部と、
を有する情報処理装置。
(付記2)
前記リクエスト発行部は、前記リクエストの種類、前記リクエストの発行タイミング、又は前記リクエストの発行回数のいずれか一つによって前記遅れ時間の情報を前記リクエストに付加する、
付記1に記載の情報処理装置。
(付記3)
スリープモードから稼働モードへの移行を指示するリジューム信号を発行するUSB機器と通信可能な情報処理装置の電力供給を制御する処理をコンピュータに実行させる電源制御プログラムであって、
前記スリープモードへの移行時に、前記リジューム信号の発行を遅らせるための時間であって前記情報処理装置の状態に応じた遅れ時間の情報をリモートウェイクアップを指示するリクエストに付加して所定のタイミングに発行し、
前記発行されたリクエストを前記USB機器に送信する、
電源制御プログラム。
(付記4)
前記リクエストの種類、前記リクエストの発行タイミング、又は前記リクエストの発行回数のいずれか一つによって前記遅れ時間の情報を前記リクエストに付加する、
付記3に記載の電源制御プログラム。
(付記5)
スリープモードから稼働モードへの移行を指示するリジューム信号を発行するUSB機器であって、
前記リジューム信号の発行を遅らせるための時間であって前記USB機器と通信する情報処理装置の状態に応じた遅れ時間の情報が付加された、リモートウェイクアップを指示するリクエストを前記情報処理装置から受信する受信部と、
前記リクエストに応じて前記遅れ時間遅らせて発行された前記リジューム信号を前記情報処理装置に送信する送信部と、
を有するUSB機器。
(付記6)
前記受信部は、前記リクエストの種類、前記リクエストの発行タイミング、又は前記リクエストの発行回数のいずれか一つによって前記遅れ時間の情報が付加された前記リクエストを受信する、
付記5に記載のUSB機器。