При использовании Arduino Uno в качестве ISP: "Yikes! Invalid device signature" - плохое соединение, неверную конфигурацию или неверную версию avrdude?

attiny avrdude isp arduinoisp

Я использую Arduino UNO для программирования предварительно скомпилированного шестнадцатеричного образа в ATTINY45, используя avrdude в каталоге Arduino IDE в Windows 7. В Uno загружен скетч ISP из каталога примеров, и это работает. светодиод сердцебиения красиво пульсирует.

Что касается аппаратного обеспечения, у меня есть такая установка, за исключением того, что ATTINY монтируется на поверхность, припаивается к плате для серфинга со всеми его контакты проверены-припаяны вольтметром. Я использую контактную полоску, которую держу в руке, чтобы контакты касались платы для серфинга, чтобы передать сигналы от Uno к ATTINY.

Вот командные строки, которые я взял из результатов отладки IDE:

REM set the fuse for 8MHz, so the ISP programmer can work
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0xe2:m 
REM load the program
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -Uflash:w:firefly.hex:i
REM set fuse for 1MHz, as the project requires
C:\Progra~1\Arduino\hardware/tools/avr/bin/avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0x62:m 

-Я пытаюсь запустить их по отдельности, но всегда получаю эту ошибку:

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
     Double check connections and try again, or use -F to override
     this check.

но иногда число ff0000 или ffff00 или ffffff

Я читал, что "Arduino использует слегка модифицированную версию avrdude для загрузки скетчей на плату Arduino. Стандартная версия запрашивает подпись устройства платы способом, который загрузчик не понимает, что приводит к этой ошибке". Означает ли это, что использование Arduino avrdude с новым чипом ATTINY без загрузчика также вызовет ту же ошибку? Другими словами, не может ли модифицированный avrdude запрашивать чип AVR, не загруженный с помощью Arduino?

Или эта ошибка просто означает, что у меня нет хорошего контакта между всеми моими контактами программатора и ATTINY?

И действительно ли необходимы настройки предохранителей, может ли Uno запрограммировать вспышку на attiny, работающую на частоте 1 МГц, и таким образом сэкономить мне несколько шагов?

(Я бы просто купил "настоящий" программатор, но мне нужно получить этот код в ближайшие два дня, и я нахожусь в сельской части Новой Шотландии)

, 👍14

Обсуждение

Попробуйте настроить программатор на -c avrisp. Думаю, на 1 МГц его можно запрограммировать без проблем., @user2973

Когда я загружаю данные из IDE Arduino и устанавливаю для программатора режим «Arduino как ISP», он использует «-carduino», а не stk500. Просто попробуйте загрузить программу Blink в Attiny из IDE. Таким образом, вы сможете увидеть правильную командную строку внизу, если в настройках включите «подробный вывод»., @Gerben

Вы сначала загрузили эскиз ArduinoISP?, @PhillyNJ

Фил, перед этими шагами я загрузил эскиз ArduinoISP в Uno, все получилось, и я вижу зеленый светодиод «сердцебиение» на контакте 9. Gerben/user2973, я попробовал "-carduino", дальше попробую "-c avrisp". Спасибо., @Yary

Это похоже на проблему с целевым соединением ISP<->. Что-нибудь в вашей схеме может загружать линии? Предохранители ATtiny по-прежнему настроены на внутреннюю тактовую частоту или вы предоставляете внешнюю? Вы уверены, что все четыре сигнальных провода и заземление подключены и расположены в правильном порядке? Возможно, вам следует припаять установку, просто чтобы убедиться, что это не ваш ручной метод (хотя я тоже использовал его), @Chris Stratton


3 ответа


Лучший ответ:

12

Я припаял провода к контактным площадкам, чтобы убедиться в хорошем соединении, и использовал эти провода для программирования с Uno. Затем программатор работал без каких-либо правок в командных строках, как указано в вопросе. Я прогнал несколько вариантов и смог ответить на все свои вопросы и еще на несколько:

  1. Ошибка "Ура! Неверная подпись устройства" была вызвана плохим контактом между программатором (Uno) и выводами ATTINY.

  2. Это никак не связано с отсутствием загрузчика на новом микроконтроллере. Новый чип ATTINY45 не нуждается в загрузчике для работы внутрисхемного программатора.

  3. Uno может запрограммировать ATTINY45, настроенный на любую из его скоростей, 1 МГц или 8 МГц. Заводские настройки в порядке и не требуют замены предохранителей.

  4. Для программирования работали обе версии avrdude — 6.1 с сайта автора и модифицированная из Arduino IDE.

  5. avrdude может программировать через Uno с помощью любого из -c avrisp, -c arduino или -c stk500v1, неважно какой.

Один небольшой вопрос, на который я не смог ответить, заключался в том, с какой скоростью работают программы Uno (скорость связи между контактами ввода-вывода Arduino и микроконтроллером). Это связано со скоростью последовательного порта? Но оказалось, что это не имеет отношения к решению этой проблемы. Кто-то другой может задать его, если достаточно любопытно.

,

ArduinoISP устанавливает для интерфейса SPI значение тактовой частоты/128, поэтому для Uno с частотой 16 МГц подключенный AVR запрограммирован на частоте 16 МГц/128 = 125 кбит/с. Но ограничивающими факторами являются последовательная скорость, а когда установлен PROG_FLICKER, для каждой фиксации страницы добавляется задержка в 30 мс., @user2973


1

Добавьте описание платы и их предохранителей из того, что уже установлено, и все заработает.

Для добавления только C:\Program Files\Arduino\hardware\arduino\avr\boards.txt и добавления описания платы.

########
############ Определения для ATmega 8MHz
################################################### ############
atmega16-8.name=Atmega16 (внутренняя частота 8 МГц)

atmega16-8.upload.tool=avrчувак

atmega16-8.upload.protocol=stk500v1

atmega16-8.upload.maximum_size=14336
atmega16-8.upload.speed=19200

atmega16-8.bootloader.low_fuses=0xE8
atmega16-8.bootloader.high_fuses=0x99

atmega16-8.build.mcu=atmega16
atmega16-8.build.f_cpu=8000000L
atmega16-8.build.core=ардуино:ардуино
atmega16-8.build.variant=mega16

################################################### ############
#############################

Я использовал его.

,

4

У меня была именно такая проблема. Если ATtiny настроен на внешние часы, то ArduinoISP не сможет его запрограммировать без внешнего кристалла. Подключил кварцевый резонатор 16 МГц и 2 конденсатора и все заработало отлично.

(Затем я смог настроить ATtiny на внутренние часы, удалить кристалл, и затем он отлично работал без кристалла.)

,