Яндекс.Метрика

Arduino - In System Programmer (ISP).

Скетч-программатор.

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

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 - скетч-программатор!