Ардуинщик-лентяй, техноманьяк
16,0
рейтинг
5 января 2015 в 06:29

Превращаем Arduino в полноценный AVRISP программатор tutorial

image

Приветствую всех пользователей хабра, в частности тех, кто страдает темой Arduino, как и я.

Меня уже давно спрашивают — можно ли прошивать hex файлы при помощи Arduino? Изменять фьюзы? Считывать прошивку? И всякое такое… Ответ — можно, и я сегодня вам расскажу, как я это делаю.


(Данное видео дублирует представленную ниже информацию)

Arduino — как по мне отличный старт для новичка, но нужно расти дальше, мир микроконтроллеров прекрасен и дарит огромные возможности, но, увы Arduino это довольно-таки узкопрофильное направление.

Небольшая предыстория:
Одного прекрасного дня, я наткнулся на отличный проект на ATtiny13, но увы автор выгрузил в сеть только hex-файл и схему, ну и конечно же, я так и не смог его попробовать в железе. Меня этот вопрос мучил всё больше и больше, и тут я случайно наткнулся на одно видео в сети, где автор утверждал, что он при помощи Arduino прошил другой микроконтроллер, имея только hex-файл, ну и схему, само собой. Именно он мне подсказал — используй SinaProg, но с Arduino'вскими файлами…

Загуглив на тему SinaProg, я скачал SinaProg 2.1.1.RUS, но он работать отказывался с Arduino, потому я закинул пару-тройку файлов из Arduino IDE в папку SinaProg 2.1.1\data\ и всё заработало.

Пройдёмся коротко по возможностям софта:

image

В блоке Hex-file выбираем hex или eep(первый — прошивка, второй — содержимое энергонезависимой памяти).

А той части, где кнопка ">", мы можем видеть всякие сообщения, типа «OK», или «ERROR», сама же кнопка ">" открывает логи Avrdude.

В блоке Flash есть кнопки:

Program — запись hex-файла в микроконтроллер(возможно, когда выбран Hex-file);
Verify — проверка прошивки, что в микроконтроллере, и hex-файла(проще говоря, их сравнение), если всё норм — программа говорит OK;
Read — считать hex-файл.

С блоком EEPROM всё по аналогии.

Далее блок Device, тут можно выбрать нужный микроконтроллер, вот весь список поддерживаемых(список выдрал из файла Device.txt, который лежит в папке SinaProg 2.1.1\data\):

Тут их пара–тройка
Шутка, вон их сколько:

AT90CAN128
AT90CAN32
AT90CAN64
AT90PWM2
AT90PWM2B
AT90PWM3
AT90PWM3B
AT90USB1286
AT90USB1287
AT90USB162
AT90USB646
AT90USB647
AT90USB82
AT90s1200
AT90s2313
AT90s2323
AT90s2333
AT90s2343
AT90s4414
AT90s4433
AT90s4434
AT90s8515
AT90s8535
ATmega103
ATmega128
ATmega1280
ATmega1281
ATmega1284P
ATmega128RFA1
ATmega16
ATmega161
ATmega162
ATmega163
ATmega164P
ATmega168
ATmega169
ATmega2560
ATmega2561
ATmega32
ATmega324P
ATmega325
ATmega3250
ATmega328P
ATmega329
ATmega3290
ATmega3290P
ATmega329P
ATmega48
ATmega64
ATmega640
ATmega644
ATmega644P
ATmega645
ATmega6450
ATmega649
ATmega6490
ATmega8
ATmega8515
ATmega8535
ATmega88
ATtiny11
ATtiny12
ATtiny13
ATtiny15
ATtiny22 2343
ATtiny2313
ATtiny24
ATtiny25
ATtiny26
ATtiny261
ATtiny44
ATtiny45
ATtiny461
ATtiny84
ATtiny85
ATtiny861
ATtiny88
ATxmega64A1
ATxmega128A1
ATxmega128A1D
ATxmega192A1
ATxmega256A1
ATxmega64A3
ATxmega128A3
ATxmega192A3
ATxmega256A3
ATxmega256A3B
ATxmega16A4
ATxmega32A4
ATxmega64A4
ATxmega128A4



Как видите, есть все популярные микроконтроллеры фирмы ATmel, в частности ATmega328P, ATmega8, ATtiny13, ATtiny2313 и всякие другие…

Далее — кнопка Search, если её нажать, то программа попытается прочитать сигнатуры того микроконтроллера, который подключен к программатору, проще говоря, поищет микроконтроллер. Потом может ответить „OK“ или „ERROR“ в информационном блоке, если всё нормально, или нет, соответственно.

В блоке Fuses есть предустановки для ATmega8 для работы на разных частотах, но, увы, только для ATmega8 и ATmega32, можно добавить в файле Fuse.txt (который лежит в папке SinaProg 2.1.1\data\).

Есть кнопка Program — записать предустановки, смотрим на абзац выше.

А так же Advanced — лихая кнопка, после её нажатия можно увидеть вот такое окно:

image

Device signature — какие-то циферки, я так понял это идентификатор микроконтроллера, по ним программа опознаёт, что за микроконтроллер мы ей суём.

Информационная часть, всё как выше.

Чуть ниже идут фьюзы… если уж зачешется, то не забывайте их сначала считать кнопкой Read(чтобы не нарочно изменить важные фьюзы, например «SPIEN» или «RSTDSBL»), записать фьюзы — кнопка Write, кнопка Chip Erase стирает микроконтроллер, что-то примерно напоминает — форматирование флешки на компьютере(но фьюзы не устанавливаются по умолчанию, так что забывать об этом не стоит).

Пару слов о фьюз-битах — это такие как бы тонкие подстройки микроконтроллера, то частоту поднять, то убавить, то вкл/выкл тактирование от внутренней RC цепочки то ещё что-то… в общем, туда лезть только в крайнем случае, иначе можно заблокировать микроконтроллер(нашаманить так, что перестанет работать, серьёзно), и уже без Atmega fusebit doctor никак.

Вот первая ссылка с гугла по запросу «калькулятор фьюзов», но предупреждаю, тыкать что-то там, не зная зачем оно, и потом это записывать в микроконтроллер — ни к чему хорошему не приведёт, я-то знаю.

Далее ещё какой-то информационный блок, не вникал особо. Ну и кнопка выход, я думаю вы уже об этом догадались, даже если и не знаете английский.

Итак, последний блок основного окна программы — Programmer, тут выбирается тип программатора, если вы используете Arduino в качестве программатора — ставьте всё, как у меня на скрине, только не COM19, это у меня такой, у вас, наверное, будет другой, в любом случае точно не COM1, первый это системный, актуален только для программаторов, которые подключаются к реальному COM порту, например, Программатор Громова. На ноутбуке COM-порта может не быть, а на компьютерах, как правило, COM-порт ещё есть, особенно тех, что постарше. Можно использовать и другой программатор, к примеру, USBASP, только не забываем выбрать его в списке, скорость для него я ставлю такую же как и в случае с AVRISP.

Список поддерживаемых программаторов:

Маловато будет
Gromov
USBtiny
ALF
Arduino
AT ISP
AVR109
AVR910
AVR911
AVRISP
AVRISP 2
AVRISP mkII
AVRISP v2
Bascom
Blaster
BSD
Butterfly
C2N232I
DAPA
DASA
DASA 3
Dragon_DW
Dragon_HVSP
Dragon_ISP
Dragon_JTAG
Dragon_PP
DT006
ERE-ISP-AVR
Frank-STK200
Futurlec
JTAG 1
JTAG 1Slow
JTAG 2Slow
JTAG 2
JTAG 2Fast
JTAG 2ISP
JTAG 2dW
JTAG mkI
JTAG mkII
MIB510
pAVR
Picoweb
Pony-STK200
ponyser
SI Prog
SP12
STK200
STK500
STK500 HVSP
STK500 PP
STK500 v1
STK500 v2
STK600
STK600 HVSP
STK600 PP
USBasp
Xil



Лично я тестировал только на программаторах AVRISP(Arduino с прошитым скетчем ArduinoISP) и USBasp, на двух микроконтроллерах — ATmega8 и ATtiny13.

Чтобы можно было шить/читать/изменять фьюзы/ убить микроконтроллер при помощи Arduino, предварительно нужно зашить скетч ArduinoISP, подключив всё, как я писал, например вот тут:

Прошивка и программирование ATtiny13 при помощи Arduino.

Если в двух словах, то подключаем пины Reset, MOSI, MISO, SCK микроконтроллера, который будем прошивать/считывать прошивку/изменять фьюзы так, как указано в скетче в комментариях, а именно:

...
// pin name:    not-mega:         mega(1280 and 2560)
// slave reset: 10:               53 
// MOSI:        11:               51 
// MISO:        12:               50 
// SCK:         13:               52 
...


Вот пример подключения к ардуине ATmega8:

image

Ну и по аналогии… Ищем карту пинов, например, в даташите (техдокументация на МК) интересующего нас микроконтроллера, вот, к примеру, первая ссылка из гугла по запросу «ATmega8 pdf».

Ладно, не буду больше томить, вот ссылка на программу с файлами из Arduino IDE.

Ссылка на ветку на русскоязычном форуме Arduino;

Калькулятор фьюзов;

Прошивка и программирование ATtiny13 при помощи Arduino;

Все мои публикации.

PS У меня было такое, что ATtiny13 перестала прошиваться, на попытки её программирования, после того, как я попробовал запустить её на частоте 128 kHz, откопал где-то вот такой, слегка модифицированный код ArduinoISP который заставляет прошивку/изменение фьюзов происходить медленнее в несколько раз и может ещё какая-то магия, не разбирался, честно.
Сергей ПоделкинЦ @HWman
карма
39,0
рейтинг 16,0
Ардуинщик-лентяй, техноманьяк
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (8)

  • +1
    Круто! Надо попробовать тиньки на 128кгц прошить.
  • +2
    Зануда Mode ON

    Прошивка hex файлов
    Прошить HEX файл не возможно, он файл — набор инструкций для программы.

    Небольшая предыстория:
    Вообще не понял её. А точнее сложности возникшей.

    Device signature — какие-то циферки, я так понял это идентификатор микроконтроллера, по ним программа опознаёт, что за микроконтроллер мы ей суём.
    Это написано в даташите, даже не нужно этого понимать. :)

    Чуть ниже идут фьюзы… если уж зачешется, то не забывайте их сначала считать кнопкой Read(чтобы не нарочно изменить важные фьюзы, например «SPIEN» или «RSTDSBL»),
    Если есть желание что именно уже сконфигурированно тогда да, а вот если ошибся с фьюзами и вырубил рэзэт или ещё что то там, то хоть считуй предварительно а хоть нет. Всё равно это не спасёт от невнимательности.

    кнопка Chip Erase стирает микроконтроллер, по аналогии — форматирование флешки на компьютере
    Даже не близко.

    Вот первая ссылка с гугла по запросу «калькулятор фьюзов», но предупреждаю, тыкать что-то там, не зная, зачем оно — ни к чему хорошему не приведёт, я-то знаю.
    Дожились, уже и в калькуляторе потыкать нельзя. :(

    в любом случае точно не COM1
    При стандартной установке не будет, а вот руками вообще без проблем.

    К чему я это всё. Если вы пишите для начинающих то пишите технически грамотно. Если описываете интерфейс программы то описывайте полностью или не упоминайте не существенные пункты. («Далее ещё какой-то информационный блок, не вникал особо.»).
    А так у вас получилось:
    — Но это не верно с научной стороны!!!
    — Да какая разница, зрителю нравится а остальное не важно.
    — Взрывов, больше взрывов, а тут сиськи нужно вставить
    © Звёздные врата + сиськи от меня :)

    «Использование Aurdino в качестве программатора» — это ваш заголовок.

    P.S. За информацию про существование SinaProg, спасибо.

    P.S.2. Если уже зашла речь о прошивке мег. то самый удобный вариант это «зашить» загрузчик и потом уже «прошивать» не парясь, через тот-же UART. Пока свой не написал то пользовался www.chip45.com/avr_bootloader_atmega_xmega_chip45boot2.php

    А для новичков лучше почитать перевод «даташита» на 128мегу и писать начинать не на C/C++ а на Ассемблер-е, хотя-бы пару простеньких вещей — что-бы понимать что делается за кулисами.

    Зануда Mode OFF && Мишень Mode ON ;)
    • 0
      Прошить HEX файл не возможно, он файл — набор инструкций для программы.

      Да, но мне кажется что новичку будет более понятнее если сказать прошивка HEX файла чем — запись набора инструкций в микроконтроллер.

      … кнопка Chip Erase стирает микроконтроллер, по аналогии — форматирование флешки на компьютере
      Даже не близко…

      А как должно быть?

      «Использование Aurdino в качестве программатора» — это ваш заголовок.

      А как Вам такой заголовок: «Превращаем Arduino в полноценный AVRISP программатор»?
  • +1
    Я очень рад что вы приняли мою критику здраво :)

    (у меня что-то не работает blockquote, буду кавычками)

    Честно говоря, новичку совершенно фиолетово. Новичок знает что нужно выбрать «вот эту байду» вот в этом поле и жмакнуть вот эту кнопку. Но почему-бы с малу не прививать им правильные определения :)
    Знаю одного товарища, он долго считал что всё что указанно в HEX файле, напрямую так и пишется в ПЗУ.

    Из недавнего: На радио коте, человек заместь того что-бы разобраться со своим софтом для программирования, он просто изменил константу (дэфайн) частоты камня у себя в программе. Хотя дело решалось правильно с помощью одной галки в фьюзах :)

    «А как должно быть?»
    Это в принципе своём разные вещи.
    При стирании ПЗУ микроконтроллера, каждая ячейка перезаписывается байтом 0xFF(255) или 0x00(0) (точно не помню, хотя тут ещё зависит от реализации), честно говоря вообще не понимаю смысла этой кнопки.

    При форматировании диска, происходят совершенно иные процессы, а если это форматирование «быстрое», то и данные никуда не деваются и не перезаписываются. Хотя если под Linux затереть накопитель при помощи «dd» то получится почти то-же самое :)

    "«Превращаем Arduino в полноценный AVRISP программатор»"
    Соответствует содержимому. Даже намного лучше моего варианта ;)

    P.S. В свои статьи можете смело вставлять ссылку на эту PDF-ку usbsergdev.narod.ru/DOC/ATmega128rus.pdf
    Кайф 128 меги в её толстожопости и в этом мануале описаны в общем все функции имеющиеся в младших «моделях». Да, в результате чаще всего используются разные регистры и придётся сравнивать с оригинальным даташитом под использующийся контроллер. Но для тех кто с английским вообще не в ладах, очень удобно будет понят что оно вообще такое и с какой стороны масло мазать :)

    P.S.2. Мне очень нравится как DI_HALT в самом начале описывал всё. Просто, доступно и с приколами.
    Более понятной и лёгкой статьи про «порты» я доси не нашел, поэтому всегда ссылаюсь на его статью easyelectronics.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html
    • +1
      Я очень рад что вы приняли мою критику здраво :)
      Я уже с ютуба привык, бывает иногда пишут что-то из разряда «видио гавно, автар мудак» а бывает то же самое пишут только одним словом… А вот реальной конструктивной критики — очень не хватает.

      При форматировании диска, происходят совершенно иные процессы, а если это форматирование «быстрое», то и данные никуда не деваются и не перезаписываются. Хотя если под Linux затереть накопитель при помощи «dd» то получится почти то-же самое :)

      Да но смысл схожий — до нажатия кнопки Chip Erase на флешке есть фильмы, после уже нет…

      P.S. В свои статьи можете смело вставлять ссылку на эту PDF-ку usbsergdev.narod.ru/DOC/ATmega128rus.pdf...

      Помню где-то нагуглил вот такую книженцию. Вот там классно всё.

      P.S.2. Мне очень нравится как DI_HALT в самом начале описывал всё...

      Да да, помню, «упячко-мэн». Жаль что нету у меня такой харизмы как у автора…
  • 0
    Не помешает вставить скрин для распиновки меги, а то в Вашей вырезки сорца есть упоминание про пины, а соответствующей картинки нет.
    Долго пытался понять почему у меня чип не находился, когда пытался прошить себе программатор, воспользовавшись кстати, Вашей инструкцией.
    Соответствующий скрин, есть в гугле.
  • 0
    Интересно, а зачем ставить конденсатор на порт ресет ардуины?
    К стати, не стоит пользоваться штатной кнопкой ресет когда там подключен конденсатор, он значительно увеличит токи которые проходят через кнопку.
  • 0
    первую авр так и запрограммировал с помощью ардуины и ее среды разработки
    потом купил усб программатор

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.