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
    • 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
          Покупать такие — без штанов останешься — лучше уж самому травить.

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

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