아두이노 부팅불가
굴러다니던 아두이노 우노를 이용하여 개발하려고 하니 부트로더가 이상한지 다음과 같은 로그만 계속뜬다.
avrdude: stk500_recv(): programmer is not responding
일단 해당 메시지가 떴을때, 다음의 사항을 살펴보자.
1. USB 연결시 driver 가 잡히는지 확인해본다.
해당 메시지는 데이터를 아두이노에게 데이터를 전달할수 없다는 메시지다. 즉, 잘못된 포트를 정해줘도 위와같은 메시지가 뜬다.
그러므로 일단 포트가 제대로 잡히는지부터 확인한다.
2. 해당 포트를 직접 열어본다.
포트가 잡혔다면, 터미널 프로그램으로 해당 포트를 직접열어보자. 만약 열린후에는 막~~~!! 키보드를 쳐보자.. 그럼 아두보드의 uart RX 쪽 led 가 깜박일껏이다.
그래도 안되면..
1,2번 사항에서 모두 이상없음이 확인되었으면, 부트로더가 지워지거나 깨진것이다.
부트로더가 깨졌으면, 점퍼를 날리거나 ISP 등을 이용하여 물리적으로 조치를 취한후 복구해야한다. avrfuse 를 이용한 펌웨어 다운로드 등의 방법이 있다고 주장하시는 분들이 계시는데 내가 알기론 불가능;;
갖고있는 아두이노의 정보확인
일단, 갖고있는 보드의 CPU 정보와 부트로더파일, 퓨즈 비트등에 대한 정보들이 필요하다.
다음의 경로의 파일을 열어보자.
\hardware\arduino\avr\board.txt
위의 파일에 보면, 자신의 갖고있는 보드의 모든 정보가 들어가있다.
예를들어 아두이노우노의 경우 다음과 같이 정의되어있다.
uno.bootloader.tool=avrdude
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0x05
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.bootloader.file=optiboot/optiboot_atmega328.hex
딱 보면, 뭐가 뭔지 알수있다. 위의 정보대로 ISP 를 이용하여 구우면된다.
ISP 로 부트로더 다운로드
아두이노 우노를 예를들어 설명한다.
- CPU 설정 : AVR328P
- 부트로더 파일 : optiboot/optiboot_atmega328.hex
위와같이 설정하고 그냥 구우면 끝이다!!
퓨즈비트의 설정
일단 만약 부트로더 다운로드 한다음에도 뭔가 동작을 하지 않는다 싶을때만 퓨즈비트 설정을 하는것이 좋다고 생각한다.
퓨즈비트 잘못만지면, 살리는것이 너무너무 어렵기 때문에...ㅠㅠ
퓨즈비트는 다음과 같이 설정한다.
- LOW : 0xFF
- HIGH : 0xDE
- EXT : 0x05
결론
아두이노를 본격적으로 하고싶다면, USB ISP 하나정도는 갖고있자.
이래저래 갖고놀다보면, 부트로더도 날리는 일도 가끔있다. 그럴때마다 아두이노 to 아두이노 방식으로 점퍼를 날려 부트로더를 굽느니, 그냥 간단하게 USB ISP 를 이용하자.
만원조금넘는 가격이면 산다. ;; 게다가 굳이 아두이노 말고도 AVR 보드에서 쓸일이 꽤 있으니 하나정도는 갖고있자. ㅋㅋ;;