Пока народ возмущается по поводу ахового качества первой партии плат Arduino Uno, а отцы-основатели оправдываются в своем блоге, что "ложка дегтя никак не портит бочку меда", я решил опробовать новый 512-байтный optiboot. По причине отсутствия под рукой оригинального Arduino Uno, все эксперименты проводил на Duemilanove.
Итак, придется скачать ArduinoIDE 0020 под Windows - даже если у вас, как и у меня - Linux (примечание: на момент написания статьи версии 0020 под Linux еще не было, но теперь уже можно качать 0021). В качестве альтернативы подойдет архив со страницы optiboot на google code. В обоих вариантах вы получаете готовые откомпилированные .hex-файлы для всех плат Arduino и совместимых с ней клонов, но учтите - по умолчанию ArduinoIDE 0020/0021 поддерживает только Arduino Uno с МК ATmega328P и тактовой частотой 16 МГц.
Понадобится также и ISP-программатор - подойдет любой, хотя бы даже и на резисторах и LPT-порту.
Простейший способ апгрейда: подключите программатор к разъему ISP6 вашего Arduino, запустите ArduinoIDE (0020 и выше), в меню Tools|Board выберите Arduino Uno, затем шейте через Tools|Ваш программатор.
Если вы не нашли программатор в списке, хотя точно знаете, что он поддерживается avrdude, попробуйте добавить его описание в файл hardware/arduino/programmers.txt. Например, если у вас USBasp, допишите строчки:
usbasp.name=USBasp usbasp.communication=usb usbasp.protocol=usbasp
Если у вас все еще нет возможности пользоваться ArduinoIDE 0020/0021, не беда - копируйте каталог hardware/arduino/bootloaders/optiboot из нее в свою "старушку" версии 0019 и добавьте в файл hardware/arduino/boards.txt:
uno.name=Arduino Uno uno.upload.protocol=stk500 uno.upload.maximum_size=32256 uno.upload.speed=115200 uno.bootloader.low_fuses=0xff uno.bootloader.high_fuses=0xde uno.bootloader.extended_fuses=0x05 uno.bootloader.path=optiboot uno.bootloader.file=optiboot_atmega328.hex uno.bootloader.unlock_bits=0x3F uno.bootloader.lock_bits=0x0F uno.build.mcu=atmega328p uno.build.f_cpu=16000000L uno.build.core=arduino
Наконец, для истинных поклонников кристалльной ясности (командной строки :), можно предложить все сделать парой команд (на примере AVRDoper):
avrdoper -c stk500v2 -P avrdoper -p m328p -e -u -U lock:w:0x3f:m -U efuse:w:0x05:m -U hfuse:w:0xde:m -U lfuse:w:0xff:m avrdoper -c stk500v2 -P avrdoper -p m328p -U flash:w:optiboot_atmega328.hex -U lock:w:0x0f:m
Собственно, вот и всё - теперь у вас плата, программно совместимая по бутлоадеру с Arduino Uno, свободно 31,5 Кбайт памяти программ, скетчи заливаются со скоростью 115200.
Если же у вас плата с МК ATmega168 или не на тактовую частоту 16 МГц, но очень хочется задействовать optiboot - скачайте архив optiboot с google code, там вы найдете boards.txt с описаниями большей части существующих плат. Скопируйте нужную секцию в свою ArduinoIDE и прошивайте по вышеописанному методу.
Интересно вот
ОтветитьУдалитьесли на плате UNO стоит atmega8ua (или как там её)), почему бы не использовать её как статичный программатор (по типу USBasp), который, ко всему прочему, можно было бы использовать для программирования других МК, плюс, сэкономив ещё 512б на бутлоадере)
чем старше версии Arduino, тем, имхо, неразумней использование входящих в неё компонент)
Так напишите прошивку и поделитесь с общественностью! Уверен, скажут огромное спасибо!
ОтветитьУдалитьДля владельцев atmega168:
ОтветитьУдалитьВ optibootv3 ошибка в файле boards.txt
diecimilao.bootloader.extended_fuses=0x02
значение должно быть 0x04.
У меня после заливки скетча выполнение запускется только после ручного сброса.
Да, есть некоторые неприятности с optiboot...
ОтветитьУдалитьЗалил на купленный у Вас FreeDuino MaxSerial c 328ой атмегой. Работает вроде все, либо я чего-то не знаю =).
ОтветитьУдалитьЯ тоже запутался. То работает, то не работает. Мистика какая-то...
ОтветитьУдалить