概要
USBデバイスライブラリを作っていたのですが、VIDとPIDがきになって調べてみました。開発用にある程度自由に利用できる番号はありますがそのまま配布するといろいろな問題が出てきそうです。そして自分で取得するのは金額的に難しいのでOSS向けの申請をするのがよさそうでした。
USBのVIDとPIDとは?
USBをパソコンに接続したときに、どんな製品なのかを識別するための情報となります。VIDはVendor IDで、PIDがProduct IDになります。VIDはお金を払うと割り当ててもらって、PIDは自由に製品別に割り当てが可能です。
VIDは2バイトなので6万ちょっとが上限で今は2万にも届いていないぐらいみたいです。PIDも2バイトなのでUSBの製品が6万種類以上ないと使いきれません。
正規で割り当ててもらうには?
6,000ドルで割り当て自体は可能みたいです。ただ完全に個人だと難しい可能性があります。個人で100万円以上出すのもちょっと難しいですしね。
開発用のVID/PIDは?
まずPIDで自由に使えるコードはありません。すべて正規に割り当てをもらう必要があります。よくあるプライベート系の番号帯が無いのがVIDの特徴です。
ただし、他社が所有しているVIDの一部を開発用に解放してくれている場合があります。
ESP32シリーズなどのEspressif社の場合、TinyUSBを利用した場合のデフォルトレンジあるVID 0x303A / PID 0x4000 – 0x4007に関しては開発用として確保されています。

上記のように、TinyUSBのデフォルトPIDは利用可能と書いてあります。そしてESP32シリーズを利用している場合にはPIDを申請すると割り当ててくれるルートもあるようでした。

Raspberry Pi Picoの場合も製品に組み込んで利用している場合には申請することでPIDがもらえるルートがあるようでした。WaveshareもRP2040-Zeroとかで割り当ててもらっていますね。
デバイスを固定しないで無料で使いたい場合
ESP32シリーズやRaspberry Pi Picoシリーズのように正規で取得したVIDの配下にあるPIDを割り当ててくれるサービスはあります。
Openmoko

オープンソースの携帯電話を販売するプロジェクトで、製品販売終了後に未使用のPIDレンジをオープンソース系のライセンスのプロダクトに割り当ててくれるサービスを提供しています。
pid.codes
こちらも老舗のサービスでどちらかというとオープンソースハードウエア向けに始まったサービスとなります。オープンソースソフトウエア系もいまは許可されていますが追加説明が必要な場合があるようです。
まとめ
なかなか面倒なVIDとPIDでした。ちなみにオレオレで勝手に番号を利用しているケースもありますがおすすめしません。あとWindowsは最初に認識したときのVID/PIDの組み合わせでドライバー割り当てをキャッシュするので、HIDからCDCなどに変更しても最初に認識された状態でドライバーがロードされてしまいます。いろいろ回避方法はあるのですがかなり面倒な仕様ですね。


コメント