Превращение микроконтроллера в Arduino. Bootloader.
Существует множество способов, как заставить работать скетч из Arduino IDE в обычном микроконтроллере. Самый популярный и логически обоснованный – установка загрузчика (bootloader) Arduino желаемой версии на микроконтроллер и добавление внешнего кварца на 16 МГц.
Метод хорош тем, что дальнейшая работа с подобным микроконтроллером ничем не отличается от работы с обычной платой Arduino. Ещё бы – на нём же загрузчик!
Загрузчик, или в англоязычной литературе, bootloader, это небольшой фрагмент кода, располагающийся в специально отведенной области flash-памяти. Его задачей является организация загрузки и обновления основной программы. Загрузчик обычно запускается раньше основной программы и некоторое время мониторит последовательную шину — линии RX и TX шины UART. Если нет команд на загрузку новой программы, загрузчик переходит к запуску основной программы, находящейся во flash-памяти микроконтроллера.
Расположение во flash-памяти загрузчика Arduino Nano на микроконтроллере ATMega168.
Получается что-то наподобие программного программатора. В принципе, на этом и заканчивается работа загрузчика.
Перейдём от теории к практике. И первое что нам потребуется для записи загрузчика -программатор. На протяжении нескольких лет я использую для прошивки микроконтроллеров AVR недорогой программатор USBASP. Также нужен будет адаптер, для подключения микроконтроллера к программатору. Из программ понадобится пока только Arduino IDE.
Программатор USBASP c адаптером для микроконтроллеров с корпусами TQFP32.
Распиновка колодки программатора USBASP и расположение необходимых для прошивки пинов у ATMEGA 168/328 в корпусе TQFP 32.
Загрузчики для разных версий плат Arduino хранятся в папке с установленной Arduino IDE: Arduino/hardware/arduino/avr/bootloaders. Информацию о фьюз битах, частоте тактирования и какой загрузчик соответствует той или иной версии платы, можно узнать в файле boards. txt (Arduino/hardware/arduino/avr/boards.txt).
Небольшой совет: файл boards.txt удобно просматривать в Notepad++. В обычном Блокноте Windows файл трудночитаем.
Для примера, попробуем превратить ATMEGA168p в Arduino Nano.
Предупреждение: во время выполнения операций с микроконтроллером, будьте предельно внимательны – некорректно установленные фьюз биты могут заблокировать микроконтроллер и дальнейшая прошивка будет невозможна. Перед прошивкой не лишним будет проверить значения фьюз-битов в специальном калькуляторе. Ссылку на один из них оставлю под статьёй.
Чтобы прошить загрузчик, потребуется еще одна программа – программа для прошивки микроконтроллеров. Для этих целей можно воспользоваться тем, что уже есть — в комплект пакета Arduino IDE входит Avrdude. Ее можно найти в папке
Совет: для Windows 7 и выше – щелчок правой клавишей мыши на пустом месте с зажатой клавишей Shift -> Открыть окно команд. Или просто введите в Командной строке команду cd полный_путь_к_директории.
Строка ниже, и есть та самая команда, позволяющая прошить микроконтроллер:
avrdude -C ../etc/avrdude.conf -c usbasp -p atmega168p -U flash:w:ATmegaBOOT_168_diecimila.hex -U lfuse:w:0xff:m -U hfuse:w:0xdd:m -U efuse:w:0xf8:m
Немного расшифрую «что есть что» в этой команде:
flash:w:a328p_16MHz_ff_de_5.hex – путь до файла прошивки. Для удобства, можно скопировать в папку с Avrdude.
atmega168p – тип микроконтроллера, который нужно прошить. Можно посмотреть в файле boards.txt.
-U lfuse:w:0xff:m – значение Low fuse byte. Берётся из файла boards.txt
-U hfuse:w:0xde:m – значение High fuse byte. Берётся из файла boards.txt
-U efuse:w:0x5:m – значение Extended fuse byte. Берётся из файла boards. txt
../etc/avrdude.conf –c – путь до конфигурационного файла. Без этой строки, Avrdude выдает ошибку, и, ничего не прошивает. Не советую тут что-то менять.
-c usbasp – тип программатора, который используется для прошивки. Можно заменить на тот, который есть у вас. Предварительно рекомендую заглянуть в документацию программы Avrdude.
Теперь немного о безопасности. Порою возникает необходимость защитить flash-память микроконтроллера от дальнейшего считывания. Для таких случаев и существуют lock биты, грамотная установка которых не препятствует последующим обновлениям программы. Считать содержимое flash-памяти при этом можно, только вместо реального содержимого памяти, считается набор шестнадцатеричных значений от
Для прошивки lock-битов в Avrdude, добавьте к уже имеющейся команде небольшой фрагмент кода: -U lock:w:0x0F:m. Следует учесть, что значение 0х0F в данном случае так же следует брать из boards. txt в соответствии с выбранной версией загрузчика.
C:\Program Files\Arduino\hardware\tools\avr\bin>avrdude -C ..\etc\avrdude.conf - c usbasp -p atmega168p -U flash:w:ATmegaBOOT_168_diecimila.hex -U lfuse:w:0xff:m -U hfuse:w:0xdd:m -U efuse:w:0xf8:m -U lock:w:0x0F:m avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.06s avrdude: Device signature = 0x1e940b (probably m168p) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be perform ed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "ATmegaBOOT_168_diecimila.hex" avrdude: input file ATmegaBOOT_168_diecimila.hex auto detected as Intel Hex avrdude: writing flash (16294 bytes): Writing | ################################################## | 100% 0.13s avrdude: 16294 bytes of flash written avrdude: verifying flash memory against ATmegaBOOT_168_diecimila. hex: avrdude: load data flash data from input file ATmegaBOOT_168_diecimila.hex: avrdude: input file ATmegaBOOT_168_diecimila.hex auto detected as Intel Hex avrdude: input file ATmegaBOOT_168_diecimila.hex contains 16294 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.07s avrdude: verifying ... avrdude: 16294 bytes of flash verified avrdude: reading input file "0xff" avrdude: writing lfuse (1 bytes): Writing | ################################################## | 100% 0.03s avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xff: avrdude: load data lfuse data from input file 0xff: avrdude: input file 0xff contains 1 bytes avrdude: reading on-chip lfuse data: Reading | ################################################## | 100% 0.02s avrdude: verifying ... avrdude: 1 bytes of lfuse verified avrdude: reading input file "0xdd" avrdude: writing hfuse (1 bytes): Writing | ################################################## | 100% 0.04s avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xdd: avrdude: load data hfuse data from input file 0xdd: avrdude: input file 0xdd contains 1 bytes avrdude: reading on-chip hfuse data: Reading | ################################################## | 100% 0.01s avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xf8" avrdude: writing efuse (1 bytes): Writing | ################################################## | 100% 0.03s avrdude: 1 bytes of efuse written avrdude: verifying efuse memory against 0xf8: avrdude: load data efuse data from input file 0xf8: avrdude: input file 0xf8 contains 1 bytes avrdude: reading on-chip efuse data: Reading | ################################################## | 100% 0.01s avrdude: verifying ... avrdude: 1 bytes of efuse verified avrdude: reading input file "0x0F" avrdude: writing lock (1 bytes): Writing | ################################################## | 100% 0. 03s avrdude: 1 bytes of lock written avrdude: verifying lock memory against 0x0F: avrdude: load data lock data from input file 0x0F: avrdude: input file 0x0F contains 1 bytes avrdude: reading on-chip lock data: Reading | ################################################## | 100% 0.01s avrdude: verifying ... avrdude: 1 bytes of lock verified avrdude: safemode: Fuses OK (E:F8, H:DD, L:FF) avrdude done. Thank you. C:\Program Files\Arduino\hardware\tools\avr\bin>
Пример удачно завершенной прошивки микроконтроллера при помощи Avrdude.
Схема, представленная ниже, взята из документации на Arduino Nano. Это минимум деталей, при котором загрузчик и загружаемые в микроконтроллер скетчи будут работать так же, как и в случае с оригинальной Arduino Nano.
Для загрузки скетчей в память микроконтроллера потребуется USB-TTL (UART) конвертер – устройство, служащее посредником между средой Arduino IDE и микроконтроллером. Конвертер преобразовывает интерфейс USB в UART, благодаря которому данные поступают загрузчику, а последний в свою очередь записывает их во flash-память микроконтроллера.
Примечание: в случае, если у вашего конвертера уже имеется конденсатор в цепи DTR, конденсатор С4 можно исключить. Цепь VD1 R4 в принципе не является важной и её можно исключить.
Два конвертера: верхний на микросхеме PL2303, а нижний — на Ch440G. Для загрузки скетча подходит любой.
Процесс загрузки скетча в точности такой же, как и в случае с оригинальной платой Arduino. Микроконтроллер и USB-TTL конвертер соединяются по вот такой не хитрой схеме:
Если у вашего USB-TTL конвертера есть выход DTR, то вам повезло – подключать его следует обязательно к выводу RESET микроконтроллера. Если же такого вывода нет – нужно будет сбрасывать микроконтроллер вручную, кратковременно коммутируя вывод RESET к минусу питания. Делать это необходимо сразу же, как только заметите в Arduino IDE сообщение «Загрузка…».
Обратите внимание на коричневый проводок. У моих конвертеров нет выхода DTR, поэтому при старте загрузки я просто размыкаю RESET и минус питания.
USB-TTL конвертер на микросхеме Ch440G можно доработать: вывод 13 микросхемы и есть тот самый DTR, к которому можно подпаять проводок и использовать вывод по назначению. Всё же приятней когда всё автоматизировано, не так ли?..
Для тестов написал коротенький скетч и загрузил, сначала на Arduino Nano, а затем на микроконтроллер с загрузчиком Arduino. Особой разницы в работе схемы не замечено.
Есть чуть более легкий путь, чтобы добиться подобных результатов. И именно о нём я сейчас и расскажу.
Среда Arduino IDE позволяет выгружать готовый скетч в виде бинарного файла. Для этого нужно перейти в Скетч -> Экспорт бинарного файла.
В процессе выгрузки создаются 2 файла с расширением *.hex: с загрузчиком и без него. Внимательный читатель уже догадался, что файл без загрузчика, не подразумевает дальнейшего исправления загруженного скетча. Так оно и есть — вариант хорош в случае, когда исправлять уже больше ничего не нужно и вряд ли когда-нибудь понадобится.
Запись во flash-память одного из файлов в точности такая же, как и в случае с загрузчиком – пример команды для Avrdude у вас уже есть. Значения фьюз битов так же берутся из boards.txt и зависят от платы, выбранной в среде Arduino IDE. Единственная разница вместо файла загрузчика – бинарный *.hex файл, экспортированный из Arduino IDE.
Поменял сообщение на экране, чтобы не казалось что это результат от предыдущего эксперимента. Хотя разницы в работе опять же никакой.
Настало время поговорить о возможных проблемах. Первое с чем я столкнулся — программатор не видит микроконтроллер. В окне Avrdude можно видеть вот такое сообщение:
avrdude: error: program enable: target doesn’t answer.
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
Самая распространённая причина – ошибка в подключении микроконтроллера. Следует проверить правильность соединения МК и адаптера. Более редкая причина – плохой контакт между самим микроконтроллером и адаптером. В таком случае, можно зачистить дорожки адаптера, подогнуть слегка ножки микроконтроллера.
Еще одна проблема — не загружается скетч. Причин может быть несколько: плохой контакт, неисправный чип, отсутствие питания или же перепутанные линии RX-TX. Последнее, к слову, самая частая беда.
Всё то, что я рассказал выше, может пригодиться, в случае если вам каким-то образом удалось умертвить микроконтроллер в плате Arduino. Либо, если возникнет потребность создать устройство на Ардуино с красивой и лаконичной топологией печатной платы, без каких-либо наслоений. Оба изложенных сценария вполне работоспособны и проверены на личном опыте, так как основной моей задачей было научиться. И научить вас, конечно же
На сегодня всё. Спасибо за внимание и удачи в конструировании!
P. S. У данной статьи обязательно будет продолжение в виде второй части, которую просто нельзя не опубликовать. Добавлю ниже, как рекомендацию.
Ссылки и прочее:
1. https://www.engbedded.com/fusecalc/ — калькулятор фьюзов, может пригодиться для проверки фьюзов из файла boards.txt.
Восстановление ардуино после переполюсовки или подачи завышенного напряжения питания
2020-06-19
Все статьи →После сборки проекта может возникнуть ситуация с ошибками в подаче питания. В результате может выйти из строя, как сама плата ардуино, так и подключённые к ней устройства. В данной статье речь пойдет о диагностике и восстановлении платы Arduino UNO, которая легла смертью храбрых. Данная статья может также подойти, как для подготовки голого кристала к проекту, так и для востановления других ардуин из линейки.
Итак. Мы имеем плату Arduino UNO китайского производства у которой выгорел стабилизатор питания. Сразу же убираем остатки сгоревшего регулятора и видим отгоревшую дорожку.
Следующий шаг — проверяем сопротивление на разъеме питания, линии питания шины USB, защитный диод, также не забываем проверить конденсаторы установленные около разъема дополнтельного питания.
В нашем случае всё нормально, поэтому подключаем плату к компьютеру и смотрим за ее поведением. Она определилась, но залитый в нее тестовый скетч из среды Arduino IDE не работает. Отсюда вывод — микроконтроллер ATmega328P не исправен. Снимаем его с помощью фена (или же можно его просто аккуратно выкусить бокорезами), не забываем убрать остатки припоя или ножек с помощью оплетки.
Затем ищем откуда на стабилизатор напряжения приходило питание (смотрим разводку платы), в этом неплохо помогают обычные настольная лампа и мультметр. Когда нужная дорожка найдена, берем тонкое сверло и сверлим плату насквозь по ближайшему переходному отверстию. Рекомендую делать это с двух сторон во избежание отрыва медной фольги. Потом зачищаем участок дорожки, залуживаем его, в отверстие вставляем кусочек медной пролволоки и запаиваем его. Таким образом осуществляется восстановление отгоревшей дорожки, идущей к входной ножке стабилизатора напряжения.
Следующий шаг — запаиваем новый стабилизатор напряжения, подходящий по цоколевке. В нашем случае это LD1117S50TR производства ST Microelectronics с фиксированным выходом +5В и выходным током до 0,8А — как раз то, что нужно. Не забываем убирать остатки флюса) Готово! Плата физически восстановлена и подготовлена для установки нового микроконтроллера.
Вторая часть.Подготовка микроконтроллера.
Первым шагом по востановлению является приобретение самого микроконтроллера. Его можно приобрести как на алиекспрессе , так и в этом магазине. Микроконтроллер нужно покупать в подходящем к конкретной плате формфакторе. Я бы хотел посоветовать приобретать Arduino UNO с микроконтроллером в корпусе DIP28, так как его будет и проще прошить, и легче заменить. Хотелось бы для начала обяснить , почему новый микроконтроллер не подходит для Arduino IDE. Это происходит из-за того, что сами мк стоит прошивать через SPI. Но разработчики ардуино придумали другой вариант – прошить в микроконтроллер загрузчик (bootloader), и прошивать мк через интерфейс UART , что дополнительно позволяет осуществлять обмен данными между ардуино и компьютером. Так как наш микроконтроллер без него , то нам нужно чтобы он там появился. Для этого нам нужен будет програматор . В качестве програматора мы можем использовать как другую рабочую ардуину , так и сам програматор (например широко известный AVR ISP Mk2 или его клон который я и рекомендую ввиду его доступности и дешевизны).
Если вы выбрали вариант с програматором из ардуино , то нам надо просто залить скетч с програматором. Для этого мы просто выбираем в мененджере плат ваш контроллер , и в примере скетчей , выбираем пример «ArduinoISP».
В самой прошивке все контакты подписаны. Если вы выбрали второй вариант, то просто подключаете по этой схеме: (на програматоре должна быть замкнута перемычька JP3, если вы прошиваете Arduino UNO или NANO (ATmega328P), если нет, то ищите инфу по вашему мк)
Следующим шагом будет запись загрузчика.Для этого поключем нашу схему к компютеру. После этого в Arduino IDE нужно выбрать нужную нам плату и указать порт в какой был подключен програматор. Потом нам надо изменить програматор , меняем его на «Arduino as ISP» если вы используете ардуино как програматор , а если програматор USBАSP , то выбираете «USBasp»(при этом програматор, как порт не видеться). После настройки Arduino IDE в меню «Инструменнты» выбирите пункт «Записать загрузчик».
Если все шаги были выполены верно, то в статусном окне должно написать «Запись загрузчика завершена».
Если все выполниось коректно, то поздравляю , вам удалось оживить ардуину из мертвых.
Пока нет отзывов на эту статью.Прошивка новейшего загрузчика на клоне Arduino Nano China — Thing King — Technology & DIY
Arduino Nano очень дешево достать напрямую из Китая. Но часто на этих платах еще стоит старый загрузчик. В этой статье объясняется, как перепрошить загрузчик Nano с помощью другого Arduino.
Обратите внимание:
Это перевод немецкой статьи. Обратите внимание, что, в частности, названия меню, метки кнопок, имена, скриншоты и т. д. могут быть переведены неправильно. Не стесняйтесь, дайте нам знать в комментариях, если вы заметили какие-либо ошибки.
Установлен старый или новый загрузчик?
Чтобы узнать это, подключите Arduino Nano к компьютеру через USB-кабель и откройте среду разработки Arduino IDE. Выберите следующий скетч-пример в разделе File -> Examples -> 01.Basics -> Blink
. В разделе «Инструменты » -> «Плата
» выберите «Arduino Nano», а в разделе «Инструменты » -> «Порт
» выберите соответствующий порт вашего Arduino Nano. В разделе Tools -> Processor
выберите «ATmega328P» (и , а не «ATmega328P (Old Bootloader)») и начните загрузку скетча.
Загрузка прошла успешно?
Если загрузка скетча прошла успешно, то новый загрузчик уже установлен на вашем Arduino Nano, и вы можете прекратить чтение на этом этапе 🙂
Загрузка не удалась?
Если вы получаете сообщение об ошибке, похожее на следующее, значит, на вашем Arduino Nano установлен старый (или не установлен) загрузчик.
Использование порта: COM16 Использование программатора: arduino Преобладающая скорость передачи: 115200 avrdude: stk500_getsync() попытка 1 из 10: не синхронизировано: resp=0x00 avrdude: stk500_getsync() попытка 2 из 10: не синхронизировано: resp=0x00 avrdude: stk500_getsync() попытка 3 из 10: не синхронизировано: resp=0x00 avrdude: попытка stk500_getsync() 4 из 10: не синхронизировано: resp=0x00 avrdude: попытка stk500_getsync() 5 из 10: не синхронизировано: resp=0x00 avrdude: попытка stk500_getsync() 6 из 10: не синхронизировано: resp=0x00 avrdude: попытка stk500_getsync() 7 из 10: не синхронизировано: resp=0x00 avrdude: попытка stk500_getsync() 8 из 10: не синхронизировано: resp=0x00 avrdude: stk500_getsync() попытка 9из 10: не синхронизировано: resp=0x00 avrdude: попытка stk500_getsync() 10 из 10: не синхронизировано: resp=0x00 avrdude сделано. Спасибо. Beim Hochladen des Sketches ist ein Fehler aufgetreten
Сообщение об ошибке может также содержать другие коды после «соотв.», например. g.:
avrdude: stk500_recv(): программатор не отвечает avrdude: stk500_getsync() попытка 1 из 10: не синхронизировано: resp=0x85
Теперь выберите «ATmega328P (Old Bootloader)» в разделе Tools -> Processor
и снова запустите загрузку скетча. На этот раз загрузка должна пройти успешно, и светодиод на Arduino Nano должен мигать. В окне вывода Arduino IDE вы увидите «Загрузка завершена» и более подробную информацию о процессе загрузки, например:
Использование порта: COM16 Использование программатора: arduino Преобладающая скорость передачи: 57600 Часть AVR: ATmega328P Задержка стирания чипа: 9000 мкс СТРАНИЦА: PD7 БС2: ПК2 Расположение СБРОСА: посвященный ПОВТОРИТЬ импульс: SCK серийный программный режим: да режим параллельной программы: да Таймаут : 200 StabDelay : 100 CmdexeDelay: 25 Синхпетли: 32 Задержка байта: 0 Индекс опроса: 3 Поллвалуе: 0x53 Деталь памяти: [. ..] Тип программатора: Ардуино. Описание: Ардуино. Аппаратная версия: 2 Версия прошивки: 1.16 Vцель : 0,0 В Вареф: 0,0 В Осциллятор: Выкл. Период SCK: 0,1 мкс avrdude: устройство AVR инициализировано и готово к принятию инструкций Чтение | ################################################### | 100% 0,00 с avrdude: Подпись устройства = 0x1e950ф (скорее всего м328р) avrdude: чтение входного файла "C:UsersuserAppDataLocalTemparduino_build_372348/Blink.ino.hex" avrdude: запись flash (924 байта): Написание | ################################################### | 100% 0,29 с avrdude: записано 924 байта flash avrdude: проверка флэш-памяти на C:UsersuserAppDataLocalTemparduino_build_372348/Blink.ino.hex: avrdude: загрузить данные флэш-памяти из входного файла C:UsersuserAppDataLocalTemparduino_build_372348/Blink.ino.hex: avrdude: входной файл C:UsersuserAppDataLocalTemparduino_build_372348/Blink.ino.hex содержит 924 байта avrdude: чтение данных встроенной флэш-памяти: Чтение | ################################################### | 100% 0,22 с avrdude: проверка. .. avrdude: проверено 924 байта флэш-памяти avrdude сделано. Спасибо.
Теперь мы знаем, что на Arduino Nano установлен старый загрузчик. Мы можем без проблем перезаписать его новым загрузчиком, потому что это просто другое программное обеспечение. Аппаратное обеспечение Arduino Nano со старым загрузчиком ничем не отличается от устройства с новым загрузчиком. Но зачем нам вообще это делать?
Отличия нового загрузчика от старого
Старый загрузчик называется «ATmegaBOOT», новый загрузчик называется «optiboot» и также используется в других моделях Arduino.
В этом сообщении StackExchange упоминаются два основных преимущества:
- Если Arduino Nano сбрасывается сторожевым таймером, то ошибка в ATmegaBOOT приводит к бесконечно частому перезапуску Arduino Nano. В Optiboot этой ошибки нет.
- При загрузке скетчей ATmegaBOOT работает со скоростью 57600 бод. С другой стороны, загрузчик optiboot вдвое быстрее со скоростью 115200 бод. Таким образом, с новым загрузчиком скетчи можно загружать в Nano быстрее. Поскольку используются разные скорости передачи данных, при загрузке скетчей в Arduino IDE всегда необходимо выбирать правильный загрузчик. В противном случае, с точки зрения загрузчика, никакие полезные данные не будут получены, так как скетч передается слишком медленно или слишком быстро.
Еще одним небольшим преимуществом нового загрузчика является то, что вы можете использовать настройки по умолчанию в Arduino IDE, и вам не нужно помнить о необходимости изменения загрузчика в меню «Процессор».
Прошивка нового загрузчика на Arduino Nano
Чтобы прошить загрузчик на Arduino, вам понадобится «программатор». Это может быть либо специальная плата для этой цели, либо вы используете другую Arduino для этой задачи. Если у вас завалялась вторая Arduino, то рекомендуется использовать ее как программатор, потому что тогда не придется покупать дополнительную (редко используемую) плату программатора.
Далее мы используем Arduino Uno в качестве программатора. Нам также понадобятся шесть соединительных кабелей «папа-мама» и должна быть установлена среда разработки Arduino IDE; потому что прошивка загрузчиков через веб-редактор невозможна.
Подготовьте Arduino как программатор (ISP = внутрисистемный программатор)
Сначала мы загружаем программное обеспечение на Arduino Uno, с помощью которого позже мы прошьем загрузчик Arduino Nano.
- Пока не подключайте соединительные кабели к Arduino Uno.
- Подключите Arduino Uno через USB-кабель к компьютеру.
- Откройте Arduino IDE (Примечание: Arduino create Web-Editor не имеет встроенных функций для прошивки загрузчика!) и загрузите скетч «ArduinoISP» через меню
File -> Examples -> 11.ArduinoISP -> ArduinoISP
- Установите настройки платы и порта в соответствии с используемой моделью Arduino для программатора:
-
Инструменты -> Плата -> Arduino Uno
-
Инструменты -> Порт -> Выберите номер порта Arduino Uno
-
- Загрузите скетч в Arduino Uno.
- Если все успешно загружено, ваш ISP Arduino готов к работе!
Проводка: подключите Arduino Uno (программатор) к Arduino Nano (целевое устройство загрузчика)
На следующем этапе мы подключим Arduino Uno к Arduino Nano с помощью шести соединительных кабелей.
- Клик в коде «ArduinoISP»-Sketch verrät uns, wie wir den Arduino Uno (Programmer) jetzt mit dem Arduino Nano (Bootloader-Zielgerät) verkabeln müssen:
- Отключите Arduino Uno (программатор) от компьютера.
- На Arduino Nano (целевое устройство загрузчика) есть блок контактов 2×3 с надписью «ICSP». Мы подключим Arduino Uno (программатор) к этим шести контактам, чтобы запустить загрузчик Arduino Nano. Выводы ICSP стандартизированы и должны иметь одинаковую распиновку на каждой модели Arduino.
- Взглянув на код скетча «ArduinoISP», мы узнаем, как подключить Arduino Uno (программатор) к Arduino Nano (целевое устройство загрузчика):
- Символом «°» указывается, что это контакт 1, который также должен быть помечен «1» на плате.
- На пятом немаркированном выводе (в комментарии к скетчу) обычно RST (Reset).
- Теперь нам нужно соединить эти шесть контактов на Arduino Nano с соответствующими контактами на Arduino Uno. Исходный код сообщает нам номер контакта для сброса.
- Сброс запускается через контакт 10.
- Сброс: 10
- Но какие стандартные аппаратные контакты для MOSI, MISO и SCK на Arduino Uno? Распиновка Arduino Uno говорит нам:
- МОС: 11
- МИСО: 12
- SCK: 13
- Кроме того, мы должны подать питание на Arduino Nano через контакты GND и 5V.
- Подводя итог, мы подключаем Arduino Uno к Arduino Nano следующим образом:
Ардуино Уно (программатор) | <-> | Arduino Nano (целевое устройство загрузчика) |
– | 5 В (ICSP-контакт 2) | |
Земля | – | GND (ICSP-контакт 6) |
13 | – | SCK (ICSP-контакт 3) |
12 901 48 | – | MISO (ICSP-контакт 1) |
11 | – | MOSI (ICSP-контакт 4) |
10 | – | RST (ICSP-контакт 5) |
На странице Arduino про ISP указано, что с Arduino Uno в качестве программатора (а также с Mega, Mini и Nano) к контактам GND (минус (-), короткая ножка) и RST (плюс (+), длинная нога). Конденсатор можно подключать только после загрузки скетча ArduinoISP на плату. На следующем фото вы можете увидеть дополнительный конденсатор на месте:
Конденсатор 10 мкФ с минусом (-) [короткая нога] на GND и плюсом (+) [длинная нога] на RSTПримечание: Однако процесс прошивки (см. ниже) у меня работал без дополнительного конденсатора.
Начать процесс прошивки
Теперь мы можем прошить новый загрузчик на Arduino Nano.
- Измените настройки в Arduino IDE в меню
Tools
:- изменить
Programmer
наArduino как ISP
(выбрать именно эту запись, а не «ArduinoISP» или «ArduinoISP.org») - под
Port
выберите номер порта Arduino Uno (программатор) - под
Плата
иПроцессор
задаем параметры для «целевой Ардуино» куда хотим перепрошить загрузчик, итак в данном случае:-
Плата: Arduino Nano
-
Процессор: ATmega328P
(и не «ATmega328P (старый загрузчик)»)
-
- изменить
- В меню
Инструменты
нажмитеЗаписать загрузчик
. (Поскольку сюда не загружается скетч, а загрузчик передается через программу ArduinoISP Arduino Uno, то не имеет значения, какой скетч открыт в это время).
Процесс прошивки занимает всего несколько секунд (у меня). Когда загрузчик будет успешно прошит, вы получите сообщение, которое выглядит примерно так:
Использование порта: COM16 Используя программатор: stk500v1 Преобладающая скорость передачи: 19200 Часть AVR: ATmega328P Задержка стирания чипа: 9000 мкс СТРАНИЦА: PD7 БС2: ПК2 Расположение СБРОСА: посвященный ПОВТОРИТЬ импульс: SCK серийный программный режим: да режим параллельной программы: да Таймаут : 200 StabDelay : 100 CmdexeDelay: 25 Синхпетли: 32 Задержка байта: 0 Индекс опроса: 3 Поллвалуе: 0x53 Деталь памяти: [...] Тип программатора: STK500 Описание : Прошивка Atmel STK500 версии 1. x Аппаратная версия: 2 Версия прошивки: 1.18 Верхняя карта: неизвестно Vцель : 0,0 В Вареф: 0,0 В Осциллятор: Выкл. Период SCK: 0,1 мкс avrdude: устройство AVR инициализировано и готово к принятию инструкций Чтение | ################################################### | 100% 0,02 с avrdude: Подпись устройства = 0x1e950ф (скорее всего м328р) avrdude: ПРИМЕЧАНИЕ: была указана "flash" память, будет выполнен цикл стирания Чтобы отключить эту функцию, укажите параметр -D. avrdude: стирание чипа avrdude: чтение входного файла «C: UsersuserAppDataLocalArduino15packagesarduinohardwareavr1.8.2/bootloaders/optiboot/optiboot_atmega328.hex» avrdude: запись flash (32768 байт): Написание | ################################################### | 100% 0,00 с avrdude: записано 32768 байт флешки avrdude: проверка флэш-памяти на C:UsersuserAppDataLocalArduino15packagesarduinohardwareavr1.8.2/bootloaders/optiboot/optiboot_atmega328.hex: avrdude: загрузить данные flash из входного файла C:UsersuserAppDataLocalArduino15packagesarduinohardwareavr1. 8.2/bootloaders/optiboot/optiboot_atmega328.hex: avrdude: входной файл C:UsersuserAppDataLocalArduino15packagesarduinohardwareavr1.8.2/bootloaders/optiboot/optiboot_atmega328.hex содержит 32768 байт avrdude: чтение данных встроенной флэш-памяти: Чтение | ################################################### | 100% 0,00 с avrdude: проверка... avrdude: проверено 32768 байт флэш-памяти avrdude: чтение входного файла "0x0F" avrdude: блокировка записи (1 байт): Написание | ################################################### | 100% 0,02 с avrdude: записан 1 байт блокировки avrdude: проверка памяти блокировки по 0x0F: avrdude: загрузить данные блокировки данных из входного файла 0x0F: avrdude: входной файл 0x0F содержит 1 байт avrdude: чтение данных встроенной блокировки: Чтение | ################################################### | 100% 0,01 с avrdude: проверка... avrdude: проверено 1 байт блокировки avrdude сделано. Спасибо.
изображение на обложке: автор Nizzah Khusnunnisa на Unsplash, модифицировано с помощью Canva 2 января 2021 г. ардуино электроника
Поделиться:
Загрузчик Arduino — как (повторно) установить загрузчик Aruduino Nano
Как прошить загрузчик Aruduino Nano и что делать, если он не работает.
Недавно я получил модуль Arduino Nano от своего папы (ему 82 года, и он любит играть с гаджетами и электроникой!) и решил поиграть с ним, но обнаружил, что он не принимает эскиз, отказывается принимать загрузку код эскиза. Оказывается, более дешевые неоригинальные платы Arduino иногда поставляются без загрузчиков. Звучит как серьезная проблема, но совсем не об этом думали разработчики системы Arduino.
Что такое загрузчик Arduino?
Загрузчик Arduino — это небольшой фрагмент кода, как следует из названия, который позволяет установить и запустить скомпилированный код скетча. Он имеет размер 512 байт и находится в области «памяти» микропроцессорного чипа 328P.
Хотите верьте, хотите нет, но на плате Arduino не так много всего, и вы можете просто купить микропроцессорный чип ATmega328P и прошить на него загрузчик, если хотите! Система Arduino в основном связана с поддерживающими платами, которые держат чипы процессора, процессорные чипы на платах, ну, дешевые как чипы!
Специальный фрагмент кода, который выполняется при каждом сбросе микроконтроллера и ищет скетч для загрузки из последовательного/USB-порта с использованием определенного протокола и скорости. Если связь не обнаружена, выполнение передается коду вашего скетча. Этот небольшой (обычно 512 байт) фрагмент кода называется «загрузчиком» и находится в области памяти микроконтроллера — в конце адресного пространства — и не может быть перепрограммирован как обычный скетч. предназначен для такой цели.
Использование Arduino Uno для перепрограммирования Arduino Nano
Итак, вам понадобится следующее:
- Рабочая плата Arduino Uno
- Плата Arduino Nano
- Перемычки с контактами
- Конденсатор 10 мкФ (должен быть 10 мкФ)
- Макетная плата, если она у вас есть
Сначала вам нужно прошить определенный скетч, поставляемый из стандартной среды разработки Arduino IDE, в Arduino Uno.
Подключите Arduino Uno и в меню «Примеры» найдите скетч «ArduinoISP», загрузите его в Arduino Uno.
Отключите Uno от USB и подключите его, как показано ниже. Обратите внимание на использование конденсатора, вставленного в линию к GND.
В большинстве руководств и диаграмм по прошивке загрузчика просто показано, что GND подключен между двумя платами, но обратите внимание, что если вы попытаетесь прошить загрузчик только с помощью линий, вы можете обнаружить, что это не удастся. Линия горячая, и когда вы переходите к прошивке, целевая плата нуждается в сбросе линии сброса, если линия просто горячая, сброса не произойдет, и перепрограммирование не удастся. Конденсатор подключается к линии, чтобы сбросить напряжение и снова поднять линию, когда запускается флэш-память, это вызывает сброс Uno в Nano, и Nano будет открыт для приема загрузочной флэш-памяти. Это должно быть 10 мкФ, и больше или меньше займет слишком много времени, чтобы выполнить сброс.
После того, как вы подключили все это, как показано на рисунке, следующим шагом будет включение Arduino IDE в программатор, используя Uno в качестве аппаратного программатора, проходящего через Nano.
Подключите USB к плате Arduino UNO НЕ к Nano, Uno является программатором и будет давать инструкции Nano.
- Вам нужна плата, настроенная на цель, Нано.
- Вам нужен набор микросхем ATMega328P. (до 2018 года это был бы «старый загрузчик»)
Порт- настроен на USB-соединение Uno.
- Выберите «Arduino as ISP» из опций Programmer .
Наконец нажал Burn Bootloader .
Что произойдет, если это не сработает?
Одна из проблем, с которой я столкнулся с моей платой Nano, заключалась в том, что она не брала загрузчик при первой попытке, и у меня постоянно возникали сбои. Мне потребовалось 2 дня, чтобы найти проблему.
Если вы видите это:
1avrdude: stk500_recv(): программатор не отвечает 2avrdude: stk500_getsync() попытка 1 из 10: не синхронизировано: resp=0x03Вы можете увидеть это:
1avrdude: Ого! Неверная подпись устройства.