Skip to content

0. USB Vendor and Product IDs

Bob Frazier edited this page Jan 30, 2017 · 2 revisions

The Arduino environment, particularly for THIS project, allows the 'pins_arduino.h' file to specify vendor and product IDs for use with the USB hardware (when available). Normally this would be done in the 'boards.txt' file, as it is for the Leonardo and other USB boards. However, for generic XMega 'U' series support, the 'pins_arduino.h' file is likely to contain 'default' IDs that would be used when you do NOT specify your own in 'boards.txt'.

Unfortunately, every product that implements a USB device must have unique combination of these IDs, and getting your own vendor ID is expensive.

http://www.usb.org/developers/vendor/

Fortunately, Open Moko offers use of their manufacturing ID as long as you register your 'FOSS' product with them. You DO have to register though. And who knows how long it will be until the USB-IF tries to STOP them from doing this (see below).

Some time ago, Adafruit created an FAQ on the Uno, with a large section regarding the UNO's USB interface. It also discusses things like USB Vendor and Product IDs in case you experiment with the 8u2 chip that's on the Arduino, which provides the USB serial (much like some of the xmegas could).

https://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-uno-faq

Their comments were basically:

If you want to make your own Arduino-compatible board, you have a few choices:

  • Don't use an 8u2, go with an FTDI chip instead that comes with a VID
  • If you're planning to make more than one board for your personal use, you will have to purchase a VID from USB IF for a one time $2000 fee [NOTE: this is now $5000]
  • If you're making a single board for your own experimentation, you can pick a VID/PID that doesn't interfere with any devices on your computer and substitute those in
  • You can purchase licenses for single VID/PID pairs from companies that develop USB devices (we dont have any specific links at the moment)

However, you can't use the Arduino VID when distributing your own Arduino-compatibles!


UPDATE

The Arduino Project on github NOW authorizes the use of some specific product IDs along with the Arduino vendor ID for end-user USB devices. There are some specific restrictions that go along with it. It is very likely that for experimental purposes, and in a limited sense, for actual products, it may be possible to use these IDs without having to purchase a vendor ID the USB group.

A text file that describes everything is HERE


A presentation was done 2 years ago at the Open Hardware Summit. Here is a PDF Slideshow summarizing the main points.

There is also an interesting summary page at OSHWA.ORG


One company (voti.nl) was selling VID/PID combinations. This was stopped by the USB-IF back in 2008. A quote from an archived page is as follows:

I (and some other online shops) used to sell PID blocks, to be used with the VID we (each) bought from usb.org. That organisation sent me some threatening letters, demanding me to stop this activity. I don't think they are within their right to do so, but I don't want to be involved a long lawsuit, so I stopped selling PID blocks. At this moment (2008) I don't know of any other shops that still sell ID blocks, so I assume they received the same letter and reacted the same.



One item worthy of mention: the 'boards.txt' file contains the USB IDs for 3 different Arduino boards: Leonardo, Esplora, and Micro. These are stored as the 'build.pid' and 'build.vid' entries for each specific board. When you build code for a board that has 'build.pid' and 'build.vid' entries, the 'USB_PID' and 'USB_VID' constants will be defined using the specified values as a '-D' parameter on the gcc command line.



In conclusion, for TESTING PURPOSES ONLY, some of the header files in this repository may contain vendor and product IDs that correspond to an existing Arduino product. Remember, it is for TESTING ONLY. DO NOT SHIP ANY PRODUCTS WITH THESE IDS IN THEM! The Arduino implementation more or less requires that these IDs be 'hard-coded' into 'pins_arduino.h'. I don't know of any other way to ensure compliance than to simply ASK everyone NOT to use those IDs, short of requiring EVERYONE to manually edit the files in order to get them to work, so that you would HAVE to read the disclaimer and/or edit them to suit your own product. So please don't force me to do things like that as it makes testing and compiling for experimental purposes a LOT more difficult, ok?