Embedded Systems & Controllers
특정 목적을 수행하기 위해 CPU, 메모리, 주변 장치를 한 칩에 집적한 MCU의 내부 물리 구조와 임베디드 특유의 제약 사항을 다루는 학습 노드입니다.
Article
M
Me
hyunyoun's Blog
computer-architecture-embedded-systemscomputer-architectureembedded-systemshardware-software-interface-physicscontrollerslearningmmiodma9 min read
1. Overview
임베디드 시스템과 제어기(Embedded Systems & Controllers)는 PC처럼 범용적인 계산을 하는 것이 아니라, 냉장고, 자동차 엔진, 드론, 인공위성 등 특정한 하드웨어 기계를 제어하기 위해 시스템 내부에 칩(Chip) 형태로 이식되어 숨어있는 전용 컴퓨터 공학입니다.
학습자는 CPU 코어에 메모리(Flash, RAM)와 통신 포트, 타이머를 모두 구겨 넣어 하나의 작은 왕국을 만든 **마이크로컨트롤러(MCU)**의 해부학적 구조를 뜯어봅니다. 나아가 제한된 32KB의 램과 100MHz의 느린 클럭을 쥐어짜 내어 모터를 돌리고 센서 값을 읽어내는 펌웨어(Firmware) 아키텍처를 설계하며, 아날로그 세계의 물리적 노이즈를 뚫고 안정적인 제어 명령을 내리는 강건한 **사이버-물리 시스템(Cyber-Physical System, CPS)**의 설계 철학을 통달하여 임베디드 아키텍트 역량을 확보합니다.
2. Scope & Boundaries
In-Scope
- 임베디드 하드웨어 역학 (Hardware Physics): MCU(마이크로컨트롤러) vs MPU(마이크로프로세서), 특수 기능 레지스터(SFR).
- 소프트웨어 펌웨어 구조 (Firmware Architecture): 폴링(Polling) 루프, 인터럽트 주도(Interrupt-Driven) 아키텍처, 스테이트 머신(FSM).
- 주변기기 제어 매커니즘 (Peripheral Control): GPIO(범용 입출력), 하드웨어 타이머, PWM(Pulse Width Modulation), Watchdog Timer.
- 제한된 자원 최적화 (Resource Constrained): 풋프린트(Footprint) 최적화, 전력 소모(Sleep Mode) 통제.
Out-of-Scope
- 실시간 스케줄링(RTOS)의 커널 이론: 선점형 스케줄러나 뮤텍스 알고리즘 02-06. Real-Time Systems & Deterministic Scheduling 영역.
- 머신러닝과 엣지 인공지능: 임베디드 칩 위에서 도는 TinyML이나 NPU 가속 02-07. IoT & Edge Intelligence 영역.
Boundaries
- Embedded vs. Desktop (01-01): 데스크톱(01-01)이 "아무 프로그램이나 다 돌릴 수 있지만 전기를 300W씩 퍼먹는 커다란 공장"이라면, 임베디드 시스템은 "오직 세탁기 모터 하나만 돌리기 위해 최적화되어 동전 배터리로 1년을 버티는 초소형 톱니바퀴"입니다.
3. Counterexample
- 동적 할당(
malloc)의 시한폭탄 (Heap Fragmentation Trap): PC 코딩 습관을 못 버리고 32KB짜리 램(RAM)을 가진 MCU에서 맘대로malloc과free를 난사하는 치명적 짓. 며칠 동안 메모리가 조각(Fragmentation)나다가 어느 순간 덩어리진 여유 공간이 없어져malloc이NULL을 뱉는 순간, 예외 처리를 안 해둔 펌웨어가 뻗어버리고 드론이 추락합니다. 임베디드에서는 배열 덩어리를 정적(Static)으로 박아놓고 메모리 풀(Pool)로 재활용하는 것이 절대적 헌법입니다. - 무한 루프 블로킹 무지 (Polling Blocking): 버튼이 눌렸는지 확인하려고 메인
while(1)루프 안에서delay(100)을 남발하며 폴링(Polling)하는 끔찍한 구조. 100밀리초를 쉬는 동안 통신 포트로 중요한 긴급 제어 명령이 날아와도 CPU는 눈을 감고 있어 모두 놓치게 됩니다. 모든 대기는 인터럽트(Interrupt)나 비동기 상태 머신(State Machine)으로 쪼개어, 메인 루프는 절대 1밀리초 이상 막히지 않게(Non-blocking) 굴러가야 합니다.
4. Prerequisites
- 디지털 논리 및 레지스터 맵 (Basic): 0과 1로 포트 핀을 조작하는 논리 구조를 꿰뚫어야 합니다. (02-01-01 Digital Logic)
- 메모리 맵 I/O (Recommended): C 언어의 포인터로 칩 내부의 특정 물리 번지를 건드리는 방법을 알아야 펌웨어를 작성할 수 있습니다. (02-05-01 Bare-metal Memory Mapping)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: 자급자족 단세포 생물, 마이크로컨트롤러 (MCU vs MPU)
- Why to Learn: 리눅스를 올리려면 램(RAM) 칩과 낸드(NAND) 플래시를 덕지덕지 붙여야 하는 프로세서(MPU)와, 전원만 넣으면 스스로 심장이 뛰는 마이크로컨트롤러(MCU)의 생물학적 차이를 꿰뚫기 위함입니다.
- What to Learn:
- Concepts: MCU(Micro-Controller Unit), MPU(Micro-Processor Unit), SoC(System on Chip).
- Skills: 칩 스펙 리딩(Flash/RAM/Clock 사이즈), 핀 맵(Pin Map)과 대체 기능(Alternate Function) 라우팅.
- Tools: 블록 다이어그램(Block Diagram).
- Trade-offs: PC용 프로세서는 기가헤르츠(GHz)로 날아다니지만 메인보드 설계 비용이 수십만 원 단위로 깨지는 반면, MCU는 클럭이 100MHz 수준으로 보잘것없지만 칩 하나(1천 원)에 배터리만 직결하면 모든 제어 스택이 완성되는 극단적 경제성의 승리.
- How to Learn:
- 1단계: MPU(ex. 인텔 코어, 라즈베리파이 칩)는 두뇌(ALU)만 엄청나게 커서 기억력(RAM)은 외주를 줘야 하는 반면, MCU(ex. 아두이노 AVR, STM32)는 두뇌는 작지만 칩 안에 플래시 메모리, 램, 통신 포트를 모두 우겨넣은 일체형 오피스텔임을 해부합니다.
- 2단계: 칩의 다리(Pin) 개수는 64개로 한정되어 있는데 내부 기능은 100개가 넘어, 하나의 핀을 '단순 LED 스위치(GPIO)'로 쓸지 '통신 포트(UART TX)'로 쓸지 소프트웨어로 맵핑(MUX)해 주는 핀 멀티플렉싱 기하학을 뜯어봅니다.
- Implement: 10개의 핀을 가진 가상 MCU 객체에
UART_Enable(),PWM_Enable()함수를 호출할 때마다 내부 스위치 매트릭스(MUX)가 변경되어, 핀 배열의 속성이['GPIO', 'UART_TX', 'UART_RX', 'PWM', ...]형태로 동적 맵핑되는 시뮬레이터 작성.
Recommended
Core Topic 02: 논블로킹 유한 상태 기계 펌웨어 (FSM Architecture)
- Why to Learn: 스레드(Thread)를 만들어주는 OS가 없는 베어메탈 환경에서, 단 1개의 무한 루프(
while(1))만으로 센서도 읽고, 화면도 그리고, 버튼도 반응하는 유사 멀티태스킹 마법을 부리기 위해서입니다. - What to Learn:
- Concepts: 펌웨어(Firmware), 유한 상태 기계(FSM, Finite State Machine), 슈퍼 루프(Super Loop).
- Skills: 논블로킹(Non-blocking) 딜레이, 상태 전이도(State Transition Diagram).
- Tools: 틱 타이머(SysTick).
- Trade-offs: 코드를 위에서 아래로 주욱 내리쓰면(
delay포함) 짜기는 편하지만 스파게티가 되어 중간에 다른 짓을 절대 못 하는 반면, 코드를 상태(State)별로 다 쪼개고switch-case로 구성(FSM)하면 코딩은 미친 듯이 복잡해지나 단 1나노초도 블로킹되지 않는 궁극의 반응성을 얻는 딜레마.
- How to Learn:
- 1단계: 세탁기를 제어할 때
물채우기(); delay(5000); 세탁(); delay(10000);식으로 짜면 세탁 도중 취소 버튼을 눌러도 기계가 무시해 버리는 블로킹 지옥을 해부합니다. - 2단계: 글로벌 변수로
State = [IDLE, FILLING, WASHING]를 두고, 루프 안에서 매 틱(Tick)마다 타이머를 확인해 "시간이 안 지났으면 바로 다음 코드로 패스(pass)"하는 논블로킹 상태 머신(FSM)으로 구조를 완전히 갈아엎는 소프트웨어 건축학을 뜯어봅니다.
- 1단계: 세탁기를 제어할 때
- Implement: 파이썬
while True:루프 안에서 1개의 메인 스레드로 '세탁기 모터 구동(10초)'과 '정지 버튼 입력 감시'를 동시에 수행.time.sleep()을 쓰면 버튼 감시가 죽어버리지만,current_time - start_time > 10(논블로킹 FSM) 방식으로 구조를 짜면 루프가 1초에 만 번씩 돌며 버튼을 즉각 캐치하는 궤적 증명.
Practical
Core Topic 03: 하드웨어 오토파일럿, 타이머와 PWM 물리 (Timers & PWM)
- Why to Learn: CPU가 1초에 1만 번씩 루프를 돌며 핀 전압을 껐다 켰다(Bit-banging) 하느라 진이 빠지는 것을 막고, 하드웨어 타이머에게 주파수만 던져주면 알아서 평생 전압을 펄럭이게 만드는 하청 기술을 장악하기 위함입니다.
- What to Learn:
- Concepts: 프리스케일러(Prescaler), 타이머 오버플로우(Overflow).
- Skills: 펄스 폭 변조(PWM, Pulse Width Modulation), 듀티 사이클(Duty Cycle).
- Tools: 로직 애널라이저 파형 관측.
- Trade-offs: 소프트웨어로 딜레이를 주어 LED 밝기를 조절하면 칩 구조는 몰라도 되지만 인터럽트가 터질 때마다 LED가 미세하게 깜빡이는(Jitter) 쓰레기 품질 vs 데이터시트 레지스터 20개를 외우는 고통을 감수하고 하드웨어 PWM을 세팅하면 CPU 점유율 0%로 오차 없는 완벽한 파형이 방출되는 마법.
- How to Learn:
- 1단계: 100MHz 시스템 클럭(10ns)을 그대로 쓰면 카운터가 너무 빨리 터지므로, 프리스케일러(Prescaler)로 100을 나누어 1MHz(1us) 주기로 타이머 박동(Tick)을 늦추는 클럭 기어비 세팅 물리를 해부합니다.
- 2단계: 타이머가 0부터 100까지 셀 때, 0
30 구간에서는 핀 전압을 HIGH(3.3V)로 두고 31100 구간에서는 LOW(0V)로 끄도록 하드웨어 콤퍼레이터(비교기)를 세팅하면, 평균 전압 1V짜리(듀티 사이클 30%) 아날로그 파워가 튀어나와 모터 속도를 30%로 감속시키는 PWM 마법을 뜯어봅니다.
- Implement: 하드웨어 타이머 컨트롤러를 모사하는 파이썬 클래스 작성.
set_pwm(prescaler=1, period=100, duty=30)을 세팅하고 CPU 메인 루프는time.sleep(1)로 딴짓을 하더라도, 백그라운드 스레드(타이머 하드웨어)가 터미널에[███.......]파형을 정확히 1초 단위로 무한 방출하는 오토파일럿 시각화.
Advanced
Core Topic 04: 최후의 방패, 워치독 타이머 시스템 (Watchdog Timer)
- Why to Learn: 드론이나 인공위성이 하늘에서 정적 전기(ESD)를 맞거나 무한 루프 버그에 빠져 CPU가 완전히 멈췄을 때, 우주로 사람을 보내 재부팅 버튼을 누를 수 없으니 칩 스스로 자결하고 부활하는 극강의 회복성(Resilience)을 박아넣기 위해서입니다.
- What to Learn:
- Concepts: 워치독 타이머(Watchdog Timer, WDT), 킥(Kick) / 펫(Pet), 윈도우 워치독(Window WDT).
- Skills: 하드 리셋(Hard Reset) 트리거, 펌웨어 강건성(Robustness).
- Tools: 디버깅 방해 우회술.
- Trade-offs: WDT를 켜두면 시스템이 먹통이 되어도 3초 뒤에 무조건 재부팅되어 죽지 않는 좀비가 되지만, 개발 단계(디버깅)에서 브레이크포인트(Breakpoint)를 걸고 변수를 보려고 멈춘 순간에도 WDT 타이머는 몰래 돌아가 칩을 냅다 리셋시켜버리는 디버깅의 고통.
- How to Learn:
- 1단계: CPU 안에는 메인 클럭과 완전히 독립된 별도의 저속 오실레이터(LSI)로 묵묵히 0부터 숫자를 세는 개(Watchdog)가 존재하며, 이 숫자가 3000(3초)에 도달하면 물리적으로 칩의 리셋(Reset) 핀을 땡겨버리는 파괴적 권력을 해부합니다.
- 2단계: 펌웨어 프로그래머는 이 개가 물어뜯기 전(3초 이내)에, 메인 루프가 정상적으로 돌고 있다는 증명으로 정기적으로 뼈다귀를 던져줘(타이머 레지스터를 0으로 킥/리셋) 개를 얌전하게 만드는 '생존 신고' 물리를 뜯어봅니다.
- Implement: 1개의 CPU 스레드와 1개의 독립된 WDT(개) 스레드를 구동. CPU가 1초마다
wdt.kick()을 호출할 때는 WDT 카운터가 0으로 초기화되어 평화롭지만,trigger_bug()로 CPU 스레드를 무한 루프(while True: pass)에 빠뜨리는 순간 킥을 주지 못하게 되고, 3초 뒤 WDT가 짖으며 "System Hard Reset!"을 콘솔에 뿜고 프로그램을 강제 종료(sys.exit)시키는 생존망 증명.
7. Terminology
8. References
Primary
- [P1] CS2023 - AR/Embedded Systems — Main standard for controllers.
- [P2] SWEBOK v4.0 - Computing Foundations / Embedded Computing — Structural standards.
Secondary
- [Embedded Systems: Architecture, Programming and Design] Raj Kamal — The classic textbook.
- [An Embedded Software Primer] David Simon — Great introduction to firmware physics.
Industry
- [ARM Cortex-M Hardware Technical Reference Manuals] — Industry standard core.
- [Automotive Safety Integrity Level (ASIL) standards] — Reliability in practice.
9. Final Checklist
Primary
- '8비트 MCU'와 '32비트 MCU'가 데이터를 처리할 때의 물리적 산술 정밀도와 버스 대역폭 차이를 설명 가능한가? (P1)
- '하버드 아키텍처'가 명령과 데이터의 물리적 통로를 분리함으로써 임베디드 제어 성능을 왜 향상시키는지 입증할 수 있는 가? (P1)
Secondary
- 배터리 효율을 높이기 위해 'Interrupt-driven' 설계가 'Polling' 방식보다 전력 물리 관점에서 왜 우세한지 소통 가능한가?
- ADC 변환 과정에서 발생하는 'Quantization Error'가 실세계 정밀 제어 시스템에 어떤 수리적 한계를 가져오는지 분석 가능한가?
Industry
- 스마트 홈 기기 설계 시, 전력 부족으로 인한 데이터 오염을 막기 위한 'Brown-out Detect' 설정 임계값을 제안할 수 있는 가? (SFIA)
- 가전 제품의 안전 인증(IEC 60730 등) 획득을 위해 필요한 하드웨어 자가 진단(BIST) 시퀀스를 물리적 동작 단위로 기술할 수 있는 가?