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 1 -> 12 (MISO) Номера контактов кабеля (слева) к целевому 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) | |