Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

Настройка среды и работа с программаторами для AVR микроконтроллеров в Linux

Приведены особенности настройки и использования USBAsp, COM и LPT программаторов при работе с программой avrdude в операционной системе Linux. Попробуем считать и записать прошивку микроконтроллера (МК) используя программатор USBAsp.

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

Перейдем к настройке портов и программы avrdude для работы с различными программаторами под Linux.

Содержание статьи:

  1. Настройка прав доступа для программатора USBAsp
  2. Настройка программатора Громова (COM-порт) в Linux
  3. Настройка программатора используя LPT-порт в Linux
  4. Тестирование и работа с программаторами
  5. Заключение

Настройка прав доступа для программатора USBAsp

Что делать если программа avrdude в ОС Linux не видит программатор что подключен к USB порту? - подобные вопросы в сети возникают довольно часто. Программа avrdude сообщает о том что не может найти программатор:

avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

Поэтому первое что нам нужно сделать так это дать права обычным пользователям в Linux на использование устройства USBAsp, что подключен к USB порту. По умолчанию к данным устройствам имеет доступ только суперпользователь (root).

Зная код производителя и код устройства для программатора USBAsp нужно написать правило в специальном скрипте для подсистемы "usb" в Linux в котором разрешить использование устройства с такими идентификаторами любым пользователем или же ограничить права только указанной группой пользователей.

Для начала сверим идентификаторы устройства и убедимся что у нас действительно программатор USBAsp. Подключаем программатор к USB порту ноутбука и смотрим лог последних событий системы за текущий день:

dmesg

Или же используем команду в Debian Linux 8 и выше (где используется systemd):

sudo journalctl -f

К примеру, в конце вывода последней команды увидим вот что:

Oct 11 13:11:52 alpha5 kernel: usb 1-2: new low-speed USB device number 9 using xhci_hcd
Oct 11 13:11:52 alpha5 kernel: usb 1-2: New USB device found, idVendor=16c0, idProduct=05dc
Oct 11 13:11:52 alpha5 kernel: usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Oct 11 13:11:52 alpha5 kernel: usb 1-2: Product: USBasp
Oct 11 13:11:52 alpha5 kernel: usb 1-2: Manufacturer: www.fischl.de

Здесь код производителя нашего программатора - 16c0, а код продукта - 05dc, все Ок.

Отключаем программатор от компьютера и создадим файл с правилом что разрешает доступ к программатору USBAsp всем пользователям на компьютере, выполним команду:

sudo nano /etc/udev/rules.d/60-objdev.rules

После запуска откроется текстовый редактор, вставьте в него вот этот код:

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE="0666", SYMLINK+="USBasp"

Выходим из редактора и сохраняем файл (CTL+X и Y).

Для того чтобы в Linux наш скрипт заработал можно перезагрузить ОС или выполнить перезапуск подсистемы "usb" командой:

sudo /etc/init.d/udev restart

Теперь можно работать с программатором USBAsp в программе avrdude из под обычного пользователя(не суперпользователя).

Настройка программатора Громова (COM-порт) в Linux

Первым делом нужно добавить программатор Громова с его идентификатором и настройками в конфигурацию программы avrdude. Чтобы не править основной конфигурационный файл мы создадим дополнительный пользовательский конфигурационный файл в домашней директории, выполним команду:

nano /home/USER/.avrduderc

где USER - єто имя вашего пользователя под которым вы работаете.

Вставим в редактор следующие данные:

programmer
  id = "gromov";
  baudrate = 9600;
  desc = "serial port banging, reset=dtr sck=rts mosi=txd miso=cts";
  type = "serbb";
  reset = 4;
  sck = 7;
  mosi = 3;
  miso = 8;
;

Выходим из редактора и сохраняем файл (CTL+X и Y).

Для корректной работы программатора Громова в ОС Linux нужно предварительно сконфигурировать последовательный порт (Serial Port, RS-232 Port), поскольку на данный момент при запуске программа avrdude сама не производит конфигурации порта.

Если при записи прошивки в МК avrdude выводит сообщение о проблеме с верификацией то очень вероятно что нужно произвести переконфигурацию COM-порта:

avrdude: verification error, first mismatch at byte 0x0000
0x0e != 0x00
avrdude: verification error; content mismatch

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

man stty

Для вывода на экран текущих настроек порта /dev/ttyS0 (первый COM-порт) выполним команду:

stty </dev/ttyS0

А теперь выполним конфигурацию порта командой:

stty 9600 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo noflsh </dev/ttyS0

Примечание: примите к вниманию что если у вас в компьютере несколько COM-портов то путь к файлу порта /dev/ttyS0 нужно изменить в соответствии с номером используемого порта, например /dev/ttyS2 - это третий COM-порт.

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

Содержимое вывода команды должно быть примерно вот в таком виде:

speed 9600 baud; line = 0;
eof = <undef>; start = <undef>; stop = <undef>; min = 0; time = 0;
ignbrk -brkint -icrnl -imaxbel
-opost
-isig -icanon -iexten -echo noflsh

Настройки, которые мы задали командой, действуют до перезагрузки ОС. Команду для конфигурации порта можно добавить в автозагрузку вашей операционной системы Linux или же запускать один раз перед работой с программой avrdude.

Настройка программатора используя LPT-порт в Linux

В настройках программы avrdude по умолчанию прописан программатор "dapa", его описание "Direct Parallel AVR Access Cable".

Программатор на основе LPT-порта никаких дополнительных настроек в Linux не потребует, можно приступать к работе, Plug and Play in Linux! :)

Тестирование и работа с программаторами

После выполнения приведенных выше подготовок все готово к работе, приступим к тестированию нашей связки программатор + микроконтроллер.

Ниже будут приведены команды отдельно для каждого типа программаторов:

  • USBAsp;
  • программатор Громова (COM-порт);
  • параллельный программатор DAPA (LPT-порт).

Все примеры буду приводить для микроконтроллера ATmega8 (m8). Для программатора Громова в командах будет использован 1-й COM-порт /dev/ttyS0, а для программатора DAPA - первый LPT-порт /dev/parport0.

Подробно узнать о всех ключах запуска программы avrdude вы вы всегда можете вот ТУТ.

Первым делом давайте проверим все ли правильно связано и сможет ли программа avrdude "увидеть" микроконтроллер, никакой записи и изменений вносить в AVR чип мы не будем, только тест.

Проверка для программатора USBAsp:

avrdude -p m8 -c usbasp -P usb -n

Проверка для программатора Громова:

avrdude -p m8 -c gromov -P /dev/ttyS0 -n

Проверка для программатора DAPA:

avrdude -p m8 -c dapa -P /dev/parport0 -n

Если все подключено и настроено как нужно то то вывод программы будет выглядеть вот таким образом:

avrdude проверка

Рис. 1. Успешная проверка, у программы avrdude получилось связаться с AVR микроконтроллером.

Для получения более подробной информации о подключенном микроконтроллере можно добавить к команде ключ "-v", вот пример вывода для USBAsp:

avrdude verbose mode test

Рис. 2. Проверка, вывод программы avrdude с опцией -v (verbose).

А теперь давайте считаем прошивку микроконтроллера что хранится во Flash-памяти и сохраним ее в файл.

Считывание Flash для программатора USBAsp:

avrdude -p m8 -c usbasp -P usb -U flash:r:/tmp/m8chip_flash_dump.hex:i

Считывание Flash для программатора Громова:

avrdude -p m8 -c gromov -P /dev/ttyS0 -U flash:r:/tmp/m8chip_flash_dump.hex:i

Считывание Flash для программатора DAPA:

avrdude -p m8 -c dapa -P /dev/parport0 -U flash:r:/tmp/m8chip_flash_dump.hex:i

После выполнения команды во временной директории /tmp должен появиться файл m8chip_flash_dump.hex что будет содержать данные из флешь-памяти микроконтроллера.

avrdude flash reading

Рис. 3. Считываем flash памяти микроконтроллера в файл при помощи avrdude.

В следующих примерах мы выполним запись прошивки во Flash-память AVR микроконтроллера, используя данные из файла в формате Intel HEX. Для этого создадим файл test_program.hex во временной папке /tmp и наполним его тестовыми данными. Создадим файл и откроем его для редактирования командой:

nano /tmp/test_program.hex

Скопируйте в редактор предоставленный ниже код и сохраните файл (CTRL+X и Y). Данная прошивка заставит мигать светодиод что подключен к 2-й ножке (PD0) микроконтроллера ATmeag8 (пример кода именно для этой модели):

:1000000012C019C018C017C016C015C014C013C044
:1000100012C011C010C00FC00EC00DC00CC00BC06C
:100020000AC009C008C011241FBECFE5D4E0DEBF5E
:10003000CDBF02D017C0E4CF889A909A2FE789EA03
:1000400093E0215080409040E1F700C0000090987C
:100050002FE789EA93E0215080409040E1F700C00B
:080060000000EBCFF894FFCF84
:00000001FF

Ниже представлены команды для записи прошивки с использованием разных программаторов.

Запись прошивки во Flash для программатора USBAsp:

avrdude -p m8 -c usbasp -P usb -U flash:w:/tmp/test_program.hex

Запись прошивки во Flash для программатора Громова:

avrdude -p m8 -c gromov -P /dev/ttyS0 -U flash:w:/tmp/test_program.hex

Запись прошивки во Flash для программатора DAPA:

avrdude -p m8 -c dapa -P /dev/parport0 -U flash:w:/tmp/test_program.hex

Сразу после выполнения команды по записи прошивки в микроконтроллер ATmega8 должен замигать светодиод. Вывод команды avrdude в процессе работы выглядит следующим образом:

ATmega8 microcontroller writing flash

Рис. 4. Процесс записи прошивки во Flash-память микроконтроллера.

Программа avrdude говорит что все ОК, записано во флешь-память и проверено 104 байта данных.

ATmega8 avr светодиод

Рис. 5. На 2й ножке (PD0) микроконтроллера ATmega8 высокий уровень - 5В.

Заключение

В данной статье мы разобрались с настройкой AVR программаторов в операционной системе GNU Linux, привели простейшие команды для проверки, чтения и записи прошивки в микроконтроллер используя мощную программу avrdude.

В следующей статье мы напишем простую программу для микроконтроллера на языке программирования Ассемблер (Assembler), которая заставит поочередно мигать два разноцветных светодиода - олучится такая себе имитация полицейской мигалки.

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

Комментарии к публикации (2):
SeWIR #1SeWIR
13 Ноябрь 2016 14:42

В настройке конфига дудки на прогер ромова ошибка. Там type = serbb; нужно экранировать сериалбитбенг чтобы было так type = "serbb"; Иначе дудка будет ругаться.

+1
ph0en1x #2ph0en1x
13 Ноябрь 2016 18:05

Спасибо за замечание, исправил!

0
captcha