28 февраля 2014 г.

Книга: настройка программной среды в Linux

Настройка программной среды в Linux

{это черновик}


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

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

Avrdude - консольная программа для прошивки микроконтроллеров
AVR burn-o-mat - графическая оболочка к 
Avrdude
Avra - ассемблер 
 для AVR микроконтроллеров фирмы Atmel
Geane - удобная среда разработки. Рассмотрим 2 варианта атоматизации работ по компиляции кода / прошивки МК / правки Фьюзов.


23 февраля 2014 г.

Книга: avrdude

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



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



Подготавливаем рабочее пространство
sudo apt-get install avrdude


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

Попробуем прошить программу в микроконтроллер:
avrdude -p t2313 -c usbasp -U flash:w:Example.hex

Опции:
-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 hubBus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching HubBus 002 Device 003: ID 046d:c52f Logitech, Inc. Wireless Mouse M305Bus 003 Device 025: ID 16c0:05dc VOTI shared ID for use with libusb


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

в нем должна быть строка описывающая само правило:
SUBSYSTEM=="usb", SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", GROUP="adm", MODE="0666"

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


Итого, нам требуется дать в консоле такую команду:
echo 'SUBSYSTEM=="usb", SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", GROUP="adm", MODE="0666"' | sudo tee /etc/udev/rules.d/10-usbasp.rules

Перезапустим сервис udev, чтобы правило вступило в силу:
sudo restart udev

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








*************************************************************************


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

Для того,чтобы залить прошивку в микроконтроллер необходимо выполнить команду:
avrdude -c usbasp -p m8 -U flash:w:имя_файла.hex
где -p m8 - это модель микроконтроллера.В данном случае atmega 8.




Дополнительно можно прошить и фьюзы, дописав:
-U hfuse:w:0xХХ:m -U lfuse:w:0xХХ:m
Где ХХ - соотвествующие фьюзы микроконтроллера, необходимые для конкретной прошивки.

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


*********************************************************************


Для настройки фьюзов

Для настройки фьюзов воспользуйтесь калькулятором фьюзов чтобы выставить нужные настройки, в том числе выключить делитель CKDIV8.
Фьюзы прошиваются через командой
avrdude -c usbasp -p имя_м/к -U lfuse:w:0xХХ:m

Например для установки фьюзов attiny85 для внутреннего генератора 8мгц с выключенным делителем на 8 пордам команду:
avrdude -c attiny85 usbasp -p -U lfuse:w:0x62:m

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

***********************************************************





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

avrdude -c usbasp -p t13 -F
avrdude: warning: cannot set sck period. please check for usbasp firmware update.avrdude: AVR device initialized and ready to accept instructionsReading | ################################################## | 100% 0.00savrdude: Device signature = 0x1e9007avrdude: safemode: Fuses OKavrdude 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, с ним проблем невидимых символов и табуляции не будет.

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

Makefile:1: *** пропущен разделитель. Останов.
Впрочем, можно не мучатся и просто скачать данный образец:
wget https://sites.google.com/site/httpavrprogblogspotru/Makefile



ИТОГО, в 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 не была найдена в файле, или при прошивке что-то пошло не так - терминал останется открытым и мы сможем прочитать сообщения о случившихся ошибках.


Для прошивки Фьюзов используется графическая оболочка к avrdude AVR8_Burn-O-Mat.


Теперь для того чтобы:
Скомпилировать код - нужно нажать F8 (или иконку с пирамидой и шаром), 
Прошить код в микроконтроллер - нажать 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), во-вторых корректно распознает все имена поддерживаемых контроллеров.



Книга: AVR8 Burn-O-Mat

Утилита AVR8 Burn-O-Mat


Да, avrdude позволяет прошивать и фьюзы, но для этого нужно по даташиту на ваш микроконтроллер заранее вручную посчитать fuse, перевести их в шестнадцатеричную систему и указать avrdude в командной строке.

Такая команда могла бы выглядеть подобным образом:
avrdude -p е2313 -c usbasp -U hfuse:w:0xХХ:m -U lfuse:w:0xYY:m
где XX и YY заранее вычисленные hfuse и lfuse.

Учитывая высокую вероятность ошибки и крайнюю трагичность последствий этой ошибки, такой вариант прошивки фьюзов не всегда оптимален. Существует графическая оболочка к avrdude - AVR8 Burn-O-Mat.


Вот сайт этой программы: http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_en.html

Качаем deb-пакет с сайта, пробуем установить...
У меня пакет устанавливаться не захотел, выдавал ошибку:
dpkg: ошибка при обработке параметра avr8-burn-o-mat-2.1.2-all.deb (--install):
анализ файла «/var/lib/dpkg/tmp.ci/control» около строки 2 пакета «avr8-burn-o-mat»:
ошибка в строке Version «REPLACE_PROG_VERSION»: номер версии не начинается с цифры
Желающие могут скачать Sourcecode AVR8 Burn-O-Mat, и откомпилировать, остальным же предлагаю воспользоваться уже "починенным" пакетом, действуем так:
wget http://radiokot.ru/articles/52/02.zip
unzip 02.zip
dpkg -i avr8-burn-o-mat-2.1.2.deb

При первом запуске AVR8_Burn-O-Mat потребуется его настроить. Для этого перейдем во вкладку Settings - AVRDUDE:


Теперь нужно ввести путь к avrdude, путь к файлу с его настройками, тип вашего программатора и порт к которому он подключен. Настраиваем так, как показано на скрине.

Всё, теперь можно выбрать нужный вам контроллер, нажать Fuses и править их как надо.

Перед исправлением Fuses, обязательно сначала считывайте их с кристалла! Да и вообще, поаккуратней с ними ;)

Книга: установка Geany

Среда Разработки Geany

Итак, мы научились компилировать исходный код на ассемблере используя командную строку и компилятор avra. Настало время освоить какую-либо Среду Программирования, чтобы можно было сосредоточить все свои способности именно на программировании. Начнем с самой простой - Geany.

В отличие от текстовых редакторов Geany является именно Средой Разработки, поэтому в ней есть так нужные нам абстрактные действия: компиляция, сборка, запуск. Причем можно задать какие именно команды должны выполняться в этих действиях. Таким образом, мы получаем возможность назначить запуск avra (или gcc-avr если будем писать на Си) на действие "компиляция", назначить вызов avrdude на "запуск". Действие же "сборка" будем использовать для установки фьюзов.


Установка Geany

sudo apt-get install geany


Настройка стиля подсветки синтаксиса Ассемблера
Сделаем хороший стиль подсветки синтаксиса ассемблера. Для этого откроем файл:

gedit ~/.config/geany/filedefs/filetypes.asm
и вставим в редакторе текст вот с этой страницы: http://wiki.geany.org/config/avr_asm
или этот текст можно скачать себе так:

wget http://wiki.geany.org/_export/code/config/avr_asm
Редактируем и сохраняем модифицированный filetypes.asm.



Далее, мы рассмотрим варианты автоматизации 
Geany:  запуск процесса компиляции, прошивка микроконтроллера, и установка фьюзов. Существуют минимум два варианта автоматизации.


содержание книги