![]() | Arduino - In System Programmer (ISP).Скетч-программатор.Тема, на мой взгляд, интересная и позволяет мотивировать покупку нескольких Ардуино ;-) Жаль что обобщенной информации по ней не много. Есть разные заметки, в том числе на официальном сайте и форуме. Попытка обобщить их предпринята мной. И представлено это будет в основном в виде комментариев к линкам на оригинальные статьи (знакомство с которыми в любом случае имхо не лишнее) ... http://arduino.cc/en/Tutorial/ArduinoISP - Использование Arduino как программатора AVR ISP (Using an Arduino as an AVR ISP) - далее мой вольный перевод этой статьи (желтой подсветкой), курсивом мои дополнения ... "
" Чуть подробнее о подключении контроллера к "Ардуино-программатору". Разъем ISP на плате ардуины имеет следующую распиновку (рисунок слева). Контакты MOSI, MISO и SCK вы ведены на пины "DIGITAL" 11,12 и 13 соответственно. Контакт RESET прикручен к соответствующей ноге контроллера на плате ардуины, поэтому чтобы его "подергать" с платы "Ардуино-программатора" используется "цифровой пин" 10 на плате программатора (согласно скетчу ArduinoISP). Также скетчем предусмотрена установка информирующих светодиодов (не является обязательной) на ноги 7, 8 и 9 (Programming, Error и HeartBeat). Еще раз о распиновке классического кабеля ISP от целевого MCU -> "Arduino 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) |