С момента выпуска первой версии Arduino Uno произошло небольшое изменение, связанное с процессом загрузки ATmega8u2 через DFU-бутлоадер. Если раньше надо было сначала замкнуть перемычку DFU и, удерживая ее, замкнуть замкнуть RESET и GND, то теперь надо только замкнуть сброс (ура! ;). На английском языке об этом можно почитать подробнее здесь.
А всего-то надо было добавить резистор-подтяжку 10К к земле:
Работать так действительно удобнее, поэтому на оставшиеся платы Freeduino One тут же были напаяны резисторы 10К 0805 - выглядит это гораздо надежнее и аккуратнее:
Ну и напоследок - немного о том, как изменить прошивку в ATmega8u2.
Для начала потребуется программное обеспечение, способное договориться с DFU-бутоладером о заливании новой прошивки:
- Linux: sudo apt-get install dfu-programmer
- Windows: скачайте с сайта ATMEL FLIP:
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3886 - Mac: поставьте MacPorts http://www.macports.org/install.php#pkg, затем в окне терминала - почти как в Linux: sudo port install dfu-programmer
При наличии готового .hex-файла, дальнейшие действия сводятся к переводу ATmega8u2 в режим DFU и заливке результата.
При подключенной шине USB аккуратно замыкаем (буквально на секунду) RESET и GND на посадочном месте гребенки программирования ATmega8u2. Далее в syslog наблюдаем отключение устройства /dev/ACM и подключение нового девайса, а Диспетчере Устройств Windows просто можете обратить внимание, что олицетворявший раньше плату Arduino / Freeduino послеодовательный порт пропал.
VID и PID этого устройства одинаковые и для Arduino Uno, и для Freeduino ONE - в противном случае не будет работать FLIP. VID будет ATMEL/0x03EB, а PID соответствует типу МК - для ATmega8u2 это будет 0x2FF7.
Теперь берете hex-файлы (в дистрибутиве ArduinoIDE они обитают в каталоге hardware/arduino/firmwares или берите из github). Дальше - в зависимости от того, чем прошиваете:
Linux
sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash Arduino-usbserial-uno.hex
sudo dfu-programmer at90usb82 reset
Windows
Тут, как всегда - всё тоже самое, но визуально. Выглядит FLIP приблизительно так:
Если на какой-то фазе что-то пойдет не так - всегда можно проделать это повторно: сам бутлоадер, естественно, никуда не денется. Но настоятельно рекомендую обратить внимание на такую деталь (особенно это касается Windows-пользователей, которым требуется установка .inf-файла с явно пробитыми VID и PID): после заливки hex-файлов из дистрибутива ArduinoIDE, вы получите пару значений VID=0x03EB и PID=0x204B, которые ATMEL от щедрот презентовал LUFA под проект USBtoSerial. Фшика в том, что на этой паре VID/PID могут сидеть разные устройства - для того, чтобы их отличать, используется поле 'release number' (это чем-то напоминает ситуацию с V-USB). И если это по какой-то причине вас не устраивает, рекомендую перед началом экспериментов сохранить оригинальную прошивку командой dump.
Альтернативный вариант - научиться самостоятельно компилировать прошивки ATmega8u2. В принципе - это тоже несложно, скачайте и распакуйте LUFA в каталог с прошивкой, например в hardware/arduino/firmwares/arduino-usbserial. Найдите и отредактируйте в makefile путь к LUFA таким образом, чтобы он указывал на актуальное местоположение распакованного архива библиотеки, например:
# Path to the LUFA library
LUFA_PATH = ./LUFA
Убедитесь, что библиотека и исходники собираются правильно по make all. Только после этого рекомендую приступать к модификациям - например, VID/PID описаны в файле Descriptors.c.