Hardware:There are two modifications to do:Solder 2 jumpers: one on the HWB line and one between pin 5 & 6 on ISP1 for RESET

How to put the Uno on DFU mode: 4. put the 8U2 into USB DFU mode: 4.a. assert and hold the 8U2's RESET line 4.b. assert and hold the 8U2's HWB line 4.c. release the 8U2's RESET line 4.d. release the 8U2's HWB line The device became USB DFU

Hardware, drivers installation:

Arduino Uno: drivers are on arduino-0020\drivers

Arduino Uno DFU: drivers are on Atmel\Flip 3.4.2\usb

Verify the boardUpload blink program on your uno to check that the board is working fine.

Compile firmware

To be sure that's working i change a line in Descriptors.c:UnicodeString = L"Arduino Uno" by UnicodeString = L"ArduINo UNO"

Open WinAvr/Programmer Notepad

Load makefile

I modify LUFA_PATH => LUFA_PATH = ../../

You should have to modify ARDUINO_MODEL_PID if you use MEGA

Do Tools[ch8594]Make clean

Do Tools[ch8594]Make all

Upload Arduino-usbserial.hex on the board

make sure the board is in DFU mode

Start Flip

Select the device AT90USB82 (not the ATmega8u2!!)

Open usb communication

Select Load Hex file

Program target device memory

TestUnplug the board and re-plugThe Name of the board should have changed : it becomes "ArduINo UNO"

Verify the boardUpload blink program on your uno to check that the board is still working fine.

Hi,This is the next step : how to make a joytick emulator with the arduino-uno.

First stepBe sure to be able to upload the initial firwmare arduino-serial: we need this firmware to upload the Atmega328.

How it worksThe Atmega328 sends to 8u2 a byte on serial communication that represents the state of the joystick.

Point of attentionIt's important to load first the atmega328 program and then the 8u2 firmware.Once the firmware of 8u2 is upload with joystick program, atmega328 can't be loaded.In order to modify atmega328 program, the original firmware of 8u2 need to be re-loaded.

I had trouble with the arduino-0021 version of arduino-usbserial. After building and programming it onto the 8U2 the Windows would ask to install drivers for the new device. After pointing the installation to the arduino drivers directory windows would report a failure in driver installation. The Arduino IDE would not recognize the UNO after that... :-/ I compiled the 0020 version and my UNO is back in action... 8-)

I noticed in the 0021 release mentioned tweaks to PID/VID values... wondering if that has something to do with it. I don't have time to look at it tonight it's 12:50am

Great tutorial ant.b! Can't wait to try the joystick version tomorrow.

Update: In the arduino-0021 version of arduino-usbserial the Descriptor.c file is using VID = 0x03EB (Atmel) and PID = 0x204B (LUFA USBtoSerial demo). The Arduino UNO.inf is looking for VID=0x2341 and PID=0x0001 which is reflected in arduino-0020...

I see in the 0021 release notes indicate "Modifying VID / PID combination in 8U2 firmwares" but was this the intent?

According to the USB folks, we're not really allowed to share our VID / PIDs with other organizations. So the firmware was modified to use other ones. Probably we should create a different version of the .inf file that uses the other VID/PID pair. The intent is that any VID/PID pair should work with the IDE, but that the Arduino ones should only be used with the official Arduino hardware.

Awesome work! I wasn't looking forward to working out all this stuff on my own.

The only problem I've encountered is loading the DFU drivers in windows 7. It seems they aren't signed so win7 refuses to allow access to the device via Flip. I had to install it on an XP machine before I could write my newly compiled .hex to the 8U2.

There are ways of making win7 load unsigned drivers in test mode, but this is cumbersome.

Here's a way to get the Uno into DFU mode without any soldering. Put two wires into GND pins on either side of the board. Then put the other ends of the wires on the board as follows:

The sequence is, hold the first wire on the top left 8u2 ICSP pad, then touch the second wire against the left side of the capacitor below the RX LED. Then remove both wires. It's slightly different to the sequence in the instructions but it seems to work.

Be careful with the second wire as the capacitor is quite near a 5v track. You can try using a low-value resistor instead of a wire if you are worried about blowing up your board.

To get back to normal mode, hold wire 1 in place as above, press the reset button, then remove wire 1. Or just unplug the USB cable and plug it back in.