Можно загрузить скетч Arduino только один раз на пользовательскую плату Mega2560

Я создал собственный Arduino на основе Mega2560 R3. Он использует ATMega16U2 uC в качестве USB-интерфейса между ATMega2560 uC и ПК.

Загрузчик на 2560 загружается с помощью Arduino Micro через ArduinoISP. Я следовал этому руководству Instructables по загрузке загрузчика/ прошивка для 16U2, за исключением того, что я модифицировал некоторые детали для 2560 вместо UNO. Вот мой добавленный раздел в /program Files (x86)/Arduino/hardware/arduino/avr/boards.txt

unorestore.name=MEGA2560 16U2 Restore Firmware
unorestore.bootloader.tool=arduino:avrdude
unorestore.bootloader.low_fuses=0xff
unorestore.bootloader.high_fuses=0xd9
unorestore.bootloader.extended_fuses=0xf4
unorestore.bootloader.file=Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex
unorestore.bootloader.unlock_bits=0x3F
unorestore.bootloader.lock_bits=0x0F
unorestore.build.mcu=atmega16u2
unorestore.build.f_cpu=16000000L
unorestore.build.board=uno.build.board=AVR_MEGA2560
unorestore.build.core=arduino:arduino
unorestore.build.variant=standard

Проблема заключается в том, после того как я загружаю скетч (с размером, скажем, более 10 КБ), я не могу загрузить новый скетч и вместо этого получаю сообщение об ошибке тайм-аута, как показано ниже. Даже простой блик-скетч. Светодиоды TX и RX, подключенные к 16U2 uC, которые мигают во время загрузки скетча, даже не мигают ни разу.

Единственный способ заставить его взять еще один скетч — это "перепрошить" загрузчик на 2560 uC через ArduinoISP. Светодиоды TX и RX теперь мигают во время загрузки скетча. Конечно, это огромные хлопоты, так как не хочется делать "перепрошивку" загрузчик 2560 каждый раз, когда я хочу загрузить скетч.

У меня нет этой проблемы на моей плате-клоне Elegoo Mega2560 R3, поэтому я думаю, что это может быть что-то не так с моей прошивкой/загрузчиком 16U2. Кто-нибудь знает, что еще может быть причиной этого?

, 👍0

Обсуждение

Почему вы компилируете для atmega16u2?, @Majenko

первая загрузка после прошивки загрузчика не требует сброса до загрузчика. следующие загрузки требуют сброса перед загрузкой. у тебя схема автосброса работает?, @Juraj

@Majenko, это выбор для записи загрузчика на ATMega16U2 через ArudinoISP., @Agriculex

@Juraj Я никогда не слышал об этом раньше. Я в значительной степени скопировал официальную схему. Является ли сброс тем же самым, что и вытягивание штифта сброса на 2560 на землю перед загрузкой скетча?, @Agriculex

Вы не должны загружать загрузчик на 16U2. Вы устанавливаете прошивку CDC/ACM через DFU. Вы уверены, что не устанавливаете загрузчик 16U2 на Mega2560?, @Majenko

@Majenko Я записал «MEGA2560 16U2 Restore Firmware» на ATMega16U2 uC и «Arduino/Genuino Mega или Mega 2560» на ATMega2560 uC. Оба сделаны через ArduinoISP. Я дважды проверил, что я не перевернул их., @Agriculex

@Majenko Первоначально я пытался использовать ATmel Flip для прошивки шестнадцатеричных файлов для Mega2560 в 16U2. Но по какой-то причине он не принимает его, но принимает шестнадцатеричные файлы для UNO. Так что, если бы я пошел с ним, у меня бы компьютер распознал мою мега как uno, @Agriculex

Какой именно файл вам нужно перепрошить? Прошивка 16U2 CDC/ACM или загрузчик UART ATMega2560?, @Majenko

@Majenko официальный шестнадцатеричный файл для ATMega16U2 для Mega2560 R3: «Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex». Его можно найти здесь: https://github.com/arduino/ArduinoCore-avr/tree/master/firmwares/atmegaxxu2, @Agriculex

@Majenko Файл «Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex» — это то, что я записал на 16U2, но это нельзя сделать с помощью программного обеспечения Atmel Flip. Загрузчик Arduino Mega2560 — это то, что мне нужно перепрошить, чтобы загрузить новый скетч на данный момент., @Agriculex

Ok. Так зачем рассказывать нам все о 16U2, если проблема в загрузчике 2560? Похоже, проблема может быть просто в схеме сброса, а не в прошивке. Попробуйте нажать сброс на плате при попытке второй загрузки., @Majenko

@Majenko Я не был уверен, что это может быть как-то связано с 16U2, поэтому я просто разместил эту информацию там. Я попытался сбросить на землю, прежде чем нажать «Загрузить», и это сработало! Интересно, что вызывает проблему сброса. В файле boards.txt строка предохранителя загрузчика имеет вид «mega.menu.cpu.atmega2560.bootloader.high_fuses=0xD8», что является правильным значением по умолчанию, не так ли?, @Agriculex

Это не имело бы никакого значения. Пожалуйста, покажите нам свою схему и плату, чтобы мы могли самостоятельно изучить схему сброса., @Majenko

@Majenko Вот ссылка на EasyEDA: https://easyeda.com/salesagriculex/lcmr-v5 Сейчас я сравниваю свою схему с официальной схемой орла, чтобы увидеть, не пропустил ли я что-нибудь., @Agriculex

Мне трудно ориентироваться в вашей схеме. Я ненавижу современный способ иметь компоненты с маленькими помеченными заглушками вместо того, чтобы рисовать правильные сети, связывающие вещи вместе. Вы можете следить за сетями. Вы не можете следовать маленькой стрелке и имени. И этот EDA, похоже, не может выполнить простой поиск. Пока все, что я нашел для RST D7 на 16U2, RESET на 2560 и пин на ICSP. Есть ли другие места, где RST присутствует на этой схеме?, @Majenko

По следам в редакторе разводки печатных плат оказалось, что нет. Ok. Я вижу здесь проблему., @Majenko

@Majenko, это должны быть все соединения RESET. Я заметил на официальной схеме орла, что между цепью REST и контактом RESET на чипе 2560 есть кружок. Вывод RESET на 2560 также имеет верхнюю линию над ним., @Agriculex


1 ответ


1

Ваша схема RESET неверна.

  • У вас нет подтягивающего резистора на контакте RESET ATMega3560.
  • У вас есть посторонний подтягивающий резистор на выводе D7 микросхемы 16U2.

Это означает, что ваш 16U2 не сможет вызвать сброс ATMega2560 для запуска загрузчика.

Удалите подтягивание на D7 16U2 и добавьте подтягивание 10 кОм к контакту RESET ATMega2560. Без этого подтягивания:

  1. Чип может работать неправильно, так как RESET плавает (может иметь внутреннюю подтяжку, я не могу вспомнить)
  2. Конденсатор, соединяющий 16U2 D7 и RESET ATMega2560, не сможет генерировать правильный импульс сброса. Это будет усугубляться падением напряжения на 1 кОм.

На эталонной схеме Mega2560 RN1A является рассматриваемым подтягивающим устройством.

,

Большое спасибо за вашу находку! Действительно ценю это! Добавлю подтягивающий резистор RN5A. Что касается подтягивающего резистора на D7 16U2, то он от RN3D на эталонной схеме. Я удалю это тогда. Там сказано, что это для USB Boot En., @Agriculex

Я думаю, это означает, что это для включения режима DFU на 16U2 - это может быть связано с тем, почему вы не можете использовать флип?, @Majenko

Я смог использовать программное обеспечение Flip для загрузки шестнадцатеричного файла Uno на новый новый 16U2, но это невозможно только для мега шестнадцатеричного файла. Он сказал, что он слишком большой. В любом случае, я добавил подтягивающий резистор и удалил подтягивающий резистор, и теперь все работает! Я могу загрузить новый код без перепрошивки загрузчика. Вы сэкономили мне огромное количество времени. Вы бы приняли небольшие чаевые через PayPal, если это разрешено? Это не так много, но как способ поблагодарить за ваше время., @Agriculex

Ух ты. Если очень хочется, конечно. На UECIDE.org есть ссылка «пожертвовать», которая ведет ко мне, если вы действительно этого хотите., @Majenko

Маженко, я не вижу схемы в вопросе, @Juraj

@Juraj ссылка на него была размещена под комментариями к исходному сообщению с вопросом. Сама схема была закрыта после того, как проблема была решена., @Agriculex