Не получается подключить Arduino rev3 к компьютеру.
Не получается подключить Arduino rev3 к компьютеру.
Здравствуйте.
Купил Arduino rev3 и не смог подключить к компьютеру. Во первых Arduino определяется на компьютере как ATmega 16u2, а не как неизвестное устройство. Во вторых драйвера скаченные с официального сайта http://arduino.cc/ не подходят (пробовал новые и предыдущие версии). Пытался гуглить на эту тему, но видимо с таким случаем никто не сталкивался, ничего не нашел.
Может, у кого ни будь есть предположения, как подключить, буду благодарен.
Купил Arduino rev3 и не смог подключить к компьютеру. Во первых Arduino определяется на компьютере как ATmega 16u2, а не как неизвестное устройство. Во вторых драйвера скаченные с официального сайта http://arduino.cc/ не подходят (пробовал новые и предыдущие версии). Пытался гуглить на эту тему, но видимо с таким случаем никто не сталкивался, ничего не нашел.
Может, у кого ни будь есть предположения, как подключить, буду благодарен.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Не получается подключить Arduino rev3 к компьютеру.
Итак «больная» ардуина пользователя SHIVO попала в нашу лабораторию. Очень интересный случай. Попробуем её реанимировать.
После подключения к компьютеру через USB в диспетчере устройств появляется группа Atmel USB Devices и в ней устройство ATmega16U2. Обновление драйвера для этого устройства через контекстное меню выполнить не получается. Система говорит, что драйвер не обнаружен. На плате Arduino Uno установлено два микроконтроллера - ATmega328P и ATmega16U2. В первом крутятся скетчи, скомпилированные в среде Arduino, а второй выполняет функцию преобразователя USB-Serial. Через этот МК, собственно, скетчи и загружаются в ATmega328P.
Получается, что у нашего «пациента» что-то не в порядке с МК ATmega16U2. Во flash-памяти этого контроллера должны быть два куска кода. Одна часть – это прикладное ПО, которое реализует функцию преобразования USB-Serial. Другая часть – USB DFU (Device Firmware Update) загрузчик. Если бы ПО USB-Serial работало нормально, то в диспетчере устройств, после обновления драйвера, должен был бы появиться последовательной порт. На следующей картинке пример с нормальной ардуиной: Если МК определяется в диспетчере как ATmega16U2, то, скорее всего, после подачи питания запускается USB загрузчик. Хотя по умолчанию управление должно переходить сразу к коду USB-Serial.
Для загрузки микропрограмм в контроллеры AVR через USB фирма ATMEL предлагает утилиту FLIP. Скачиваем и устанавливаем. Кроме загрузки FLIP умеет считывать прошивку из контроллера.
Теперь можно посмотреть, что же зашито в 16U2 на «больной» ардуине: А теперь сравним со «здоровым» образцом: Что мы тут видим? Различаются контрольные суммы и версии загрузчиков. Также оказалось, что вся прикладная область памяти «больной» 16U2 забита значениями 0xFF.
Попробуем это исправить. Загрузим с помощью FLIPa в 16U2 hex-файл Arduino-usbserial-atmega16u2-Uno-Rev3.hex, который лежит в папке hardware\arduino\firmwares\arduino-usbserial.
Файл загрузился и после сброса ардуина стала определяться в диспетчере устройств как Arduino Uno R3. Уже хорошо. Однако при попытке загрузить скетч из IDE индикатор RX на плате моргал три раза и в нижнем окне появлялась строка сообщения: avrdude: stk500_getsync(): not in sync: resp=0x00.
Похоже, что 16U2 и 328P были настроены на разные скорости обмена. Такое могло произойти, если в 16U2 неправильно установлены конфигурационные биты в младшем байте FUSES.
Так как FLIP не умеет менять конфигурационные биты FUSES, то придется шить через ISP. Для этого скачиваем другую полезную утилиту для прошивки чипов AVR – avrdude. Хотя она есть где-то в папках Arduino.
Для того, чтобы прошить 16U8 с помощью avrdude я собрал программатор из другой рабочей платы arduino. Подробнее про Arduino ISP можно прочитать на Arduino::Learning. Avrdude запускается из командной строки со следующими параметрами:
-p at90usb162
-F
-P com15
-c avrisp
-b 19200
-U flash:w:Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex
-U lfuse:w:0xFF:m
-U hfuse:w:0xD9:m
-U efuse:w:0xF4:m
-U lock:w:0x0F:m
Во время работы avrdude все действия протоколируются на экране:
Проверка показала, что теперь все работает. Наш «пациент» ожил. Можно загружать в него скетчи.
После подключения к компьютеру через USB в диспетчере устройств появляется группа Atmel USB Devices и в ней устройство ATmega16U2. Обновление драйвера для этого устройства через контекстное меню выполнить не получается. Система говорит, что драйвер не обнаружен. На плате Arduino Uno установлено два микроконтроллера - ATmega328P и ATmega16U2. В первом крутятся скетчи, скомпилированные в среде Arduino, а второй выполняет функцию преобразователя USB-Serial. Через этот МК, собственно, скетчи и загружаются в ATmega328P.
Получается, что у нашего «пациента» что-то не в порядке с МК ATmega16U2. Во flash-памяти этого контроллера должны быть два куска кода. Одна часть – это прикладное ПО, которое реализует функцию преобразования USB-Serial. Другая часть – USB DFU (Device Firmware Update) загрузчик. Если бы ПО USB-Serial работало нормально, то в диспетчере устройств, после обновления драйвера, должен был бы появиться последовательной порт. На следующей картинке пример с нормальной ардуиной: Если МК определяется в диспетчере как ATmega16U2, то, скорее всего, после подачи питания запускается USB загрузчик. Хотя по умолчанию управление должно переходить сразу к коду USB-Serial.
Для загрузки микропрограмм в контроллеры AVR через USB фирма ATMEL предлагает утилиту FLIP. Скачиваем и устанавливаем. Кроме загрузки FLIP умеет считывать прошивку из контроллера.
Теперь можно посмотреть, что же зашито в 16U2 на «больной» ардуине: А теперь сравним со «здоровым» образцом: Что мы тут видим? Различаются контрольные суммы и версии загрузчиков. Также оказалось, что вся прикладная область памяти «больной» 16U2 забита значениями 0xFF.
Попробуем это исправить. Загрузим с помощью FLIPa в 16U2 hex-файл Arduino-usbserial-atmega16u2-Uno-Rev3.hex, который лежит в папке hardware\arduino\firmwares\arduino-usbserial.
Файл загрузился и после сброса ардуина стала определяться в диспетчере устройств как Arduino Uno R3. Уже хорошо. Однако при попытке загрузить скетч из IDE индикатор RX на плате моргал три раза и в нижнем окне появлялась строка сообщения: avrdude: stk500_getsync(): not in sync: resp=0x00.
Похоже, что 16U2 и 328P были настроены на разные скорости обмена. Такое могло произойти, если в 16U2 неправильно установлены конфигурационные биты в младшем байте FUSES.
Так как FLIP не умеет менять конфигурационные биты FUSES, то придется шить через ISP. Для этого скачиваем другую полезную утилиту для прошивки чипов AVR – avrdude. Хотя она есть где-то в папках Arduino.
Для того, чтобы прошить 16U8 с помощью avrdude я собрал программатор из другой рабочей платы arduino. Подробнее про Arduino ISP можно прочитать на Arduino::Learning. Avrdude запускается из командной строки со следующими параметрами:
-p at90usb162
-F
-P com15
-c avrisp
-b 19200
-U flash:w:Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex
-U lfuse:w:0xFF:m
-U hfuse:w:0xD9:m
-U efuse:w:0xF4:m
-U lock:w:0x0F:m
Во время работы avrdude все действия протоколируются на экране:
Код: Выделить всё
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.07s
avrdude: Device signature = 0x1e9489
avrdude: Expected signature for AT90USB162 is 1E 94 82
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex"
avrdude: input file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex auto detected as Intel Hex
avrdude: writing flash (15668 bytes):
Writing | ################################################## | 100% 7.58s
avrdude: 15668 bytes of flash written
avrdude: verifying flash memory against Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex:
avrdude: load data flash data from input file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex:
avrdude: input file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex auto detected as Intel Hex
avrdude: input file Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex contains 15668 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 11.98s
avrdude: verifying ...
avrdude: 15668 bytes of flash verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.06s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xD9"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xD9:
avrdude: load data hfuse data from input file 0xD9:
avrdude: input file 0xD9 contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xF4"
avrdude: writing efuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xF4:
avrdude: load data efuse data from input file 0xF4:
avrdude: input file 0xF4 contains 1 bytes
avrdude: reading on-chip efuse data:
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0x0F"
avrdude: writing lock (1 bytes):
Writing | ################################################## | 100% 0.05s
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Re: Не получается подключить Arduino rev3 к компьютеру.
Спасибо за Вашу статью. У меня примерно такая же проблема: http://roboforum.ru/forum86/topic11561.html
По указаной Вами ссылке страница не открывается из-за проблем на сервере. Нашел Flip здесь, но в списке поддерживаемых устройств ATmega16U2 не содержится.
По указаной Вами ссылке страница не открывается из-за проблем на сервере. Нашел Flip здесь, но в списке поддерживаемых устройств ATmega16U2 не содержится.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Не получается подключить Arduino rev3 к компьютеру.
Похоже сайт Атмела закрылся на переучет . Сейчас поищу дистрибутив FLIP у себя.
У меня установлена версия 3.4.5. В ней в списке устройств есть ATmega16U2.
У меня установлена версия 3.4.5. В ней в списке устройств есть ATmega16U2.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Не получается подключить Arduino rev3 к компьютеру.
Нашел. Качайте - https://docs.google.com/open?id=0B6b_8W ... zRoN2lBZU0. Завтра файл уберу.
Re: Не получается подключить Arduino rev3 к компьютеру.
Файл вижу, скачать не могу.Mr.Kubikus писал(а):Нашел. Качайте - https://docs.google.com/open?id=0B6b_8W ... zRoN2lBZU0. Завтра файл уберу.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Не получается подключить Arduino rev3 к компьютеру.
Попробуйте еще раз. У меня все скачивается. Там кнопочка - "Загрузить"
Re: Не получается подключить Arduino rev3 к компьютеру.
Скачал, выбрал atmega8u2, жму usb-разъем со шнурком, доступно только USB получаю ошибку atlibusbdfu.dll not found, хотя в окне about эта библиотека есть. Вычитал http://ramfactory.com/forum/viewtopic.php?p=694 что нужно обновить драйвер из папки с Flip. Не получается, говорит, что там не содержиться нужного драйвеера. Плата с Uno у меня определяется как Communications Port. Mega 2560 вообще не видится операционной системой. Драйвер из папки IDE 1.0 обновляется, в том смысле, что операционная система не ругается, но устройство попрежнему остается в виде Communications Port.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Не получается подключить Arduino rev3 к компьютеру.
Надо перевести ATmega16U2 в режим DFU - http://arduino.cc/en/Hacking/DFUProgramming8U2. Замкните выводы RESET и GND на разъеме ICSP, который соединен с ATmega16U2. После этого обновите драйвер через диспетчер устройств. Драйвер находится в папке "Flip 3.4.5\usb".
Re: Не получается подключить Arduino rev3 к компьютеру.
Замыкаю указанные на картинке выводы:Mr.Kubikus писал(а):Надо перевести ATmega16U2 в режим DFU - http://arduino.cc/en/Hacking/DFUProgramming8U2. Замкните выводы RESET и GND на разъеме ICSP, который соединен с ATmega16U2. После этого обновите драйвер через диспетчер устройств. Драйвер находится в папке "Flip 3.4.5\usb".
Ни какой реакции не заметно, пробовал переподключать плату. При выборе (вручную) драйвера в Flip 3.4.5\usb получаю от системы: "В указанном месте отсутствуют сведения об оборудовании".
Может стоит попробовать сделать что-то через Parallel Port Programmer ?