Проблемы с программированием пользовательской платы ATMEGA2560
Мне нужна помощь. Я скопировал сердце дизайна MEGA2560 в новый проект. У меня есть новые печатные платы с чистыми микроконтроллерами, и теперь мне нужно все запрограммировать. (У меня есть проект, работающий на MEGA2560)
Мне удалось запрограммировать MEGA16U2, используя следующую процедуру: https://www.arduino.cc/en/ Hacking/DFUProgramming8U2 (я загрузил "Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex"), и он отображается в Arduino IDE.
Я загрузил загрузчик ATMEGA2560 с помощью инструкций Arduino-as-ISP здесь: https://www.arduino.cc /ru/Учебник/ArduinoISP
Но теперь, когда я пытаюсь запрограммировать свою плату с помощью Arduino IDE (через USB-соединение MEGA16U2), я просто получаю:
avrdude: stk500v2_ReceiveMessage(): timeout
Полный вывод среды IDE:
Sketch uses 30056 bytes (11%) of program storage space. Maximum is 253952 bytes.
Global variables use 1280 bytes (15%) of dynamic memory, leaving 6912 bytes for local variables. Maximum is 8192 bytes.
/home/xxxxx/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -C/home/xxxxx/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -patmega2560 -cwiring -P/dev/ttyACM0 -b115200 -D -Uflash:w:/tmp/arduino_build_464802/yyyyy.ino.hex:i
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/home/xxxxx/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
User configuration file is "/home/xxxxx/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyACM0
Using Programmer : wiring
Overriding Baud Rate : 115200
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
avrdude done. Thank you.
An error occurred while uploading the sketch
Я вижу мигание светодиода RX MEGA16U2 и данных на выводе RX микросхемы ATMEGA2560, что указывает на то, что данные поступают в MCU из IDE, но соответствующей активности TX нет.
С помощью кабеля IDE и USB можно без проблем запрограммировать клон Elegoo MEGA2560.
Это проблема со скоростью передачи данных? Проблема с протоколом? Каким должен быть мой следующий шаг отладки?
Спасибо!
EDIT: согласно комментарию Ника Гэммона, я запустил его скрипт детектора чипов. Вот результат:
Atmega chip detector.
Written by Nick Gammon.
Version 1.20
Compiled on Sep 5 2020 at 07:17:55 with Arduino IDE 10812.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x98 0x01
Processor = ATmega2560
Flash memory size = 262144 bytes.
LFuse = 0xFF
HFuse = 0xD8
EFuse = 0xFD
Lock byte = 0xCF
Clock calibration = 0x88
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 8192 bytes starting at 3E000
Bootloader:
3E000: 0x0D 0x94 0x89 0xF1 0x0D 0x94 0xB2 0xF1 0x0D 0x94 0xB2 0xF1 0x0D 0x94 0xB2 0xF1
<....snipped for length....>
3FFF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
MD5 sum of bootloader = 0xD9 0xE6 0x6B 0x4E 0xD1 0xA6 0x11 0x2C 0x61 0x8F 0x9B 0xD5 0x5D 0x24 0xE2 0x13
Bootloader MD5 sum not known.
First 256 bytes of program memory:
00: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
10: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
20: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
30: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
40: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
50: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
60: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
70: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
80: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
90: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
A0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
B0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
C0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
D0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
E0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
F0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
Programming mode off.
@gearhead, 👍0
Обсуждение1 ответ
Согласно комментариям, ваш вывод показывает, что чип работает "нормально"; в том, что он реагирует на скетч детектора стружки. Таким образом, основная часть дизайна/реализации в порядке.
Ссылаясь на Калькулятор предохранителей Engbedded Atmel AVR®, ваши настройки предохранителей означают, что процессор ожидает внешнего кварцевого генератора. Загрузчик ожидает (думаю) кварц на 16 МГц (с соответствующими конденсаторами). Если вы не указали это, то загрузчик будет работать с неправильной скоростью передачи данных (так сказать) — или вообще не будет — и не будет реагировать на попытки загрузить его с помощью последовательного программирования.
Если у вас кристалл с другой частотой, вы можете обойти эту проблему, отрегулировав скорость передачи данных в файле boards.txt с помощью соответствующего коэффициента масштабирования.
Скетч детектора чипа работал, потому что он использует программирование ICSP, которое обеспечивает свои собственные часы.
> Таким образом, основная часть дизайна/реализации в порядке. Отличные новости! У меня действительно есть кварц на 16 МГц на плате, и похоже, что он колеблется правильно. Буду разбираться со скоростью передачи. Еще раз спасибо за помощь, Ник!, @gearhead
Ник, извини за сообщения. Я играл с различными скоростями передачи данных (через файл boards.txt), и ничего не работает. В выводе вашей программы также говорится ''' Сумма загрузчика MD5 неизвестна. ''' Это что-то, о чем стоит беспокоиться? Я использовал процедуру, описанную здесь: https://www.arduino.cc/en/Tutorial/ArduinoISP., @gearhead
Этот скетч, написанный довольно давно, хранил некоторые суммы MD5 известных загрузчиков (на тот момент). Возможно, с тех пор были выпущены обновления. Так что особого беспокойства нет., @Nick Gammon
Я предлагаю вам приобрести дешевый логический анализатор (скажем, около 100 долларов). Затем вы можете увидеть, что происходит, когда скетч начинает загружаться., @Nick Gammon
Я использую [Saleae] (https://www.saleae.com/) - однако цена кажется больше, чем я ее помню. :(, @Nick Gammon
Кажется, на eBay есть очень дешевые, но я не могу за них поручиться. Я думаю, что от 100 до 200 долларов (долларов США) будет разумной ценой., @Nick Gammon
Ник, я очень ценю твою помощь. Могу ли я компенсировать ваше время, чтобы вы помогли мне отследить эту проблему? Я чувствую, что это что-то простое, но это занимает слишком много времени. Отправьте мне сообщение по адресу info<at>savoyengineering<dot>com. Спасибо!, @gearhead
В настоящее время я не занимаюсь частными консультациями (платными или бесплатными). Я поддерживаю сообщество Arduino через Stack Exchange, а также (только для чтения) статьи на моем веб-сайте. Чтобы решить эту проблему, вам лучше обратиться на [Форум Arduino] (https://forum.arduino.cc/) — возможно, в раздел «Микроконтроллеры». Это может быть более подходящим для "Вы пробовали это? Вы пробовали это?" стиль работы над вашей проблемой., @Nick Gammon
- Как сбросить или отформатировать Arduino?
- Esp8266 Vin контакт
- Кнопка двойного состояния Nextion
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- Запуск двух шаговых двигателей с двумя поворотными энкодерами
- Какие контакты Ramps есть на моем Arduino Mega?
- Мой код Arduino компилируется, когда я не вижу в нем ничего плохого
- Можно ли изменить официальную библиотеку шилдов arduino GSM для работы с аппаратным serial на mega?
Я предполагаю, что у вас есть несколько Arduinos. Не могли бы вы запустить [схему моего детектора чипов] (http://www.gammon.com.au/forum/?id=11633) и сообщить о результатах? (изменить вопрос)., @Nick Gammon
У вас есть правильные настройки предохранителей на 2560 для ваших часов?, @Majenko
Вы создали внешний тактовый генератор 16 МГц (например, кварцевый генератор)? Когда я попробовал что-то подобное с ATMega-328P (домашняя конструкция на основе UNO), я заметил, что когда я впервые загрузил свою программу, она работала очень медленно (поскольку предохранители по умолчанию работают на внутреннем RC-генераторе / 8 = 1 МГц). ). Перезагрузка загрузчика в моем дизайне привела к тому, что он работал с нормальной скоростью, потому что кажется, что это действие сбрасывало предохранители для использования **внешних часов**. Ознакомьтесь с этим постом для чтения и записи фьюзов https://www.instructables.com/id/How-to-change-fuse-bits-of-AVR-Atmega328p-8bit-mic/, @GMc
схема автосброса работает? попробуйте ручной сброс, пока avrdude пытается загрузить, @Juraj
@NickGammon, я запустил твою программу. Смотрите обновленный вопрос. Спасибо!, @gearhead
На выходе LFuse = 0xff означает, что MCU ожидает внешний кварцевый генератор 8-16 МГц (младшие 4 бита LFuse). Обратитесь к разделу 30.2 и главе 10 технического описания Mega2560 (вы можете легко найти его в Интернете). У вас есть внешние часы (кристалл + поддерживающие конденсаторы - раздел 10.4 таблицы данных), включенные в ваш аппаратный дизайн?, @GMc
@GMc Да, на плате есть кварц 16 МГц, который, кажется, колеблется правильно., @gearhead
Как это происходит? Вы уже решили это? Если нет, пробовали ли вы загрузить простую программу (например, blink) через ICSP и посмотреть, работает ли она на вашем оборудовании?, @GMc
@GMc Да, я продвигался вперед. Я загрузил FW в 2560, используя опцию «Загрузить с помощью программатора» в Arduino IDE. Таким образом, я смог проверить большую часть платы ... Интересно, что сегодня, когда я пытался выгрузить отладочный текст из последовательного порта в IDE, я заметил, что получаю мусор. Дело было не в скорости передачи данных, так как это было первым, что я проверил. Я подозреваю, что это связано с проблемой загрузки. Затем я запущу простой скетч, чтобы напечатать «Hello world» и посмотреть, смогу ли я зафиксировать данные TX в моем прицеле. Я открыт для любых других идей отладки!, @gearhead
Это отличная новость, я не могу предложить никаких дополнительных предложений, но когда вы это сделаете, было бы действительно здорово, если бы вы могли ответить на свой вопрос и в идеале опубликовать принципиальную схему (до и после, если это уместно). Надеюсь, вы сможете решить это в ближайшее время, но это звучит как значительный прогресс. Одна мысль, однако, как вы тактируете MEGA16U2 и какие настройки предохранителей для него?, @GMc