Компиляция AVRDude для FT232RL BitBang.
РадиоКот >Статьи >Компиляция AVRDude для FT232RL BitBang.
Как известно – AVRdude (дуда) — популярная консольная программа с открытым исходным кодом для программирования AVR контроллеров. Поддерживает значительное количество программаторов как самодельных так и промышленных, простейших и сложных. От версии к версии разработчики устраняют баги в программе и дополняют поддержкой новых мк и программаторов. На данный момент доступна версия 6.3. Так как программа относится к категории свободного ПО, то модернизировать ее могут и сами разбирающиеся в программировании пользователи или другие разработчики. Как правило исправления и дополнения публикуют в виде патчей (patch-files) с расширением patch или diff, в которых содержатся отличия от оригинальных файлов исходника. Применение этих файлов и есть пропатчивание или патчинг, после которого следует компиляция. Необходимость компиляции avrdude возникла когда хотел применить конвертер USB/UART на FT232RL в качестве хорошо известного BitBang-программатора.
Готовая avrdude-6.3 с официального сайта, а так же дуда из состава Arduino IDE крайней версии , как оказалось, не поддерживают BitBang и предлагают это сделать самим пользователям, установив необходимые библиотеки и скомпилировать.
Ссылки на готовую дуду с поддержкой BitBanga смог найти только для версий 5.8-5.10 5-7-летней давности, поэтому решил собрать avrdude-6.3 самостоятельно. На сайте был обнаружен патч для поддержки BitBanga от Алексея Решетникова, применение которого заменяет библиотеку libusb на ft2xx как более стабильную. Компиляция осуществлялась в известном MinGW. Поскольку все это делалось впервые и познания в программировании весьма скромные, то без “танцев и плясок с бубном” не обошлось. О том как получилось скомпилировать avrdude для BtBanga решил поделиться с теми кому интересен этот процесс.
Установка MinGW.
1. Скачиваем установщик MinGW и запускаем его.
2. Установщик создаст на диске папку MinGW, загрузит и запустит MinGW Installation Manager:
3. Отмечаем ПКМ первые два пункта основных компонентов MinGW и последний из списка. В меню Installation выбираем пункт Apply Changes. Далее Apply. Начнётся загрузка компонентов.
4. По окончании загрузки будет сообщение о завершении и загруженные компоненты отметятся зеленым квадратом. Закрываем Manager.
Установка драйверов для FT232RL.
1. Качаем с официального сайта FTDI крайнюю версию драйвера и распаковываем в папку, например: С:/FT232RL_drivers.
2. Втыкаем конвертер (программатор) в USB и устанавливаем скаченные драйвера для USB Serial Converter и USB Serial Port . Если драйвера уже установлены – обновляем.
Подготовка к компиляции
1. Запускаем оболочку MinGW (C:/MinGW/msys/1.0/msys.bat), что создаст home директорию: C:/MinGW/msys/1.0/home/[username],
где [username] – папка с именем компьютера.
2. Скачиваем исходник AVRDude, достаем из архива папку Avrdude-6.3 и помещаем в папкуC:/MinGW/msys/1.0/home/ [username].
3. Скачиваем патч для FT232, предоставленный Алексеем Решетниковым, распаковываем и помещаем в ту же папку, например:
4. Копируем файлы из папки драйверов: ftd2xx.h в папку C:/MinGW/include; i386/ftd2xx.lib в папку С:/MinGW/lib.
Компиляция.
В командной строке MinGw32 пишем команды и следим за их выполнением . Вводить команды следует внимательно, без ошибок. При ошибочном вводе, компилятор укажет на это, но может и зависнуть, если пропустить какой ни будь символ. Ранее введенные команды можно выбрать стрелками вверх/вниз и повторить после исправления.
cd avrdude-6.3
for file in ../patch-*.diff; do patch –p0 < $file; done # патчинг исходников avrdude
aclocal
autoconf
autoreconf –i –f #Устраняет ошибку несоответствия версий libtool
./configure LIBS=”-lftd2xx”
По окончании конфигурации увидим следующее:
make # Выполняется несколько минут
По окончании в папке avrdude-6.3 появятся файлы avrdude.exe и avrdude.conf.
strip avrdude.exe #удаляет в файле служебные символы, за счет чего уменьшается размер файла раза в 3.
Проверка:
avrdude -v
Далее работу BinBanga можно проверить с подключенным контроллером из какой ни будь оболочки avrdude типа Барномат (Burn-O-Mat ) или Avrdudess. Из списка программаторов выбираем «FT232R Synchronous BitBang». Подключение согласно указанному в конфиге (avrdude.conf):
programmer
id = «ft232r»;
desc = «FT232R Synchronous BitBang»;
type = «ftdi_syncbb»;
connection_type = usb;
miso = 1; # RxD
sck = 0; # TxD
mosi = 2; # RTS
reset = 4; # DTR
;
где числа – номера портов (0-7 можно менять)регистра ввода/вывода FT232RL. Чтобы после программирования мк использовать UART (Rx и Tx) рекомендуют другое универсальное подключение:
programmer
desc = «FT232R Synchronous BitBang»;
type = «ftdi_syncbb»;
connection_type = usb;
miso = 6; # DCD
sck = 5; # DSR
mosi = 3; # CTS
reset = 7; # RI
buff =~ 4; # DTR
;
Эту запись вставить в конфиг вместо выше приведенной или дополнить с другим именем.
Tx и Rx соединяют с Rx и Tx мк соответственно. Что бы использовать UART после программирования следует передернуть USB или использовать кнопку RESET, подключенную к одноименному выводу FT232RL.
buff – сигнал для буфера (если есть 74HC125 и др.), если используется буфер на 74HC126 или аналогичный, признак инверсии сигнала “ ~ “ следует удалить. При использовании буфера линия RESET подключается напрямую к одноименной линии мк, а не через буфер.
Скорость программирования зависит от параметра “ –B “ – период тактирования в мкс. По умолчанию = 100 мкс. Наибольшую скорость записи удалось получить при параметре “ –B 10 “, приблизительно одинаково, что и при заливке через бутлоадер на скорости 115200 Бд. 30 Кбайт пишется за 12-13 сек.
Далее следует отметить, что после завершения работы с мк, программатор линию RESET оставляет в 0, поэтому запуск мк возможен только после отсоединения этого вывода. Может быть кому то нужно , что бы программатор “отпускал” линию RESET (установил в 1) после программирования автоматически. Это можно сделать путем доработки исходника ft245r_ftd2xx.c, который образуется после патчинга в папке Avrdude-6.3. Следует внести пару строк в функцию ftd2xx_disable и продолжить компиляцию:
В архиве пропатченная дуда -6.3 не только для BitBanga, но и для ScratchMonkey программатора на Arduino Nano.
Ссылки:
- Compiling avrdude with MinGW/MSYS.
- Avrdude 5.10 with ftdi bitbang on linux.
- https://suz-avr.sblo.jp/article/33907127.html
Файлы:
Avrdude-BitBang
Все вопросы в Форум.
Как вам эта статья? | Заработало ли это устройство у вас? |
Графическая оболочка для avrdude под MacOS
Программа avrdude поддерживает все актуальные программаторы микроконтроллеров AVR и является кроссплатформенной (Linux, Windows, MacOS). Это консольная утилита и её удобно вызывать из shell/bat-скриптов. Единожды написав такой файлик и положив его в директорию с проектом, получаем возможность быстро прошить и проверить фьюзы, flash и eeprom микроконтроллера. Проблема только в том, чтобы написать этот скрипт. И тут основную головную боль вызывают fuse-биты, т.к. надо правильно сформировать их значения нигде не ошибившись. Иначе, устройство, в лучшем случае, может не заработать совсем или работать неправильно. Ну а в худшем случае можно «окипрпичить» микроконтроллер.
Для avrdue написано много разных графических оболочек под Windows, но среди всего этого многообразия не так просто найти удобный и не сильно глючный софт. Основное требование к оболочке — возможность работать с fuse-битами не как с числами или набором непонятных чекбоксов, а в нормальном человекочитаемом формате. Под MacOS вариантов оболочек совсем не много, но, к счастью, есть open-source проект AVRFuses и с фьюзами там всё относительно неплохо. Плюс открытый исходный код даёт возможность неограниченно затачивать этот инструмент под себя.
Главное окно содержит пару вкладок — работа в flash/eeprom и работа с фьюзами. Тут всё просто — можно выбрать микроконтроллер и файл(ы) прошивки, а затем записать/прочитать/сравнить с содержимым памяти микроконтроллера. Собственно, кнопка ручного выбора микроконтроллера оказалась жутко неудобной — при переключении с одного проекта на другой приходилось каждый раз нажимать её и выбирать из немаленького списка нужный микроконтроллер. Поэтому, первым делом я добавил кнопку Autodetect, нажатие на которую стартует считываение сигнатуры микроконтроллера, подключённого к программатору, и определение его модели по этой сигнатуре.
На второй вкладке показаны фьюзы. Как в виде констант, так и списком, где их можно настроить имея минимально необходимые для этого познания. Перед тем, как что-то делать с фьюзами, их категорически желательно прочитать из микроконтроллера.
Существенный недостаток подобных оболочек в том, что при одновременной работе с несколькими проектами и частым переключением между ними, приходится каждый раз заново вбивать пути к файлам, и настраивать по памяти значения фьюзов, что скучно и отнимает время. Поэтому в оболочку была добавлена работа с проектами. Выбрав путь к прошивке и настроив фьюзы выбираем в меню ->Projects->New Project. Откроется окно, где можно посмотреть, отредактировать и сохранить все параметры.
Теперь переходить от проекта к проекту можно в один клик в меню Projects. Там же можно отредактировать созданные проекты.
Ссылки
Скачать последнюю версию с описанными доработками можно с моего github-аАвтор проекта, Jason von Nieda, весьма оперативно принимает pull-request-ы, и обычно, мои изменения попадают и в его сборку, которую можно скачать на сайте проекта.
В дальнейшем приложение умеет самообновляться по сети.
РадиоКот :: Программирование AVR под Linux
РадиоКот >Статьи >Программирование AVR под Linux
Наверное каждый кто пишет программы под AVR микроконтроллеры и имеет на компе Linux задумывался о том чтобы писать именно на нем. И часто это оказывается не так просто. Проблема тут в отсутствии единого подхода. Каждый выкручивается как может. В отличии от Windows, где поставил AVRstudio и все готово. (конечно и под винду есть другие варианты, но статья не об этом). Лично для меня этот вопрос был одной из главных трудностей при переходе на Linux. И даже когда я уже по большей части сидел только на нем, все равно частенько приходилось загружать Windows чтоб запустить родную студию 🙂 Поэтому я решил написать статейку на эту тему. Надеюсь она снимет некоторые вопросы у желающих писать программки для AVR под линуксом. Статья ориентирована скорее на начинающих, поэтому все будет подробно разжевано, а все консольные команды с пояснениями. Используется дистрибутив Linux Ubuntu, но все прокатит и на любом другом.
geany — прокачанный текстовый редактор с кучей вкусностей о которых ниже, в нем мы будем писать исходные коды.
avra или gcc-avr — компилятор для AVR, он превратит наш исходный код в прошивку для контроллера.
avrdude — крутой прошивальщик который поддерживает кучу разных программаторов и контроллеров, с его помощью будем заливать прошивку в контроллер.
Устанавливаем все это добро. Открываем терминал и вводим:
sudo apt-get install geany
sudo apt-get install avra
sudo apt-get install gcc-avr
sudo apt-get install avrdude
Возможно, некоторых программ не будет в стандартных репозиториях — тогда репозитории с ними нужно подключить, отредактировав файл /etc/apt/sources.list (после этого не забываем sudo apt-get update) или собрать из исходников. Короче, если что-то из этого на ваш дистрибутив не поставится — погуглите.
Теперь нам понадобится папка с аппноутами для каждого микроконтроллера. Можно взять из недр AVRstudio у кого она есть, но там в дефайнах используется символ ‘#’ на который ругается avra, так что во вложениях к статье есть архив с «хорошими» дефайнами. В эту же папку я кладу свои файлики с макросами которые я использую. Когда все это есть можно уже в принципе приступать к написанию кода. У меня в домашней директории есть папка Projects, а в ней папка AVR, в которой у меня лежит папка APPNOTES а так же все проекты (каждый в отдельной папке).
Таким образом путь, скажем, к дефайну для ATmega8 ~/Projects/AVR/APPNOTES/m8def.inc
А к исходному коду проекта Example ~/Projects/AVR/Example/Example.asm
Все дальнейшее в статье будет изложено исходя из такой структуры, хотя от этого мало что зависит и не составит труда адаптировать все это дело к другой системе.
Пишу я все на ассемблере, но опять же, не составит труда проделать то же самое на С, просто надо использовать gcc-avr вместо avra.
1. Создаем в Geany файл Example.asm с исходным кодом
2. Компилируем его с помощью avra:
avra —includepath ~/Projects/AVR/APPNOTES Example.asm
Опция —includepath указывает путь к папке, из которой будут браться все инклуды по умолчанию.
Т.е. в коде подключение файла с дефайнами будет выглядеть как .include «tn2313def.inc»
Примечательно, что в справке к avra эта опция значится как —includedir, но если так и ввести, то сама же avra начинает на это ругаться 🙂 так что пишем именно —includepath
Если в коде будут встречены ошибки, avra напишет нам об этом в консольку, с указанием номеров строк с ошибками. Если компиляция прошла успешно, то мы получим файлик Example.hex который нам и назо залить в контроллер.
3. прошиваем контроллер через avrdude
sudo avrdude -p t2313 -c usbasp -U flash:w:Example.hex
Опции:
-p указывем тип контроллера
-c — используемый программатор
-U указывает файл, с которым будет работать прошивальщик
Модификаторы flash:w: определяют каким образом будет использоваться указанный файл. В данном случае — запись во флеш.
Все, в принципе тут можно и остановиться, но ведь это неудобно до жути — каждый раз руками лапами вбивать всю эту лабуду в консоль. Да еще и в голове держать синтаксис команд, а она-то не резиновая. Вот тут то и настало время «вкусностей» Geany, из-за которых мы именно его и выбрали. Geany задуман как редактор именно для программистов, поэтому в нем есть три абстрактных действия с файлами: компиляция, сборка и запуск. При этом пользователь может сам определить какие команды должны выполняться в этих действиях.
Таким образом, мы получаем возможность повесить запуск avra на действие «компиляция» (или gcc-avr если вы пишете на С) а на «запуск» — avrdude. Еще останется свободным «сборка».
Запускаем наш редактор, открываем файл с исходником и жмем Сборка — Установить комманды сборки.
Видим вот такое окошко:
В поля «Скомпилировать» и «Выполнить» (на скрине подсвечено оранжевеньким) вводим соответственно команды для компиляции и прошивки в кристалл программы.
Все замечательно, но как указать имя файла если мы заранее его не знаем? Тут на помощь приходят 4 шаблона, которые Geany подставляет в команды в процессе их выполнения:
%f — имя текущего файла (в данном случае это Example.asm)
%e — имя текущего файла без расширения (Example)
%d — путь к папке, в которой лежит текущий файл (~/Projects/AVR/Example/)
%p — путь к текущему проекту (я так и не разобрался что это значит, но не важно :))
Так что команда для компиляции будет выглядеть так:
avra —includepath ~/Projects/AVR/APPNOTES %f
А для прошивки:
sudo avrdude -p t2313 -c usbasp -U flash:w:%e.hex
Теперь для того чтобы программа скомпилировалась достаточно нажать F8 (или кнопочку с треугольником и кружочком в самом верху), а чтобы прошилась в контроллер — F5 (или кнопочку с шестеренками).
Так гораздо удобнее, но все еще не идеально — avrdude требует запуска через sudo, поэтому нужно каждый раз вводить пароль при прошивке. Для устранения этой досадной несправедливости откроем терминал и введем:
sudo chmod +s /usr/bin/avrdude
Этим мы открываем права на запуск avrdude. Теперь можно запускать avrdude без sudo:
avrdude -p t2313 -c usbasp -U flash:w:%e.hex
Но и теперь процесс не полностью автоматизирован — если мы вдруг решили написать прогу для другого контроллера, то по прежнему нужно лезть в настройки и менять опцию -p у avrdude. Как заставить Geany самому распознавать контроллер? А например по строчке .include «m8def.inc» которая есть в каждой программе.
Для этого давайте напишем небольшой скрипт, который будет это делать. Вернее я его уже написал, а вам предлагается только почитать комментарии к нему, или даже просто скопипастить 🙂 Вот он:
WARNING!!! В статье не отображаются бекслэши, поэтому они заменены обычными слешами красного цвета: /
PART=`grep -m 1 «/.include /».*def/.inc/»» %f | grep -o «/(tn/|m/)[0-9]/+» | sed «s/tn/t/g»` && echo «target device: $PART» && avrdude -p $PART -c usbasp -U flash:w:»%e.hex» && exit
(В конце статьи есть файлик filetypes.asm, в котором все это есть. Можно вместо переписывания скриптов просто закинуть его куда надо (~/.config/geany/filedefs/filetypes.asm))
Всю эту здоровенную строку нужно вбить в поле «Выполнить»
Пояснения:
Сначала мы создаем строковую переменную PART, в которую заносим результат выполнения скрипта, определяющего тип контроллера (о самом скрипте чуть ниже)
Затем выводим в консоль название распознанного контроллера (просто так, для справки), потом запускаем avrdude, подставляя в него нужную опцию, ну и в конце я добавил exit чтоб окно терминала само закрывалось после удачной прошивки.
У связки && есть одна приятная особенность: следующая команда выполняется только в случае успешного завершения предыдущей. Таким образом, если при прошивке что-то пошло не так терминал не закроется и мы сможем почитать об ошибках.
Теперь подробнее о скрипте:
первый grep находит в файле с исходником строчку вида .include «[тут что угодно]def.inc», опция -m 1 указывает что не стоит продолжать поиск, если хотя бы одна строка найдена.
Второй получает то что нашел первый и его задача из всей строки высосать именно название контроллера. Делается это с помощью шаблона, задающего вид имени контроллера и опции -o которая говорит ему чтоб выводил только тот кусок что нашел, а не всю строку. Я использую только меги и тиньки, поэтому у меня только tn и m, но вы можете адаптировать скрипт и для других серий. Например для xmega будет (tn|m|x) а для AT90S (tn|m|x|[0-9]) (у AT90S название только из цифр) ну и так далее.
Последняя команда sed заменяет tn на t. Дело в том, что в аппноутах от Атмела тинька 2313 например зовется как tn2313, а avrdude ее понимает как t2313. Вот и приходится изворачиваться.
Ну вот, теперь все совсем уж замечательно и в конечном виде команды компиляции и прошивки выглядят так:
avra —includepath ~/Projects/AVR/APPNOTES %f
PART=’grep -m 1 «/.include /».*def/.inc/»» %f | grep -o «/(tn/|m/)[0-9]/+» | sed «s/tn/t/g»‘ && echo «target device: $PART» && avrdude -p $PART -c usbasp -U flash:w:»%e.hex» && exit
Осталась последняя маленькая деталь, которую стоит обсудить — фьюзы.
В принципе, avrdude позволяет их устанавливать, но для этого нужно укурившись даташитом пересчитать их в шестнадцатеричную систему и потом подсунуть в avrdude. Учитывая высокую вероятность ошибки и крайнюю трагичность ее последсятвий такой вариант сразу отметается. Мы же будем для этого юзать графическую оболочку к avrdude — avr 8 burn’o’mat. Качаем deb-пакет с их сайта, устанавливаем. У меня он просто так ставиться не захотел, пришлось подредактировать кое-что. Во вложениях к статье — исправленный deb-пакет. Если возникнут с этим проблемы — пишите в форум, разберемся.
При первом запуске ее нужно настроить. Переходим во вкладку Settings — AVRDUDE
Видим вот такое окно:
Сюда нужно ввести путь к avrdude, к файлу с ее настройками, тип вашего программатора и порт к которому он подключен. В общем, ставим все как на скрине.
Все, после этого выбираем нужный контроллер, жмем Fuses и правим их как надо.
Перед исправлением фьюзов сначала обязательно их считывайте с кристалла! Да и вообще, поаккуратней с ними 🙂
Можно даже запуск avr8-burn-o-mat повесить на оставшееся свободным действие «Сборка». Тогда вообще все просто замечательно выходит: F8 — скомпилировать, F5 — прошить, F9 — поправить фьюзы.
Ну вот и все, теперь вы сможете с легкостью писать AVR программки из-под вашего любимого линукса.
Удачи вам и правильных фьюзов 🙂
Файлы:
Архив с аппноутами для avra
deb-пакет с графической оболочкой для avrdude
~/.config/geany/filedefs/filetypes.asm
Все вопросы в Форум.
Как вам эта статья? | Заработало ли это устройство у вас? |
AVRDUDE — Софт/Прошивки — Радиотехника — Каталог файлов
AVRDUDE (сокращение от AVR Downloader-Uploader) представляет собой мощную утилиту, позволяющую посредством консольного интерфейса работать с памятью и прошивать микроконтроллеры от компании Atmel. AVRDUDE основана на распространенном интерфейсе обмена данными с микросхемами – SPI. Программа позволяет прошивать FLASH- и EEPROM-память, программировать фьюзы, выполнять верификацию FLASH-памяти с выбранным HEX-файлом, работать в терминальном режиме и многое другое.
Данный софт получил огромную популярность вследствие поддержки широчайшего спектра микроконтроллеров и программаторов (FT2232, Atmel AVR ISP, Altera ByteBlaster, Atmel STK500 и STK600, USBasp, Brian Dean’s Programmer, Dontronics DT006, Pony Prog STK200, Bascom SAMPLE programming cable и многих-многих других), работающих через интерфейсы параллельного и последовательного портов. Кроме официальных программных аппаратных средств от Atmel возможна работа с любительскими изделиями, не поддерживаемыми AVR Studio.
Главной особенностью программы является консольный интерфейс, требующий определенных навыков работы. Однако сторонними разработчиками для AVRDUDE был создан ряд удобных графических оболочек полезных при изучении содержимого памяти микроконтроллеров, изменения отдельных байтов EEPROM, Lock- и Fuse-битов. Программировать же всю память кристалла удобно из командной строки AVRDUDE.
В отличие от AVR Studio, полезной лишь в процессе создания и отладки программного кода, AVRDUDE больше подходит для серийного прошивания готовых продуктов. Для работы с повседневными однотипными задачами пользователю не требуется каждый раз набирать команды вручную, поскольку программа может работать с пакетными файлами. Для этого необходимо создать bat-файл и прописать в нем ключи, указать файл с прошивкой и, самое главное, верно внести в командную строку Fuse-биты. В дальнейшем будет достаточно лишь запускать bat-файл на выполнение. Для разных устройств необходимо создавать свой батник.
Программное обеспечение AVRDUDE имеет статус GNU GPL, что дает возможность каждому пользователю свободно скачивать ее, изменять по собственному желанию и распространять дальше. Благодаря этому AVRDUDE вошла в состав различных сред для разработки программ микроконтроллеров AVR, например WinAVR.
Установить данный софт можно вместе с пакетом WinAVR (для запуска необходимо написать в командной строке: avrdude) или скачать все нужные файлы, включая исходный код, с официального сайта программы: http://download.savannah.gnu.org/releases/avrdude/.
Первоначальный код AVRDUDE был создан английским программистом Брайеном Дином (http://www.bsdhome.com/). Программа была написана для операционной системы FreeBSD и распространялась под названием AVRprog. В связи с растущим интересом к данному продукту Брайан решил портировать его на другие операционные системы и выложить в свободном доступе. Изменение названия на AVRDUDE произошло, чтобы не было путаницы с утилитой AVRprog, распространяемой компанией Atmel в составе AVR Studio.
Консольный интерфейс AVRDUDE представлен на английском языке, однако в Сети можно найти русифицированные графические оболочки рассматриваемой утилиты, например AVRDUDE_PROG.
Программа AVRDUDE представлена в вариантах для Windows и Linux. Windows-версия поддерживает все известные операционные системы Microsoft, включая Vista и 7. Поскольку в Windows 2000 и Windows XP возможность работать напрямую с параллельным портом компьютера заблокирована, для нормального функционирования AVRDUDE потребуется самостоятельно установить драйвер giveio.sys, поставляемый с программой. В Windows 98 дополнительные настройки не требуются.
Распространение программы: Freeware (бесплатная)
Официальный сайт программы «AVRDUDE»: http://download.savannah.gnu.org/releases/avrdude/
Скачать AVRDUDE