Arduino - In System Programmer (ISP) + ArduinoISP-Turbo!

Скетч-программатор (а их несколько и чуток разных ...).

Тема, на мой взгляд, интересная и позволяет мотивировать покупку нескольких Ардуино ;-) Жаль что обобщенной информации по ней не много. Есть разные заметки, в том числе на официальном сайте и форуме. Попытка обобщить их предпринята мной. И представлено это будет в основном в виде комментариев к линкам на оригинальные статьи (знакомство с которыми в любом случае имхо не лишнее) ...


http://arduino.cc/en/Tutorial/ArduinoISP - Использование Arduino как программатора AVR ISP (Using an Arduino as an AVR ISP).

Пожалуй, это основной вариант, или просто размещен на официальном сайте.

Далее мой вольный перевод этой статьи (желтой подсветкой), а курсивом - мои дополнения ...

"
Это руководство рассказывает как использовать ардуину в качестве программатора AVR ISP (in-system programmer). Что дает возможность прошивки загрузчика (bootloader) в контроллер AVR (например ATmega168 or ATmega328 для дальнейшего их использования как Ардуино). Код прошивки ардуины, используемой в качестве программатора базируется на исходниках от Randall Bohn.

Замечание: На текущий момент невозможно использовать Arduino Uno в качестве программатора ISP потому что прошитый в ее контроллер загрузчик (optiboot bootloader) не поддерживает скетч, превращающий ардуину в программатор. Но это пока ... работы в направлении фикса ведутся ...

Инструкция:

Для использования Ардуино-платы для прошивки загрузчика (bootloader) в чистый AVR контроллер нужно выполнить следующие шаги.
1. Загрузить в рабочую ардуину скетч (идет в комплекте с Arduino IDE), превращающий ее в программатор. Называется он "ArduinoISP" и находится в корне раздела "Examples".
2. Подключить "Ардуино-программатор" к целевому контроллеру по схемам приведенным ниже (со схемами можно ознакомиться в оригинальной статье по ссылке выше).

Правда, к сожалению, наглядными и понятными их не назовешь и "кто-кому-чего дает" там с первого, да и со второго взгляда не совсем ясно. Идея тех рисунков в общем такая: нижняя по картинке ардуина выполняет роль программатора, верхняя - роль "панельки" для чистого (прошиваемого) контроллера (и не более). Также не понятно почему бы не использовать для подключения разъем ISP на плате ардуины - да электрически разницы никакой (на него выведены часть ног с торцов платы) - но с точки зрения организационной так вроде как правильнее ;-) К подключению вернемся еще чуть позже ...

3. Выберите через меню Tools > Board модель платы, в которой будет работать прошиваемый контроллер - т.е. фактически тип зашиваемого загрузчика (т.е. выбрать нужно не тип ардуины, используемой в качестве программатора!). См. описание плат Ардуино (так рекомендовано в оригинале).
4. Выберите Burn Bootloader > Arduino as ISP command."

В натуре выглядит все очень просто, например так:

Чуть подробнее о подключении контроллера к "Ардуино-программатору".

Разъем ISP на плате ардуины имеет следующую распиновку (рисунок слева).

Контакты MOSI, MISO и SCK вы ведены на пины "DIGITAL" 11,12 и 13 соответственно. Контакт RESET прикручен к соответствующей ноге контроллера на плате ардуины, поэтому чтобы его "подергать" с платы "Ардуино-программатора" используется "цифровой пин" 10 на плате программатора (согласно скетчу ArduinoISP). Также скетчем предусмотрена установка информирующих светодиодов (не является обязательной) на ноги 7, 8 и 9 (Programming, Error и HeartBeat).

Еще раз о распиновке классического кабеля ISP
от целевого MCU -> к "Arduino ISP":

1 -> 12 (MISO)
2 -> VCC
3 -> 13 (MOSI)
4 -> 11 (SCK)
5 -> 10 (RESET)
6 -> GND

Номера контактов кабеля (слева) к целевому MCU соответствуют номерам ног разъема ISP ардуины.


Есть и другие редакции или даже варианты скетча, например:

http://www.arduino.cc/playground/Code/Programmer2 - Описание и скетч, превращающий ардуину в программатор AVR совместимый с stk500v1.

Скетч старинный, но возможно даже с него началась идея Ардуино-программатора. Для работы с avrdude используется команда вида: avrdude -v -cstk500v1 -PCOMxx -b19200 ... - причем указание скорости связи является обязательным и ключевым моментом!


http://arduino.cc/playground/Code/MegaISP - До сих пор развивающийся скетч Ардуино-программатора от Randall Bohn.

Пока немного и сумбурно ... со временем возможно откорректирую и дополню ...

MiGeRA (январь 2012)

 

«ArduinoISP-Turbo» – патч скетча ISP-программатора из Arduino UNO.

В очередной раз проводя оптимизации и ревизию материалов на сайте, перечитав эту статью подумал, что совсем не использую описанное выше – программаторов и так тьма разнообразных … Но решил еще раз проверить описанное. К удивлению пришлось немного повозиться. Но все же все заработало, и причем даже лучше чем ожидалось ;-)) Об этом и пойдет речь далее – 8 лет спустя после написания первой части.

Для эксперимента взял древнюю UNO с интерфейсным контроллером mega8u2 и Arduino IDE 1.8.9, обновил (перезалил) прошивку интерфейсного контроллера (.\hardware\arduino\avr\firmwares\atmegaxxu2\UNO-dfu_and_usbserial_combined.hex) и загрузчик основного mega328p (.\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex), подготовленный кабель из запасов тоже нашелся. В комплекте среды разработки в качестве примера идет уже совсем другой (обновленный) скетч ArduinoISP, чем представлены и доступны по ссылкам выше. Можно воспользоваться им в неизменном виде, не забывая указывать помимо вида программатора (stk500v1) и номера COM-порта еще и скорость порта (по-умолчанию 19200, без указания скорости не работает!). Но на таких «оборотах» работать крайне медленно/скучно/бессмысленно – и мотивация выбора такой черепашьей скорости в скетче, типа чтоб можно было прошить контроллер tiny85 на 1MHz тактовой частоты настроенный – не сильно устраивает (с такими контроллерами не работаю), да если даже и работал бы … То зачем занижать скорость работы COM-порта?* 115200 нужно выставлять обязательно (максимальная «стандартная» скорость – в разы быстрее чем 19200). Но останавливаться на этом также не стоит. Прошивка в софтовом преобразователе USB<->COM (интерфейсном контроллере ардуины) вполне себе переваривает и 921600! Но в этом случае помимо скорости порта (чтобы получить эффект) нужно увеличивать и скорость SPI-шины между ардуиной-программатором и целевым контроллером (дефолтных 1000000/6 – катастрофически мало). Раз есть требование /6 тактовую частоту – то так и сделаем: все контроллеры ардуино по-умолчанию имеют кварц на 16MHz, что даже /6 превосходит скорость порта в 921600 … Результатом остался доволен, корректировки можно внести самостоятельно или скачать сразу откорректированный скетч ArduinoISP-Turbo. Не забываем указывать актуальную скорость (указанную в исходнике скетча), в последнем случае 921600. Контроллер mega328p (другая ардуина) таким скетчем-программатором считывается полностью за 3.5сек и записывается за 10сек.

*

MiGeRA (июнь 2020)

Заглавная » Радиоэлектроника » Arduino - Высокоуровневая платформа устройств на микроконтроллерах » Arduino ISP - скетч-программатор + ArduinoISP-Turbo!