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.




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









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

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