Arduino Uno에 스케치를 업로드 할 수 없습니다.
- 내가 "벽돌"했습니까?
- 무엇이 잘못되었는지를 해결하기 위해 어떤 조치를 취할 수 있습니까?
- 이 문제를 해결하려면 어떻게해야합니까?
Arduino Uno에 스케치를 업로드 할 수 없습니다.
답변:
나는 꽤 많은 Arduinos를 가지고 있으며, 지난 몇 년 동안 하나만 "벽 돌파"했습니다. 그리고 그것은 정전기로 꽉 쥐는 것으로 생각됩니다. 불행히도 그 특정 칩에는 SMD (표면 장착) 프로세서 칩이 있으므로 다른 칩과 쉽게 교체 할 수 없습니다.
침착하게 다음 단계를 시도하십시오 ...
"아두 이노 우노"는 실패 할 수 있는 유일한 것이 아닙니다 . 여러 주요 구성 요소가 있으며 하나만 실패했을 수 있습니다 (있는 경우). 이 참조 사진을보십시오 :
주요 구성 요소는 다음과 같습니다.
Rx 및 Tx LED는 보드의 디지털 핀 0 및 1 (Rx 및 Tx로 표시)에 직접 연결되지 않습니다 . USB를 통해 직렬 통신 을 수행하는 경우에만 켜지고 GPS와 같은 무언가가 디지털 핀 0과 1에 직접 연결된 경우에는 아닙니다.
또한 "L"LED는 op-amp를 통해 연결되므로, 13 번 핀이 스케치 의 입력 으로 설정되면 켜질 수 있습니다 . 이것은 정상입니다. 데이터가 잘못 전송되고 있다는 의미는 아닙니다.
USB 케이블로 보드를 컴퓨터에 연결하고 녹색 "켜기"LED가 켜지는지 확인하십시오.
멀티 미터와 몇 개의 점퍼 리드를 사용하여 5V 핀과 GND 핀 (아래쪽 화살표) 사이에서 테스트하십시오. 약 5.0V의 판독 값을 얻어야합니다 (저는 5.04V를 받았습니다).
(하나가없는 경우 약 10 달러에 저렴한 멀티 미터를 구입할 수 있지만, 50 달러 정도에 더 좋은 멀티 미터를 구입하는 것이 좋습니다. 모든 전자 웹 사이트 및 상점을 확인하십시오.)
USB 케이블을 꽂아 5V를 얻지 못하면 다른 쪽 끝이 컴퓨터에 연결되어 있는지 확인하십시오. 다른 케이블을 사용해보십시오.
전원 잭 (사진에 "파워 인"으로 표시됨)을 사용 중이거나 사용할 계획 인 경우 USB를 분리하고 전원 공급 장치를 꽂으십시오 . 중앙 핀 에는 양극이 있고 7-12V DC 여야합니다 .
위와 같이 5V 및 3.3V 핀을 측정하십시오. 여전히 동일한 전압이 표시되어야합니다.
전원 공급 장치가 아닌 USB가 연결된 상태에서 5V를 얻는 경우 전압 조정기 (사진에 표시되어 있음)가 손상되었을 수 있습니다. 또는 전원 공급 장치에 문제가있을 수 있습니다. 다른 전원 공급 장치를 사용해보십시오.
Optiboot 부트 로더 (Uno와 함께 제공됨)가있는 경우 Reset 버튼을 눌렀다가 놓거나 USB 또는 전원 케이블을 분리했다가 다시 연결하면 "L"LED가 3 번 빠르게 깜박입니다. "켜기"및 "끄기"시간은 각각 50ms이며, 세 번의 플래시는 약 1/3의 초 안에 끝나야합니다.
그렇지 않은 경우 부트 로더 또는 메인 프로세서 칩 (Atmega328P)에 문제가있을 수 있습니다.
중요 : 스케치 업로드에 문제가있는 경우 연결된 장치 (실드 등)를 제거하십시오. 또한 보드 소켓에 연결된 점퍼 와이어를 제거하십시오. 특히, 디지털 핀 0 및 1 (Rx 및 Tx)에 연결된 것은 업로드 컴퓨터와의 통신을 방해하기 때문에 아무것도 연결 되어서는 안됩니다 .
간단한 스케치 예 (예 : 깜박임) 중 하나를 선택하고 업로드하십시오. 이것은 당신이 볼 수있는 것입니다 :
"L"LED가 3 번 깜박입니다. 업로드 프로세스의 명령에 의해 메인 칩이 재설정되기 때문입니다.
"Rx"LED가 빠르게 깜박입니다. 이것은 부트 로더 활성화를 시도하는 업로드 프로세스의 지침입니다.
"Tx"LED가 빠르게 깜박입니다. 업로드 된 데이터를 확인하는 프로세서입니다.
업로드 프로세스가 실패하더라도 위의 내용이 표시 될 수 있습니다. 잘못된 보드 유형이 선택 되었기 때문일 수 있습니다.
"Rx"LED 만 깜박이면 부트 로더 또는 메인 프로세서 칩 (Atmega328P)에 문제가있을 수 있습니다. 누군가 노크하고 있지만 아무도 집에 없습니다!
LED가 깜박이지만 다음과 같은 메시지가 표시되는 경우 :
avrdude: stk500_recv(): programmer is not responding
보드 종류를 확인하십시오 :
잘못된 보드 유형을 선택한 경우 잘못된 업로드 지침을 보내거나 시간 초과 또는 실패 할 수 있습니다. 당신이 나와 같고 다른 보드가 놓여 있다면 마지막으로 업로드 한 것이 다른 보드 유형이라는 것을 잊어 버릴 수 있습니다.
LED가 전혀 깜박이지 않으면 잘못된 통신 포트를 선택했을 수 있습니다.
통신 포트를 확인하십시오.
다른 PC / Mac에서 Arduino를 사용해보십시오. 이를 통해 특정 컴퓨터 또는 일반적으로 컴퓨터에 문제가 있는지 여부를 좁힐 수 있습니다.
배선:
모든 것이 반향되는 경우 : 올바른 통신 포트가 있음을 확인하면 USB 케이블이 정상이고 USB 인터페이스 칩 (Atmega16U2)이 정상일 수 있습니다.
아무것도 에코되지 않으면 다음을 확인하십시오.
보드가 루프백 테스트에 실패하고 USB 케이블에 문제가없는 경우 Atmega16U2 칩 자체를 테스트 할 수 있습니다. 보드의 Atmega16U2 칩과 USB 소켓 근처에 ICSP (In Circuit Serial Programming) 헤더가 있습니다.
먼저 전원을 분리하십시오 (USB 케이블 및 전원 케이블을 분리하십시오).
그런 다음 사진에 표시된 것처럼 6 개의 점퍼 와이어를 통해 ICSP 헤더를 양호한 우노에 연결할 수 있습니다.
ICSP 헤더의 핀 배치는 다음과 같습니다 (위에서).
Atmega16U2 칩 근처의 ICSP 헤더의 핀 1에는 "AREF"의 "F"근처에 작은 흰색 점이 표시되어 있습니다. ATmega328P 칩 근처의 ICSP 헤더의 핀 1에는 "ON"의 "N"아래에 작은 흰색 점이 표시되어 있습니다.
연결 :
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
배선을 다시 확인하십시오.
그런 다음 "잘 알려진"보드에 Atmega 부트 로더 프로그래머 페이지 에 설명 된대로 "Atmega_Board_Detector"스케치를 설치 하십시오. 코드는 GitHub-nickgammon / arduino_sketches에 있습니다. 해당 페이지에서 다운로드 버튼을 클릭하면 여러 가지 유용한 스케치가 표시됩니다. 원하는 것을 "Atmega_Board_Detector"라고합니다.
설치가 완료되면 직렬 모니터를 열고 115200 보드로 설정하면 다음과 같이 표시됩니다.
Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul 9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000
Bootloader:
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 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3
First 256 bytes of program memory:
0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 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
...
그러나 다음과 같은 메시지가 표시되면
"Failed to enter programming mode. Double-check wiring!"
ATmega16U2가 작동하지 않는 것 같습니다.
"알려진"Arduino Uno에서 전원을 분리하고이 사진에 따라 ICSP 점퍼를 다시 연결하여 Uno의 "주"프로세서에 연결하십시오.
ICSP 헤더의 핀 배치는 다음과 같습니다 (위에서).
ATmega328P 칩 근처의 ICSP 헤더의 핀 1에는 "ON"의 "N"아래에 작은 흰색 점이 표시되어 있습니다.
USB 소켓에서 가장 먼 보드 끝에있는 다른 ICSP 헤더에 연결한다는 점을 제외하면 배선은 이전과 동일합니다.
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
연결되면 직렬 모니터를 열고 115200 보드로 설정하면 다음과 같이 표시됩니다.
Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul 9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00
Bootloader:
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 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328
First 256 bytes of program memory:
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 V 공급 장치 (예 : 3 x AA 배터리)를 준비하여 보드의 5 V 소켓에 직접 연결할 수 있습니다.
이것은 USB 포트를 통한 스케치 업로드 및 직렬 디버깅에만 필요합니다. SMD (표면 장착 장치)이기 때문에 교체하기가 특히 쉽지 않습니다. 그러나 당신은 그것없이 관리 할 수 있습니다.
ICSP 프로그래밍 장치를 구매 한 경우 ICSP 헤더를 통해 스케치를 업로드 할 수 있습니다.
ICSP 소켓에 연결된 이러한 장치의 예 :
(이 사진들은 Ruggeduino에서 찍은 것이지만 개념은 같습니다.)
다음과 같이 FTDI 케이블을 얻을 수도 있습니다.
다음과 같이 보드의 직렬 포트에 연결하십시오.
FTDI Arduino Uno
GND GND (black wire on FTDI cable, blue jumper wire)
CTS not connected
VCC 5V
TxD D0 (RX)
RxD D1 (TX)
RTS To RESET with a 0.1 µF capacitor in series with it (green wire)
이제 USB 칩을 우회하여 스케치를 메인 프로세서에 직접 업로드 할 수 있습니다.
Atmega 칩 독립형 프로그래머를 사용하여 .hex 파일을 업로드 할 수도 있습니다. 이렇게하면 스케치 용 .hex 파일을 SD 카드에 복사 한 다음 ICSP 헤더를 통해 보드를 프로그래밍 할 수 있습니다.
메인 프로세서는 소켓에 장착되어 있으면 상당히 쉽게 교체 할 수 있습니다. Adafruit 와 같은 곳 에서 약 6 달러에 교체 용 칩을 구입하십시오. 또는 eBay를 사용해보십시오. 번거 로움을 없애기 위해 Optiboot 부트 로더가 이미 장착 된 칩을 구입하십시오.
소켓에서 기존 칩을 조심스럽게 빼내고 핀 1의 위치를 기록하여 새 칩을 설치하십시오. 핀 1은 칩에 노치가 있으며이 포스트의 첫 번째 사진에는 올바른 방향이 노란색으로 표시됩니다 점 (보드의 가장자리에 가장 가까운). 다리를 약간 곧게 펴야 할 것입니다. 칩을 끝까지 잡고 책상과 같이 평평한 표면에 살짝 눌러 질 때까지 부드럽게 누릅니다. 시도 하지 정전기로 보내 겠 수, 금속 핀을 만지지.
Atmega 부트 로더 프로그래머 가 Optiboot 부트 로더를 대체 할 스케치를 가지고 있습니다 . 배선은 칩 검출기 스케치와 동일합니다. 코드는 GitHub-nickgammon / arduino_sketches에 있습니다. 해당 페이지에서 다운로드 버튼을 클릭하면 여러 가지 유용한 스케치가 표시됩니다. 원하는 것을 "Atmega_Board_Programmer"라고합니다.
"알려진 좋은"Uno에 스케치를 설치하고 앞에서 표시된 배선으로 대상 보드에 연결하십시오.
"우수한"Uno에서 직렬 모니터를 열면 다음과 같이 표시됩니다.
Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul 9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Uno (Optiboot) 로더에 "U"를 입력하십시오.
Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...
칩을 프로그래밍하려면 "G"를 입력하십시오.
넌 봐야 해:
Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...
약 1 초 정도 걸립니다. 이제 부트 로더가 설치되었습니다.
특정 시간 후에 프로세서를 재설정하도록 워치 독 타이머 (기본적으로 해제되어 있음)를 구성 할 수 있습니다. 그 목적은 현장에 배치 된 프로세서의 "중지"에서 복구하는 것입니다. 그러나 타이머가 짧은 기간 (예 : 16ms)으로 설정된 경우 부트 로더가 작업을 수행하기 전에 프로세서를 다시 재설정 할 수 있습니다.
증상은 새 스케치를 업로드 할 수 없다는 것입니다. Optiboot와 같은 일부 최신 부트 로더는이 문제를 가장 먼저 수행하는 단계 중 하나로이 문제를 해결하기위한 조치를 취합니다. 그러나 다른 사람들은 그렇지 않습니다.
스케치가 실행되면 재설정 문제가 있고 문제가있는 경우 스케치를 교체 할 수 없으므로 복구하기가 어려울 수 있습니다. 사람들은 종종 복구하기 위해 새 부트 로더를 구워야한다고보고합니다. 그러나 이는 부수적으로 부트 로더를 태우면 현재 스케치가 지워지기 때문입니다.
이 인 복구 방법은. 다음 단계를 수행하십시오.
이 게시물이 실제로 Uno 보드를 대상으로하고 있지만 여기에서 언급합니다.
Mega2560 부트 로더의 일부 버전은 "!!!"를 찾습니다. PC에서 들어오는 업로드에서 발견되면 디버깅 모드로 들어갑니다. 업로드가 실패합니다.
예제 코드 :
Serial.println ("Furnace overheating!!!");
솔루션 :
또는 (더 간단히) :
ATmega32u4가 기본 (및 유일한) 프로세서 인 보드는 업로드하기 까다로울 수 있습니다. 동일한 칩이 업로드를 처리하고 코드를 실행해야하기 때문입니다.
보드가 재설정 된 후 새로운 스케치가 업로드 될 때 작은 기회 창이 있습니다. 이 보드에 업로드하는 기술은 다음과 같습니다.
이전 스케치가 실행되기 전에이 작업을 수행하는 데 1 초 정도 밖에 걸리지 않습니다. 이 과정을 두 번 반복해야한다면 실망하지 마십시오. 정상입니다.
적어도 avrdude를 통해 스케치를 업로드한다고 가정하면 업로드 실패 (예 : 스케치 업 로더의 출력)에 대한 자세한 정보를 제공하여 여기에있는 사람들이 더 나은 도움을 줄 수 있도록하십시오.
Nick Gammon의 훌륭한 답변 외에도 스케치에서 느낌표를 검색하십시오. 스케치에 느낌표가 3 개 이상인 문자열이 포함되어 있으면 이전 버전의 Arduino Bootloader에서 이러한 느낌표를 다른 함수로 해석하여 업로드가 중지되므로 업로드에 실패합니다.
업로드를 중지하는 예 :
char* test = "This will stop the upload!!!";
Google 코드 문제를 참조하십시오 .
정적으로 인해 Arduino Uno 보드에 2x ATMega328P를 브릭 킹했습니다.
정전기가 TX 핀을 종료 한 것으로 보이므로 USB 케이블을 사용하여 프로그램을 다운로드 할 수 없습니다.
가장 쉬운 해결책은 마이크로 컨트롤러를 교체하는 것입니다. Arduino 부트 로더 ( 예 : Adafruit의 부트 로더)로 프로그래밍 된 새로운 ATMega328P DIP를 구입할 수 있으며 다시 갈 준비가되었습니다.
또는 AVRISPmkII 프로그래머를 사용하여 ATMega328P를 프로그래밍 할 수 있습니다. 당신이 할 때, Tx 핀을 제외한 모든 것이 잘 작동합니다.