아두이노 메가 부트로더 굽기 - adu-ino mega buteulodeo gubgi

이게 고급이라고 할 수 있을진 모르겠지만 부트로더 올리는 것이 나름 어려우므로 고급의 첫번째로 쓰게됬다.

먼저 아두이노의 부트로더는 간단하다.

아두이노 스케치에서 보드를 설정한 뒤 부트로더 굽기를 누르면 된다.

위의 그림처럼 하면 ATmega328P를 사용하는 아두이노 우노는 부트로더를 올리는 것은 쉽게 된다.

참고로 ATmega328이 아닌 ATmega328P인 것을 명심하자.

실수로 ATmega328을 꽂아 놓고 부트로더를 한다면 부트로더가 올라가지 않거나 동작하지 않는 것을 볼 수 있을 것이다.

단순히 P하나 차이지만 꽤나 칩자체는 차이가 나니 명심하자.

그럼 다시 주제로 돌아와 아두이노 메가에서 사용되는 ATmega2560의 부트로더에 대하여 이야기 해보자.

아두이노 스케치를 이용하면 보통 부트로더는 쉽게 된다.

하지만 아두이노 메가의 경우에는 잘 안되는 경우가 많다.

필자는 아두이노를 상당히 구버전을 사용해서(위의 그림과 같은...) 아예 ATmega2560에 부트로더가 되지 않는다.

그래도 요즘 버전은 된다고하니 참고하자.

참고로 필자가 구버전을 사용하는 이유는 너무 많은 라이브러리가 있어 귀찮기 때문에 그냥 사용하고 있다...;;

아무튼 ATmega2560에 부트로더가 올러가지 않을 때 사용하는 방법으로 대표적인 것은 hex 파일을 직접 업로드 하는 것이다.

hex 파일은 쉽게 생각해서 avr에서 코딩하는 파일로 생각하면 된다.

그래서 우리가 부트로더를 올리기 위해 사용할 프로그램은 아두이노가 아닌 ATmel Studio다.

예전에는 AVR Studio였지만 6.0버전 부터는 ATmel Studio로 바뀌고 아두이노 스케치도 프로그램 내에서 사용할 수 있어 요즘은 아두이노 스케치 대신 사용하는 경우도 많다.

그리고 현재 최신버전은 Atmel Studio 7.0이다.

6.0 번전이 상당히 무거워 컴퓨터를 버벅거리게 하는 원인이었기 때문에 상당히 빠르게 7.0이 나왔다.

그리고 7.0은 그렇게 많이 무겁지 않아 무리없이 컴퓨터에서 사용할 수 있다.

그럼 Atmel Studio 7.0을 컴퓨터에 설치하자.

Atmel Studio 7.0은 Atmel 홈페이지에서 무료로 받을 수 있으니 받도록 하자.

참고로 설치하는데는 시간이 좀 오래 걸린다.

설치를 했다면 실행하자. 실행하면 아래와 같은 그림을 볼 수 있다.

위와 같은 그림이 나타났다면 아두이노에 ISP 프로그래머를 꽂아 컴퓨터로 연결하자.

ISP는 RST SCK MOSI MISO 핀을 이용하는 프로그래머다.

필자가 사용한 ISP 프로그래머는 아래의 그림과 같은 것이다.

필자가 사용한 것은 이 ISP지만 보통은 아래 그림의 ISP를 많이 사용한다.

ISP를 연결 했다면 다시 ATmel Studio를 보자.

ATmel Studio에서 tool 탭을 누르자 그럼 위의 그림과 같이 나올 것이다.

여기서 Add Target을 눌르면 현재 연결되어 있는 ISP포트를 찾아 줄 것이다.

위의 그림처럼 사용하는 ISP의 종류를 선택하고(필자의 경우 STK500) 밑에는 연결되어 있는 포트를 선택하자.

그리고 Apply를 누른 뒤 다시 tool 탭을 보자.

이제는 본격적으로 hex파일 업로드를 위해 가보자.

tool 탭에서 Device Programming탭을 누르자.

그럼 창이 나타날 것이다.

창이 나타나면 Tool에서 STK500을 선택하고 Device에서 ATmega2560을 찾고 Apply를 누르자.

그럼 밑에 하얀화면에서 위와 같이 나타날 것이다.

다음으로 Read를 누르면 Device signature에 위와 같이 나타날 것이다.

위와 같이 나타나면 정상적으로 작동하는 것이다.

그럼 다음으로 왼쪽의 항목 중에 Fuse를 선택해보자.

퓨즈를 보면 위와 같이 나타난다.

여기서는 상당히 주의해야한다.

퓨즈를 잘못 설정하면 칩이 망가질 수도 있으니 말이다.

그럼 아래와 같이 설정하자.(20/05/10 수정)

따라서 설정하면 위의 그림의 붉은 상자 안처럼 0xFD 0xD8 0xFF가 나타나면 된 것이다.

Fuse 값은 실제론 아두이노가 설치된 폴더에 정의되어 있다.

(Arduino\hardware\arduino\avr 경로의 boards 파일)

위와 같이 설정 됬다면 Program 버튼을 눌러서 업로드하자.

위의 그림에서 보듯이 밑에 OK라고 뜨면 완료된 것이다.

다음으로 hex파일을 올려보자.

Memories 탭을 누르자.

메모리즈 텝을 누르면 위와 같이 나타난다.

여기서 Flash에서 ... 버튼을 누르자.

그럼 hex 파일을 찾는 창이 나타난다.

그럼 hex 파일을 찾아보자.

일반적으로 아두이노 스케치를 설치파일로 받았다면 아래와 같은 장소에 있을 것이다.

C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\stk500v2

압축파일로 받았다면 파일 안의 hardware, arduino, avr, bootloaders, stk500v2 순으로 들어가자.

위의 그림처럼 두가지 파일이 있을 것이다.

이 중에서 mega2560을 선택하자.

위의 그림처럼 나타날 것이다.

여기서 Program을 누르자.

그럼 퓨즈를 맞출 때처럼 밑에 업로드가 될 것이다.

그리고 이번에도 OK를 보았다면 이제 Lock bits 탭으로 가자.

이 탭에서도 Fuses 탭과 마찬가지로 잘 선택해야 한다.

위의 그림처럼 0x0F를 맞추고 Program을 누르자.(20/05/10 수정)

그럼 또 업로드가 되는 것이 보일 것이다.

여기까지하면 이제 ATmega2560이 아두이노 메가로 동작하게 되는 것이다.

아두이노 우노로 우노에 부트로더 재설치 하는 예제는 많이 있습니다.

하지만 아두이노 메가에 업로딩하는 예제는 쉽게 찾아보기가 힘듭니다.

사실 우노에 올릴 때와 매우 비슷합니다.

먼저 우노에 파일 - 예제 - ArduinoISP 를 업로딩합니다.

 

아두이노 메가 부트로더 굽기 - adu-ino mega buteulodeo gubgi

그 후 도구 - 보드 - Arduino Mega or Mega 2560 을 클릭합니다.

아두이노 메가 부트로더 굽기 - adu-ino mega buteulodeo gubgi

SPI 핀을 맞춰 끼워줍니다.

우노 - 메가

RESET - 53    

11 - 51

12 - 50

13 - 52

5v - 5v

gnd - gnd

로 배선을 해줍니다.

도구 - 부트로더 굽기를 눌러줍니다.

부트로더가 정상적으로 업로딩 됩니다.

Arduino IDE를 사용하기 위해서는 bootloader가 있어야 합니다.

아두이노 부트로더 구조

아두이노 부트로더에 대한 자세한 설명은 위 링크를 눌러보시면 나옵니다.

일반 ATMEGA 칩을 사면 부트로더가 없어서 Arduino에서 프로그래밍이 불가능 합니다.

즉  부트로더가 들어가 있어야 Arduino로 프로그램을 다운로딩 가능합니다.

부트로더는 Arduino - uno 보드만 있으면 쉽게 다운로딩 하실 수 있습니다.

우선 우노 보드를 하나 준비합니다.(다른보드도 가능합니다만 우노가 제일 구하기 쉬우니..)

우노를 연결한 뒤 Arduino를 열고 

파일-예제-ArduinoISP-ArduinoISP를 클릭합니다.

보드와 포트를 설정한 후 업로드를 눌러주세요.

이제 부트로더를 올릴 차례입니다.

아두이노 메가 부트로더 굽기 - adu-ino mega buteulodeo gubgi

왼쪽이 위에서 ArduinoISP 프로그래밍을 했던 보드이고 오른쪽은 부트로더를 올릴 보드입니다.

부트로더는 ICSP를 이용하는데 보드 가운데 6핀을 이용하셔도 됩니다.

다만 ISP보드의 10번을 타겟보드의 RESET에 연결하셔야 합니다.

왼쪽이 ISP보드, 오른쪽이 Target 보드입니다.

부트로더를올리실때는 타겟보드의 보드정보를 입력하고, 

프로그래머는 Arduino as ISP로 설정합니다.

그리고 부트로더 굽기를 클릭하면 잠시후 부트로더가 구워집니다.

시간이 걸린다지만 길어야 10초이내입니다.

부트로더 굽기가 완료되었습니다.

이번에는 메가를 구워봤습니다.

마찬가지로 ISP보드의 10번은 타겟보드인 메가의 RESET에 연결합니다.

실제 연결모습입니다.

그리고 타겟보드가 메가로 바뀌었으므로 변경해줍니다.

그리고 부트로더 굽기를 하면 정상적으로 구워집니다.

ATMEGA2560기반의 따로 제작한 보드에도 부트로더를 올려보니 정상적으로 올라갑니다.

부트로더를 올리신 후에는 기존 Arduino IDE를 이용하여 프로그램 코드를 올리시면 됩니다.