Программирование микроконтроллеров avr linux

Программирование МК AVR в ОС Ubuntu

Поставил я себе такую ОС — Ubuntu 9.04. Конечно же особо в ней в игрушки не поиграешь годится она, в основном, только для работы. Ну и решил я попробовать в ней программировать контроллеры AVR.
На просторах интернета, в принципе, достаточно много всякой всячины которая поможет в освоении программирования AVR под Linux.
Но как обычно я столкнулся с тем, что много всего ну ничего толком. Везде советуют ставить Eclipse или KontrollerLab (как оно меня достало).
Ну вы конечно же догадались, что что-то у меня с ними пошло не так как хотелось бы. В общем методом догадок и высокоинтеллектуального тыка я стал экспериментировать. И вот до чего я дошел. Открываем менеджер пакетов Sinaptic и в поиске пишем gcc-avr. Отмечаем для установки gcc-avr, avr-libc, avrdude.
Можно конечно же и так: $sudo apt-get install gcc-avr avr-libc avrdude Ну для старта все что нужно вроде бы установили. Далее создадим в корне системы папочку под названием AVR (путь к папке: /AVR)
В качестве редактора можно использовать nano (в терминале прописываем nano),
но я пользовался обычным текстовым редактором gedit (в терминале прописываем $sudo gedit)
В нем напишем свой код ну например: #include
#include
#include int main(void)
DDRx=0xff;
while (1)
PORTx=0xff;
_delay_ms(100);
PORTx=0x00;
_delay_ms(100);
>
>
Далее сохраняем наш текст с расширением main.c в папочке AVR (путь к файлу: /AVR/main.c). Теперь переходим к компиляции кода.
Запустим терминал и пропишем такой код: $avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -o /AVR/main.o /AVR/main.c Долго искал нужную строку, в итоге взял ее просто из WinAvr :). avr-gcc — компилятор, -mmcu=наш контроллер(сейчас atmega8), -DF_CPU=тактовая частота в Гц, -Os-Оптимизатор кода, -o-OUT, /AVR/main.o-выходной файл с расширением .o который получим из .c, /AVR/main.c -наш си файл. Скриншот терминалаНе забываем работать под root иначе система не пустит.
Enter и если зайдем в наш каталог /AVR то увидим файлик с расширением .o. Далее в терминале (он же консоль) введем:
$avr-objcopy -O ihex /AVR/main.o /AVR/main.hex Ну долго объяснять не буду просто скажу, что перегоняем наш файл main из main.o в main.hex.
Ну вот наша прошивка готова к заливке в нашу ATmega8. Нам понадобится конечно же программатор.
Использовать будем программатор stk500v2 by Petka (Работает просто отлично заливает мгновенно, не отваливается от порта, правда использовал я вместо FT232 CP2102. Огромное спасибо за схемку и прошивки.) Откроем терминал и запустим утилиту avrdude которая будет у нас работать под консолью:
$avrdude -c stk500v2 -pm8 -P /dev/ttyUSB0 -U flash:w:/AVR/main.hex Скриншот терминала Заливка программы в контроллерВ итоге все получилось!
Конечно же программу залил другую и обьем ее составил 5кБ, но заливалось это все меньше 4-х секунд.
Как известно, для avrdude существуют и GUI оболочки, но это уже совсем другая история которую я расскажу в другой статье.:)
P.S. С AVR910 говорят, что работает отлично но сам не пробовал.

Читайте также:  Namespace in linux kernel

Теги:

Ефимов Валентин Опубликована: 2010 г. 0 0

Вознаградить Я собрал 0 0

Оценить статью

Источник

Программирование микроконтроллеров AVR под LINUX

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

В частности будут рассмотрены:

Avrdude — консольная программа для прошивки микроконтроллеров
AVR burn-o-mat — графическая оболочка к Avrdude
Avra — ассемблер для AVR микроконтроллеров фирмы Atmel

Geane — удобная среда разработки. Рассмотрим 2 варианта атоматизации работ по компиляции кода / прошивки МК / правки Фьюзов.

23 февраля 2014 г.

Книга: avrdude

Avrdude: прошивка МК из консоли

Какие программные продукты потребуются? Потребуется avrdude — утилита для прошивки МК, которая поддерживает кучу разных программаторов и контроллеров.

Подготавливаем рабочее пространство

Допустим имеется файл в прошивкой микроконтроллера Example.hex, который потребуется залить в контроллер. Допустим мы используем программатор USBasp.

Опции:
-p — указывем тип контроллера, например для Tiny2313 именно t2313
-c — указываем используемый программатор, например usbasp
-U — указываем файл для прошивки и Модификаторы
flash:w: — модификаторы уточняют куда производить запись, во flash.

Однако нас огорчит ошибка:

avrdude: usb_open(): cannot read serial number «error sending control message: Operation not permitted»

Дело в том, что udev (линуксовый менеджер устройств), исходно не дает любому пользователю писать на какое попало устройство. Нам нужно подружить USBasp с udevом.

Найдем USBasp в списке подключенных устройств командой lsusb :

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 003: ID 046d:c52f Logitech, Inc. Wireless Mouse M305 Bus 003 Device 025: ID 16c0 : 05dc VOTI shared ID for use with libusb

Последняя строка — наша цель. 16с0 — это код производителя, а 05dc — это код устройства. Нам нужно создать файл с правилом для udev, файл должен располагаться тут:

Правило означает, что мы дали пользователям, входящим в группу adm, права доступа 666 (запись и чтение) к устройству 16c0:05dc. На моем LinuxMint 15 пользователь под которым я работаю уже входил в группу adm (администраторы), поэтому в правиле указал именно её. Прописывание группы users и добавление себя в неё (как многие советуют) желаемого результата не давало, без sudo не запускалось.

Итого, нам требуется дать в консоле такую команду:

echo ‘SUBSYSTEM==»usb», SYSFS==»16c0″, SYSFS==»05dc», GROUP=»adm», MODE=»0666″‘ | sudo tee /etc/udev/rules.d/10-usbasp.rules

Отсоединяем USBasp от порта, выходим из учетки, потом заходим снова и подсоединяем USBasp. Avrdude должен начать запускаться без sudo. [смутно помню потребовалось ли выходить из учетки, или после рестарта udev все уже заработало. ]

Прошивка консольной утилитой avrdude

Для того,чтобы залить прошивку в микроконтроллер необходимо выполнить команду:

где -p m8 — это модель микроконтроллера.В данном случае atmega 8.

Читайте также:  Копировать файлы linux windows

Дополнительно можно прошить и фьюзы, дописав:

Где ХХ — соотвествующие фьюзы микроконтроллера, необходимые для конкретной прошивки.

На некоторых микроконтроллерах (например на серии ATtiny) включен по умолчанию фьюз CKDIV8, который устанавливает делитель на 8 и из-за этого USBasp не программирует такие микроконтроллеры пока не установить перемычку JP3 на плате USBasp.

Для настройки фьюзов воспользуйтесь калькулятором фьюзов чтобы выставить нужные настройки, в том числе выключить делитель CKDIV8.
Фьюзы прошиваются через командой

Например для установки фьюзов attiny85 для внутреннего генератора 8мгц с выключенным делителем на 8 пордам команду:

При программировании через Arduino IDE можно установить нужные фьюзы выбрав в меню «записать загрузчик», выбрав перед этим необходимый микроконтроллер.

Пробуем работать с avrdude
Подключаем любой МК, попробуем считать его сигнатуру:

avrdude: warning: cannot set sck period. please check for usbasp firmware update. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9007 avrdude: safemode: Fuses OK avrdude done. Thank you.

Видим что все как-бы в порядке. , программа выдала варнинг, но успешно считала сигнатуру. Кстати, 0x1e9007 это TINY13.

Книга: Автоматизация Geany на основе MAKE файлов

Автоматизация Geany.
Вариант 2: на основе MAKE файлов.

Это достаточно удобный способ может сперва показаться слишком запутанным. В папке с каждым проектом создается Makefile в котором указывается указываем модель контроллера, фьюзы, путь к компилятору и его конкретный вариант avra/gavrasm/gcc-avr, модель программатора и программа прошивки.

Если в процессе разработки мы понимаем, что далее требуется начать работать с другой конфигурацией и контроллером, редактируем три строчки в начале make-файла.

Итак, создадим новый проект в Geany. В настройках выбирем: Сборка- Установить команды сборки. Появится такое меню:

Настоим — для этого нужно прописать следующие команды (названия произвольные):
«Скомпилировать» — make compile FILE=%e
«Прошить» — make program FILE=%e
«Очистить» — make clean FILE=%e
«Взвесить» — make size FILE=%e

Теперь нужно написать собственно сам make-file и положить его в папку проекта.
Это удобная система, потом при любом проекте указываем модель контроллера, фьюзы и готово. По моему даже лучше чем выбирать из списка всё это в окнах настройки проекта. Естественно, makefile можно создать и получше но тут будет совсем простой для простых проектов.
Не забываем про табуляцию перед командой, иначе будет ошибка.

# Makefile for programming AVR in Geany
#Параметры проекта:

MK=t13
LFuse=0x7A
HFuse=0xFF

# Более глобальные переменные.
ASM=avra
ISP=avrdude
INCLUDEDIR=/usr/share/avra/includ

compile:
$(ASM) -I $(INCLUDEDIR) -l $(FILE) $(FILE).asm 2>&1|grep -v PRAGMA
program : $(FILE).hex
$(ISP) -c usbasp -p $(MK) -U flash:w:$(FILE).hex:i -U lfuse:w:$(LFuse):m -U hfuse:w:$(HFuse):m
clean:
rm -f $(FILE).cof $(FILE).eep.hex $(FILE).hex $(FILE).obj *~
size:
avr-size $(FILE).hex

Теперь правим его под себя — указываем тип своего МК и fuse.
Не забываем про табуляцию перед командой, иначе будет ошибка. Также, некоторые редакторы вставляют в файл свои невидимые символы BOM в результате чего тоже будет ошибка. Советую править Makefile используя geany, с ним проблем невидимых символов и табуляции не будет.

Читайте также:  Linux как основная операционная система

Обычно выдается ошибка такого вида:

ИТОГО, в Geany доступны автоматические действия:
«Компилировать» — или иконка с пирамидой и шаром, или F8
«Взвесить» —
«Прошить» — иконка с шестеренкой, или F9

Все «наши» созданные команды содержатся в пункте верхнего меню Сборка.

22 февраля 2014 г.

Книга: Geany автоматизация 1

Автоматизация Geany.
Вариант 1: простой и универсальный.

Теперь запускаем Geany, создаем новый файл или открываем любой исходник .asm, открываем вкладку «Сборка» / «Установить команды сборки».
Видим окно настройки пользовательских команд:

«Скомпилировать» — avra —includepath /usr/share/avra/includes %f
«Фьюзы» — avr8-burn-o-mat
«Размер» — avr-size %e.hex
«Очистить» — rm -f %e.cof $e.eep.hex %e.hex %e.obj
«Прошить» — PART=`grep -m 1 -e «^\.include » %f | sed -r -e ‘s/.*include «(.+)def\.inc».*/\1/’ | sed «s/tn/t/g»` && echo «target device: $PART» && avrdude -p $PART -c usbasp -U flash:w:»%e.hex» && exit

Пояснения:
%f — шаблон geany, имя текущего файла (в нашем случае это Example.asm)
%e — шаблон geany, имя текущего файла без расширения (Example)
%d — шаблон geany, путь к папке, в которой лежит текущий файл (~/Projects/AVR/Example/)
%p — шаблон geany, путь к текущему проекту (~/Projects/AVR/Example/)
PART — строковая переменная, в которую заносится результат выполнения скрипта, определяющего тип контроллера
echo «target device: $PART» — выводим в консоль название распознанного контроллера (исключительно как информация вам для справки)
avrdude -p $PART -c usbasp -U flash:w:»%e.hex» — запускаем avrdude, подставляя в него нужную опцию
grep -m 1 -e «^\.include » %f — находит строчку начинающуюся на .include, опция -m 1 указывает что не стоит продолжать поиск, если хотя бы 1 строка уже найдена.
sed -r -e ‘s/.*include «(.+)def\.inc».*/\1/’ — из найденной строки с помощью шаблона вычленяется название контроллера (все что после кавычки и перед def.inc).
sed «s/tn/t/g» — заменяет tn н а t. так как в аппноутах Tiny2313, например, зовется tn2313, а avrdude ее понимает как t2313.

Чтобы Geany сам распознавал тип микроконтроллера и менял опцию -p в команде avrdude нужно в исходном файле анализировать строки вида .include «m8def.inc», которые указывают тип используемого микроконтроллера и присутствуют в каждом asm файле.

Полезная и приятная особенность данного скрипта: так как для связки команд используется операнд &&, то следующая команда выполняется только в случае успешного завершения предыдущей. Таким образом, если строка .include не была найдена в файле, или при прошивке что-то пошло не так — терминал останется открытым и мы сможем прочитать сообщения о случившихся ошибках.

Прошить код в микроконтроллер — нажать F5 (или иконку с шестеренкой),
Править Фьюзы — нажать F9 (или иконка с кирпичем).

____ Приведенная в этой заметке команда «Прошить» — PART=`grep -m 1 -e «^\.include » %f | sed -r -e ‘s/.*include «(.+)def\.inc».*/\1/’ | sed «s/tn/t/g»` && echo «target device: $PART» && avrdude -p $PART -c usbasp -U flash:w:»%e.hex» && exit отличается от наличествующих в интернете подобных описаний Geany. Отличается в лучшую сторону: во-первых она действительно работает (LinuxMint15), во-вторых корректно распознает все имена поддерживаемых контроллеров.

Источник

Оцените статью
Adblock
detector