Разве я украсил мой Arduino Uno? Проблемы с загрузкой на борт

Я не могу загружать эскизы в Arduino Uno.

  • Разве я «заманил» его?
  • Какие шаги я могу предпринять, чтобы понять, что не так?
  • Что я могу сделать, чтобы исправить это?
77 голосов | спросил Nick Gammon 9 J000000Thursday15 2015, 08:46:30

3 ответа


108

Вероятно, он не кирпичный

У меня довольно много Arduinos, и за последние несколько лет только когда-либо «заманили» один, и я думаю, что это было с помощью статического электричества. К сожалению, у этого есть процессорный чип SMD (на поверхности), поэтому попробуйте заменить его другим чипом.

Будьте спокойны и попробуйте выполнить следующие шаги ...


Пример платы

«Arduino Uno» - это не только одна вещь , которая может выйти из строя. Он имеет несколько основных компонентов, и, возможно, только один из них потерпел неудачу (если есть). См. Эту справочную фотографию:

Arduino Uno major components

Основные компоненты:

  • Процессор Atmega16U2 - это интерфейс с интерфейсом USB.
  • Процессор Atmega328P - это «основной» процессор, на котором есть ваш эскиз.
  • Регулятор напряжения - это преобразует входящую мощность от гнезда питания до 5 В
  • Индикатор питания (зеленый) - отмечен «Вкл.»
  • Светодиод индикатора (желтый) с надписью «L» - подключен через операционный усилитель к цифровому выходу 13
  • Светодиоды Rx и Tx (желтый) - это означает, что чип USB (Atmega16U2) принимает или передает

Обратите внимание, что светодиоды Rx и Tx не подключены напрямую к цифровым выводам 0 и 1 на плате (обозначены как Rx и Tx). Они загораются, только если вы выполняете последовательную связь через USB , а не если у вас есть что-то (например, GPS), подключенное непосредственно к цифровым выводам 0 и 1.

Также обратите внимание на то, что, поскольку светодиод «L» подключается через операционный усилитель, он может загораться, если в эскизе установлен контакт . Это нормально. Это не означает, что что-то ошибочно отправляет данные.


Проверьте мощность

Питание USB

  • Подключите плату к компьютеру с помощью USB-кабеля и убедитесь, что горит зеленый светодиод «Вкл.».

  • Используйте мультиметр и пару перемычек для проверки между контактом 5V и контактом GND (стрелка внизу). Вы должны получить около 5,0 В (я получил 5,04 В на моем).

(Вы можете купить дешевый мультиметр около 10 долларов США, если у вас его нет, но вам лучше получить более выгодный вариант за около 50 долларов США - проверьте все веб-сайты и магазины электроники.)

  • Также проверьте между выводом 3.3 V и выводом GND - вы должны получить 3,3 В.

Если вы не получите 5 В с подключенным кабелем USB, убедитесь, что другой конец подключен к вашему компьютеру. Также попробуйте другой кабель.

Разъем питания

  • Если вы используете или планируете использовать гнездо питания (обозначенное «power in» на фотографии) отсоедините USB и подключите источник питания - от 7 до 12 В постоянного тока с положительным на выводе center .

  • Измерьте контакты 5 В и 3.3 В, как указано выше. Вы все равно должны видеть на них одинаковые напряжения.

Если вы получаете 5 В с подключенным USB, но не с источником питания, то, вероятно, поврежден регулятор напряжения (отмеченный на фотографии). Или, возможно, сбой питания. Попробуйте другой источник питания, чтобы подтвердить, что это такое.


Проверьте светодиодную вспышку при включении питания

Если у вас есть загрузчик Optiboot (Uno обычно поставляется с этим), то, если вы нажмете и отпустите кнопку сброса, или отсоедините и снова подключите USB-кабель или кабель питания, индикатор «L» должен мигать быстро 3 раза. Время включения и выключения составляет 50 мс каждый, три вспышки должны быть в течение примерно 1/3 секунды.

Если это не так, у вас могут возникнуть проблемы с загрузчиком или основным чипом процессора (Atmega328P).


Попробуйте загрузить эскиз

Важно: Если у вас возникли проблемы с загрузкой эскизов, удалите все подключенные устройства (например, экраны). Также удалите провода перемычек, подключенные к разъемам платы. В частности, должно быть ничего не подключено к цифровым выводам 0 и 1 (Rx и Tx), поскольку это будет мешать взаимодействию с загружающим компьютером.

Выберите один из простых примерных эскизов (например, Blink) и попробуйте загрузить его. Это то, что вы должны увидеть:

  • Светодиод «L» должен мигать 3 раза. Это связано с тем, что основной чип сбрасывается командой из процесса загрузки.

  • Светодиод «Rx» должен быстро мигать. Это инструкции из процесса загрузки, пытающиеся активировать загрузчик.

  • Светодиод «Tx» должен быстро мигать. Это процессор, подтверждающий загруженные данные.

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

Если мигает только светодиод «Rx», это может быть из-за проблемы с загрузчиком или основным чипом процессора (Atmega328P). Кто-то стучится, но никто не дома!

Проверьте тип платы

Если светодиоды мигают, но вы получите следующее сообщение:

avrdude: stk500_recv (): программист не отвечает

Проверьте тип платы:

Если у вас выбран неправильный тип платы, он, вероятно, отправит неправильные инструкции по загрузке, а также тайм-аут или иначе сработает. Если вы похожи на меня и у вас разные доски, легко забыть, что последняя загрузка, которую вы сделали, была для другого типа платы.

Проверьте коммуникационный порт

Если светодиоды не мигают вообще, у вас может быть неправильный коммуникационный порт.

Проверьте коммуникационный порт:

Меню Comm Port

Попробуйте использовать другой ПК /Mac, если возможно

Попробуйте Arduino на другом ПК /Mac, если у вас есть один к руке. Это может сузить вопрос о том, есть ли у вас проблема с конкретным компьютером, на котором вы его подключили, или компьютерами в целом.

Проведите проверку петлевой проверки

  • Отключите все экраны и другие провода.
  • Извлеките плату из питания.
  • Подключите провод перемычки от RESET к GND (оранжевый провод на фотографии)
  • Подключите перемычку от Rx до Tx (белый провод на фотографии)

Электропроводка:

Тест Loopback

  • Подключите USB-кабель и запустите программу терминала - например, Terminal Monitor в среде Arduino. Введите что-то и отправьте его (например, нажмите Enter в Terminal Monitor).
  • Все, что вы напечатаете, должно быть отозвано обратно.

Если все повторено: это подтверждает, что у вас есть правильный коммуникационный порт, USB-кабель в порядке, а чип интерфейса USB (Atmega16U2), вероятно, в порядке.

Если ничего не отозвано, проверьте:

  • У вас есть правильный коммуникационный порт.
  • Попробуйте использовать другой кабель. Некоторые дешевые USB-кабели имеют только провода питания, а не провода данных.
  • Проверьте, установлен ли драйвер устройства для Arduino. Вероятно, вам не нужно это делать, если эта плата работала ранее на этом компьютере, но это может быть полезно, если вы впервые подключили эту плату к этому компьютеру.

Проверьте чип Atmega16U2

Если ваша плата выходит из строя с тестом на обратную связь, и вы уверены, что USB-кабель в порядке, то вы можете протестировать сам чип Atmega16U2. На плате находится заголовок ICSP (In Circuit Serial Programming), расположенный рядом с чипом Atmega16U2 и рядом с разъемом USB.

Сначала отключите питание (отсоедините кабель USB и кабель питания).

Затем вы можете подключить заголовок ICSP через 6 перемычек к известному хорошему Uno, как показано на фотографии:

Проверить чип Atmega16U2

Выводы для заголовка ICSP (сверху):

заголовок ICSP

Контакт 1 в заголовке ICSP рядом с чипом Atmega16U2 отмечен небольшой белой точкой рядом с «F» в «AREF». Контакт 1 в заголовке ICSP рядом с микросхемой ATmega328P отмечен маленькой белой точкой под «N» в «ON».

Подключить:

Хорошая доска Target Uno

  MISO MISO (контакт с точечным контактом 1)
  VCC VCC
  SCK SCK
  MOSI MOSI
  D10 /СБРОС
  GND GND

Дважды проверьте проводку.

Затем на «хорошо известной» плате установите эскиз «Atmega_Board_Detector», как описано на странице «Программист загрузчика Atmega» . Код находится в GitHub - nickgammon /arduino_sketches . Если вы нажмете кнопку «Загрузить» на этой странице, вы получите ряд полезных эскизов. Тот, который вы хотите, называется «Atmega_Board_Detector».

После установки откройте последовательный монитор, установите его на 115200 бод, и вы увидите что-то вроде этого:

Atmega chip detector.
Автор Ник Гэммон.
Версия 1.17
Составлено 9 июля 2015 года в 08:36:24 с Arduino IDE 10604.
Попытка войти в режим программирования ICSP ...
Введен режим программирования OK.
Подпись = 0x1E 0x94 0x89
Процессор = ATmega16U2
Размер флеш-памяти = 16384 байта.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Калибровка часов = 0x51
Загрузочный загрузчик: Нет
EEPROM сохраняется через стирание: нет
Таймер сторожевого таймера всегда включен: Нет
Загрузочный загрузчик - 4096 байт, начиная с 3000

Загрузчик:

3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

MD5 сумма загрузчика = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Имя загрузчика: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3

Первые 256 байт памяти программы:

0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x000xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...

Однако, если вы получите такое сообщение:

"Не удалось войти в режим программирования. Дважды проверьте проводку!"

Это означает, что ваш ATmega16U2 не работает.


Проверьте микросхему ATmega328P

Отключите питание от «известного хорошего» Arduino Uno и переустановите перемычки ICSP согласно этой фотографии, чтобы подключить их к «основному» процессору на вашем Uno:

Проверить чип ATmega328P

Выводы для заголовка ICSP (сверху):

заголовок ICSP

Контакт 1 в заголовке ICSP рядом с микросхемой ATmega328P отмечен небольшой белой точкой, под «N» в «ВКЛ».

Проводка такая же, как и раньше, за исключением того, что вы подключаетесь к другому ICSP-заголовку - к концу платы, наиболее удаленному от USB-разъема.

Хорошая доска Target Uno

  MISO MISO (контакт с точечным контактом 1)
  VCC VCC
  SCK SCK
  MOSI MOSI
  D10 /СБРОС
  GND GND

После подключения откройте последовательный монитор, установите его на 115200 бод, и вы увидите что-то вроде этого:

Atmega chip detector.
Автор Ник Гэммон.
Версия 1.17
Составлено 9 июля 2015 года в 08:36:24 с Arduino IDE 10604.
Попытка войти в режим программирования ICSP ...
Введен режим программирования OK.
Подпись = 0x1E 0x95 0x0F
Процессор = ATmega328P
Размер флеш-памяти = 32768 байт.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Калибровка часов = 0x83
Загрузочный загрузчик: Да
EEPROM сохраняется через стирание: нет
Таймер сторожевого таймера всегда включен: Нет
Загрузочный загрузчик - 512 байт, начиная с 7E00

Загрузчик:

7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...

MD5 сумма загрузчика = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Имя загрузчика: optiboot_atmega328

Первые 256 байт памяти программы:

0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...

В этом случае он подтверждает, что основной процессор работает, и на нем есть загрузчик Optiboot.


Вещи, которые вы можете исправить

Сбой регулятора напряжения

Это нелегко заменить, но это необходимо, только если вы используете гнездо питания. Если вы работаете с USB, это не требуется. В качестве альтернативы вы можете организовать питание от 4 до 5 В (например, 3 батареи типа АА) и напрямую подключить их к гнезду 5 В на плате.


Ошибка микросхемы ATmega16U2

Это требуется только для загрузки эскизов через USB-порт и последовательной отладки. Это не так просто заменить, потому что это SMD (устройство для поверхностного монтажа). Однако вы можете обойтись без него.

Вы можете загружать эскизы через заголовок ICSP, если вы приобретаете устройство программирования ICSP.

Примеры таких устройств, подключенных к гнезду ICSP:

USBtinyISP

AVRISP

(Эти фотографии были взяты из Ruggeduino, но концепция такая же).


Вы также можете получить кабель FTDI, например:

Подключить FTDI к Arduino

Подключите его к последовательному порту вашей платы следующим образом:

FTDI cable

FTDI Arduino Uno

GND GND (черный провод по кабелю FTDI, синий провод перемычки)
CTS не подключен
VCC 5V
TxD D0 (RX)
RxD D1 (TX)
RTS К RESET с конденсатором 0,1 мкФ в ряд с ним (зеленый провод)

Теперь вы можете загружать эскизы непосредственно на главный процессор, минуя USB-чип.


Вы также можете использовать мой автономный программист чипа Atmega для загрузки файлов .hex - это позволяет вам копировать. шестнадцатеричный файл для эскиза на SD-карту, а затем запрограммируйте плату через заголовок ICSP.


Ошибка микросхемы ATmega328P

Основной процессор можно легко заменить, если он установлен в гнездо. Получите замену чипа где-то вроде Adafruit за $ US 6. Кроме того, попробуйте eBay.Попробуйте получить чип, на котором уже есть загрузчик Optiboot, чтобы сохранить проблемы.

Осторожно вытащите существующий чип из гнезда и установите новый, отметив расположение штифта 1. Контакт 1 имеет вырез на чипе, и его правильная ориентация отмечена на первой фотографии в этом сообщении с желтой точкой (ближе всего к краю доски). Вам, вероятно, придется слегка выпрямить ноги. Держите чип за концы и осторожно надавите на плоскую поверхность, как на стол, пока они немного не сдвинутся внутрь. Попытайтесь not прикоснуться к металлическим контактам, вы можете заблокировать их статическим электричеством.


ATmega328P отвечает, но не имеет загрузчика

У меня есть эскиз в Программист загрузчика Atmega , который заменит загрузчик Optiboot. Проводка такая же, как для эскиза детектора микросхемы. Код находится в GitHub - nickgammon /arduino_sketches . Если вы нажмете кнопку «Загрузить» на этой странице, вы получите ряд полезных эскизов. Тот, который вы хотите, называется «Atmega_Board_Programmer».

Установите эскиз на свой «хорошо известный» Uno и подключите его к целевой плате с помощью проводки, показанной ранее.

Проверить чип ATmega328P

Откройте Serial Monitor на своем «хорошем» Uno, и вы увидите следующее:

Программист чипов Atmega.
Автор Ник Гэммон.
Версия 1.35
Составлено 9 июля 2015 года в 15:06:58 с Arduino IDE 10604.
Попытка войти в режим программирования ICSP ...
Введен режим программирования OK.
Подпись = 0x1E 0x95 0x0F
Процессор = ATmega328P
Размер флеш-памяти = 32768 байт.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Калибровка часов = 0x83
Введите «L», чтобы использовать загрузчик Lilypad (8 МГц), или «U» для Uno (16 МГц) загрузчика ...

Введите «U» для загрузчика Uno (Optiboot).

Использование загрузчика Uno Optiboot 16 МГц.
Адрес загрузчика = 0x7E00
Длина загрузчика = 512 байт.
Введите «Q» для выхода, «V» для проверки или «G» для программирования чипа с помощью загрузчика ...

Введите «G», чтобы запрограммировать чип.

Вы должны увидеть:

Стирание чипа ...
Написание загрузчика ...
Начальная страница с 0x7E00
Начальная страница, начинающаяся с 0x7E80
Начальная страница с 0x7F00
Начальная страница с 0x7F80
Письменное.
Проверка ...
Ошибок не обнаружено.
Написание предохранителей ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Калибровка часов = 0x83
Готово.
Режим программирования выключен.
Напечатайте «C», когда будете готовы продолжить работу с другим чипом ...

Это занимает около одной секунды. Теперь установлен загрузчик.


Проблемы сторожевого таймера

Таймер сторожевого таймера (выключенный по умолчанию) можно настроить для сброса процессора через определенное время. Цель состоит в том, чтобы восстановить «зависание» для процессора, развернутого в поле. Однако, если таймер установлен на короткий период (например, 16 мс), тогда процессор может снова выполнить сброс до того, как у загрузчика будет возможность что-либо сделать.

Симптомы таковы, что вы не можете загружать новые эскизы. Некоторые современные загрузчики (например, Optiboot) предпринимают шаги, чтобы остановить эту проблему как одну из первых вещей, которые они делают. Однако другие не делают.

Это может быть сложно восстановить, поскольку после запуска эскиза у вас есть проблема с его сбросом, и если у вас есть проблема, вы не можете заменить эскиз. Люди часто сообщают, что им нужно сжечь новый загрузчик для восстановления. Однако это только потому, что в качестве побочного эффекта сжигание загрузчика стирает текущий эскиз.

Там есть способ восстановления. Выполните следующие действия:

  • Полностью выключите плату (удалите USB-кабель).
  • Удерживайте кнопку «Сброс», а держите ее нажатой (или запустите перемычку с буфера RESET на вывод GND). Это предотвращает запуск эскиза проблемы и, таким образом, активирует сторожевой таймер
  • Удерживая нажатой кнопку Reset, снова подключите USB-кабель.
  • Начать загрузку эскиза, который не имеет этой проблемы (например, Blink)
  • После того, как IDE сообщает «Uploading», отпустите кнопку Reset (или удалите перемычку).
  • Теперь он должен загрузить OK - поскольку эскиз, который активировал сторожевой таймер, никогда не запускался.

Проблемы с загрузкой Mega2560

Я упоминаю об этом здесь, хотя этот пост действительно нацелен на плату Uno, потому что это довольно часто.

Некоторые версии загрузчика Mega2560 ищут «!!!» в входящей загрузке с ПК, и если они увидят это, перейдите в режим отладки. Это приведет к сбою загрузки.

Пример кода:

Serial.println («Перегрев печи»);

Решения:

  • Установить более поздний загрузчик. Мой эскиз загрузчика загрузчика, упомянутый ранее в этом ответе, должен установить загрузчик, который не имеет этой проблемы.

Или (проще):

  • Не используйте "!!!" в вашейэскиз.

Проблемы с загрузкой в ​​Leonardo /Micro /Esplora и т. д.

Платы с ATmega32u4 в качестве основного (и единственного) процессора могут быть более сложными для загрузки. Это связано с тем, что один и тот же чип должен обрабатывать закачки, а также запускать ваш код.

Существует небольшое окно возможностей после сброса платы, когда он ищет новый эскиз для загрузки. Способ загрузки на эти платы:

  • Скомпилируйте эскиз без ошибок.
  • Запустите загрузку
  • Как только IDE сообщает «Загрузка», нажмите и отпустите кнопку «Сброс».

У вас есть только секунда или около того, прежде чем старый эскиз начнет работать. Не отчаивайтесь, если вам придется повторять этот процесс пару раз. Это нормально.


Ссылки

ответил Nick Gammon 9 J000000Thursday15 2015, 08:46:30
14

По крайней мере, поскольку я предполагаю, что вы загружаете свой эскиз через avrdude, пожалуйста, предоставьте дополнительную информацию о сбое загрузки (например, вывод загрузчика эскиза), чтобы люди здесь могли помочь вам.

В дополнение к большому ответу Ника Гэммона, пожалуйста, найдите восклицательные знаки в своем эскизе. Если ваш эскиз содержит строку с числом символов, превышающим или равным 3 восклицательным знакам, загрузка будет неудачной, так как старые версии Arduino Bootloader будут интерпретировать эти восклицательные знаки в качестве другой функции, и загрузка будет остановлена.

Пример остановки загрузки:

char * test = "Это остановит загрузку !!!";

См. Проблема с кодом Google .

ответил m.w. 9 J000000Thursday15 2015, 13:08:14
2

У меня кирпича 2x ATMega328P на моей плате Arduino Uno из-за статического (я думаю).

Статичность, похоже, убила вывод TX, и, следовательно, программа не может быть загружена с помощью USB-кабеля.

Вы можете запрограммировать ATMega328P с помощью программы AVRISPmkII. Когда вы это делаете, все, кроме вывода Tx, работают нормально.

В качестве альтернативы вы можете купить новый ATMega328P DIP, запрограммированный с помощью загрузчика Arduino ( как этот из Adafruit ), и вы готовы снова вернуться.

ответил sa_leinad 7 PMpThu, 07 Apr 2016 15:27:50 +030027Thursday 2016, 15:27:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132