05.10.2010

Optiboot в действии

Пока народ возмущается по поводу ахового качества первой партии плат 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 и прошивайте по вышеописанному методу.

6 комментариев:

  1. Интересно вот

    если на плате UNO стоит atmega8ua (или как там её)), почему бы не использовать её как статичный программатор (по типу USBasp), который, ко всему прочему, можно было бы использовать для программирования других МК, плюс, сэкономив ещё 512б на бутлоадере)

    чем старше версии Arduino, тем, имхо, неразумней использование входящих в неё компонент)

    ОтветитьУдалить
  2. Так напишите прошивку и поделитесь с общественностью! Уверен, скажут огромное спасибо!

    ОтветитьУдалить
  3. Для владельцев atmega168:
    В optibootv3 ошибка в файле boards.txt
    diecimilao.bootloader.extended_fuses=0x02
    значение должно быть 0x04.

    У меня после заливки скетча выполнение запускется только после ручного сброса.

    ОтветитьУдалить
  4. Да, есть некоторые неприятности с optiboot...

    ОтветитьУдалить
  5. Залил на купленный у Вас FreeDuino MaxSerial c 328ой атмегой. Работает вроде все, либо я чего-то не знаю =).

    ОтветитьУдалить
  6. Я тоже запутался. То работает, то не работает. Мистика какая-то...

    ОтветитьУдалить