AVR Microcontroller

Atmel AVR개량된 하버드 아키텍쳐(Harvard Architecture)를 사용하여 1996년 Atmel사에서 개발된 단일칩  RISC마이크로컨트롤러이다. 출시 당시 AVR은 프로그램을 저장하기 위해 이용한 메모리 방식을 다른 마이크로컨트롤러와 달리ROM, EPROM 또는EEPROM을 사용하지 않고, 단일칩 플래시메모리를 사용한 최초의마이크로컨트롤러 중 하나로써 상용 또는 산업용으로 많이 사용된다. AVR 아키텍처는Norwegian Institute of Technology(NTH) 에서 Alf - Egil Bogen과 Vegard Wollan에 의해 개발되었고 그 특징은 다음과 같다.

  - RISC 구조로 명령어가 간단하며 동작 속도가 빠르다.
  - Pipe Line 구조로 1CLK 에 1 개의 명령을 수행한다. 16MHz Clock 사용시 약 16MIPS(Million Instruction Per Second)의 성능을 보인다.
  - 프로그램을 Flash memory 에 내장하여 원칩으로 시스템의 설계 가능하다.
  - EEPROM 을 내장하고 있어서 전기에너지가 차단되더라도 데이터 보관이 가능하다(비휴발성 기억).
  - UART, PWM(Pulse Width Modulation), WDT(WatchDog Timer), SPI(Serial Pheriperal Interface), TWI(Two-wire Interface) 등 다양한 내장 IO를 갖고 있다.
  - 복수의 8-비트 및 16-비트 타이머를 내장하고 있다.
  - 10 비트 ADC(Analog/Digital Converter)를 내장하고 있다. (ATMega128 의 경우 8 CH)   - ISP (In System Programming) 기능으로 간단히 간이형 개발 환경을 갖출 수 있고 시험이 용이하다.
  - 저전력 칩 설계로 저소비 전력이다.

AVR은 AVR UC3, AVR XMEGA, MegaAVR, TinyAVR 시리즈 등이 있으며 그 중, ATmega128/168이 교육용으로 가장 많이 사용된다.


기본 구조

AVR은 프로그램메모리와 데이터메모리 공간이 분리된 구조를 갖는 개량된 하버드 아키텍쳐를 갖고 있다.

AVR Processor Family

  • TinyAVR — RAM 이 없거나 128 정도 이고 500B-8KB 정도의 작은 플래쉬 메모리를 가지며 UART가 없고 IO핀 수 또한 적어서 간단한 어플리케이션에 적합하다.
    • 0.5–8 KB program memory
    • 6–32-pin package
    • Limited peripheral set
  • MegaAVR — 플래쉬 메모리와 램의 용량이 크고 핀 수 와 주변 장치가 많아서 복잡한 어플리케이션에 적합하다.
    • 4–256 KB program memory
    • 28–100-pin package
    • Extended instruction set (Multiply instructions and instructions for handling larger program memories)
    • Extensive peripheral set
  • XMEGA — the ATxmega series
    • 16–384 KB program memory
    • 44–64–100-pin package (A4, A3, A1)
    • Extended performance features, such as DMA, "Event System", and cryptography support.
    • Extensive peripheral set with DACs
  • Application specific AVR
    • megaAVRs with special features not found on the other members of the AVR family, such as LCD controller,USB controller, advanced PWM, CAN etc.
  • FPSLIC™ (AVR with FPGA)
    • FPGA 5K to 40K gates
    • SRAM for the AVR program code, unlike all other AVRs
    • AVR core can run at up to 50 MHz[5]
  • 32-bit AVRs
    새로운 32 비트, AVR32 아키텍처를 기반으로 2006 Atmel 마이크로 컨트롤러 발표되었다. 그들은 함께 다른 오디오 및 비디오 프로세싱 기능과 SIMD와 DSP의 지침이 포함되었다. 이 장치의 32 비트 제품군은 ARM의 기반 프로세서와 경쟁하기 위한 것이다. 명령은 다른 RISC를 코어 비슷하지만 원래 AVR이나 다양한 ARM 코어와 호환되지 않는다.
 

Device Architecture

Flash Memory EEPROM 및 SRAM이 하나의 칩에 통합되어 있다. 일부 장치는 추가 데이터 메모리 또는 메모리 매핑 장치를 추가할 수 있도록 다수의 병렬 외부 버스 옵션이 있다. 거의 모든 디바이스에 (초소형 TinyAVR 칩 예외) 시리얼 EEPROM 또는 플래시 칩을 연결하는 데 사용할 수 있는 시리얼 인터페이스가있다.

  Program Memory, Flash Memory(프로그램 메모리)

Program instructions are stored in non-volatile flash memory. Although they are 8-bit MCUs, each instruction takes one or two 16-bit words.

The size of the program memory is usually indicated in the naming of the device itself (e.g., the ATmega64x line has 64 KB of flash while the ATmega32x line has 32 KB).

There is no provision for off-chip program memory; all code executed by the AVR core must reside in the on-chip flash. However, this limitation does not apply to the AT94 FPSLIC AVR/FPGA chips.

Internal Data Memory: RAM(내부데이터 메모리)

The data address space consists of the register file, I/O registers, and SRAM.

Internal Register(내부 레지스터)

The AVRs have 32 single-byte registers and are classified as 8-bit RISC devices.

In most variants of the AVR architecture, the working registers are mapped in as the first 32 memory addresses (000016-001F16) followed by the 64 I/O registers (002016-005F16).

Actual SRAM starts after these register sections (address 006016). (Note that the I/O register space may be larger on some more extensive devices, in which case the memory mapped I/O registers will occupy a portion of the SRAM address space.)

Even though there are separate addressing schemes and optimized opcodes for register file and I/O register access, all can still be addressed and manipulated as if they were in SRAM.


XMEGA에서는 Working Register File은 데이터 주소 공간에 매핑되지 않으며  I/O는 주소 공간의 시작 부분에 시작 데이터 주소공간에 매핑된다. 또한, I/O를 레지스터에 데이터 주소 공간의 크기는 4096 바이트 (0000H-0FFFH)로  확장됬다. 이전 세대와 마찬가지로, 고속 I/O를 조작 지시 사항은 최초의 64에 도달할 수 있는 I/O를 레지스터 위치 (비트 지침에 대한 첫 번째 32 위치)는 I/O 레지스터를 이어 XMEGA 시리즈는 데이터 주소 공간 (1000H - 1FFFH)로 내부 EEPROM의 사상을 위해 선택적으로 사용할 수 있는 데이터의 주소 공간을 별도로 4096byte 범위를 설정 하였다. 실제 SRAM을은 2000H에서 시작,이 범위 이후에 위치하고 있다.

EEPROM(비휴발성 데이터 메모리)
대부분의 AVR 마이크로 컨트롤러는 반 영구적인 데이터 저장을 위한 내부 EEPROM이 있다. 전원이 제거되어도 플래시 메모리와 마찬가지로 EEPROM이 그 내용을 유지할 수 있다. AVR 아키텍처의 대부분 변종에서는 이 내부 EEPROM 메모리는 MCU 주소 지정 메모리 공간에 매핑되지 않는다. 그것은 오직 특별한 포인터 레지스터를 사용 및 /EEPROM이 액세스 많은 다른 내부 RAM보다 느리게 만드는 지침을 쓰기 읽기, 외부 주변 장치가 같은 방법으로 액세스할 수 있다. 그러나, SecureAVR (AT90SC) 가족 일부 장치는 데이터 또는 구성에 따라 프로그램 메모리에 특별한 EEPROM이 매핑을 사용한다. XMEGA 제품군은 또한 EEPROM 데이터 주소 공간으로 매핑 할 수 있다. EEPROM에 쓰기 때문에 사용횟수는 무제한이 아니다 - EEPROM이가 원하는 내용을 EEPROM이 주소의 내용을 비교해야만 내용을 변경해야하는 경우 100,000회 이상 반복 사용가능하다.

AVR Microprocessor의 동작

Microprocessor System을 설계, 제작하기 위해서는 전자회로, 논리회로, 컴퓨터의 동작원리, 프로그래밍 등 지식이 필요하다.

이 텍스트는 Atmel사의 AVR ProcessorAT90S2313)을 사용하여 간단한 예제 프로그램을 움직이면서 주로 컴퓨터의 내부 동작에 관해서 학습한다. 학습에는 트레이닝 보드, 라이터, 개발용 소프트(어셈블러와 라이트 소프트)를 사용한다. GCC컴파일러WinAVR을 인스톨하여 C언어로 프로그램을 개발 할 수 있다.

2. AVR Microprocessor의 내부 구조

여기서 사용하는 AT90S2313의 내부 구조는 아래의 그림과 같다.

사용자 삽입 이미지

3. 프로그램의 작성과 실행

 AVR마이크로 컴퓨터이 들어간 기기의 개발 프로세스는 아래와 같다.

4. 프로그램의 동작(1)

 다음의 소스 프로그램에서 어떻게 기계어가 만들어져, 그 기계어 프로그램이 컴퓨터 내부에 어떻게 동작하는지를 알아본다.

 소스 프로그램의 1행은 어셈블러에 대한 제어명령으로 여기서 사용되고 있는 AT90S2313에 관한 정보가 정의된「2313def.inc」라는 파일을 읽어 들인다.

 2행의「.cseg」은 어셈블러에 대한 제어명령으로 이하가 프로그램 코드 인 것을 선언하고 있다.

 3행 이후가 기계어가 되는 프로그램 부문이다.

 이 소스 프로그램은 어셈블러 소프트(ATMEL사의 avrasm32.exe)을 이용하여 어셈블하면 7워드(7×16bit)의 기계어 프로그램이 된다. 프로그램의 어느 부분이 어떻게 기계어가 되는지는 이하와 같은 리스트 파일(list.txt)로 확인할 수 있다.

실제 기계어 프로그램은
으로 이것에  약간의 추가 정보를 붙인 것이 기계어 파일(startup.hex)이다. 짧은 프로그램이면 어셈블러 소프트를 쓰지않고 자료를 보면서 기계어 프로그램을 직접 쓸 수도 있다. 기계어 프로그램은 라이터와 라이터 소프트를 써서 컴퓨터의 프로그램 메모리(Program Flash) 1K워드($000~$3FF번지)의 선두 부분($000~$006번지)에 씌여진다.(밑의 그림 참조)

 그러면 "씌여진 프로그램부터 명령이 하나씩 꺼내어져 실행되는 원리"를 상세하게 살펴보자.  동작의 원리는 어떤 컴퓨터에나 공통되는 기본적인 사항이기 때문에 꼼꼼히 봤으면 한다.

■ 000000 e00c LDI R16,0x0C

■ 000001 bb07 OUT DDRB,R16

■ 000002 e70f LDI R16,0x7F

■ 000003 bb01 OUT DDRD,R16

■ 000004 9ac2 SBI PORTB,2

■ 000005 98c3 CBI PORTB,3

■ 000006 cffd RJMP LOOP

■ 이후「SBI PORTB,2」「CBI PORTB,3」「RJMP LOOP」명령을 무한 반복 실행한다.

(복습)

 이하와 같이,  소스 프로그램 안의「CBI PORTB,3」을「SBI PORTB,3」로 변경하고, 동작을 확인하게 할 것. 이것은 PORTB의 bit3을 클리어 부터 세트로 변경하는 것을 의미하고 있다. 그 결과, 프로그램의 일련의 명령이 실행 될 때까지 꺼져있던 LED-B가 켜진다.

메모장을 사용하여startup.asm중의
「CBI PORTB,3」을
「SBI PORTB,3」로 변경
startup.asm의 어셈블
startup.hex을 트레이닝 보드에 써넣기
동작확인

 이어서, 소스 프로그램 안의「SBI PORTB,2」을「CBI PORTB,2」로 변경하고, 동작을 확인할 것. 이것은 PORTB의 bit2를 셋트부터 클리어로 변경하는 것을 의미하고 있다.


Instruction set

The AVR Instruction Set is more orthogonal than those of most eight-bit microcontrollers, in particular the 8051 clones and PIC microcontrollers with which AVR competes today. However, it is not completely regular:

Additionally, some chip-specific differences affect code generation. Code pointers (including return addresses on the stack) are two bytes long on chips with up to 128 KBytes of flash memory, but three bytes long on larger chips; not all chips have hardware multipliers; chips with over 8 KBytes of flash have branch and call instructions with longer ranges; and so forth.

The mostly-regular instruction set makes programming it using C (or even Ada) compilers fairly straightforward. GCC has included AVR support for quite some time, and that support is widely used. In fact, Atmel solicited input from major developers of compilers for small microcontrollers, to determine the instruction set features that were most useful in a compiler for high-level languages.

MCU speed

The AVR line can normally support clock speeds from 0-20 MHz, with some devices reaching 32 MHz. Lower powered operation usually requires a reduced clock speed. All recent (Tiny,Mega and Xmega, but not 90S) AVRs feature an on-chip oscillator, removing the need for external clocks or resonator circuitry. Some AVRs also have a system clock prescaler that can divide down the system clock by up to 1024. This prescaler can be reconfigured by software during run-time, allowing the clock speed to be optimized.

Since all operations (excluding literals) on registers R0 - R31 are single cycle, the AVR can achieve up to 1 MIPS per MHz, i.e. an 8 MHz processor can achieve up to 8 MIPS. Loads and stores to/from memory take 2 cycles, branching takes 2 cycles. Branches in the latest "3-byte PC" parts such as ATmega2560 are one cycle slower than on previous devices.

Development

AVRs have a large following due to the free and inexpensive development tools available, including reasonably priced development boards and free development software. The AVRs are sold under various names that share the same basic core but with different peripheral and memory combinations. Compatibility between chips in each family is fairly good, although I/O controller features may vary.

Seeexternal links for sites relating to AVR development.

Features

Current AVRs offer a wide range of features:

Programming interfaces

There are many means to load program code into an AVR chip. The methods to program AVR chips varies from AVR family to family.

ISP

6-pin ISP Connector

The In System Programming (ISP) programming method is functionally performed through SPI, plus some twiddling of the Reset line. As long as the SPI pins of the AVR aren't connected to anything disruptive, the AVR chip can stay soldered on a PCB while reprogramming. All that's needed is a 6-pin connector and programming adapter. This is the most common way to develop with an AVR.

The Atmel AVR ISP mkII device connects to a computers USB port and performs in-system programming using Atmel's software.

AVRDUDE (AVR Downloder UploaDEr) runs on Linux, FreeBSD, Windows, and Mac OS X, and supports a variety of in-system programming hardware, including Atmel AVR ISP mkII, Atmel JTAG ICE, older Atmel serial-port based programmers, and various third-party and "do-it-yourself" programmers.[7]

PDI

The Program and Debug Interface (PDI) is an Atmel proprietary interface for external programming and on-chip debugging of the device. The PDI supports high-speed programming of all Non-Volatile Memory (NVM) spaces; Flash, EEPOM, Fuses, Lock-bits and the User Signature Row. This is done by accessing the NVM Controller trough the PDI interface, and executing NVM Controller commands. The PDI is a 2-pin interface using the Reset pin for the clock input (PDI_CLK), and the dedicated pin for data input and output (PDI_DATA).[8]

High Voltage

High-Voltage programming is mostly the backup mode on smaller AVRs. An 8-pin AVR package doesn't leave many unique signal combinations to place the AVR into a programming mode. A 12 volt signal, however, is something the AVR should only see during programming and never during normal operation.

Parallel

Parallel programming is consider the "final resort" and may be the only way to fix AVR chips with bad fuse settings. Parallel programming may be faster and beneficial when programming many AVR devices for production use.

Bootloader

Most AVR models can reserve a bootloader region, 256 B to 2 KB, where re-programming code can reside. At reset, the bootloader runs first, and does some user-programmed determination whether to re-program, or jump to the main application. The code can re-program through any interface available, it could read an encrypted binary through an Ethernet adapter if it felt like it. Atmel has application notes and code pertaining to many bus interfaces.[9][10][11][12]

ROM

The AT90SC series of AVRs are available with a factory mask-ROM rather than flash for program memory.[13] Because of the large up-front cost and minimum order quantity, a mask-ROM is only cost-effective for high production runs.

aWire

aWire is a new one-wire debug interface available on the new UC3L AVR32 devices.

Debugging interfaces

The AVR offers several options for debugging, mostly involving on-chip debugging while the chip is in the target system.

debugWIRE

debugWIRETM is Atmel's solution for providing on-chip debug capabilities via a single microcontroller pin. It is particularly useful for lower pin count parts which cannot provide the four "spare" pins needed for JTAG. The JTAGICE mkII and the AVR Dragon support debugWIRE. debugWIRE was developed after the original JTAGICE release, and now clones support it.

JTAG

JTAG provides access to on-chip debugging functionality while the chip is running in the target system.[14] JTAG allows accessing internal memory and registers, setting breakpoints on code, and single-stepping execution to observe system behaviour.

Atmel provides a series of JTAG adapters for the AVR:

  1. The JTAGICE mkII replaces the JTAGICE, and is similarly priced. The JTAGICE mkII interfaces to the PC via USB, and supports both JTAG and the newer debugWIRE interface. Numerous 3rd-party clones of the Atmel JTAGICE mkII device started shipping after Atmel released the communication protocol.[15]
  2. The AVR Dragon is a low-cost (approximately $50) substitute for the JTAGICE mkII for certain target parts. The AVR Dragon provides in-system serial programming, high-voltage serial programming and parallel programming, as well as JTAG or debugWIRE emulation for parts with 32 KB of program memory or less.
  3. The JTAGICE adapter interfaces to the PC via a standard serial port. It is somewhat expensive by hobbyist standards at around US$300, although much more affordable than many other microntroller emulation systems. The JTAGICE has been EOL'ed, though it is still supported in AVR Studio and other tools.

JTAG can also be used to perform a Boundary Scan test[16], which tests the electrical connections between AVRs and other Boundary Scan capable chips in a system. Boundary scan is well-suited for a production line; the hobbyist is probably better off testing with a multimeter or oscilloscope.

(참고자료)

[1]wikipedia.org/wiki/Atmel_AVR
[2] http://sourceforge.net/projects/winavr/files/WinAVR/20100110/WinAVR-20100110-install.exe/download
[3] http://robot.tistory.com/47
[4] ATMEL사(AVR Microcomputer), http://www.atmel.com/products/AVR/
[5] http://siva.cc.hirosaki-u.ac.jp/usr/koyama/lecture/text/avr/part1.htm
[6] http://avrwiki.jpn.ph/wiki.cgi