아두이노와 AVR의 차이

2019. 5. 30. 21:18임베디드/ATmega128

1. 프로그램 다운방식

- ATmega128 플래시 메모리는 프로그램 영역, 부트로더 영역인 두 영역으로 나뉜다. 프로그램 메모리는 사용자가 작성한 프로그램이 설치되는 위치며, 부트로더 영역은 UART 통신을 통해 프로그램을 다운로드하기 위해 필요한 특별한 프로그램인 부트로더가 설치되는 영역이다. 

 

아두이노에서 사용하는 부트로더는 마이크로컨트롤러가 리셋되는 경우 UART 통신을 통해 프로그램 다운로드를 시도한다. 다운로드할 프로그램이 존재하지 않으면 애플리케이션 프로그램 영역에 설치된 프로그램을 실행한다. ATmega128의 하이 퓨즈 비트 중 0번 비트인 BOOTRST 비트는 마이크로컨트롤러가 리셋되는 경우 부트로더 영역부터 시작할 것인지, 애플리케이션 프로그램 영역부터 시작할 것인지 선택하는 비트다. 즉 부트로더를 사용하기 위해서는 하이 퓨즈의 BOOTRST 비트가 프로그램 된 상태여야 한다 이외에도 1KB~8KB까지 부트 영역의 크기를 결정할 수 있는 비트들이 있는데, 주의할 점은 부트로더를 사용할 경우에는 애플리케이션 프로그램 영역이 줄어든다는 점이다. 

 

2. 리셋회로 하드웨어

- 부트로더가 설치되었다고 한들 리셋회로의 하드웨어적인 뒷받침되어야 한다. 부트로더 지원 리셋회로는 ATmega128 보드와 커패시터를 연결하는 방법이 다르다. 아래 그림 중 왼쪽이 일반적인 노이즈 제거용 리셋회로이며, 오른쪽은 리셋 후 부트로더로 넘기게 하는 회로방식이다

 

리셋회로

3. 프로그램 작성 방식

- 마이크로컨트롤러를 위한 프로그램은 흔히 펌웨어라고 하는 반면, 아두이노를 위한 프로그램은 스케치라고 한다. 보다 쉽게 프로그램을 작성하고 설치하여 간단히 실행시켜 볼 수 있는 방법이 필요하다. 시리얼 방식의 프로그램 다운로드 역시 이 중 하나에 해당한다. 레지스터의 이름을 기억하고 비트를 조작하는 것은 만만치 않은 일이다. 따라서 흔히 사용하는 기능의 경우 레지스터 조작 작업을 추상화한 라이브러리 형태로 제작하여 간단히 함수를 호출함으로써 원하는 기능을 사용하도록 지원한다.

 

 구조에서도 그 차이를 보인다. main으로 이뤄진 마이크로컨트롤러 프로그램 구조와 달리 아두이노는 setup과 loop라는 별개의 함수로 분리되어 있다. 다만 모양이 바뀌었을 뿐, 사실 아두이노에도 main 함수는 존재한다. 다만 사용자가 신경쓰지 않도록 감추어져 있을 뿐이다