본문 바로가기

스터디 상생 플러스 1 - 1 (MCU에 대한 지식 습득)

반응형

 

다 이해할 필요 없고, 외울 필요도 없습니다.

그냥 이런 게 있고, 이런 방식으로 동작되는구나 정도만 알아도 괜찮습니다.

 

 

MCU란 무엇인가요?

MCU는 Micro Controller Unit의 약자로

글자 그대로 "작은 것을 제어하는 유닛(칩)"입니다.

 

프로그램에 따라

LED를 On/Off하거나,

모터를 움직이게 하거나,

센서에서 값을 읽는 등의 제어를 하는 작은 칩이라고 생각하시면 됩니다.

쉽게 이해하자면

수업 중에서 다룬 아두이노를 생각하시면 될 것같습니다.

 

MCU? CPU?

대부분의 전자기기(냉장고, 드론, 로봇 등)에서 LCD나 모터, 센서들을 제어하는 기능을 담당하고 있습니다.

여기까지 읽었으면 컴퓨터의 CPU가 생각날 수 있는데요,

MCU에도 계산하고 처리하기 위한 CPU가 내장되어 있어요.

다만 컴퓨터의 CPU는 빠른 계산, 처리에 초점이 맞춰져 있다면,

MCU의 CPU는 모터를 제어하는 등의 제어에 초점이 더 맞춰져 있다고 생각하시면 편합니다.


컴퓨터와의 차이점이라면

컴퓨터는 게임하고 문서 작업하고 인터넷 쇼핑을 하고 등의 여러가지를 수행할 수 있다면,

MCU는 사용자가 프로그램을 입력한 순서대로만, 즉 정해진 일만 수행할 수 있어요.

 

정해진 일만 수행하기 때문에, 성능은 컴퓨터에 비해 떨어지지만, 

저전력, 저렴한 가격 등의 장점이 있으며,

또한 LED, 모터, 센서 등의 보다 쉽게 제어할 수 있다는(초점이 맞춰져 있다는) 최대의 장점이 있어요.

그렇기 때문에 많은 전자 제품에 들어있기도 합니다.


MCU의 물리적 구조는

MCU구조

위와 같은 구조를 가지고 있어요.

크게 나누면 메모리, CPU, 보조 모듈로 나눌 수 있습니다.

 

메모리는 프로그램, 변수, 데이터 등을 저장할 수 있는 기능이고

CPU는 처리를 담당합니다.

또한 봊보조 모듈은 다른 기기와의 소통을 위한 통신 기능,

센서를 사용하기 위한 ADC/DAC,

입력 출력을 제어하기 위한 I/O모듈,

정확한 동작을 위한 타이머/카운터 기능이 있습니다.

 

메모리

 

ROM

ROM 특징

ROM은 기본적으로

전원이 꺼져도 데이터를 유지시켜주는 저장장치 입니다.

MCU에서 ROM은 다시 Flash와 EEPROM으로 나눌 수 있습니다.

 


Flash ROM

우리가 다음에 작성할 프로그램이 저장될 장소입니다.

쉽게 설명하자면, 우리가 작성한 코드가 저장되어 있다고 생각하시시면 됩니다.

데이터를 읽을(Read) 때는 1Byte(8bits)씩 읽을 수 있지만,

데이터를 쓸(Write) 때는 64Byte, 128 Byte, 246Byte 등의

Block(또는 Page, Sector)이라고 부르는 단위대로 처리한다고합니다.

또한 EEPROM과 비교했을 때, 물리적인 구조가 간단하여 대용량으로 만들기에 적합하며,

위에서 설명한 Page Write기능 덕분에 대용량을 쓸 때는 비교적 빠르다는 장점이 있다고 합니다.

 

다만 물리적인 구조상 읽고 쓰는 횟수가 정해져 있기 때문에,

프로그램이 비교적 안정화 된 Firware등이 저장된다고 합니다.

 

아두이노 Flash Memory(Atmega328 Flash Memory)구조

Flash ROM 또는 Flash Memory는 왼쪽 그림과 같이 영역이 2개로 구분되어 있습니다.

사용자가 작성한 코드가 저장되어 있는 Application Flash Section과,

부트 프로그램이 저장되어 있는 Boot Flash Section으로 나눠져 있습니다.

오른쪽의 0x0000 ~ 0x3FFF은 각 데이터(프로그램, 코드)의 주소를 나타낸 것이며,

MAR(Memory Address Register)가 접근하는 주소입니다.(접근하여 해당 데이터를 가지고 온다.)

더보기
Atmega328 Flash Memory

Atmega328의 Flash Memory는 16K x 16(컴퓨팅 사고 때 배움)으로 구성되어 있기 때문에

주소는 16K개(0x0000 ~ 0x3FFF), 데이터의 크기는 16bits(= 2Bytes)이다.

 

위엣에서 설명했던 것처럼, 2개의 영역으로 나눠져 있다.

ROM이기 때문에 읽고/쓰는 횟수가 적다.(10,000번)

 

전공 지식을 잠깐 꺼내보면,

주소의 크기가가 16K, 즉 14bits이기 때문에

PC(Program Counter Register)의 크기가 14bits이다.


EEPROM

프로그램 코드는 아니지만, 전원이 꺼져도 유지될 필요가 있는 데이터가 저장되어 있는 장소입니다.

Flash Memory와는 다르게 읽기/쓰기 모두 1Byte단위로 할 수 있어 데이터 관리는 편합니다.

이러한한 특성 때문에 Flash Memory보다는는 대용량 쓰기가 느리다는 단점이 있습니다.

 


RAM

변수가 저장되어 있는 장소입니다.

ROM의 코드에 따라 RAM에 변수가 만들어지고, 지워지고합니다.

RAM은 ROM에 비해 빠른 읽기/쓰기가 가능하다는 장점이 있습니다.

하지만, 전원이 꺼지면 데이터가 지지워지며, 렌덤으로 데이터를 저장한다는 특징이 있습니다.

더보기
SRAM

Atmega328의 RAM은 위와 같은 공간을 갖는다.

32개의 Registers(0x0000 ~ 0x001F)

64개의 입출력 관련 Registers(0x0020 ~ 0x005F)

160개 외부 입출력 관련 Registers(0ㅌ=x0060 ~ 0x00FF)

변수가 저장 될 내부 SRAM(0x0100 ~ 0x08FF)

 

Figure 7-3.을 보면 어떤 방식으로 동작되는지 알 수 있다.

총 2사이클로 동작된다. ( -> CPI = 2 -> 빠른 응답 = 빠른 입출력 가능)

첫 번째 사이클에서는 주소를 계산한다.(ALU)

두 번째 사이클에서는 WR, RD 신호에 따라 데이터를 읽는다.

CPU

ALU

Arithmetic Logic Unit

모든 전자기기에서 산술 연산을 하는 요소로, 빠질 수 없는 요소입니다.

MCU내에서 이뤄지는 모든 연산과 데이터 입출력은 여기서 관리한다고 합니다.

3개의 입력과 2개의 출력이 있으며,

더 자세하게는 2개의 데이터 입력과 1개의 제어 입력,

1개의 데이터 출력과 1개의 출력 상태가 있습니다.

Atmega328 내부 블럭도

위의 그림을 보면

가운데 ALU가 있고,

2개의 입력으로 Registers가 들어가는 것을 확인할 수 있습니다.(제어 입력은 생력된듯)

출력은 Data Bus에 연결되어 필요에따라 PC, SRAM,EEPROM etc으로 연결된 것을 확인할 수 있습니다.

 

보조 모듈

보조 모듈은 본격적으로 제어를 하거나, 통신을 하는 등의 행위를 위한 요소들입니다.

기본적으로 통신 기능이 있으며, MCU에 따라 ADC/DAC, I/O, 타이머/카운터 등이 있습니다.


통신

다른 기기와의 데이터를 주고 받기 위한 장치입니다.

주로 MCU <-> MCU또는 MCU <-> 컴퓨터등의 데이터 주고 받음을 위해 사용합니다.

하드웨어적으로는는 다음과 같습니다.

블럭도

Data Bus를 통해 CPU는 TWI(I2C), SPI, USART 모듈과 데이터를 주고 받을 수 있는 것을 확인할 수 있습니다.

통신 관련된 사항은 추후 일정에서 자세하게 알아볼 예정입니다.


ADC/DAC

ADC는 아날로그 값을 디지털 값으로

DAC는 디지털 값을 아날로그 값으로 변환해주는 모듈입니다.

센서를 사용하 거나, 아날로그 제어를 필요로하는 기기를 사용하기 위해서 필수로 사용되는 모듈입니다.

마찬가지로 Data Bus를 통해 A/D Conv와 데이터를 주고 받을 수 있는 것을 확인할 수 있습니다.

(Atmega328에는 DAC가 없다.)

ADC도 추후에 자세하게 다룰 예정입니다.


I/O모듈

입력(Input)과 출력(Output)을 제어하기 위한 모듈입니다.

그림상으로 PORTB, C, D라고 나와 있으며, 마찬가지로 Data Bus를 통해 다른 모듈과 데이터를 주고 받습니다.

후에 자세하게 다룰 예정입니다.


타이머/카운터

MCU 내부에서 Clock를 제외한 모든 시간 제어를 위한 모듈입니다.

아날로그 출력을 할 때 사용할 수 있는 PWM(Pulse Width Modulation)이나 일정 주기마다  코드를 실행할 때 사용됩니다.

추후 자세하게 다룰 예정입니다.

반응형