Linux для микроконтроллеров avr

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

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

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

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

Настройка прав доступа для программатора 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 порту ноутбука и смотрим лог последних событий системы за текущий день:

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

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

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, все Ок.

Читайте также:  Astra linux драйвера видеокарты amd

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

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

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

SUBSYSTEM=="usb", ENV=="usb_device", ATTRS=="16c0", ATTRS=="05dc", MODE="0666", SYMLINK+="USBasp"

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

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

sudo /etc/init.d/udev restart

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

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

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

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

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

programmer ; 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-страничке.

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

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

stty 9600 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo noflsh 

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

Читайте также:  Linux bash error codes

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

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

speed 9600 baud; line = 0; eof = ; start = ; stop = ; 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! 🙂

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

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

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

Все примеры буду приводить для микроконтроллера 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-памяти и сохраним ее в файл.

Читайте также:  Linux значение системной переменной

Считывание 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 и наполним его тестовыми данными. Создадим файл и откроем его для редактирования командой:

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

Источник

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