ISP로서 Arduino Uno를 사용할 때“Yikes! 잘못된 장치 서명”은 연결 상태가 나쁘거나 구성이 잘못되었거나 avrdude의 버전이 잘못되었음을 의미합니까?


12

Windows 7에서 Arduino IDE 디렉토리의 avrdude를 사용하여 사전 컴파일 된 16 진수 이미지를 ATTINY45에 프로그래밍하기 위해 Arduino UNO를 사용하고 있습니다. Uno는 예제 디렉토리에서 ISP 스케치를로드했으며 하트 비트 LED가 작동합니다. 잘 펄스.

하드웨어 측면 에서 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 보드에 스케치를 업로드합니다. 표준 버전은 부트 로더가 이해할 수없는 방식으로 보드의 장치 서명을 쿼리하므로이 오류가 발생합니다." 이것은 부트 로더가없는 새로운 ATTINY 칩과 함께 Arduino avrdude를 사용하면 동일한 오류가 발생한다는 것을 의미합니까? 다시 말해, 수정 된 avrdude는 Arduino가 아닌 AVR 칩을 쿼리 할 수 ​​없습니까?

아니면 그 오류는 단순히 모든 프로그래머 핀과 ATTINY 사이에 좋은 접촉이 없다는 것을 의미합니까?

그리고 퓨즈 설정이 꼭 필요한가요? Uno가 1MHz에서 작동하는 플래시에 플래시를 프로그래밍하여 몇 단계를 절약 할 수 있습니까?

(저는 단지 "실제"프로그래머를 구입하지만 다음 이틀 안에이 코드를 얻어야하며 Nova Scotia의 시골 지역에 있습니다.)


프로그래머를로 설정하십시오 -c avrisp. 문제없이 1MHz로 프로그래밍 할 수 있다고 생각합니다.
user2973

1
arduino IDE에서 업로드하고 프로그래머를 "Arduino as ISP"로 설정 -carduino하면 stk500 이 사용 되지 않습니다. IDE에서 attiny에 깜박임 프로그램을 업로드하십시오. 이렇게하면 설정에서 "verbose output"을 활성화하면 맨 아래에 올바른 명령 줄이 표시됩니다.
Gerben

ArduinoISP 스케치를 먼저 업로드하셨습니까?
PhillyNJ

Phil,이 단계를 수행하기 전에 ArduinoISP 스케치를 Uno에로드했는데 성공했으며 핀 9 펄스의 녹색 "하트 비트"LED가 보입니다. Gerben / user2973, "-carduino"를 시도했지만 다음에 "-c avrisp"을 시도합니다. 감사.
Yary

이것은 ISP <-> 대상 연결 문제처럼 보입니다. 회로에 라인을로드 할 수있는 것이 있습니까? ATtiny 퓨즈는 여전히 내부 시계 용으로 설정되어 있습니까, 아니면 외부 퓨즈를 제공하고 있습니까? 네 개의 신호선과 접지가 모두 올바른 순서로 연결되어 있습니까? 아마 당신은 (나는 또한 것을 사용했습니다 불구하고) 그냥 당신의 휴대용 방법은 아닙니다 확인하기 위해 설치 솔더 압정한다
크리스 스트래튼

답변:


12

연결 상태가 양호한 지 확인하기 위해 전선을 패드에 납땜하고 Uno에서 프로그래밍하기 위해 해당 전선을 사용했습니다. 그런 다음 프로그래머는 질문에 게시 된 명령 줄을 편집하지 않고 일했습니다. 나는 몇 가지 변형을 실행하고 모든 질문에 대답 할 수있었습니다.

  1. 프로그래머 (Uno)와 ATTINY 핀의 접촉 불량으로 "Yikes! Invalid device signature"오류가 발생했습니다.

  2. 부트 로더가 새로운 마이크로 컨트롤러에 있지 않은 것과는 아무런 관련이 없습니다. 새로운 ATTINY45 칩에는 인서 킷 프로그래머가 작동하기 위해 부트 로더가 필요하지 않습니다.

  3. Uno는 ATTINY45를 1MHz 또는 8MHz 속도로 프로그래밍 할 수 있습니다. 초기 설정은 양호하며 퓨즈를 변경할 필요가 없습니다.

  4. avrdude 버전은 저자 사이트에서 6.1로, Arduino IDE에서 수정 된 6.1로 프로그래밍했다.

  5. avrdude 중 하나를 사용하여 우노를 통해 캔 프로그램 -c avrisp, -c arduino또는 -c stk500v1, 그것은 문제가있는하지 않습니다.

내가 대답 할 수 없었던 한 가지 작은 질문은 Uno 프로그램의 속도 (Arduino I / O 핀과 마이크로 컨트롤러 간의 통신 속도)가 어떤 속도 였는가였습니다. 직렬 포트 속도와 관련이 있습니까? 그러나이 문제에 대답하는 것은 적절하지 않은 것으로 판명되었습니다. 다른 사람이 궁금한 점이 있는지 물어볼 수 있습니다.


2
ArduinoISP는 SPI 인터페이스를 clock / 128로 설정하므로 16MHz Uno의 경우 연결된 AVR은 16MHz / 128 = 125kbit / s로 프로그래밍됩니다. 그러나 제한 요소는 직렬 속도이며 PROG_FLICKER가 설정되면 각 페이지 커밋마다 30ms 지연이 추가됩니다.
user2973

4

나는 정확히이 문제 가 있었다 . ATtiny가 외부 클록으로 설정되면 ArduinoISP는 외부 크리스털없이 프로그래밍 할 수 없습니다. 16MHz 크리스탈과 2 개의 커패시터를 연결하고 완벽하게 작동했습니다.

(그런 다음 ATtiny를 내부 시계로 설정하고 수정을 제거한 다음 수정없이 완벽하게 작동했습니다.)


1

이미 설정 한 보드와 퓨즈 설명을 추가하면 작동합니다.

단지 추가 C:\Program Files\Arduino\hardware\arduino\avr\boards.txt하고 보드 설명을 추가 할 수 있습니다.

########
############ Definitions for ATmega 8MHz 
##############################################################
atmega16-8.name=Atmega16 (internal 8MHz clock)

atmega16-8.upload.tool=avrdude

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=arduino:arduino
atmega16-8.build.variant=mega16

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

나는 그것을 사용했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.