September 25, 2010

The new Arduino Uno: what are the implications?

The Arduino team have been teasing us for a little while with a banner on the Arduino site saying simply "We're cooking something new for you!" and a silhouette of a new Arduino model. At last the wait is over and we have a bit of information on what the board will be, and it looks pretty sweet!



When all is said and done it's really not much different functionally to the current model, the Duemilanove, but with the FTDI chip that provides the USB-serial connection on the Duemilanove replaced by an ATmega8U2 loaded with custom firmware.

That's a clever move. It means the Uno can operate in exactly the same way as a Duemilanove and maintain perfect backward compatibility with the previous model as well as third-party boards like our very own TwentyTen. It will probably also save a couple of bucks in manufacturing costs, because FTDI chips are ridiculously expensive. On the TwentyTen, for example, the FTDI chip costs us more than the MCU!

But it also means the Uno can do new things that are a problem for previous Arduino boards. The FTDI chip is a simple USB-to-serial bridge which is perfect for uploading sketches to an Arduino or sending back serial data, but it can't do things like pretend to be a "HID" (Human Interface Device) like a keyboard or a mouse. That takes a lot more flexibility, which is what the ATmega8U2 used on the Uno provides.

In the past it's been possible to emulate a USB HID such as a keyboard by creating a second USB connection controlled by the Arduino MCU directly, but you end up with two USB ports (the FTDI port for uploading sketches, and your own port for HID emulation) and it's remarkably tricky getting the software side of it right. I wrote up a project in Practical Arduino called the "Virtual USB Keyboard" based on work by Philip J Lindsay to do exactly that, but it's flaky both electrically and in the software side. Having a dedicated ATmega8U2 to take care of the connection allows the Arduino to provide both traditional USB-serial *and* HID support on the same port, depending on the firmware running in the 8U2.

All this explains the recent mention of Arduino being issued its own USB vendor ID! I was a bit confused about that at the time, but it all makes sense now.

Just as an aside, I find it a little amusing that the ATmega8U2 used for the Uno USB connection is pretty much the same as the MCU used on the very first Arduino, but with hardware USB support baked in. What was once the main MCU is now relegated to a secondary support task on the very board it used to control.

One possible issue for third-party board developers is the packaging options on the ATmega8U2. Assuming that the firmware for it is released by the Arduino team, I'm sure other board designers will want to incorporate it into their future designs instead of using an FTDI chip. The 8U2 is only available in QFN32 and VQFP32 packages, though, which makes it impractical for use by "fabricate at home" folks. The FTDI chip is surface mount and not exactly a pleasure to solder by hand, but with a microscope, a tiny soldering iron tip, and a steady hand it can be done. Many of the Freeduino kits rely on hand-soldering an FTDI chip to provide the USB connection. That's just not possible with QFN32 or VQFP32. It's not a problem for people like us who use pick-n-place machines and reflow ovens for automated assembly, but it makes one-off build-at-home projects close to impossible.

Of course there's nothing to stop people continuing to use an FTDI chip in their boards, and we'll continue with FTDI on the TwentyTen even though we could easily use QFN or VQFP chips.

My opinion overall is that the Uno is a very nice board and a very worthy iteration of the Arduino reference design. It maintains backward compatibility while adding the potential for interesting new functionality controlled by the firmware loaded into the ATmega8U2.

Great work, guys!

The official announcement is on the Arduino blog.

Leave a comment

Comments have to be approved before showing up.