2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

USBについてのメモ#2

Last updated at Posted at 2019-04-14

USBについて雑多なメモ。その2

#USBのソフトウェア
##ソフトウェアの階層
ざっくりとわけるとホスト/デバイスにそれぞれ3つにわけられる。

###ホスト

  • ホストコントローラドライバ
    • 一番HWに近い層で、以下の仕事を担っている。
      • レジスタの初期化や制御データの初期化
      • USBホスト・ポート制御(ルートハブ制御、デバイス接続/切断制御、サスペンド/レジューム制御)
      • 転送制御(コントトール転送、バルク転送、インタラプト転送、アイソクロナス転送)
      • 割り込み/イベント処理
      • 上記機能に関するUSBバス・ドライバ、OS機能、PCI Expressバスドライバへのインターフェースの提供
    • USB3.0で提供されることとなったxHCは単一のコントローラでLow/Full/High/Super Speedをサポートすることができる。
      • USB2.0対応のEHCIではHighスピード通信専用
      • そのため、コンパチ対応のため、OHCI/UHCIコントローラーを搭載する必要があった。
  • バスドライバ
    • 特定のコントローラ/デバイスに依存しない層で、すべてのコントローラ/デバイスに対して拡張性を意識した設計をする必要がある。
    • コントローラドライバ、クラスドライバを管理するそうである。
    • USBデバイスの管理をし、クラスドライバ/コントローラドライバにインターフェースを提供している。
      • USBデバイス管理
        • デバイスエニュメレーション管理(アドレス割り当て、各種ディスクリプタ情報取得/保持)
        • デバイスツリー構成、デバイスアドレス管理
        • USBハブポート制御/管理
        • バスステート、リソース管理
        • パワーマネジメント管理
      • クラスドライバインターフェース
        • デフォルトパイプ(標準リクエスト)リクエストの生成/発行
        • バルク、インタラプト、アイソクロナス/コントロールパイプによるリクエストの生成/発行
        • デバイススロットの有効化/無効化
        • バルクストリーム転送
        • デバイス情報提供、アクセス、制御(標準ディスクリプタ取得/設定など)
        • パイプステート制御
        • コンフィグレーション/インターフェース設定、オルタネートセッティング
        • クラスリクエスト、ベンダリクエスト
      • コントローラドライバインターフェース
        • 接続/切断、サスペンドレジューム検出
        • エニュメレーションに関する標準リクエストコール
  • クラスドライバ
    • 特定のデバイスのターゲット機能を実現する階層
    • マスストレージクラスやオーディオクラス用の標準デバイスクラスもあれば、ベンダ用のクラスドライバもある。

###デバイス

  • ディスクリプタ情報を生成してホストに渡すことが重要な機能の1つで、その情報をもとにUSBホストは同じUSB接続でも通信相手によって必要な通信を行うことができる。
  • デバイスソフトウェアにも以下の階層が存在する。
  • コントローラドライバ
    • HWに一番近い層で、以下の仕事を担っている
      • USBデバイス接続/切断
        • VBUS制御
      • パワーマネジメント
        • サスペンドレジューム制御
      • 転送制御
        • コントロール転送/バルク転送/インタラプト転送/アイソクロナス転送
      • DMAコントローラ・ハードウェア制御
        • USB EPCバッファ-メモリ間DMA転送
        • USB EPCバッファ-他デバイス間DMA転送
      • 割り込み制御
        • 転送割り込み/DMA終了割り込み
        • 切断/接続、サスペンド/レジューム割り込み
  • バスドライバ
    • クラスドライバ/コントローラドライバの管理を行っている層で以下の仕事を担っている
      • ディスクリプタ管理
      • リクエスト処理
      • USBデバイス管理
        • 接続・切断、イベント発生
      • コントローラドライバインターフェース
      • クラスドライバインターフェース
  • クラスドライバ
    • USB製品に合わせてユーザーから見た機能を実現する層
    • USB2.0 3.0による違いに関してはバスドライバ、コントローラドライバで吸収されているため、基本的な通信においての差分はあまり気にしなくてもいい。(5.0Gbpsを実現するにはケアが必要。)
    • 以下の仕事を担っている
      • クラス固有ディスクリプタ管理
      • デバイスクラス転送制御
      • クラスリクエスト機能
      • アプリケーションへのAPIの提供
      • ブリッジI/F機能
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?