[아이씨뱅큐 ICbanQ 파워블로거 2기] 임베디드 기초 3 - 임베디드 MCU개요

안녕하세요. 고명호입니다.

 

임베디드 MCU 개요에 대한 설명을 드리겠습니다.

 

 

본글은 http://blog.naver.com/jimypage 에서도 볼 수 있습니다.

 

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

이제부터는 본격적인 임베디드 시스템에 대해서 알아보는 것입니다.

 

임베디드란 특수 목적으로 설계된 하드웨어및 이 하드웨어를 제어하는 소프트웨어를 통합하여 

 

지칭하는 말입니다.

 

임베디드의 반대 개념으로는 일반적인 범용 운영체제 시스템을 들 수 있습니다.

 

범용운영체제 (윈도우, 리눅스, OSX)의 경우 하드웨어의 변경없이도 실행시키는 

 

소프트웨어에 따라 다양한 작업을 수행할 수 있습니다.

 

즉 운영체제라는 기본 서비스 환경하에서 임의의 작업들이 수행됩니다. 이에반해 

 

임베디드 시스템의 경우에는 목적이 먼저 선택된후 

 

이 목적을 위해서 하드웨어와 소프트웨어가 개발됩니다. 

 

따라서 특정 목적에 부합하는 하드웨어(MPU및 주변장치)가 먼저 선정되고, 

 

이 하드웨어에 필요한 소프트웨어를 개발하여 최종 결과물을 생성하게 됩니다.

 

일반 범용 운영체제와는 달리 매우 단순한 작업에서부터 아주 복잡한 작업에 이르기까지 

 

그 분야가 상당히 넓으며, 따라서 MPU및 주변장치도 특정 목적및 기능에 부합하도록 

 

다양한 가격대, 다양한 제조사의 다양한 종류가 있는것이 특징입니다.

 

 

예전 가전제품등 전자기기의 경우 비교적 단순한 작업만을 수행하기 때문에 

 

MCU(Micro Controller Unit)가 필요없는 경우가 많았습니다. 

 

MCU가 필요없는 경우라 함은 임베디드 제어 프로그래밍도 필요없다는 말입니다.

 

 

 

예를 들어보겠습니다.

 

지난번 LED 강좌에서 설명드린 세그먼트 LED를 이용해서 전자 시계를 만들었다고 가정해 봅시다.

 

전자시계가 하는 일은 단지 시간을 표시해 주는 것입니다.

 

이러한 단순한 작업은 MCU의 가능에 의존하지 않고 일반적인 논리 소자의 조합으로 

 

얼마든지 구현할 수 있습니다.

 

이런 경우에는 회로의 설계및 완성이 제품의 완성으로 이어지며 제어용 프로그램은 

 

필요하지 않습니다.

 


(TTL을 이용한 clock 회로도 그림)


(회로도상에서 CPU,MCU는 보이지 않습니다. 

단지 논리 소자의 조합으로 시계의 역할을 수행합니다)

 

 

그렇지만 특정작업을 수행하는데 제조사의 요구가 다양해 진다거나

 

(예를 들어서 위의 시계에 알람기능이 추가 되는 경우) 

 

아니면 다양한 모델을 개발해야 하는 경우 단순 논리 소자의 결합만으로는 그 일을 할 수 없습니다. 

 

왜냐하면 간단한 기능을 추가하는데에도 회로설계를 다시하고, 기판설계를 다시하고, 

 

기판 제조를 다시하고, 테스트를 다시 수행해야 하기 때문입니다. 

 

즉 특정부분의 사양 변화에 소요되는 시간및 비용이 만만치 않다는 것이 문제가 된 것 이었습니다.

 

결국은 범용성이 있는 다양한 기능을 수행할 수있는 중앙 연산장치의 필요성이 증가하였고 

 

이것이 CPU가 탄생된 계기가 되었습니다.

 

 

실제로 최초의 CPU라고 알려져 있는 intel사의 4004라는 4bit CPU 모델의 경우 

 

일본 비지콤이라는 회사의 '계산기'에 쓰일 목적으로 처음 개발이 되었습니다.

 

 

(인텔 4004 CPU 그림)

 

그렇지만 CPU를 제조하고 보니 단순히 덧셈 곱셈등의 계산기능만을 위한 것이 아닌 

 

그 이상의 다양한 기능을 할 수 있다는 가능성이 발견되었고 

 

점차 더욱 빠르고 강력한 기능을 가진 CPU가 개발되어 오늘날에 이르게 되었습니다.

 

인텔은 이후 8bit CPU인 8080을 개발하였고 이 8080 cpu는 8bit CPU에서 대박을 친 Z80시리즈의

 

원조가 되었습니다. 7,80년대의 8bit CPU보다 향상된 16bit, 32 bit CPU가 개발및 사용 되었으며 

 

최근에는(2010년 이후) 32bit cpu의 한계를 넘는 64bit CPU가 개발되어 개인용 컴퓨터에 

 

쓰이고 있습니다.

 

이렇게 인텔, AMD로 대표되는 데스크탑 컴퓨터의 CPU가 발전을 하는동안 

 

또다른 종류의 CPU의 필요성이 대두 되었습니다.

 

일반 CPU의 성능이 비약적으로 발전했으나 이정도의 고 성능이 필요하지 않은 

 

단순한 제어를 위한 CPU의 필요성이 증가된 것이었습니다.

 

 

물론 단순한 제어를 위한 용도의 CPU는 데스크탑 CPU의 원조격인 구형 z80 등 8bit의 

 

일반 CPU 등을 이용할 수도 있습니다. 

 

그렇지만 일반 CPU의 경우에는 데이터 버스, 어드레스버스등이 외부에 노출되어 있어서 

 

메모리장치에는 직접 연결이 가능하나 메모리 이외의 시리얼 단자라든가 병렬포트등의 

 

기타 주변장치와 연결을 하기 위해서는 어드레스 디코더및 특정 IO 기능을 담당하는 

 

주변 IC 칩이 필요해 집니다. 

 

(예를 들자면 Z80이라는 8비트 CPU의 경우 주변장치와 병렬 통신을 하기 위해서는 

 

Z80 SIO라는 특정한 반도체가 필요합니다. 

 

또한 마찬가지로 Z80 CPU 에서 병렬 통신을 위해서는 8255등 주변 IC가 필요합니다.)

 

 

그렇지만 소형, 단순한 장치를 개발하는 경우 위와같은 주변칩이 필요하다는 것은 

 

비용및 개발기간 상승의 원인이 됩니다

 

따라서 80년대 초반이후 기존 CPU와 IO를 담당하는 주변 기기의 기능을 하나로 합친 

 

CPU들이 생산되게 되었습니다.

 

이러한 CPU를 특별히 MCU라 부릅니다(micro controller unit)

 

이때의 MCU의 의미는 기존의 CPU에 제어용의 유닛(controller unit)이 내장되었다 하여 

 

그렇게 이름붙여지게 되었습니다.

 

- 결국 기존 8bit CPU 제조사는 (대표적인 기업은 z80을 생산하던 zilog) 새로운 변화에 


대응하지 못하여 성능에서는 인텔 8086시리즈에 밀리고, 


가격에서는 MCU 칩제조사에 밀려 근근히 명맥만을 유지하는 상태가 되었습니다.-

 

이 시기의 MCU중 대표적인 기업이 (아두이노 시리즈로 유명한) ATMEL, motorola, 

 

그리고 microchip, TI 등이 있습니다.

 

기존의 CPU는 메모리영역이 데이터영역과 코드영역의 접근방식이 동일한 폰 노이만 구조를 

 

많이 사용합니다.

 

그러나 MCU는 기존의 CPU와는 달리 RISC구조, 하버드 아키텍쳐를 가지는 것들이 대부분입니다.

 

 

소형화, 경량화를 위해서 명령어 세트를 단순화한 RISC방식을 채택하고 있으며, 

 

메모리 버스자체가 외부에 노출되어 있지 않기 때문에 

 

항상 고유한 주소를 가지고 코드영역에 접근해야 할 필요성도 없습니다. 

 

따라서 코드메모리, 데이터 메모리와 IO 영역이 분리된 형태의 버스 구조(하버드 아키텍쳐)를 

 

채택하고 있습니다.

 

데스크탑 CPU와는 다르게 목적에 따라 다 품종이 생산이 되며 

 

다양한 가격대의 다양한 기능을 지닌 MCU들이 생산이 되기 때문에, 

 

가격과 목적에 맞는 MCU를 선택할수 있는 선택의 폭이 매우 넓습니다.

 

 

오늘날은 몇몇 제조사들만이 임베디드 MCU를 생산합니다.

 

살아남은 MCU 들은 ATMEL 의 AVR 시리즈, intel 의 8051 시리즈, microchip 의 PIC 시리즈, 

 

TI 의 MSP시리즈등이 있습니다. 

 

모토롤라의 MC68시리즈는 90년대까지 쓰이다가 현재는 잘 안쓰이고 있습니다.

 

 

위의 MCU들을 제조하는 제조사는 자사의 고유한 MCU구조와 명령어 세트를 가지고 있는데 

 

각 제조사 마다 명령어 세트는 거의 동일하며 

 

상위기종으로 갈수록 명령어가 더 추가되는 정도의 변화만 있습니다.

 

위의 시리즈는 대개 8bit CPU들이나 최근에는 임베디드 기기도 고성능이 필요한 경우가 

 

종종 있기 때문에  각 제조사들은 32bit 코어를 라이선스 하여 

 

전혀 다른 명령어 세트를 가진 고성능의 MCU도 생산하고 있는 추세입니다.

 

(microchip 은 MIPS core를 , ATMEL 은 ARM core 를 라이선스하여 제조하고 있습니다.)

 

 

 

임베디드 프로그래밍이란 예전에는 각 제조사에 맞는 어셈블리 언어를 이용하여 

 

프로그래밍 하는 능력을 의미했습니다.

 

그렇지만 최근에는 MCU 성능의 비약적인 발전및 그에 따른 C 컴파일러의 보급으로 

 

하드웨어적인 코드, 데이터 메모리제약이 거의 없습니다. 

 

(부족한 경우에는 더 상위의 칩을 쓰면 됩니다.) 

 

따라서 최근의 임베디드 프로그래밍은 각 MCU의 하드웨어의 특성을 이해하며 

 

C 언어로 프로그래밍을 하는 능력을 의미하게 되었습니다.

 

 

 

저는 임베디드용의 MCU의 성능이 미약하던 시절부터 프로그래밍을 해 왔기 때문에 

 

각 제조사의 MCU 아키텍쳐 각각의 어셈블리 언어를 전부 이해하고 있습니다만 

 

어셈블리 언어로 작성된 프로그램의 경우 일단은 배우기 어렵고 난해하며

 

각 기종간 이식성이 거의 없다는 단점이 있습니다.

 

따라서 현재는 매우 최적화가 필요한 경우가 아니라면 범용성을 위해서 

 

임베디드 프로그래밍도 거의 C 언어를 이용하는 편입니다.

 

 

즉 예전의 임베디드 프로그래밍은 특정 제조사 MCU 어셈블리 언어를 얼마나 

 

잘 사용하는가, 그리고 하드웨어 자원을 얼마나 효율적으로 이용하는가가 중요한 문제였습니다.

 

이러한 능력은 일반적인 데스크탑 컴퓨터에서의 개발 언어를 습득하는 것 보다도 훨씬 

 

배우기 어렵고, 시간도 많이 걸리는 일이어서 임베디드 개발자들의 인원수가 

 

범용 운영체제의 개발자들보다 훨씬 적었고, 

 

따라서 연봉등으로 더 대우를 받게 된 계기가 된 것입니다.

 

 

그렇지만 최근에는 MCU 의 성능이 비약적으로 향상되어 

 

어셈블리 언어를 전혀 알지 못하고도 프로그래밍이 가능한 시대가 되었습니다. 

 

오로지 C 언어만 가지고도 원하는 작업을 수행할 수 있게되어 

 

이제는 임베디드 프로그래밍 이라고 하면 특정 제조사 MCU 하드웨어를 얼마나 잘 이해하고 있는가, 

 

그리고 얼마나 적은량의 리소스를 가지고 

 

목적에 합당한 기능을 수행하느냐의 문제(최적화 알고리듬)가 되었습니다.

 

임베디드 MCU에 대한 대략적인 이해가 되셨는지요?

 

 

 

이번회에서는 임베디드 MCU의 개략적인 개요에 대해 살펴보았습니다.

 

다음회에는 임베디드용으로 사용되는 MCU의 대표적인 칩및 제조사의 하드웨어에 대해서 

 

몇가지를 알아보고 각 제조사별 대표적인 칩의 핀맵에 대해서 간단히 살펴 보겠습니다.

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

 

 

관련 사이트

 

https://jawadsblog.wordpress.com/page/5/


 

 

관련 제품

 

http://www.icbanq.com/P000088835/S