2012년 6월 18일 월요일

arduino로 부트로더 굽기

Arduino Duemilanove 보드를 가지고 있으면 아래 링크의 방법대로 하면 바로 부트 로더를 구을 수 있다고 한다.
http://arduino.cc/en/Tutorial/ArduinoToBreadboard

하지만 Arduino Uno 보드를 가진 사람은 Uno 보드의 auto reset 기능때문에 이 방법대로 할 수 없다고 한다.
Uno 보드에서 부트로더를 굽는 방법은 http://arduino.cc/en/Tutorial/ArduinoISP 에 따라 하면 되는데 먼저 arduino  메뉴의 File > Examples > ArduinoISP 스케치를 업로드한다.
그 후에 만약 외부클럭 없이 브레드 보드 상에 ATmega328/168 칩만 놓고 작업할려면 (16MHz의 외부클럭을 사용하면 메뉴의 Tools > Boards 메뉴에서 "Arduino Duemilanove or Nano w/ ATmega328" 를 선택한다.) 


http://arduino.cc/en/uploads/Tutorial/breadboard.zip 를 받아서 압축을 풀면 boards.txt 파일이 있는데 그 내용을 복사해서 arduino-1.0\hardware\arduino\boards.txt 파일(윈도우의 경우)의 제일 뒤에 첨부한다. 절대 파일에 덮어 쓰면 안된다. 그럼 아래와 같이 Tools > Boards 메뉴에 추가된다. 이제 "ATmega328 on a breadboard (8 MHz internal clock)" 를 선택한다.

그리고 위에 링크 설명처럼 Uno보드의 auto reset 기능을 막기 위해 reset 과 ground 사이에   10uF 캐패시터를 연결해 주던지, reset과 5V 사이에 120 ohm를 연결해준다.
직접 연결하면 회로가 망가질 수 있으니 주의해야 한다. 120 ohm보다 조금 커도 상관은 없는 듯 하다. auto reset 기능이 정지되었는지 확인하는 방법은 Serial Monitor를 열어 놓아 serial port를 사용하면 부트로더가 실행되지 않을 것이다.

그리고 이제 마지막으로 Programmer > Arduino as ISP 를 선택한 후 Burn Bootloader 명령을 실행한다.
참고로 ATmega328p(저전력 설계된 칩)가 아니라 ATmega328 칩에 위와 같이 진행하면

Expected signature for ATMEGA328P is 1E 95 0F Double check chip, or use -F to override this ... 


위와 같은 메세지가 나타나며 작업이 진행이 안될 것이다. 스케치 IDE에서 ATmega328p만 인식을 하기 때문인데 이때는 arduino-1.0-windows\arduino-1.0\hardware\tools\avr\etc\avrdude.conf 파일에서
# ATmega328P 부분의

signature = 0x1e 0x95 0x0F; -> signature = 0x1e 0x95 0x14;


위와 같이 잠시 바꿔 놓고 스케치 IDE를 재실행하면 부트로더를 구울수 있다. 작업 완료 후에는 원상 복귀시켜놔야 한다.

이제 부트로더가 구워졌으면 이 칩에 USB-to-serial 변환기로 작업이 가능할 것이다.

댓글 2개:

  1. 안녕하세요, 포스팅 잘 읽었습니다. 그런데 혹시, ATmega2560 보드에 아두이노 부트로더를 올리는 것이 가능한지 궁금합니다.
    가능하시다면 메일로 설명 부탁드립니다ㅠ 감사합니다.^^

    답글삭제
  2. 작성자가 댓글을 삭제했습니다.

    답글삭제