Проблемы с программированием пользовательской платы 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.

, 👍0

Обсуждение

Я предполагаю, что у вас есть несколько 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


1 ответ


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