Avrdude: прошивка МК из консоли
Какие программные продукты потребуются? Потребуется avrdude - утилита для прошивки МК, которая поддерживает кучу разных программаторов и контроллеров.
Подготавливаем рабочее пространство
Допустим имеется файл в прошивкой микроконтроллера Example.hex, который потребуется залить в контроллер. Допустим мы используем программатор USBasp.
Какие программные продукты потребуются? Потребуется 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.
Однако нас огорчит ошибка:
Найдем USBasp в списке подключенных устройств командой lsusb :
Последняя строка - наша цель. 16с0 - это код производителя, а 05dc - это код устройства. Нам нужно создать файл с правилом для udev, файл должен располагаться тут:
в нем должна быть строка описывающая само правило:
Правило означает, что мы дали пользователям, входящим в группу adm, права доступа 666 (запись и чтение) к устройству 16c0:05dc. На моем LinuxMint 15 пользователь под которым я работаю уже входил в группу adm (администраторы), поэтому в правиле указал именно её. Прописывание группы users и добавление себя в неё (как многие советуют) желаемого результата не давало, без sudo не запускалось.
Итого, нам требуется дать в консоле такую команду:
Перезапустим сервис udev, чтобы правило вступило в силу:
Отсоединяем USBasp от порта, выходим из учетки, потом заходим снова и подсоединяем USBasp. Avrdude должен начать запускаться без sudo. [смутно помню потребовалось ли выходить из учетки, или после рестарта udev все уже заработало...]
*************************************************************************
Прошивка консольной утилитой avrdude
Для того,чтобы залить прошивку в микроконтроллер необходимо выполнить команду:
Дополнительно можно прошить и фьюзы, дописав:
На некоторых микроконтроллерах (например на серии ATtiny) включен по умолчанию фьюз CKDIV8, который устанавливает делитель на 8 и из-за этого USBasp не программирует такие микроконтроллеры пока не установить перемычку JP3 на плате USBasp.
*********************************************************************
Для настройки фьюзов
Для настройки фьюзов воспользуйтесь калькулятором фьюзов чтобы выставить нужные настройки, в том числе выключить делитель CKDIV8.
Фьюзы прошиваются через командой
Например для установки фьюзов attiny85 для внутреннего генератора 8мгц с выключенным делителем на 8 пордам команду:
При программировании через Arduino IDE можно установить нужные фьюзы выбрав в меню "записать загрузчик", выбрав перед этим необходимый микроконтроллер.
***********************************************************
Пробуем работать с avrdude
Подключаем любой МК, попробуем считать его сигнатуру:
Видим что все как-бы в порядке... , программа выдала варнинг, но успешно считала сигнатуру. Кстати, 0x1e9007 это TINY13.
****************************************************************
-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.
****************************************************************
Комментариев нет:
Отправить комментарий