#Rust

RustでUSB Mass Storage Class Bulk-Only Transportを実装する

掲題の通り Rust で USB Mass Storage Class (MSC) Bulk-Only Transport を実装した。 RAM 上の値を Disk Drive に見せかけたデバイスとして Windows から認識できるようになったので要所を書き残す。

実装には Rust を使用し、 Raspberry pi pico (rp2040) 上で動作確認を行っている。実装の Framework には embassy-rs を使用した。

USB 通信の構成・設定

Mass Storage Bulk Only 1.0 - usb.org に基づいて実装する。具体的に以下の通信を行う。

usb-config.png

Descriptor 構成

  • USB Device
    • Device Descriptor (MSC Bulk Only Transport)
    • Configuration Descriptor
      • Interface Descriptor0 (MSC Bulk Only Transport)
        • Endpoint Descriptor1: Bulk out
        • Endpoint Descriptor2: Bulk in

USB Mass Storage Class

USB(に限らない話だが)を用いた通信は Host/Device 双方の FW で共通のプロトコル定義に基づいた実装が必要だが、一般的に使われる機能については USB の仕様としてクラス定義されている。

例: キーボード・マウス等入力デバイス定義 Device Class Definition for Human Interface Devices(HID)

今日使われている OS で USB が使える環境にあれば、Host 側のドライバ実装は多くの場合用意されているので、独自のドライバ作成と署名・インストールの手順を省くことができる。 開発者は Device 側の FW を定義に基づいて実装するだけで良い。

このクラス定義のうち、外付け記憶装置を制御するための 1 つとして MSC がある。

· 16min · wipeseals
RustでUSB Mass Storage Class Bulk-Only Transportを実装する