При использовании Arduino Uno в качестве ISP: "Yikes! Invalid device signature" - плохое соединение, неверную конфигурацию или неверную версию avrdude?
Я использую 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 МГц, и таким образом сэкономить мне несколько шагов?
(Я бы просто купил "настоящий" программатор, но мне нужно получить этот код в ближайшие два дня, и я нахожусь в сельской части Новой Шотландии)
@Yary, 👍14
Обсуждение3 ответа
Лучший ответ:
Я припаял провода к контактным площадкам, чтобы убедиться в хорошем соединении, и использовал эти провода для программирования с Uno. Затем программатор работал без каких-либо правок в командных строках, как указано в вопросе. Я прогнал несколько вариантов и смог ответить на все свои вопросы и еще на несколько:
Ошибка "Ура! Неверная подпись устройства" была вызвана плохим контактом между программатором (Uno) и выводами ATTINY.
Это никак не связано с отсутствием загрузчика на новом микроконтроллере. Новый чип ATTINY45 не нуждается в загрузчике для работы внутрисхемного программатора.
Uno может запрограммировать ATTINY45, настроенный на любую из его скоростей, 1 МГц или 8 МГц. Заводские настройки в порядке и не требуют замены предохранителей.
Для программирования работали обе версии avrdude — 6.1 с сайта автора и модифицированная из Arduino IDE.
avrdude может программировать через Uno с помощью любого из
-c avrisp
,-c arduino
или-c stk500v1
, неважно какой.
Один небольшой вопрос, на который я не смог ответить, заключался в том, с какой скоростью работают программы Uno (скорость связи между контактами ввода-вывода Arduino и микроконтроллером). Это связано со скоростью последовательного порта? Но оказалось, что это не имеет отношения к решению этой проблемы. Кто-то другой может задать его, если достаточно любопытно.
ArduinoISP устанавливает для интерфейса SPI значение тактовой частоты/128, поэтому для Uno с частотой 16 МГц подключенный AVR запрограммирован на частоте 16 МГц/128 = 125 кбит/с. Но ограничивающими факторами являются последовательная скорость, а когда установлен PROG_FLICKER, для каждой фиксации страницы добавляется задержка в 30 мс., @user2973
Добавьте описание платы и их предохранителей из того, что уже установлено, и все заработает.
Для добавления только 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 ################################################### ############ #############################
Я использовал его.
У меня была именно такая проблема. Если ATtiny настроен на внешние часы, то ArduinoISP не сможет его запрограммировать без внешнего кристалла. Подключил кварцевый резонатор 16 МГц и 2 конденсатора и все заработало отлично.
(Затем я смог настроить ATtiny на внутренние часы, удалить кристалл, и затем он отлично работал без кристалла.)
- Помогите понять, как avrdude работает с ArduinoISP и почему он не работает у меня.
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- Arduino UNO для получения подписи чипа ATmega328P-PU
- Как запрограммировать чип ATmega328 au tqfp32 (SMD)?
- Как контролировать мощность attiny13a через прерывание смены контакта?
- Как использовать контакты ATtiny, которые обычно «зарезервированы» для программирования микросхем?
- Управление конфигурациями через EEPROM путем записи в шестнадцатеричный файл
- Невозможно использовать Arduino nano в качестве ISP, потому что он не может прочитать подпись устройства.
Попробуйте настроить программатор на
-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