아트멜 AVR
1. 개요
AVR은 노르웨이 과학 기술 대학교 학생들이 고안하고 아트멜에서 개발한 8비트 RISC 마이크로컨트롤러 아키텍처이다. 1997년에 소개되어 2003년까지 5억 개가 출하되었으며, 아두이노 플랫폼에 사용되면서 널리 알려졌다. AVR은 중앙 처리 장치와 플래시 메모리를 하나의 칩에 통합한 하버드 아키텍처의 변형으로, tinyAVR, megaAVR, AVR Dx, XMEGA, Application-specific AVR, FPSLIC, 32-bit AVRs 등 다양한 종류가 있다. AVR 칩은 ISP, JTAG, UPDI 등 여러 인터페이스를 통해 프로그래밍할 수 있으며, Atmel-ICE, AVRISP mkII, AVR Dragon 등 다양한 개발 도구와 개발 환경을 지원한다. 자동차, 아두이노, USB, 모터 제어 등 다양한 분야에 응용되며, FPGA 클론 형태로도 개발되고 있다.
| 설명: AVR 마이크로컨트롤러 제품군 |
| 아키텍처 | 8비트, 32비트 |
|---|---|
| 명령어 집합 아키텍처 | Atmel AVR |
| 개발사 | 아트멜 (현재 마이크로칩 테크놀로지에서 인수) |
|---|---|
| 출시일 | 1996년 |
| 코어 | 8비트 AVR 32비트 AVR32 32비트 AVR xmega |
|---|---|
| 메모리 | 플래시 메모리, EEPROM, SRAM |
| 클럭 속도 | 0-20 MHz (일반적인 AVR), 최대 32 MHz (AVR32) |
| 인터럽트 | 다중 내부 및 외부 인터럽트 소스 |
| 전력 소비 | 저전력 모드 지원 |
| 장점 | 사용 용이성 유연성 저렴한 비용 |
|---|---|
| 용도 | 임베디드 시스템 아두이노 기타 다양한 전자 제품 |
| 주요 제품군 | tinyAVR megaAVR XMEGA AVR32 FPSLIC |
|---|
| 프로그래밍 언어 | C 어셈블리어 |
|---|---|
| 개발 환경 | 아트멜 스튜디오 아두이노 IDE GCC |
| 관련 주제 | 마이크로컨트롤러 임베디드 시스템 아두이노 |
|---|
-
마이크로컨트롤러 -
마이크로프로세서
-
마이크로컨트롤러 -
ARM 아키텍처
ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다. -
명령어 집합 구조 -
ARM 아키텍처
ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다. -
명령어 집합 구조 -
PA-RISC
PA-RISC는 휴렛 팩커드에서 개발한 RISC 기반 명령어 집합 아키텍처로, HP 서버 및 워크스테이션에 사용되었으며 대용량 L1 캐시와 SIMD 명령어 확장 등의 특징을 가졌으나 아이테니엄 아키텍처로의 전환으로 단종되었다.
2. 역사
AVR 아키텍처는 노르웨이 과학 기술 대학교(NTH)의 학생이었던 알프-에길 보겐과 베가르드 월란이 고안하였다. 아트멜은 AVR이라는 이름이 약자가 아니며 특별히 무엇을 의미하는 것은 아니라고 말하지만, AVR이 Alf와 Vegard의 RISC 프로세서를 의미한다는 것이 일반적으로 받아들여지고 있다.
초기 AVR MCU는 당시 노르딕 VLSI(현재는 노르딕 반도체)라고 불리던 ASIC 회사에서 개발되었으며, 보겐과 월란은 트론헤임에서 학생으로 일하고 있었다. 이 기술이 노르딕 VLSI에서 아트멜로 판매되었을 때, 아트멜 노르웨이(Atmel Norway, 아트멜의 자회사)에서 보겐과 월란이 내부 아키텍처를 더욱 발전시켰다. 설계자들은 IAR 시스템즈의 컴파일러 작성자들과 긴밀히 협력하여 AVR 명령어 집합이 컴파일 고급 언어를 효율적으로 지원하도록 했다.
초기 AVR 제품군 중 하나인 AT90S8515는 40핀 DIP 패키지에 외부 멀티플렉싱된 주소 및 데이터 버스를 포함하여 8051 마이크로컨트롤러와 동일한 핀 배열을 가지고 있었다. RESET 라인의 극성은 반대였지만(8051은 액티브 하이 RESET을 가진 반면, AVR은 액티브 로우 RESET을 가짐), 그 외에는 핀 배열이 동일했다.
AVR 8비트 마이크로컨트롤러 아키텍처는 1997년에 소개되었다. 2003년까지 아트멜은 5억 개의 AVR 플래시 마이크로컨트롤러를 출하했다. 2005년에는 간단한 전자 프로젝트를 위해 개발된 아두이노 플랫폼이 출시되었으며, ATmega8 AVR 마이크로컨트롤러를 기반으로 한다.
3. AVR의 구성
AVR은 중앙처리장치와 소용량 플래시메모리가 하나의 IC에 집적되어 있다. 하버드 아키텍처(Harvard architecture)의 변형 형태로 프로그램과 데이터 메모리가 분리된 형태이며, 특수 명령어로 프로그램 데이터를 데이터 영역으로 읽을 수 있다. AVR은 수정된 하버드 구조를 가진 장치로, 프로그램과 데이터가 별도의 물리적 메모리 시스템에 저장되어 다른 주소 공간에 나타나지만, 특수 명령어를 사용하여 프로그램 메모리에서 데이터를 읽어올 수 있다.
AVR은 32개의 단일 바이트 레지스터를 가지며 8비트 RISC 장치로 분류된다.
플래시, EEPROM, 및 SRAM이 모두 단일 칩에 통합되어 대부분의 응용 분야에서 외부 메모리가 필요하지 않다.
데이터 주소 공간은 레지스터 파일, I/O 레지스터 및 SRAM으로 구성된다.
AVR의 주요 구성 요소는 다음과 같다.
| 명칭 | 설명 |
|---|---|
| R0-R25 | 범용 레지스터 R0-R15는 즉치 연산 불가 |
| X(R26,R27) | 인덱스 레지스터 X |
| Y(R28,R29) | 인덱스 레지스터 Y |
| Z(R30,R31) | 인덱스 레지스터 Z |
| PC | 프로그램 카운터 |
| SP | 스택 포인터 |
| SREG | 상태 레지스터 |
4. AVR의 종류
AVR은 기능과 성능에 따라 다음과 같이 여러 시리즈로 분류된다.
* tinyAVR - ATtiny 시리즈:
* 0.5–32kB 프로그램 메모리
* 6–32핀 패키지
* 제한된 주변 장치 세트
* 2016년 출시된 향상된 tinyAVR 0/1/2-시리즈는 megaAVR영어 0-시리즈와 동등하거나 더 나은 주변 장치, 이벤트 시스템, 향상된 AVRxt영어 명령어 세트(호출 타이밍 개선), 하드웨어 곱셈 기능 포함.
* megaAVR - ATmega 시리즈:
* 4–256kB 프로그램 메모리
* 28–100핀 패키지
* 확장된 명령어 집합 (곱셈 명령어, 큰 프로그램 메모리 처리를 위한 명령어)
* 확장된 주변 장치 세트
* 2016년 출시된 megaAVR영어 0-시리즈는 이벤트 시스템, 향상된 기능을 갖춘 새로운 주변 장치, 향상된 AVRxt영어 명령어 세트(호출 타이밍 개선) 기능 포함.
* AVR Dx - AVR Dx 제품군: HCI, 아날로그 신호 조절 및 기능 안전에 중점을 둔 여러 마이크로컨트롤러 시리즈.
* AVRffDxpp 형식의 부품 번호 (ff: 플래시 크기, x: 제품군, pp: 핀 수). 예: AVR128DA64 – 128k 플래시를 가진 64핀 DA-시리즈.
* CPU보다 빠르게 실행될 수 있는 비동기식 D형 타이머, 12비트 ADC, 10비트 DAC 포함.
* AVR DA-시리즈 (2020년 초): 높은 메모리 밀도, 정전식 터치 측정을 위한 통합 센서(HCI), 업데이트된 코어 독립형 주변 장치(CIPs) 및 아날로그 주변 장치, 외부 고주파 결정 없음.
* AVR DB-시리즈 (2020년 중후반): DA-제품군의 많은 기능 상속, 2개 또는 3개의 온칩 연산 증폭기, PORTC의 MultiVoltage IO영어 (MVIO), 외부 HF 크리스탈 지원.
* AVR DD-시리즈: 16-64 KiB 플래시, 2-8 KiB SRAM, 14-32핀 패키지, 내부 24MHz 오실레이터, 7-23 채널 130 kS/s 12비트 차동 아날로그-디지털 변환기(ADC, 증폭기 없음), 1개의 아날로그 비교기, 2개의 USART, 1개의 SPI, 1개의 듀얼 모드 TWI, Port C영어의 3개 또는 4개의 핀에서 Multi-Voltage Input/Output영어 (MVIO) 지원, 4개의 구성 가능한 사용자 지정 논리(CCL) 셀, 6개의 이벤트 시스템 채널.
* AVR EA-시리즈: 8–64k 플래시, 28–48핀 패키지, 내부 20MHz 오실레이터, 24-32 채널 130 kS/s 12비트 차동 아날로그-디지털 변환기(ADC), 최대 16x 게인의 프로그래밍 가능한 이득 증폭기(PGA), 2개의 아날로그 비교기, 3개의 USART, 1개의 SPI, 1개의 듀얼 모드 TWI, Multi-Voltage Input/Output영어 (MVIO) 없음, 4개의 구성 가능한 사용자 지정 논리(CCL) 셀, 6개의 이벤트 시스템 채널.
* XMEGA - ATxmega 시리즈:
* 16–384kB 프로그램 메모리
* 44–64–100핀 패키지 (A4, A3, A1)
* 확장된 성능 (DMA, "Event System", 암호화 지원)
* ADC를 사용한 광범위한 주변 장치 세트
* Application-specific AVR:
* megaAVR영어 기반, LCD 제어, USB 제어, 진화된 PWM, CAN 등 다른 AVR 계열에서 찾을 수 없는 모듈 추가.
* FPSLIC (AVR에 FPGA 추가):
* FPGA 5K ~ 40K 게이트
* 다른 AVR과는 달리, AVR 프로그램 코드를 SRAM에 저장
* AVR 코어는 50 MHz 이상에서도 실행
* 32-bit AVRs:
* 2006년에 Atmel영어은 32비트를 기반으로 AVR32 구조를 만듦.
* SIMD영어과 DSP 명령어 추가, 오디오와 비디오 처리 가능.
* 32비트 계열은 ARM과 경쟁 관계.
* 명령어 집합은 다른 RISC영어와 비슷하지만 원래 AVR이나 다양한 ARM 코어와 호환되지 않음.
교육용으로는 ATmega128이 가장 흔하게 쓰인다.
90S 시리즈를 기반으로 대용량화 및 I/O를 확장한 Mega 시리즈, 고기능화·저소비전력화·저전압 대응을 한 Tiny 시리즈가 있으며, 현재는 Mega 시리즈와 Tiny 시리즈를 주력으로 하지만, 90S 시리즈도 여전히 많이 사용된다.
* 90S 시리즈
* 90S1200
* 90S2313
* 90S4433
* 90S8515
* 90S8535
* Mega 시리즈
* Mega1280/2560
* Mega8/48/88/168/328
* Mega161/162
* Mega163/323
* Mega169/329/649
* Mega8515
* Mega8535
* Mega16/32
* Mega64/128
* Tiny 시리즈
| Tiny 시리즈 | I/O 핀 수 | 8bit 타이머 | 16bit 타이머 | PWM | Flash mem | EEPROM | SRAM |
|---|---|---|---|---|---|---|---|
| tiny2313 | 18 | 1 | 1 | 4 | 2kByte | 128Byte | 128Byte |
| tiny4313 | 18 | 1 | 1 | 4 | 4kByte | 256Byte | 256Byte |
| tiny4 | 4 | 0 | 1 | 2 | 512Byte | 0Byte | 32Byte |
| tiny5 | 4 | 0 | 1 | 2 | 512Byte | 0Byte | 32Byte |
| tiny9 | 4 | 0 | 1 | 2 | 1kByte | 0Byte | 32Byte |
| tiny10 | 4 | 0 | 1 | 2 | 1kByte | 0Byte | 32Byte |
| tiny13 | 6 | 1 | 0 | 2 | 1kByte | 64Byte | 64Byte |
| tiny20 | 12 | 1 | 1 | 3 | 2kByte | 0Byte | 128Byte |
| tiny24 | 12 | 1 | 1 | 4 | 2kByte | 128Byte | 128Byte |
| tiny26 | 16 | 2 | 0 | 4 | 2kByte | 128Byte | 128Byte |
| tiny40 | 18 | 1 | 1 | 2 | 4kByte | 0Byte | 256Byte |
| tiny44 | 12 | 1 | 1 | 4 | 4kByte | 256Byte | 256Byte |
| tiny45 | 6 | 2 | 0 | 6 | 4kByte | 256Byte | 256Byte |
| tiny85 | 6 | 2 | 0 | 6 | 8kByte | 512Byte | 512Byte |
5. 프로그래밍 인터페이스
AVR 칩에 프로그램 코드를 전송하는 방법은 여러 가지가 있다. AVR 제품군에 따라 프로그래밍 방법이 다르며, 대부분 RESET 라인을 사용하여 프로그래밍 모드로 진입한다. 칩이 실수로 해당 모드로 들어가는 것을 방지하려면 RESET 핀과 양극 전원 공급 장치 사이에 풀업 저항을 연결하는 것이 좋다.
* ISP (In-System Programming): SPI 방식에 Reset 신호를 추가한 방식으로, PCB에 납땜된 상태에서 프로그램 코드를 전송할 수 있는 AVR의 가장 일반적인 방법이다. 6핀 또는 10핀 커넥터와 프로그래밍 어댑터가 필요하다.
* Atmel-ICE: USB를 통해 PC에 연결되며, JTAG, PDI, aWire, debugWIRE, SPI, SWD, TPI, 및 UPDI(Microchip Unified Program and Debug Interface) 인터페이스를 지원한다.
* AVRISP mkII: USB를 통해 PC에 연결되며, USB에서 전원을 공급받는다. 대상 전원 상태를 나타내는 LED가 있다. 여러 유통업체에서 재고를 보유하고 있으며, 타사 복제품도 사용 가능하다.
* AVRDUDE (AVR Downloader/UploaDEr): 리눅스, FreeBSD, 윈도우, Mac OS X에서 실행되며, Atmel AVRISP mkII, Atmel JTAG ICE 등 다양한 하드웨어를 지원한다.
* 아두이노를 ISP 툴로 활용: AVRISP MKII와 같은 툴 없이 아두이노를 ISP 툴로 만들어 사용할 수 있다.
* PDI (Program and Debug Interface): XMEGA 장치의 외부 프로그래밍 및 온칩 디버깅을 위한 아트멜의 독점 인터페이스이다. 플래시, EEPROM, 퓨즈, 락 비트 및 사용자 시그니처 행을 포함한 모든 비휘발성 메모리(NVM) 공간의 고속 프로그래밍을 지원한다. 클록 입력(PDI_CLK)에 리셋 핀을 사용하고, 입력 및 출력을 위한 전용 데이터 핀(PDI_DATA)을 사용하는 2핀 인터페이스이다.
* UPDI (Unified Program and Debug Interface): 최신 ATtiny 및 ATmega 장치의 외부 프로그래밍 및 온칩 디버깅을 위한 단일 와이어 인터페이스이다. Atmel-ICE 및 PICkit 4는 UPDI 칩을 프로그래밍할 수 있다. jtag2updi 덕분에 아두이노를 사용하거나, TX 및 RX 핀을 1 kΩ 저항으로 단락시킨 표준 USB-UART 어댑터와 Microchip에서 제공하는 pymcuprog 유틸리티를 사용할 수도 있다.
* HVSP (High-voltage Serial Programming): 소형 AVR에서 주로 백업 모드로 사용되며, 리셋 핀이 퓨즈에 의해 비활성화된 일부 장치에서도 사용할 수 있다. 8핀 AVR 패키지에서 AVR을 프로그래밍 모드로 설정할 수 있는 고유한 신호 조합을 제공한다.
* HVPP (High-voltage Parallel Programming): AVR 칩에서 잘못된 퓨즈 설정을 수정할 수 있는 유일한 방법일 수 있다.
* 부트로더: 대부분의 AVR 모델은 부트로더 영역(256바이트 ~ 4KB)을 예약할 수 있으며, 이 영역에는 재프로그래밍 코드가 위치할 수 있다. 리셋 시 부트로더가 먼저 실행되어 재프로그래밍 여부를 결정한다. 아트멜은 다양한 버스 인터페이스와 관련된 애플리케이션 노트와 코드를 제공한다.
AVR의 대표적인 개발 환경으로는 Atmel Studio가 있으며, 마이크로소프트 Visual Studio를 기반으로 만들어져 UI가 매우 유사하다.
6. 명령어 집합
AVR 명령어 집합은 대부분의 8비트 마이크로컨트롤러보다 직교적이지만, 완전히 규칙적이지는 않다. C 언어에서의 프로그래밍을 고려하여 설계된 16비트 고정 길이 명령어이다.
AVR 명령어 집합은 메모리 접근은 로드와 스토어만 가능하며, 연산은 레지스터와 레지스터 또는 레지스터와 즉치값 간에만 가능하다. 즉치값 감산 및 캐리 부가 감산을 지원하며, Mega 시리즈는 곱셈 명령어를 지원한다.
| 특징 | 설명 |
|---|---|
| 명령어 길이 | 16비트 고정 길이 |
| 메모리 접근 | 로드/스토어 방식 |
| 연산 | 레지스터-레지스터 또는 레지스터-즉치값 연산만 가능 |
| 기타 | 즉치값 감산, 캐리 부가 감산 지원, Mega 시리즈는 곱셈 명령어 지원 |
AVR은 하버드 아키텍처이다.
7. 개발 환경
AVR은 저렴한 개발 보드와 무료 개발 소프트웨어를 사용할 수 있어 많은 사용자를 확보하고 있다.
AVR의 대표적인 개발 환경인 Atmel Studio는 마이크로소프트 Visual Studio를 바탕으로 만들어져 사용자 인터페이스(UI)가 매우 유사하며, 현재 7.0 버전까지 나와있다.
GNU 컴파일러 컬렉션(GCC)도 지원하므로 저렴하게 개발 환경을 구축할 수 있다. AVRDUDE (AVR Downloader/UploaDEr)는 리눅스, FreeBSD, 윈도, OS X에서 실행되며 다양한 하드웨어(Atmel AVR ISP mkII, Atmel JTAG ICE)로 프로그래밍을 할 수 있다.
MCS 일렉트로닉스사에서는 4KB(2K워드)까지 코드 생성이 가능한 BascomAVR이라는 BASIC 기반의 컴파일러를 무료로 시험 사용할 수 있도록 공개하고 있다.
아두이노 IDE를 사용하여 C/C++ 기반으로 프로그래밍할 수도 있다. AVRISP MKII와 같은 툴 없이 아두이노를 ISP 툴로 만들어 사용할 수도 있다.
8. 응용 분야
AVR은 자동차, 보안, 안전, 파워트레인 및 엔터테인먼트 시스템 등 다양한 분야에서 사용된다. BMW, 다임러-크라이슬러, TRW에서 사용된 예가 있다.
아두이노 피지컬 컴퓨팅 플랫폼은 ATmega328 마이크로컨트롤러를 기반으로 한다. (Diecimila 이전 보드 버전에서는 ATmega168 또는 ATmega8 사용) 더 많은 핀아웃과 메모리 기능을 갖춘 ATmega1280 및 ATmega2560도 아두이노 메가 플랫폼 개발에 사용되었다. 아두이노 보드는 자체 언어와 IDE와 함께 사용하거나, 표준화되고 널리 사용 가능한 AVR 플랫폼으로서 C, 어셈블러 등 더 전통적인 프로그래밍 환경과 함께 사용할 수 있다.
USB 기반 AVR은 마이크로소프트 엑스박스 핸드 컨트롤러에 사용되었다. 컨트롤러와 엑스박스 간의 연결은 USB이다.
AVR 기반 마이크로컨트롤러 보드는 수많은 회사에서 취미, 로봇 제작, 실험 및 소규모 시스템 개발자가 사용할 수 있도록 생산한다. Cubloc, gnusb, BasicX, Oak Micros, ZX Microcontrollers, 및 myAVR 등이 있다. 또한, 유사한 사용자를 지원하는 대규모 아두이노 호환 보드 커뮤니티도 있다.
대한민국에서는 AVR이 전자 공학, 컴퓨터 공학 교육 및 각종 경진대회에서 널리 사용되고 있다.
9. FPGA 클론
FPGA가 오픈 소스 커뮤니티에서 인기를 얻으면서, AVR 명령어 집합과 호환되는 오픈 소스 프로세서들이 개발되기 시작했다. OpenCores 웹사이트에는 다음과 같은 주요 AVR 클론 프로젝트들이 나열되어 있다.
| 프로젝트명 | 언어 | 설명 |
|---|---|---|
| pAVR | VHDL | 원래 AVR 프로세서에는 없는 기술(더 깊은 파이프라인 등)을 구현하여 가장 빠르고 기능이 풍부한 AVR 프로세서를 만드는 것을 목표로 한다. |
| avr_core | VHDL | ATmega103과 최대한 가깝게 만드는 것을 목표로 한다. |
| Navré | Verilog | 모든 클래식 코어 명령을 구현하고 고성능과 낮은 자원 사용을 목표로 한다. 인터럽트는 지원하지 않는다. |
| softavrcore | Verilog | AVR5까지의 AVR 명령어 집합을 구현하고, 인터럽트(선택적인 자동 인터럽트 승인), 절전 모드를 통한 절전, 일부 주변 인터페이스 및 하드웨어 가속기(UART, SPI, 순환 중복 검사 계산 장치, 시스템 타이머 등)를 지원한다. 코어 + 주변 장치 활용에 대한 예시로 전체 기능을 갖춘 FreeRTOS 포트도 패키지 내에서 사용할 수 있다. |
| CPU 강의 | VHDL | Dr. Jürgen Sauermann이 작성하였으며, 완전한 AVR 기반 시스템 온 칩 (SoC) 설계 방법을 자세히 설명한다. |