вторник, 19 октября 2010 г.

Optiboot для Arduino Duemilanove (atmega168)

Долгое затишье в моем блоге обосновано проектом, которому отводится большая часть непродолжительного свободного времени. Ему будет посвящен следующий пост. Как раз подходя к финальной черте столкнулся с проблемой нехватки свободного места под программу. Хотелось уместить все в atmega168 и в то же время оставить бутлоадер. Пляска с бубном вокруг кода особого выйгрыша не дала, некуда было уместить примерно 1К (хотя уже мелькали статьи о сокращении бутлоадера до 1К) и тут как гром среди ясного неба появился optiboot и новая Arduino Uno.

Итак, пришло время залить новый бутлоадер и тестировать проект на нем с достаточным количеством флэша для программы.

Что потребуется:
Arduino Duemilanove
Клемы на плату (штыри 1х4)
Шлейф на 4 провода с розетками на провод 1х4

Вот как я это делал:
1. Припаял штырек к Arduino c выводами от микросхемы FT232RL.
2. Соединил с ISP разьемом.


3. Скачал avrdude-serjtag, конфигурационный файл avrdude.conf и avrdude-GUI отсюда. Короче говоря, прошивать строго по этой статье за исключением eFuse, их для m168 нужно установить в 0x04. Настройка аналогично рисунку.



4. Скачать сам загрузчик optiboot, скомпелированный файл для duemilanova и decemila уже есть в архиве, здесь: .\Optiboot_v3\optiboot\bootloaders\optiboot\optiboot_diecimila.hex. Его и выбираем в avrdude-GUI в поле Flash.

5. Подключаем Arduino к USB и жмем кнопку read в программе в области Fuse. Если фьюзы прочитались, удаляем -B 4800 из настроек опций командной строки. И еще раз читаем фьюзы и убеждаемся что все ОК.

6. Жмем Erase, выставялем фьюзы в hFuse DDh, lFuse FFh, eFuse 04h. Жмем write для фьюзов. Жмем Erase-Write-Verify, проверив, что выбран нужный файл бутлоадера в поле Flash.

7. Дожидаемся завершения процесса. И устанавливаем Lock Bit в 0Fh и записываем нажав Write в этой области.

8. Отключаем шлейф от ISP. Берем файл boards.txt из архива optiboot и копируем в Arduino IDE 0021 на место родного.

9. Запускаем Arduino IDE, выбираем порт и board на нашу duemilanove, там они будут с префиксом [optioboot] и заливаем для проверки стандартный example Blink. НАЖИМАЕМ RESET НА ПЛАТЕ. (автозапуск почему-то не работает после заливки скетча)

10. Убеждаемся в работоспособности. Тестируем.


Update: 19/10/2010 20:08
Большие скетчи, которые граничат с максимально допустимым размером пока не загрузить. Вот открыли issue по этому поводу: http://code.google.com/p/arduino/issues/detail?id=380