mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-11-18 15:12:00

마이크로컨트롤러

1. 개요2. 기준 3. 활용4. 사용 언어5. 사용 분야6. 생산 기업7. 마이크로프로세서와의 차이8. 관련 항목

1. 개요

마이크로컨트롤러(Microcontroller) 또는 마이크로 컨트롤러 유닛(Micro Controller Unit; MCU)[1]. 집적 회로 안에 프로세서 메모리, 입출력 버스 등의 최소한의 컴퓨팅 요소를 내장한 초소형 컨트롤러. 보통 임베디드 애플리케이션용으로 설계된 연산 장치를 뜻한다.

2. 기준

비교적 단순하고 스마트폰 AP보다도 작은 컴퓨팅 장치라고 생각하면 편한데, 모든 전자기기에 하나씩은 거의 필수적으로 들어가니 칩셋 개수로는 PC의 100배는 족히 넘는 시장이다. 목적은 임베디드 시스템을 구축하기 위함이다.

이 문서에서 CPU에 대한 용어정의가 필요한데, 흔히들 편의상 PC에 쓰이는 큼지막한 녀석을 CPU라고 부르지만 여기서는 반도체에서 실제 연산에 쓰이는 작은 마이크로프로세서를 칭한다.

MCU는 단일 또는 다중의 CPU와 자체 메인메모리( SRAM), 프로그래밍 가능한 타이머, PWM 모듈, 많은 수의 I/O, 각종 통신 장치들( SPI, UART, CAN, LIN, I2C)과 프로그램과 데이터 등 펌웨어를 저장하기 위한 보조 메모리( PROM, EPROM, EEPROM, 플래시 메모리)를 같이 가지고 있다.

3. 활용

보통 임베디드 시스템에 적합하게 디자인된 물건이 많은지라 성능 자체는 뛰어나다고 볼 수 없지만, 단순하고 신뢰성 있으며 전력소모가 적으며 저렴하다는 장점이 있으며 현재도 여러 분야에 걸쳐서 널리 쓰이는 장치들이다. MCU 중의 하나인 AVR이나 Cortex-M을 보면 알 수 있듯이 매우 제한된 용량, 연산 성능을 가지고 있다. 마이크로칩사의 PIC12C508A처럼 프로그래밍 가능한 용량이 512 바이트거나, ATTiny4처럼 RAM이 32바이트인 경우도 있다. Espressif 사의 IoT 임베디드 SoC 칩인 ESP32는 160MHz 듀얼코어(600DMIPS)/16 MB Flash/블루투스+WiFi 정도의 사양이며 이 정도면 고성능의 임베디드 칩이다. 74 시리즈나 40 시리즈 IC를 대체하고 싶다거나 단순한 기능을 가진 기계를 마구 찍어낸다든가. 만원 이하의 중급 칩은 전성비와 더불어 성능도 상승한지라 사용용도가 무궁무진하다.

마이크로컨트롤러 제품 카테고리

링크의 그림을 보면, 두 개의 CPU와 각종 메모리, 전원 및 클럭 세팅, 각종 통신 장치( 직렬통신, 이더넷), ADC, Timer, 인터럽트, 입출력 장치가 하나의 칩에 들어있는 구조를 볼 수 있다. 일반적으로 1개의 CPU를 가지고 있다. 이 MCU는 safety에 중점을 둔 MCU 이기 때문에, 2개의 CPU를 가지고 있고, 그 연산의 결과를 비교하는 기능도 가지고 있다.

성능이 뛰어나지 못하니 최신 아키텍처에서 성능을 줄인 제품들을 쓰는 것으로 오해할 수 있지만, ARM Cortex-M 시리즈, 인텔 쿼크 등을 제외하고는 10년은 더 된 오래된 아키텍처( 80486, ARM Cortex-A9 등)를 그대로 갖다 쓰는 경우가 대부분이다. 거기다가 10nm니 8nm니 하는 스마트폰 SoC들에 비하면 최신 마이크로컨트롤러 생산공정이 대부분 100nm 대에 머물러 있는 경우도 많다. 어찌 보면 구식 기술들을 왜 끌어안고 살고 있나 싶지만 그럴만한 이유가 있다. 대부분 성능보다는 전기적인 특성과 안정성을 추구하는 분야이기 때문인데, 대부분의 마이크로컨트롤러들은 작동전압이 5V 나 3.3V인데 반해 최신 스마트폰들 SoC들은 작동전압이 1.8V나 심지어 그보다 낮은 경우가 많다. 수많은 센서들과 모터 컨트롤러들은 5V나 3.3V로 작동하기 때문에 그것과 맞는 작동전압을 가진 마이크로컨트롤러를 쓰면 설계 난이도나 비용을 상당히 많이 낮출 수 있기 때문이다. 또한 생산공정을 미세화하는 것이 이 분야에서는 항상 좋은 것만이 아닌데, 생산공정을 미세화할 수록 칩들의 전기적인 특성이 훨씬 더 불안정해지기 때문. 100nm 칩에서 10nm 칩들을 쓰면 그만큼 디지털 회로 상태 변화에 필요한 전기적 에너지가 낮아지는데, 이것을 반대로 말하면 그만큼 외부의 전기적 변화에 취약하다는 의미이다. 다만 2017년 기준 최신 임베디드 칩의 경우 40nm의 제조공정을 보이고 있다. 어쩔 수 없는 것이 전성비와 가성비 2가지를 동시에 올리려면 전기적 변화에 취약할지라도 미세공정화가 필수이기 때문이다.

마이크로컨트롤러에 요구되는 성능이 높으면 아예 상용 CPU를 통째로 쓰는 경우도 있다. 25Gbps 네트워크 카드는 2024년 기준으로 매우 높은 연산력을 필요로 하기 때문에 제온D와 DDR4 ECC 메모리가 마이크로컨트롤러로 들어가기도 했다. 마이크로컨트롤러 프로그래밍 가이드

4. 사용 언어

대부분의 회사에서 주력으로 C언어를 쓰며 칩을 내는 업체도 대부분 C언어에 기반한 예제와 라이브러리를 제공한다. 넓게 가보면 C++까진 실 업무에서 쓴다. 칩을 극단적으로까지 짜내는 영역이 아닌 이상 어셈블리어는 건드리지 않지만 최적화를 하다 보면 어셈블리어에 대한 이해도 어느 정도 필요하다. 가끔씩 번외로 아두이노로 프로젝트 구성을 자사 IDE에 탑재하는 경우는 많아졌다. 특히 Atmel사.

MCU 프로그래밍은 기본적으로 메모리 조작과 많은 연관을 지닌 관계로 포인터 없이는 제대로 프로그래밍하기 불가능한 경우가 많다. 예를 들면 MCU에서 출력을 바꾸는 건 몇 번 핀과 연결된 메모리에 1, 0 값을 쓰는 형태로 이루어진다. 그래서 16진수와 메모리 단위로 word를 사용한다. 그런 이유로 프로세서 성능을 떠나서 고급 언어를 사용하기 어렵다. 다만 이러면 쓰는 사람이 어렵다는 걸 잘 알기 때문에16진수로 된 레지스터 주소만 보고 이게 워하는 레지스터인지 어떻게 바로 알겟냐 대부분 레지스터에 접근하는 변수나 추상화 라이브러리를 통해서 다루기 쉽게 만들어 주긴 한다. 따라서 업계는 칩의 성능이 나아지던 발전하던 간에 계속 C나 어셈블리어 가지고 씨름해야 한다. 거기다 성능상의 문제까지 있기 때문에 16비트에서는 거의 C, 어셈블리밖에 쓰기 어렵고, 8비트는 진짜 C언어와 어셈블리어 아니면 답이 없는 영역이다.

32비트 이상의 경우 노력만 하면 MCU 제어 라이브러리도 모든 언어로 구성할 수 있다. 그래서 실제 업무용이 아니라면 범위가 넓어진다. 교육용으로는 BASIC, C#, 파이썬 등이 쓰이기도 한다. RTOS 같은 게 발전해서 32비트 쪽은 나름 언어 선택 폭이 다양해졌다. 당장 자바스크립트 PHP로도 프로그래밍 가능한 개발보드가 나오기도 한다.

5. 사용 분야

임베디드 시스템에 쓰인다. 2013년 한 해 동안 추정되는 생산량은 190억 개. 참고로 PC용 CPU 생산량이 연간 2억개.

MCU는 집안 내의 모든 가전제품에 1개 이상씩 들어있다. 세탁기, 냉장고, 전자렌지, 인덕션 레인지, 보일러, 디지털 도어락, 냉온수기, 비데, 홈시어터,전자시계, 터치스탠드, 전기다리미, 리모콘, TV,라디오, 계산기, 각종 PC 주변기기들(마우스, 키보드, 프린터, 스피커, ODD, 모니터, USB 허브, 유무선공유기, 외장하드 컨트롤러, 웹캠) 공기청정기, 디지털 카메라, 손떨림 방지 기능이 들어간 카메라 렌즈, 노이즈 캔슬링 기능이 들어간 헤드폰 등등... 반면 CPU는 컴퓨터에 1개씩만 들어간다.

스마트폰에서도 AP와 함께 로직보드에 MCU가 들어가는 경우도 많은데, 그 예시로는 아이폰 6에 들어가는 모션 프로세서인 M8. ARM Cortex-M3 마이크로컨트롤러에 자이로스코프, 가속도계 등의 센서가 연결되어 있는데, 하는 일은 센서의 값을 읽어들여 데이터 처리를 한 후 AP에 처리된 데이터를 보내는 것. AP가 직접 처리하면 연산능력 낭비, 배터리 낭비가 되기 때문에 별도의 MCU를 둬서 대신 처리하게 하는 것이다.

데스크탑이나 노트북, 서버용 CPU에도 들어간다. Microsoft Pluton 같은 보안 프로세서용(ARM Cortex-A35)이나 AMD AGESA(ARM Cortex-A9) 인텔 관리 엔진( 인텔 쿼크), 인텔 CPU iGPU 전력 관리용( 486DX4) 등이 그 예다.

이외에 초보적인 하드웨어 프로그래밍을 배우는 용도로도 많이 쓰인다. 대표적인 게 Arduino, Basic Stamp. 아두이노 이전부터 쓰여 오던 이 분야의 선배격 디바이스로 우표 크기에 DIP 배열을 가진 형태의 기판에 베이직으로 프로그래밍을 했다.

6. 생산 기업

업계 입문 난이도가 낮아서 4비트나 8비트 마이크로 컨트롤러는 학부 수준에서도 제대로 파고 들면 설계할 수 있다. 직접 설계하는 업체도 많은 만큼 다 따지면 엄청난 수의 회사에서 엄청난 수의 MCU를 내놓는다. 16비트 MCU는 대다수 업체들이 직접 설계한 칩을 가진 경우가 많다. 32비트 수준에서는 자체 아키텍처를 가진 회사가 상대적으로 적고, Arm의 Cortex-M 기반으로 다수 업체들이 여러 MCU를 내놓는 경우가 많다. 그러나 Cortex 코어를 가지고 있다고 해도 CPU에 연결되는 주변 장치는 거의 모든 제조사마다 다르기 때문에 같은 마이크로컨트롤러가 나오지는 않는다. ARM에서 이러한 호환성을 보장해주는 CMSIS 환경을 쓸 경우 거의 비슷하게 쓸 수는 있다. RISC-V 등장 이후에는 신생 회사나 Arm에 라이선스를 지불하기 싫었던 기존 회사들이 채택하고 있다.

또한 다양한 아키텍처의 마이크로컨트롤러가 존재하는 관계로 여러 마이크로컨트롤러를 개발 가능한 개발자는 찾기 힘들다. 하지만 하나만 제대로 알아두면 새로운 MCU라 하더라도 겁낼 필요 없다. 몇몇 기능이 추가되거나 업그레이드되었을 뿐, 90%는 거의 비슷한 구조라고 보면 된다.

7. 마이크로프로세서와의 차이

MPU ( MicroProcessor Unit)는 CPU 크기를 키워서 연산 자체에 특화되어 있다. 그래서 칩의 체급이 더 크다. 대신 내장 메모리를 빼 버려서 별도의 램이 필요한 경우가 많다. MCU는 CPU 크기가 더 작으며 하드웨어 제어에 주로 사용된다.

MCU는 운영체제 없이 돌리거나 RTOS를 써서 제한적인 프로그램만 가동한다. 하지만 MPU는 임베디드 리눅스를 구동해서 다양한 애플리케이션을 구동할 수 있다. 하드웨어적으로는 MMU가 내장되어 있으면 리눅스를 돌릴 수 있다. 아두이노(MCU)와 라즈베리 파이(MPU)의 차이점이라고 보면 된다.

8. 관련 항목


[1] 한국 한정으로 마이크로 컴퓨터 혹은 '마이컴'이라고 부르기도 한다. [2] 원래 마이크로프로세서용이라 A9나 A35 같은 저성능 고효율 시리즈가 사용된다.