Пользователь
0,0
рейтинг
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
Andrew Kambaroff @RaJa
карма
164,0
рейтинг 0,0
Реклама

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

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

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

        ATMEGA32U4 — 147р

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

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

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

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

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

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

Интересные публикации

Вакансии