MCU란 무엇인가 — 칩 하나에 담긴 작은 컴퓨터

마이크로컨트롤러(MCU)의 내부 구성, MPU와의 차이점, 베어메탈 제어 구조와 펌웨어 개발 흐름을 알아봅니다.

무료 공개 · 최근 수정

화면 없는 전자제품 안에서도 전용 프로그램이 쉼 없이 돌아간다

전자레인지의 버튼을 누르거나 세탁기 코스를 고르면 화면이 없어도 기계가 모터와 밸브를 순서대로 움직입니다. 컴퓨터 모니터나 마우스가 연결되어 있지 않아도 기기 내부의 작은 반도체 칩 안에서 제어 프로그램이 쉼 없이 돌아가고 있기 때문입니다.

코딩을 처음 배울 때 아두이노 보드에 코드를 올리고 발광 다이오드(LED)를 깜빡여 본 경험은 흔합니다. 하지만 하드웨어 채용 공고나 실무 개발 문서에서 "MCU 펌웨어 개발"이라는 단어를 마주하면 익숙한 아두이노와 어떻게 연결되는지 혼란을 겪곤 합니다. PC 프로그램을 짤 때처럼 운영체제가 있는지, 라즈베리파이와는 무엇이 다른지 감을 잡기도 쉽지 않습니다.

마이크로컨트롤러의 기본 개념과 내부 구조를 살펴보고, PC 프로세서와의 차이점부터 펌웨어가 하드웨어를 직접 다루는 개발 원리까지 한 번에 정리합니다.

MCU는 연산·메모리·입출력 회로를 단일 칩에 통합한 컴퓨터다

마이크로컨트롤러는 연산을 담당하는 CPU 코어와 프로그램을 담는 플래시 메모리, 실행 변수를 다루는 SRAM, 외부 장치와 신호를 주고받는 주변장치 회로를 하나의 실리콘 칩에 모두 담은 집적회로입니다. 작은 칩 하나만으로 독립적인 컴퓨터 역할을 온전히 수행할 수 있어서 흔히 "원칩 컴퓨터"라고 부릅니다.

이처럼 하나의 칩 안에 제어에 필요한 핵심 부품을 모두 집어넣은 소형 컴퓨터를 마이크로컨트롤러(MCU; Microcontroller Unit)라고 부릅니다.

[참고] 단일 칩 마이크로컴퓨터의 등장 배경

1970년대 초반에는 중앙처리장치(CPU)와 메모리, 입출력 칩이 회로 기판 위에 따로 분리되어 있었습니다. 부품 수가 늘어나면 기기 부피가 커지고 전력 소모와 제조 단가가 크게 늘어났습니다. 반도체 제조 기술이 발전하면서 이 부품들을 하나의 실리콘 칩에 집적해 크기와 원가를 대폭 줄인 MCU가 탄생했습니다.

마이크로컨트롤러 내부에는 독립적인 컴퓨터 시스템을 구성하는 네 가지 핵심 부품이 들어 있습니다.

  1. CPU 코어: 플래시 메모리에서 기계어 명령어를 읽어 와 해석하고 계산을 수행하며 기기 전체의 신호 흐름을 지휘합니다.
  2. 플래시 메모리: 전원이 꺼져도 지워지지 않는 비휘발성 저장 공간입니다. 개발자가 작성해 컴파일한 실행 바이너리 코드가 이곳에 기록됩니다.
  3. SRAM: 전원이 켜져 있는 동안 실행 중인 변수와 함수 호출 스택을 임시로 저장하는 고속 휘발성 메모리입니다.
  4. 내장 주변장치: 물리 핀 전압을 바꾸는 GPIO, 정확한 시간을 재고 펄스를 만드는 타이머, 다른 장비와 통신하는 UART·SPI·I2C, 센서 아날로그 전압을 디지털 숫자로 바꾸는 ADC 등이 포함됩니다.

마이크로컨트롤러 칩 내부의 핵심 구성 블록과 칩 외부 물리 부품 사이의 연결 관계를 도면으로 확인합니다.

단일 실리콘 칩 내부에 CPU 코어와 메모리 및 주변장치가 통합되고 외부 부품과 신호를 주고받는 블록 구조

그림: MCU 단일 칩 내부 블록과 외부 입출력 부품의 연결 구조

도면의 큰 테두리는 하나의 실리콘 반도체 칩입니다. CPU 코어는 내부 버스를 통해 플래시 메모리에서 명령어를 가져오고, 내장 주변장치의 제어 통로에 접근합니다. 내장 주변장치는 칩 가장자리의 물리 핀을 거쳐 외부 회로의 센서에서 신호를 읽거나 LED와 모터에 구동 전압을 내보냅니다.

마이크로프로세서는 범용 연산에 집중하고 MCU는 물리 장치 제어를 전담한다

PC나 스마트폰에 들어가는 프로세서는 복잡한 운영체제와 수많은 응용 프로그램을 빠르게 실행하는 고성능 연산이 주된 목적입니다. 반면에 마이크로컨트롤러는 적은 전력으로 특정 하드웨어를 실시간으로 정밀하게 제어하는 일에 특화되어 있습니다.

PC의 CPU처럼 메모리와 주변장치가 칩 외부에 분리되어 있고 대규모 연산에 특화된 중앙처리장치를 마이크로프로세서(MPU; Microprocessor Unit)라고 부릅니다.

마이크로프로세서는 기가헤르츠(GHz) 단위의 빠른 클럭으로 동작하며 기가바이트(GB) 단위의 외부 RAM과 SSD 저장장치가 필요합니다. 리눅스나 윈도우 같은 거대한 운영체제를 띄우는 데 수십 초의 부팅 시간이 걸립니다. 반면에 MCU는 수 메가헤르츠(MHz)에서 수백 메가헤르츠 수준으로 동작하고, 내부 메모리도 수십 킬로바이트(KB)에서 수 메가바이트(MB)에 불과합니다. 하지만 전원을 켜자마자 1밀리초도 안 되어 동작을 시작하며, 소모 전력도 밀리와트(mW)나 마이크로와트(µW) 단위로 매우 낮습니다.

비교 항목마이크로컨트롤러 (MCU)마이크로프로세서 (MPU / PC)
주요 목적특정 물리 장치 제어 및 실시간 반응범용 연산 및 다중 프로그램 실행
CPU 클럭대략 8 MHz ~ 480 MHz대략 1.5 GHz ~ 5.0 GHz
RAM 크기대략 2 KB ~ 1 MB (칩 내장)대략 2 GB ~ 64 GB (외부 장착)
저장 장치대략 16 KB ~ 2 MB 플래시 (칩 내장)대략 32 GB ~ 2 TB SSD/eMMC (외부 장착)
운영체제운영체제 없음(베어메탈) 또는 소형 RTOSLinux, Windows, macOS 등 범용 OS
부팅 시간수 마이크로초 ~ 수 밀리초 (즉시 실행)수 초 ~ 수십 초
소비 전력대략 수 밀리와트 ~ 수백 밀리와트대략 수 와트 ~ 수백 와트
대표 하드웨어Arduino Uno(ATmega328P), STM32F401Raspberry Pi 4(BCM2711), PC 데스크톱

라즈베리파이 4와 아두이노 우노를 비교해 보면 차이가 분명하게 드러납니다. 라즈베리파이 4는 BCM2711 마이크로프로세서를 중심으로 외부에 LPDDR4 RAM과 마이크로SD 카드를 연결해 리눅스를 구동합니다. 반면에 아두이노 우노에 탑재된 ATmega328P 칩은 16 MHz CPU와 2 KB SRAM, 32 KB 플래시 메모리를 칩 하나에 품고 즉시 물리 핀을 제어합니다. 복잡한 인공지능 영상 분석이나 대용량 웹 서비스에는 MPU가 적합하지만, 모터 회전각 제어나 배터리 구동 센서 장치에는 MCU가 알맞습니다.

전원이 켜지면 운영체제 없이 즉시 무한 루프 코드를 실행한다

마이크로컨트롤러는 전원이 들어오거나 리셋 신호가 해제되는 즉시 정해진 시작 번지로 건너뛰어 프로그램을 곧바로 실행합니다. 일반 PC처럼 사용자가 프로그램을 마우스로 실행하고 종료할 때까지 기다려 주는 운영체제가 기본적으로 없습니다.

이처럼 운영체제의 중개 없이 하드웨어 위에서 프로그램 코드가 직접 실행되는 구조를 베어메탈(Bare-metal) 환경이라고 부릅니다.

MCU가 켜지면 하드웨어 리셋 회로가 CPU의 프로그램 카운터(PC) 레지스터에 플래시 메모리의 리셋 벡터 주소를 넣습니다. 초기화 코드가 스택 포인터를 설정하고 전역 변수 메모리를 정리한 다음 곧바로 개발자가 작성한 main() 함수를 호출합니다. main() 함수 안에는 반드시 영원히 끝나지 않는 while (1) 반복문이 들어 있습니다. 이 무한 루프가 곧 기기의 일생입니다.

// 범용 마이크로컨트롤러 펌웨어의 기본 골격 예시
#include <stdint.h>
 
void system_clock_init(void);
void gpio_init(void);
uint8_t read_button_state(void);
void set_led_output(uint8_t state);
 
int main(void)
{
    // 1단계: 하드웨어 클럭 및 내부 주변장치 초기화
    system_clock_init();
    gpio_init();
 
    // 2단계: 전원이 꺼질 때까지 영원히 반복하는 제어 루프
    while (1) {
        if (read_button_state() == 1) {
            set_led_output(1); // 버튼이 눌리면 LED 켜기
        } else {
            set_led_output(0); // 버튼을 떼면 LED 끄기
        }
    }
 
    // MCU 프로그램은 절대로 반환되지 않으므로 여기에 도달하지 않습니다.
    return 0;
}

예시 출력: 전원을 인가하면 버튼 입력 핀의 전압 변화를 1밀리초 미만의 지연으로 감지하여 LED 출력 핀에 즉시 3.3V 구동 전압을 출력합니다.

만약 main() 함수가 while (1) 루프 없이 끝나 버리면 CPU는 쓰레기 메모리 번지로 튕겨 나가 비정상 동작을 일으킵니다. 따라서 모든 임베디드 펌웨어는 초기화 단계 이후 무한 루프 안에서 센서 값을 읽고 판단을 내려 구동 신호를 출력하는 순환 구조를 가집니다.

펌웨어 개발은 데이터시트를 읽고 레지스터를 직접 조작하는 일이다

임베디드 펌웨어 개발은 소프트웨어 알고리즘을 짜는 것에 그치지 않고 반도체 회로의 스위치에 해당하는 레지스터를 설정해 물리 세계를 제어하는 일입니다. 모니터 화면에 글자를 띄우는 대신 전압을 올리고 펄스 주파수를 조절해 모터와 통신 칩을 움직입니다.

CPU가 주변장치 회로에 명령을 내리거나 현재 상태를 읽어 오기 위해 사용하는 특수 메모리 칸을 레지스터(Register)라고 부릅니다.

실무에서 MCU 개발자가 거치는 과정은 네 단계로 요약됩니다.

  1. 데이터시트 분석: 칩 제조사가 제공하는 수백~수천 쪽 분량의 설명서를 읽고 사용할 핀 번호와 메모리 맵 주소, 레지스터 비트 배치 규격을 확인합니다.
  2. 레지스터 설정: C 언어 포인터나 제조사 제공 헤더 파일을 사용해 클럭을 공급하고 핀 모드를 입출력으로 설정하는 코드를 작성합니다.
  3. 플래시 메모리 기록: 컴파일러가 만든 바이너리 기계어 파일을 SWD나 JTAG 같은 디버깅 케이블을 통해 MCU 내부 플래시 메모리에 구워 넣습니다.
  4. 온칩 디버깅: 전원을 넣고 오실로스코프나 로직 아날라이저로 물리 핀의 파형을 측정하며 하드웨어 오류를 수정합니다.

기본적인 디지털 입출력부터 고속 통신과 정밀 모터 제어까지, MCU 하드웨어를 다루는 핵심 기술은 다음 세 가지 주제로 이어집니다.

  • 메모리 맵과 GPIO 제어: 핀의 전압을 3.3V나 0V로 바꾸려면 먼저 클럭을 켜고 주소를 찾아 비트를 써야 합니다. 메모리 주소 체계와 입출력 레지스터의 세부 조작법은 /wiki/mcu-register-gpio-control 문서에서 자세히 다룹니다.
  • 인터럽트와 우선순위: 무한 루프 안에서 센서를 매번 검사하는 폴링 방식은 중요한 순간을 놓치기 쉽습니다. 외부 신호가 들어왔을 때 하던 일을 즉시 멈추고 반응하는 하드웨어 인터럽트 원리는 /wiki/mcu-interrupt-nvic-priority 문서에서 확인할 수 있습니다.
  • 하드웨어 타이머와 PWM: CPU가 일일이 시간을 재지 않아도 타이머 회로가 스스로 일정한 주파수와 비율의 사각파를 생성합니다. 모터 속도와 LED 밝기를 조절하는 기술은 /wiki/mcu-timer-pwm-duty 문서에서 깊이 있게 설명합니다.

제어 목적과 가격대에 따라 8비트부터 32비트까지 다양한 제품군을 선택한다

현업과 취미 분야에서 사용되는 마이크로컨트롤러는 처리하는 데이터 폭과 무선 통신 탑재 여부에 따라 다양한 제품군으로 나뉩니다. 개발 환경과 가격대, 요구되는 연산 성능에 맞춰 적절한 칩을 골라 씁니다.

  • AVR 계열 (8비트): 마이크로칩(Microchip) 사의 8비트 아키텍처로, 아두이노 우노에 쓰인 ATmega328P가 대표적입니다. 구조가 직관적이어서 입문자가 레지스터와 하드웨어 기본 원리를 학습하기에 좋습니다.
  • ARM Cortex-M 계열 (32비트): ST마이크로일렉트로닉스의 STM32 제품군을 비롯해 NXP, 텍사스 인스트루먼트 등 수많은 제조사가 채택한 산업계 표준 32비트 아키텍처입니다. 산업용 자동화 장비, 가전제품, 로봇 제어보드 등 광범위한 산업 현장에서 쓰입니다.
  • ESP32 계열 (32비트): 에스프레시프(Espressif) 사의 칩으로, 32비트 듀얼 코어와 함께 와이파이(Wi-Fi) 및 블루투스(Bluetooth) 무선 통신 기능을 칩 하나에 기본 탑재하여 사물인터넷(IoT) 장비에 널리 활용됩니다.
  • RP2040 계열 (32비트): 라즈베리파이 재단이 설계한 마이크로컨트롤러로, 듀얼 코어 구조와 함께 프로그래머블 입출력(PIO) 스테이트 머신을 내장해 특수한 통신 프로토콜을 유연하게 구현할 수 있습니다.

마이크로컨트롤러는 소프트웨어 알고리즘이 물리적인 세상의 센서 신호를 받아들이고 모터와 밸브를 움직이게 만드는 연결고리입니다. 화면 없는 초소형 전자제품부터 첨단 로봇과 자동차 전자제어장치(ECU)까지 기계의 두뇌 역할을 도맡아 처리합니다.

참고 문서

설명이 어렵거나 잘못된 부분을 발견하셨나요?

문서 수정 의견 보내기