28 января 2014 г.

Программирование AVR из командной строки

Наверное каждый кто задумался начать программировать микроконтроллеры AVR под голым линуксом задает себе вопрос: "А с чего собственно начать?". Эта статья прояснит базовые вопросы для желающих начать программировать AVR из командной строки.



Какие программные продукты потребуются?


  • gedit - или любой тестовый редактор, в нем мы будем писать исходные коды.
  • avra - компилятор языка Ассемблер для AVR, он почти полностью совместим с Атмеловским ассемблером AVRASM32.
  • gcc-avr - компилятор языка Си для AVR.
  • avrdude - прошивальщик который поддерживает кучу разных программаторов и контроллеров.
  • Архив аппноутами для каждого микроконтроллера. 
    Вообще-то аппноуты можно взять из недр AVRstudio для windows, но там в дефайнах используется символ '#' а синтаксис avra требует использовать'.', поэтому выкладываю архив с "исправленными" дефайнами. 


Подготавливаем рабочее пространство
  1. Устанавливаем пакеты gcc-avr и avrdude:
    sudo apt-get install gcc-avr avrdude

  2. К сожалению в репозитории Ubuntu пакет avra старый, версии 1.2.3 от 2007 года. Он не даст нам скомпилировать программу "без работы напильником", поскольку там есть некие директивы pragma и кое-что другое, мешающее нам. 

    Не проблема, на sourceforge.net лежит avra версии 1.3.0, скачаем и установим её. 
    wget http://sourceforge.net/projects/avra/files/1.3.0/avra-1.3.0.tar.bz2
    tar -xf  avra-1.3.0.tar.bz2
    cd avra-1.3.0/src
    cp ../AUTHORS ../README ../src
    touch ChangeLog NEWS

    Комментарий к последним двум командам:
    Для сборки программе очень нужно, чтобы в папке src лежали файлы NEWS, README, AUTHORS иChangeLog, которых там нет. AUTHORS и README лежат в соседней папке, мы их копируем. Файлов ChangeLog NEWS нет, поэтому создадим их пустыми.
    Оставим его пустым и сохраним. 

    Теперь выполняем сборку пакета:
    aclocal && autoconf && automake -a && ./configure && sudo make && sudo make install

    Все готово. Проверяем:
    avra --version

    Получаем:
    AVRA: advanced AVR macro assembler Version 1.3.0 Build 1 (8 May 2010) Copyright (C) 1998-2010. Check out README file for more info
    Теперь перенесем содержимое папки includes содержаей APPNOTES в /usr
    cd ..
    sudo mv /includes/ /usr/share/avra
  3. Создаем в домашней директории папку Projects - в ней мы будем хранить все файлы в той или иной степени необходимые для будущих проектов.mkdir ~/Projects
  4. Создадим папку для первого проекта, назовем его Example.mkdir ~/Projects/Example

Таким образом путь, скажем, к исходному коду проекта Example будет таков:  
~/Projects/Example/Example.asm

Все дальнейшее в статье будет изложено исходя из такой структуры.









Програмирование из командной строки

  1. В папке нашего проекта создаем .asm файл с исходным кодом программы
    gedit ~/Projects/Example/Example.asmПишем код программы, редактируем, сохраняем...
  2. Компилируем
    avra --includepath ~/Projects/APPNOTES Example.asmОпция --includepath указывает путь к папке, из которой будут браться все инклуды по умолчанию. Примечательно, что в справке к avra эта опция значится как --includedir, но если начать использовать её, то avra начинает на это ругаться :) так что пишем именно --includepath

    Если в коде будут встречены ошибки, avra напишет нам об этом в консоль, с указанием номеров строк с ошибками. Если компиляция прошла успешно, то мы получим файл Example.hex который и потребуется  залить в контроллер.
  3. Прошиваем программу в микроконтроллер
    sudo avrdude -p t2313 -c usbasp -U flash:w:Example.hexОпции:
     -p  - указывем тип контроллера, например для Tiny2313 именно t2313 -c  - указываем используемый программатор, например usbasp -U  - указываем файл для прошивки и Модификаторы
     flash:w:  - модификаторы уточняют куда производить запись, во flash.

Мы использовали sudo, потому что при запуске avrdude с правами пользователя выводится ошибка:
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:
sudo gedit /etc/udev/rules.d/10-usbasp.rules

Запишем в него такую строку:
SUBSYSTEM=="usb", SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", GROUP="users", MODE="0666"
Она означает, что мы дали пользователям, входящим в группу users, права доступа 666 (запись и чтение) к устройству 16c0:05dc. (Впрочем, место users в правиле вы можете прописать любую другую группу, в которой вы уже состоите.)

Чтобы добавить себя в группу users, воспользуйтесь командой useradd, сделайте так:
useradd -G users ваше_имя

Последний штрих. Отсоедините USBasp от порта, выйдите из учетки, потом зайдите и подсоедините снова. Все должно заработать. Теперь можно запускать avrdude без sudo.




Собственно это всё... 

Согласитесь, что один раз скомпилировать и прошить отлаженную программу таким методом совсем не утомительно, но отлаживать вновь разрабатываемую программу - крайне неудобно. Как автоматизировать рутинную работу? Легко, например нужно перейти на использование Geany - это специализированной Среды Разработки.

Правильно настроив его, мы сможем в один клик мышки (или нажатие одной кнопки) запускать Компиляцию, Прошивку и Правку фьюзов. Но об этом в следующей статье.



Файлы:
Архив с аппноутами для avra




___
Использованные материалы:
http://radiokot.ru/articles/52/

http://greenoakst.blogspot.ru/2012/08/avr-ubuntu-geany-avra.html - Установка AVRA , Установка и настройка Geany

???? - ссылка как починить работу без sudo


Комментариев нет:

Отправить комментарий