概要
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.1 | 12 Mbps (Full Speed) | Type-A, Type-B |
| USB 2.0 | 480 Mbps (Hi-Speed) | Type-A, Type-B, Mini, Micro |
| USB 3.2 Gen 1 | 5 Gbps (SuperSpeed) | Type-A, Type-B, Type-C |
| USB 3.2 Gen 2 | 10 Gbps (SuperSpeed+) | Type-C |
| USB 3.2 Gen 2x2 | 20 Gbps | Type-C |
| USB 4 Gen 2x2 | 20 Gbps | Type-C |
| USB 4 Gen 3x2 | 40 Gbps | Type-C |
USBデバイスクラス
USBデバイスはデバイスクラスで機能を宣言します:
| クラス | 略称 | 例 |
|---|---|---|
| CDC(通信) | CDC/ACM | USBシリアル(VCP) |
| HID(ヒューマンインターフェース) | HID | キーボード・マウス・ゲームパッド |
| マスストレージ | MSC | USBメモリ・SDカードリーダー |
| オーディオ | Audio | USBスピーカー・マイク |
| ビデオ | UVC | Webカメラ |
| DFU(デバイスファームウェアアップグレード) | DFU | ファームウェア書き込み |
| カスタム(ベンダー固有) | Vendor | 特定アプリケーション |
USB電源供給
| 規格 | 電圧 | 最大電流 | 最大電力 |
|---|---|---|---|
| USB 2.0(バスパワー) | 5V | 500mA | 2.5W |
| USB 3.x(バスパワー) | 5V | 900mA | 4.5W |
| USB PD Rev 2.0 | 5/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) | STM32 | ST公式。CubeMXで生成 |
| TinyUSB | 多プラットフォーム | オープンソース、軽量 |
| LUFA | AVR | AVR向け定番 |
| USB4Java | Java | PC側ホスト実装 |
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を動かすことも可能です。