USBではHot Plug(活線挿抜)が可能になっています。これは物理的なコネクタの構造とシステム上の処理によって実現されています。ここでは物理的な仕様ではなく、システム側の動作を概念として説明します。USBのシステムではドライバはスタック構造を持っています。

 

USBのシステム

USBのシステム

 

デバイスが接続されていない状態では、通信対象となるファンクションが存在しないのでクライアントは存在しません。

 

デバイスが接続されていない状態

 

デバイスが接続された瞬間にUSB System S/Wが接続したものを認識するためにEnumerationを実施します。Enumerationは各装置の持っているディスクリプタ の読み込みとUSBアドレスの割り当て、コンフィグレーションの設定を行います。

デバイスドライバの読み込みはDevice Descriptorに記述するベンダID,製品IDまたはClass,Subclass かInterface Descriptorに記述するClass, Subclassを"Inf" ファイル内のドライバリストと比較して行われます。

 

デバイスが接続された状態

 

これでドライバのロードが完了して、ドライバを利用できます。ハブを介した場合 もUSBシステム S/W的にはハブのポート電源を有効にすることと、ポートを有効にする事を含めて同じです。一方デバイスが切断された場合はポートの変化がUSBシステム S/Wへ通知されますからUSBシステム S/Wは対象のクライアントS/Wを削除します。 USBの消費電流に関するスペックの特徴はBus/Self PoweredとSuspend/Resumeです。USBではある程度の大きさの消費電流までならアップストリームポートの電源線から供給することも可能です。アップストリームポートの電源線から周辺機器すべての消費電流を供給されるものをBus-Poweredと呼び、別途ACアダプタ等の別電源を持っているものをSelf-Poweredと呼びます。USB2.0でもアップストリームポートから供給できる消費電流の規格は緩和されていません。これはコネクタ、ケーブルの互換性を維持することを第一優先としたためです。
USBのSuspend/Resumeはシステムがサスペンド(一時停止)状態での周辺機器のPowerを削減させる手法として定義されています。システムがサスペンド(一時停止)状態に入ると当たり前のようにフレームの開始を示すSOFの発行も停止します。このため、USBバスが長期間Idle状態になります。USB対応の周辺機器ではUSBバスが3ms 以上Idle状態になった時点でPowerを削減させるために、システムクロック/USBのサンプリングクロックを停止させるようなことが期待されています。Suspend状態からの復帰はホストがUSBバスのIdle状態から変化させることで行うか、ファンクションがUSBバスをIdle状態から変化させることでホストを起こし(Remote wakeup)システム全体をResumeさせます。(USB2.0でのSuspend/Resumeとreset)

USBのSuspend/Resumeについて

  • カタログポータル