19 марта 2012 в 21:37

AVRDudeR — встраиваем avrdude в IDE


Arduino — хорошая платформа для самоделкиных вроде меня.
Удобная, все в ней уже есть.

В чем проблема?

Программная часть мне далеко не всем нравится. Особенно ужасна Arduino IDE. Каждый файл открывается в новом окне, оставляя пустое запущенное окно IDE. И прочие мелкие глупости, которые привыкших к удобству Visual Studio, Borland/Embarcadero RAD IDE расстраивают и вызывают неудовольствие.
К счастью, мы можем использовать любую IDE какая понравится. Для готовых проектов, которые только скомпилировать и прошить или собственных пробных поделок вполне годится тот огрызок Wiring, который компилируется Arduino IDE.
Для удобства работы я использую Visual Micro Arduino — удобство Visual Studio, быстрая компиляция, прошивка стандартными средствами.

Arduino без Arduino IDE

Ступенькой выше стоит прямая работа с микроконтроллером, тут уж в вольны делать что захотите. Часто это удобнее чем разбираться в начинке библиотек Arduino. Но приходится использовать либо AVR Studio либо стороннюю IDE и компилятор от Atmel (благо, он совершенно бесплатный и входит в AVR Tools).
Все бы хорошо, но про Arduino они ничего не знают и прошить ее не могут. И вот тут начинаются неудобства.

Кому неинтересны детали, переходите сразу к делу, скачиваем и настраиваем.

AVR Studio неплохая среда, правда версия 4 довольно примитивная, а 5я тяжеловесна. Ни та ни другая кроме как через фирменный программатор прошивать не умеют. Засада.
Я взял проект бутлоадера, который совместим с AVR Studio, притворяясь AVRISP программатором. Интерфейс же с ним в AVR Studio оказался далеко не самым удачным.

Что делать?

Есть AVRDUDE — бесплатный прошивальщик, который работает почти со всеми программаторами для ATMEL микроконтроллеров. Но он консольный. Вроде бы не проблема, написал cmd или bat файл и все дела, запускай его после компиляции и всего делов. Но у меня, как, наверное, у многих, не одна плата. А каждая плата Arduino видится в системе как отдельный COM-порт. Каждый программатор тоже. В платах установлены разные микроконтроллеры (Atmega168P, Atmega328P). Не считая самодельных Arduino-совместимых плат или вообще с голым микроконтроллером и обвязкой.
Каждый раз лазать в bat файл и править настройки под разные платы или переключаться в другое приложение чтобы его запустить для прошивки, чтобы проверить работу когда я поменял пару байт в коде, лично мне надоедает, да и ошибок возникает немало, так и контроллер убить недолго. Хуже того, с FTBB программатором работает только отдельная версия avrdude, пропатченная под него и ничего не знающая про arduino. А значит, если мы прошиваем через него, то нужно держать еще один bat файл.
В Code::Blocks IDE, которая мне больше понравилась по возможностям форматирования и удобству работы с кодом, ситуация немногим лучше, разве что можно передавать внешней утилите параметры.

Автоматизация запуска avrdude с нужными параметрами


Мне эта ситуация надоела и я написал небольшую программку, которая получает в командной строке 2 параметра:
— имя конфигурационного файла
— имя файла прошивки

Утилита сама запускает avrdude с параметрами, указанными в конфигурационном файле (просто файл с готовыми настройками для прошивания), дожидается прошивки и закрывается. Это позволяет прошивать проект в любой имеющийся микроконтроллер в процессе отладки в 2 клика прямо из Code::Blocks.
Если запустить с одним параметром, прочитает соответствующий файл конфигурации, если с двумя, попытается автоматически залить прошивку из второго параметра.

Если заинтересовало, качаем AVRDudeR

Встраивается в IDE очень просто (дольше рассказывать, чем сделать):
Добавляем в меню Tools два пункта меню — для изменения настрек и для прошивки

Для изменения настроек прописываем:

Для прошивки:

По сути в настройках прописаны: первый параметр — файл avrdude.ini, который мы сохраняем при настройке в папку проекта, второй параметр — имя файла прошивки.

Процесс настройки выглядит так:
  • Подключаем программатор или плату Arduino с которой будем работать, чтобы в системе появился нужный COM порт.
  • Запускаем Tools->R AVRduder: Setup, выбираем настройки и сохраняем файл с настройками в каталоге своего проекта под именем avrduder.ini (или то, которое указали в настройках). Закрываем утилитку


Теперь скомпилировав проект, выбираем в меню Tools->R AVRDudeR: Flash и готово.

Обе версии avrdude уже лежат в архиве, ничего настраивать и прописывать в AVRDudeR не нужно.

Немного о настройках:


MCU — микроконтроллер (понятное имя и код для командной строки avrdude программа берет из mcu.lst)
Programmer — программатор. FTBB, Arduino с соответствующей прошивкой в качестве ISP программатора (ArduinoISP), или подключенная напрямую Arduino. (Текст пунктов меню и коды для строки программатора в файле programmers.lst)
Port: ну собственно COM порт программатора или Arduino (поэтому нужно чтобы плата была подключена во время настройки).
Baud rate: скорость порта. Для Arduino до UNO — 57600, UNO — 115200. В вашем загрузчике сами знаете какую настроили, а для FTBB режима этот параметр игнорируется.
Dude type: как раз тут и выбираем какой avrdude — обычный или для FTBB программатора использовать.
Галка Show Result — открыть при прошивке окно, в котором виден процесс прошивки, если вам неинтересно и вы уверены что все работает верно, не ставьте ее, программа просто выведет сообщение, когда avrdude закончит работу и сама закроется.


Саму программу можно использовать для заливки прошивки напрямую, не встраивая.
просто дважды щелкаем в поле Firmware, выбираем файл прошивки (или просто вставляем путь к файлу руками) и жмем Flash Firmware. Файл конфигурации работает и в этом случае.

Если сменился контроллер или подключили в другой порт, через другой программатор, просто выбираем Tools->R AVRDuder: Setup и открывается файл с настройками этого проекта (или настройками по умолчанию, если в папке с проектом avrduder.ini отсутствует). Меняем порт или программатор, контроллер или что там у нас поменялось и сохраняем обратно avrduder.ini в папку проекта. Все.

Да, avrdude.ini можно просто таскать из проекта в проект, если работате с одинаковыми платами/программаторами. Просто скопируйте его в папку нового проекта и можно ничего не настраивать вообще.
Ах да, чуть на забыл, в Code:Blocks я выбрал GNU AVR GCC Compiler и указал только папку к AVR Tools. А проект настроил вот так:

Тогда компилятор создает файл .elf.hex, который мы и прошиваем. Если у вас по-другому, измените второй параметр, передаваемый в AVRDudeR, чтобы он передавал имя файла прошивки.

Надеюсь, кому-то это сбережет нервы, повысит производительность и позволит сосредоточиться на собственно работе над идеей, а не возиться с кучей приблуд при каждой компиляции и заливке проекта.
Если утилита окажется полезной, пользуйтесь на здоровье.
UPD Утилита все-таки пригодилась.
Новая версия доступна на google code
+15
10287
79
RaJa 81,0 G+

Комментарии (15)

0
avrfun, #
COM-портов становится сейчас все меньше, это не удобно.
Как вариант — можно пользоваться контроллерами с аппаратным USB,
например, Mega32U4, загрузка firmware там происходит одной кнопкой и через USB с помощью
бесплатной программы FLIP.
0
RaJa, #
А в чем проблема? FTBB программатор — это адаптер USB — TTL. В системе видится как виртуальный ком-порт.
Mega32U4 существенно дороже.
Моя минимальная Arduino-совместимая плата стоила 250 рублей примерно при самостоятельном изготовлении.
Программатор к ней делается из шнурка для телефона Siemens. или самостоятельно, я рассказывал как это делать, да и DiHALT рассказывал, схем программатора у него море. Вот они вместе в работе:
Ardu-Hummer
«Ardu-Hummer»
У меня на ноуте нет ни одного COM порта, но это не мешает нисколько. Все в использовани просто и удобно. Стоит дешево. Действительно дешево и действительно просто.
–2
avrfun, #
Ну, на самом деле купить U4 дешевле.

Элитан:
ATmega328 — 148 р
FT232RL — 94 р

ATMEGA32U4 — 147р

Статья полезная для новичков, продолжайте в том же духе :)
Хотелось бы отметить особо Вашу статью про гусеничного робота.
0
RaJa, #
:) Целый рубль разницы
Согласен, кому нужно сразу USB, наверное, имеет смысл купить ее. Хотя Software USB тоже неплохо работает и на Atmega168P, которая мне обошлась в 60 рублей в icdarom.
Спасибо за отзыв. Приятно, что людям интересно, то, что ты делаешь.
Кстати а Atmega32U4 по пинам совместима с Atmega168P? Если нет, то насколько она сложнее в применении и отличается вообще?
0
avrfun, #
нет, по пинам она не совместима, у атмел вообще плохо с пиновой совместимостью, это ST специалисты в этих вопросах.
Разница не на рубль, а на 95 р., так как при софтварной реализации USB Вы не добьетесь скорости больше 1-2 Mbit, поэтому без FT232 не обойтись в сравнении.
Различий в плане программирования Вы практически не заметите, это такая же мега, только прокачанее немного 2,5 SRAM, 32 K Flash, 10 каналов АЦП и конечно же поддержка USB 2.0.
В общем, попробуйте, это все таки USB, он еще долго не устареет.

ps. теперь я знаю, что такое форматирование предыдущего коммента народу не нравится :)
0
RaJa, #
Да, почитал даташит, там с периферией похуже местами, в общем не полноценная замена, конечно. PWM только 4, например. В чем-то получше, разумеется.
Но 95 рублей то мы тратим только раз, программатор нам нужен только 1.
По USB выской скорости мне и не требуется, используется как интерфейс только. Вот когда понадобится, можно поставить 32U4.
А UART не устареет очень и очень долго. Bluetooth — этот тот же UART только по радиоканалу. множество USB устройств так и работают в режиме эмуляции UART.
P.S. симпатии народа бывает сложно предсказать )
0
smartly, #
Программирую через адаптер на FT2232. По USB и без ком-портов.
0
RaJa, #
FT2232 — это хорошо, как раз в режиме bitbang скорее всего работает. На деле это микросхема с двумя COM портами :) Режим bitbang позвляет использовать выводы не по назначению и просто дергать ножками в нужном темпе. Эмулируется таким образом, например протокол STK500.
Этот режим как раз и поддерживается вторым вариантом — avrdude FTBB. Я его тоже использую с FTBB программатором.
Момент таков — если заливать не через COM порт а по ISP, то затирается бутлоадер Arduino и мы имеем возможность только программатором обновлять прошивку. Если же не хочется затирать загрузчик, то шьем через виртуальный COM порт. Я, например, для экспериментов предпочитаю пользоваться загрузчиком — проводов меньше, быстрее, меньше шансов напортачить. А в готовом устройстве лучше без загрузчика, он там не нужен особо. Вот поэтому и возникает столько вариантов. А когда вариантов много, запоминать все лень. Для того и написал себе утилку. Кому-то нужно, кому-то как вам вполне хватает одного режима.
0
smartly, #
Нет. Не в режиме bitbang, а в режиме MPSSE. Он там для этого и сделан. После перевода в этот режим один из ком-портов из системы пропадает. Ну и мне как-то удобнее без загрузчика. И зашивать его не нужно, и uart не занимается (не нужно мультиплексировать). И тулза для программирования удобнее загрузчиков.
0
RaJa, #
Я для отладки все равно часто использую вывод в UART, поэтому чтобы не подключать кучу проводов, удобно и прошивать и отлаживать одним кабелем.
а MPSSE где-то нормально описан? На сайте FTDI есть ссылка на библиотеку, но про тулзу ни слова.
0
smartly, #
В доке к библиотеке и описан. Ну а тулза-то не ftdi-шная. Тулза real.kiev.ua/avreal/

Отладочный вывод и я использую. Только UART мне жалко отдавать, выдаю через свободный пин программно. Вот тут второй канал FT2232 и задействуется.
0
RaJa, #
Тоже хороший вариант. Правда прелести тулзы оценить не могу, она тоже консольная. Чем лучше avrdude, непонятно
А зачем UART отдавать? он же после загрузки прошивки свободен. Занят только во время работы бутлоадера, к работе программы отношения не имеет.
0
smartly, #
Ну, avreal появился раньше avrdude, я его ещё под ДОСом использовал. Ну и он умеет ft2232 mpsse, а avrdude не умеет. Правда, avrdude умеет usbasp, но usbasp, хоть и дешевле, но больно медленный.

И загрузчик-то надо чем-то зашить )
Чтобы после загрузки использовать UART, надо думать над каким-то мультиплекстрованием. (ну хотя бы на резисторах)

Вот мне бы штук пять UART-в в контроллере. Тогда бы шестой отдал чисто на загрузчик/отладку. :)
0
RaJa, #
Ясно. Загрузчик никаких проблем зашить, есть и FTBB собственноручно сделанный и Arduino в режиме ISP программатора тоже отлично справляется зашить свою товарку бутлоадером.
Насчет мультиплескирования пока не заморачивался, вроде и так работало все пока.
Да уж, UARTов вечно не хватает.
0
ZekMan, #
Может немного не в тему, но все же, у кого есть — подкиньте схем (.lay например) макетных плат для smb корпусов :3
Что то типа image
Покупать такие — без штанов останешься — лучше уж самому травить.

Только зарегистрированные пользователи могут оставлять комментарии.
Войдите, пожалуйста.