Разбираемся как прошить Arduino Uno R3 без какого-либо программатора для прошивки загрузчика в ATMEGA328P.
Установка программного обеспечения Atmel FLIP
На плате Arduino есть два микроконтроллера - ATMEGA328P (328P) и ATMEGA16U2 (16U2). Вы можете обновить прошивку 16U2, сделав его программатором AVRISP MKII, а затем использовать Atmel Studio для прошивки 328P.
Я пробовал разные варианты, но возникали разные проблемы. Многие рекомендации плохо работали в моем случае особенно в части перепрошивки загрузчика через ПО Arduino.
Переда началом прошивки Ардуино потребуется программное обеспечение Atmel (Microchip) FLIP для обновления прошивки внутри 16U2.
Скачиваем Flip с сайта Microchip - отсюда. Устанавливаем. Не должно возникнуть никаких проблем, просто следуйте инструкциям мастера установки.
Возьмите плату Arduino, отсоедините питание и USB. Замкните на ICSP1 пины 5-6 (16U2 RESET будет в низком состоянии).
Выглядеть это будет так:
Далее подключите Arduino к USB. Разъедините пины на ICSP1 (5-6). В этот момент 16U2 переходит в режим DFU. Новое устройство USB должно быть распознано.
Если драйвер не устанавливается автоматически, установите его из: C:\Program Files\AtmelFlip3.4.7usb»
Перейдите в Диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Он будет расположен под USB-устройствами Atmel -> ATmega16U2.
Прошивка AVRISP MKII в Arduino ATmega16U2
Мы готовы перепрошить прошивку в 16U2.
Скачайте hex файл AVRISP MKII отсюда. Отключите Arduino от USB-кабеля и питания. Замкните контакты 5-6 ICSP1. Подключите Arduino к USB. Разомкните выводы ICSP1 5-6.
Запустите программное обеспечение FLIP: Пуск -> Все программы -> Flip. Зайдите в: Настройки -> Связь -> USB. Нажмите «Открыть».
Перейдите в: Файл -> Загрузить файл HEX. Далее выберите LUFA-BOTH-AVRISP-MKII.hex и нажмите «Выполнить».
ATMEGA16U2 теперь AVRISP MKII и работает в режиме Atmel Studio. Arduino AVRISP MKII может работать в двух режимах: Atmel Studio или Avrdude. Ниже я буду говорить только о режиме Atmel Studio, так как у меня было много проблем с режимом Avrdude.
Установка Atmel Studio
Скачайте и установите Atmel Studio (включая драйверы) отсюда. После установки подключите Arduino к USB-кабелю. Оба светодиода (RX и TX) должны мигать два раза (это означает, что 16U2 находится в режиме Atmel Studio). Новое устройство будет распознано.
Установите драйверы. Если они не распознаются автоматически, вы найдете их в USB-драйверах: С:\Program Files\Atmel.
Перейдите в Диспетчер устройств, нажмите: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Должно быть в Jungo Connectivity -> AVRISP MKII.
Вот теперь мы готовы прошить Arduino ATMEGA328P. Переходим к следующему шагу.
Перепрошивка загрузчика Arduino в ATMEGA328P через ATMEGA16U2
Довольно сложная часть нашего мероприятия по прошивке Ардуино. Вам нужно будет припаять некоторые провода. В основном нам нужно подключиться таким образом:
ICSP1 MISO2.Pin.1 -> ICSP MISO.Pin.1
ICSP1 SCK2.Pin.3 -> ICSP SCK.Pin.3
ICSP1 MOSI2.Pin.4 -> ICSP MOSI.Pin.4
JP2 PB4.Pin.1 -> ICSP RESET.Pin.5
Смотрите картинку ниже для понимания:
Подключите плату Arduino к USB-кабелю. Светодиоды RX и TX должны помигать два раза. Драйверы должны быть правильно распознаны (Jungo Connectivity -> AVRISP mkII). Запустите Atmel Studio. Зайдите в: Пуск -> Все программы -> Atmel -> Atmel Studio.
Перейдите в: Инструменты -> Программирование устройства. Выберите:
Инструмент -> AVRISP mkII
Устройство -> ATmega328P
Интерфейс -> ISP
Нажмите кнопку «Применить».
Установите частоту ISP на 16,1 кГц. Нажмите кнопку «Установить».
Программатор не будет работать, если вы установите очень низкую тактовую частоту ISP. Вы получите сообщение об ошибке: "ispProgramMem: получено состояние ошибки: получено 0x81, ожидаемое 0x00 (истекло время выборки контакта RDY / nBSY)". На английском будет звучать так: "ispProgramMem: Error status received: Got 0x81, expected 0x00 (RDY/nBSY pin sampling timed out)". Однако максимальная скорость ISP также ограничена и не может превышать 1/4 частоты устройства.
Перейдите в «Подпись устройства» (Device signature) и нажмите кнопку «Читать» (Read). Вы должны увидеть правильную «подпись устройства»: 0x1E950F. Нажмите «Memories» и найдите hex файл загрузчика Arduino. Он находится в:
C:\Program Files\ Arduino\hardware\arduinobootloaders\optiboot\optiboot_atmega328.hex
Нажмите кнопку «Program». Если вы используете совершенно новый незапрограммированный ATMEGA328P, вы также должны запрограммировать FUSES. Перейдите в Fuses и используйте следующие значения: low_fuses = 0xff; high_fuses = 0xDE; extended_fuses = 0x05.
Вы успешно прошили 328P с загрузчиком Arduino. На следующем шаге мы вернем оригинальную прошивку 16U2.
Перепрошиваем Arduino ATMEGA16U2 в оригинальное ПО
Почти сделано. Нам нужно вернуть оригинальное программное обеспечение в ATMEGA16U2.
Отключите Arduino от питания и USB. Замкните на ICSP1 контакты 5-6. Подключите USB-кабель. Разомкните пины ICSP1 5-6.
Запустите программное обеспечение FLIP. Перейдите в: Пуск -> Все программы -> Flip -> Flip. Далее: Настройки -> Связь -> USB.
Нажмите «Открыть». Перейдите в: Файл -> Загрузить файл HEX.
Выберите файл:
С:\Program Files\Arduino\hardware\arduino\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Uno-Rev3.hex
Нажмите «Выполнить».
Отсоедините USB-кабель и подключите его снова. Новое устройство USB должно быть распознано. Если драйвер не установлен автоматически, вы найдете его в: С:\Program Files\Arduino\drivers.
Перейдите в Диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли загружен драйвер. Вы должны увидеть его в: Ports -> Arduino Uno.
Теперь мы можем проверить любой скетч из примеров, типа Blink. Запустите программное обеспечение Arduino (Пуск -> Arduino).
Нажмите: Open (стрелка вверх) -> -> 01.Basics -> Blink.
Выберите COM-порт а: Инструменты -> Последовательный порт -> COM (выберите порт, на котором была распознана плата).
Нажмите значок «Загрузить» (стрелка вправо). Светодиод должен начать мигать.
Всё готово. Мы узнали как прошить Ардуино и успешно перепрограммировали ATMEGA328P без использования какого-либо внешнего программатора.
28 апреля 2021 в 05:09
Всё сработало. Огромное спасибо!