インターフェース・バス(有線)

USB

PC周辺機器の標準インターフェース。

概要

USB(Universal Serial Bus)は、1996年にIntel・Compaq・IBM・Microsoft・NEC・Northernなど主要IT企業が共同で策定したシリアルバス規格です。「誰でも簡単に接続できる汎用インターフェース」をコンセプトに設計され、コネクタの抜き挿しによるホットプラグ対応、電源供給(バスパワー)、自動デバイス認識(プラグアンドプレイ)を実現しました。

キーボード・マウス・ストレージ・カメラ・プリンターなどPC周辺機器の標準インターフェースとして普及し、組み込みシステムでもデバイスとしての接続(USB CDC/HID/MSC等)やホスト機能を持つ機器に広く採用されています。

速度はUSB 1.1(12Mbps)からUSB 4(最大40Gbps)まで発展し、USB Power Delivery(PD)では最大240Wの電力供給も可能になっています。

歴史・背景

1996年のUSB 1.0リリース後、1998年のUSB 1.1で普及が始まりました。2000年のUSB 2.0(480Mbps)はHi-Speedとして広く普及し、USB HDD・フラッシュドライブ・カメラ等をPCに接続する標準となりました。

2008年のUSB 3.0(5Gbps)でSuperSpeedに対応。2014年のUSB Type-CコネクタとUSB PDの登場でリバーシブル接続と高電力供給が実現しました。2019年のUSB 4はThunderbolt 3をベースとし、最大40Gbpsと統一コネクタ(Type-C)を定義しました。

組み込み分野では、STM32・ESP32・nRF52などの多くのマイコンがUSBデバイス機能(CDCシリアル・HID・大容量記憶)を内蔵しており、ファームウェア更新・デバッグコンソール・データ転送に活用されています。

技術仕様

USBのバージョンと速度

バージョン最大速度コネクタ
USB 1.0 / 1.112 Mbps (Full Speed)Type-A, Type-B
USB 2.0480 Mbps (Hi-Speed)Type-A, Type-B, Mini, Micro
USB 3.2 Gen 15 Gbps (SuperSpeed)Type-A, Type-B, Type-C
USB 3.2 Gen 210 Gbps (SuperSpeed+)Type-C
USB 3.2 Gen 2x220 GbpsType-C
USB 4 Gen 2x220 GbpsType-C
USB 4 Gen 3x240 GbpsType-C

USBデバイスクラス

USBデバイスはデバイスクラスで機能を宣言します:

クラス略称
CDC(通信)CDC/ACMUSBシリアル(VCP)
HID(ヒューマンインターフェース)HIDキーボード・マウス・ゲームパッド
マスストレージMSCUSBメモリ・SDカードリーダー
オーディオAudioUSBスピーカー・マイク
ビデオUVCWebカメラ
DFU(デバイスファームウェアアップグレード)DFUファームウェア書き込み
カスタム(ベンダー固有)Vendor特定アプリケーション

USB電源供給

規格電圧最大電流最大電力
USB 2.0(バスパワー)5V500mA2.5W
USB 3.x(バスパワー)5V900mA4.5W
USB PD Rev 2.05/9/15/20V最大5A最大100W
USB PD Rev 3.1最大48V最大5A最大240W

動作原理

ホスト・デバイス・OTGモデル

  • USBホスト: バスを制御し、デバイスを管理(PC・タブレット等)
  • USBデバイス(ペリフェラル): ホストからの要求に応答(マウス・USBメモリ等)
  • USB OTG: USB OTG参照

USBの転送モード

転送タイプ特徴用途
Control設定・制御用。すべてのデバイスが持つデバイス列挙・設定
Bulk大量データ・信頼性保証あり・帯域保証なしUSBメモリ・プリンタ
Interrupt定期ポーリング・遅延保証ありキーボード・マウス
Isochronous連続データ・帯域保証あり・再送なしオーディオ・ビデオ

デバイス列挙プロセス

USBデバイスを接続すると以下の列挙が行われます:

1. デバイス接続検出(D+/D-プルアップ検出)
2. ホストがリセット信号を送出
3. デバイスにアドレス0で通信 → デバイスディスクリプタ取得
4. ホストがユニークアドレスを割り当て
5. コンフィギュレーションディスクリプタ取得(インターフェース/エンドポイント情報)
6. デバイスクラスに応じたドライバ読み込み
7. 通常の通信開始

STM32でのUSB CDC(仮想COMポート)実装

// STM32 USB CDC(Virtual COM Port)使用例

#include "usbd_cdc_if.h"

// USB経由でデータ送信
uint8_t buf[] = "Hello USB!\r\n";
CDC_Transmit_FS(buf, sizeof(buf) - 1);

// USB受信コールバック(usbd_cdc_if.cの中に実装)
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) {
    // Buf: 受信データポインタ、*Len: 受信バイト数
    // 受信データを処理してエコーバック
    CDC_Transmit_FS(Buf, *Len);
    USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
    USBD_CDC_ReceivePacket(&hUsbDeviceFS);
    return USBD_OK;
}

// USB HID(キーボードエミュレーション)例
#include "usbd_hid.h"

typedef struct {
    uint8_t modifier;  // Ctrl/Shift等
    uint8_t reserved;
    uint8_t keycode[6];  // 最大6キー同時
} USB_HID_KeyReport;

USB_HID_KeyReport key_report = {0};
key_report.keycode[0] = 0x04;  // 'a'キー
USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&key_report, sizeof(key_report));

用途・ユースケース

組み込みシステムでのUSBの活用例:

  • デバッグコンソール(USB CDC): USBシリアル変換アダプタ不要でPCに直接接続してログ出力。STM32Nucleo等の開発ボードはこの方式
  • ファームウェア更新(DFU): USBブートローダーでPCからファームウェアを書き込み。STM32のDFUモード(BOOT0ピン設定)等
  • HIDデバイス: マイコンをキーボード・マウス・ゲームパッドとしてエミュレーション(Arduino LeonardoはHID対応)
  • USBマスストレージ: マイコンのSDカード・内部フラッシュをUSBメモリとしてPC側に公開
  • USB-UART変換: CH340G・FT232RLなどのUSB-UARTブリッジICは組み込み開発で多用
  • 産業機器のPC接続: 計測器・テスターのPCへのデータ転送インターフェース

実装・開発のポイント

USBスタックライブラリ

マイコンでのUSB実装にはソフトウェアスタックが必要です:

ライブラリ対象特徴
STM32 USB Library (HAL)STM32ST公式。CubeMXで生成
TinyUSB多プラットフォームオープンソース、軽量
LUFAAVRAVR向け定番
USB4JavaJavaPC側ホスト実装

USB信号品質

USB信号はD+/D-の差動信号です。PCBレイアウトでは以下が重要:

  • D+とD-を差動ペアとして等長配線
  • 差動インピーダンス90Ω±15%を維持
  • グランドプレーンを確保
  • USBクリスタル(12MHz or 48MHz)の近傍配置

USB認証(USB-IF認証)

USB-IF(USB Implementers Forum)の認証を受けることで、製品への「Certified USB」ロゴ使用が許可されます。市販製品では認証取得が推奨されます。

他技術との比較

USB vs UART

UARTはよりシンプルで低オーバーヘッドですが、速度・電源供給・プラグアンドプレイではUSBが圧倒的に優れます。組み込みのデバッグコンソールにはUSB CDCが便利ですが、実装の複雑さが増します。

USB vs Ethernet

Ethernetはより長距離・ネットワーク通信向け。USBは直接接続(1対1)で高速なデータ転送と電源供給を兼ねる点が異なります。USB EthernetアダプタのようにUSB上でEthernetを動かすことも可能です。

関連用語

参考リンク