Arduino Uno and its USB

For those of you who are totally out of the DIY electronics scene, the guys of the Arduino Team have just released a new version of the Arduino microcontroller called the Uno.  The Uno’s main claim to fame over its predecessor, the Duemilanove, is the new USB to serial chip used for programming and communicating with the Arduino’s ATMega328.  The Duemilanove, its predecessors, and the many and varied Arduino clones, all used the FTDI USB to serial chip for programming and communications between the computer and the microcontroller.  About the only thing the FTDI had going for it was its ease of implementation and its free drivers.  The new Uno instead uses a small Atmel microcontroller with built-in USB capabilities to serve as a translator between USB and serial.  That chip, the ATMega8U2, is causing a lot of buzz amongst the Arduino crowd because it, like the ATMega328 it programs, is programmable itself.  By shorting out a jumper on the bottom of the board, the user can program the ATMega8U2 to act as a completely different USB device.  The Arduino can now communicate with a host computer in new and exciting ways, able to emmulate a mouse or keyboard, or able to act as a MIDI device.  This opens up new possibilities for Arduino projects, like random password generators or musical instrunments, with a much lower investment and smaller bill of materials.  The fact that the ATMega8U2 requires no drivers and supports faster serial speeds than the FTDI is just icing on the cake.

Unfortunately, as pointed out on the Arduino forums, manufacturers of Arduino clones will have some difficulty in implementing the new ATMega8U2.  Universal Serial Bus, or USB, utilizes a device identification scheme that relies on two six digit hexadecimal numbers, a vendor ID (VID) and a product ID (PID), to identify the device in question.  The VID identifies the manufacturer of the device, the PID identifies the device type, and a manufacturer’s serial number identifies the instance of the device, so that if multiple devices of the same type are plugged in, the computer can tell the difference between them.  Each unique VID comes with a little over 56,000 PIDs.  The problem is that VIDs are not cheap.  VID numbers are assigned by the USB Implementers Forum, or USB-IF, a non-profit organization made up mostly of the original developers of the USB standard.  They are responsible for the assignment of VIDs.  They don’t just give away VIDs to everyone who asks.  A single VID costs about $2,000 (that does not include licensing fees) and are only sold to legitimate corporations, not individuals or groups of individuals.  This means that for garage salesmen like myself, the cost of developing and selling USB hardware is prohibitively high.  Since the majority of Arduino clones are built by fellow garage salesmen, these clones are unlikely to ever benefit from the use of the ATMega8U2.

Does this bother me?  A little.  It means that my idea to build and sell a new serial adapter based on the ATMega8U2 for Arduino clones that lack the USB to serial chip, like Sparkfun’s Arduino Pro or Modern Device’s Really Bare Bones Board, is very much impossible at this time.  However, I can still build such a device for my own personal use and distribute the source material freely.  I could easily use the Arduino Team’s VID and the Arduino Uno PID to ensure compatibility, and so long as I made no attempt to mass produce my design, nobody would mind.  This only really affects the end user who may not be savvy enough to build and program their own adapter.  Even then, it is only a matter of time for Sparkfun or another semi-large do-it-yourself electronics company to buy a VID and get to producing these new adapters.

So, about those worry warts out on the Arduino forum that say this move is making the Arduino more closed than open: horse hockey.  The design remains as open as ever, and you are free to do as you will.  The only difference now is that it is a little more difficult to sell one particular part of the new Arduino design.  If you have a great product idea that implements the Uno’s ATMega8U2, but don’t have the cash to buy a VID, partner up with another open-source company that already has one.

Categories: Thoughts
  • It’s actually not a problem. You just use Atmel’s VID and PID. They have no problem with it as long as you’re using their chips. I use the Atmel VID and the USBKEY PID. But I don’t think I’m switching over to the 8U2. I’ve actually come from using the USB enabled AVRs and switched over to the FTDI because it makes it easier for the end users. In fact, I wrote my own USB CDC stack (you can find it on my site) but decided that the most important thing is usability for end users, hence the FTDI.

  • iloromero

    I agree with Akiba. It is no different than using the FT232RL chip from FTDI. This is what Atmel has to say:

    Can I use the VID and PID provided by Atmel ?

    Customer may keep the Atmel Vendor Identifier (Atmel VID) and Product Identifier (PID) in their product that integrates an Atmel USB Flash Microcontroller (“Integrated Product”) from one Atmel original example subject to the following acknowledgments and/or conditions:
    – Customer must execute Atmel’s Limited License Agreement (Atmel USB Flash Microcontroller Software Suite) and comply with all terms and conditions.
    – Customer cannot apply to USB compliance testing with the USB-IF, therefore Customer cannot use the USB logo for an Integrated Product using the Atmel VID.
    – All software is provided AS IS and Customer is responsible to insure the USB compliance of the Integrated Product.
    – Customer must integrate the Atmel USB Flash Microcontroller Software and the USB descriptors with no changes apart from:
    1-The manufacturer string, which must include the Customer’s URL address and finish with “powered by Atmel®”: e.g. “ powered by Atmel®”.
    2-The maximum power fields, which must be compatible with the actual power consumption of the Integrated Product for each possible USB configuration.
    3- When applicable the Endpoint polling Interval fields can be adapted to the application.
    -Customer must insure compatibility with all the features of the Atmel original example if a custom host driver is distributed with the Integrated Product.

  • mipu

    hi there, i am just starting with arduino and have an issue which you maybe can help to solve. i got a arduino uno and i want to control it with flash (actionscript). a got serproxy running and a nice code which should turn a led on pin 7 on. problem is, that it only sometimes works. i spend a lot of time in different forums already and i found out that the code works on older arduinos (duemilanove,..) but not on the arduino uno as there has something changed on the hardwareside. if you have any idea how i can solve this problem i would be soooooooooo glad.