마이크로컨트롤러의 발전

해당 전공자이거나 따로 취미를 가지고 있지 않은 한 컴퓨터 내부를 직접 보는 것은 그리 많지 않을 것으로 생각됩니다. 또한 컴퓨터를 분해 조립하거나 CPU에 대하여 관심을 가지고 있는 경우에는 Intel의 i3, i5, i7과 AMD의 Ryzen 정도에 대해서만 알고 있을 것입니다.  

제가 이 글에서 다루려는 것은 요즘의 컴퓨터나 모바일에서 사용하는 것이 아닌, 산업 현장이나 오토모티브, 전력 제어 등에서 사용하는 마이크로컨트롤러에 대한 것입니다. 제목 또한 마이크로컨트롤러의 발전인데, 정확히 말하자면 제가 경험한 마이크로컨트롤러의 발전입니다. 지금까지 사용한 마이크로컨트롤러는 많지만 여기서 말하는 것은 그중에서 중요한 변환점을 가지는 것으로 한정하였습니다.


처음 마이크로프로세서라는 세계로 안내한 "Zilog Z80" 
제 기억이 맞다면 1980년 즈음에는 마이크로프로세서와 마이크로컨트롤러의 구분이 없었습니다. 그 당시 퍼스널 컴퓨터에 사용하는 6502나 MSX에 사용하던 Z80은 산업 현장의 자동화 장비나, 금융 단말기에서 사용하는 CPU와 같았습니다. 퍼스널 컴퓨터라는 용어도 이 당시 유행하던 APPLE-II에서 가정에서 사용하는 컴퓨터라는 뜻으로 사용하던 용어입니다. 사실 마이크로프로세서와 마이크로컨트롤러 두 용어를 정확히 구분해야 하는 것은 아닙니다. 일부 분류하는 것을 즐기는 사람들의 경우 이것저것 기술적인 근거를 거론하면서 따지기는 하지만 지금도 마이크로프로세서와 마이크로컨트롤러는 혼용되어 사용되고 있습니다. 여기서도 용어에 대해서는 너무 신경 쓰지 않으면서 글을 쓰고 있습니다. 다만, 마이크로프로세서나 마이크로컨트롤러라고 쓰면 길어지므로 앞으로는 마이크로프로세서는 MPU(Micro Processor Unit), 마이크로컨트롤러는 MCU(Micro Controller Unit)라고 쓰겠습니다.  

처음으로 접한 MPU로는 Z80입니다. 그 당시의 퍼스널 컴퓨터(Apple은 6502를 사용)에서 사용하고 여러 게임기에서도 사용하는 유명한 MPU이기도 합니다. 당연히 지금은 구입하기가 어려운 MPU이기도 합니다. 왜 구입하지 못하는 것이 아니라 구입하기 어려운 이라고 했냐면 ebay에서는 지금도 팔고 있습니다. 당연히 중고품일 것으로 생각됩니다.

<그림1> ebay에서 판매하는 Z80 CPU

 

요즘에 주로 사용하는 SMD 타입이 아닌 DIP 타입으로 핀 수는 40 핀입니다. 자작으로 사용하기에는 DIP 타입이 편합니다. 이 당시 개발 생산된 MPU들은 요즘과는 다르게 ROM, RAM, 기타 패리패럴 디바이스 모두 외부에 추가해야 정상적으로 사용할 수 있었습니다. MPU는 말 그대로 MPU일 뿐입니다. 의미는 없겠지만 다 없애더라도 ROM은 반드시 외부에 있어야 합니다.  

문제는 이 ROM인데요. ROM이란 Read Only Memory로 읽기만 하는 것으로 제작 당시에 내용이 기록되어 나오는 것입니다. 자작하는 사람들을 논외로 한다고 쳐도 개발 중에는 프로그램을 수시로 바꾸는데 그때마다 ROM을 제작할 수는 없는 일이지요. 이러한 단점을 보완하기 위하여 한번만 쓰기가 가능한 PROM, 자외선으로 지우고 다시 쓸 수 있는 EPROM 등이 이 즈음에 나왔습니다. 이것도 생산 중에 버전업 등으로는 사용할 수 있겠으나, 개발 중에는 이것 또한 상당히 불편한 노릇입니다. 그래서 당시에는 ROM을 흉내 내어 주는 ROM Emulator를 사용해서 프로그램 개발을 했습니다.  

마지막으로 이 방법은 교육용으로는 사용할 수 있으나 실용적인 방법은 아닌데, 로직 회로를 이용하여 Z80 MPU를 Reset 상태로 두고, 외부 로직을 이용하여 RAM에 프로그램을 기록하는 겁니다. 그리고 Reset을 해제하면 RAM에 저장되어 있는 코드를 실행하게 됩니다. RAM이기 때문에 전원이 꺼지면 코드는 지워집니다. 당시에 이러한 방식으로 제작된 교육용 키트가 있었습니다. Z80 MPU는 최대 속도가 2.5 Mhz 였지만 그 키트의 속도는 512Khz로 동작하고 256 byte의 RAM을 사용했습니다. (단위는 정확히 쓴 것입니다.) 

이렇게 설명하면 의문이 드는 분이 계실 겁니다. 컴파일러는 무엇을 사용했으며, 그럼 기계어 코드를 일일이 입력했다는 것이냐 일 텐데요. 맞습니다. 일일이 기계어 코드를 입력했습니다. 혹시나 해서 말씀드리는데 'LD A, B' 와 같은 어셈블러를 입력했다는 것이 아닙니다. '0x70, 0x80, 0x81' 이런 16진수 기계어 코드를 입력했습니다. C 컴파일러가 있었을 수는 있으나 당시에 저는 컴파일러가 무엇인지도 몰랐고 인터넷은 당연히 없고 PC 통신도 없었으므로 구할 수도 없고 구했다 쳐도 그림의 떡이었습니다. Z80을 공부하던 당시에 저는 PC도 없었습니다. 프로그래밍이라는 개념도 없이 책에 나와있는 명령어를 보고 기계어로 직접 변환해서 코드를 입력했습니다. 제가 똑똑한 것은 아니고 그 당시에 대부분의 사람들이 그렇게 했습니다. 가끔 명령어 코드도 보지 않고 바로 기계어를 생각해서 입력하는 사람도 있었습니다. 그런 사람들을 우리는 인간 어셈블러라고 했습니다.


다양한 프로그래밍 방식을 선사한 "Intel 8051" 
Z80의 경우에는 학습 그 이상의 큰 의미는 없이 지나갔습니다. 굳이 기억해보면 금융 단말기 관련 일을 할 때 64180이라는 Z80 프로세서와 MMU, 기타 패리패럴을 포함한 MCU를 사용하기는 했습니다. 이때는 C 컴파일러를 사용했습니다. IAR 컴파일러인 것으로 기억하고 있고 프린터 포트에 소프트웨어 불법 복제 방지용 락키를 연결하고 사용했습니다. 조금 고생했던 기억이 있는데 이게 프린터와 충돌이 심합니다. 그때는 네트워크 공유 방식이 아니라 전기적 결선을 전환해 주는 프린터 공유기를 사용했습니다. 오래전부터 컴퓨터를 사용해온 분이라면 무엇인지 아실 겁니다.  

이 8051이 당시에 유명해진 이유는 첫째로 Intel에서 8051 Core 부분을 공개했습니다. IBM에서 PC 사양을 공개했듯이 Core(프로세서 핵심 부분)를 아무나 사용할 수 있도록 공개한 것입니다. 둘째로 SFR(Special Function Resistor)라는 것이 있어서 8051 Core를 이용해서 제품을 개발한 회사에서 필요로 하는 특정 기능을 여기에 추가할 수 있었습니다. 예를 들자면 MP3 Codec를 만드는 회사에서 MP3를 제어하는 로직으로 8051을 사용하고 여기에 필요한 추가 기능을 SFR에 추가하면 됩니다. 실제로 이렇게 만들어진 IC들이 많았습니다.

<그림2> ebay에서 판매하는 80C51

 

최근에는 위에서 말한 용도로 Cortex-M0를 많이 사용하고 있습니다. 그리고 8051의 경우에는 파생된 모델이 워낙에 많아서 여기서 전부 말하기는 어려울 듯합니다.  

원조 8051은 One Chip MPU로써 말 그대로 MPU안에 ROM, RAM, 패리패럴 디바이스가 내장되어 있습니다. 8051부터 진정한 MCU로써 사용된 것이라고 보면 됩니다. 문제는 역시 ROM에 있습니다. 이 MCU도 제작 당시에 내장된 ROM에 코드가 고정되어서 생산됩니다. 대량 생산일 경우에는 문제가 없으나 소량 생산이나 개발 중에는 문제가 발생합니다. 단, 외부 ROM도 사용할 수 있어서 ROM Emulator는 사용할 수 있습니다.  

8051 CPU도 한 번만 쓸 수 있는 PROM 버전, 자외선으로 지울 수 있는 EPROM 버전, 아예 내장 ROM이 없고 외부에 ROM을 추가해야 하는 것도 있습니다. PIC, AVR이 한참 유행할 당시에는 Flash Memory 버전도 생기고 좀 더 빠르게 동작하는 고속 버전(초기에는 12 Mhz였고 추후 48 Hhz도 생산됨)도 판매되었습니다.  

8051을 이용한 프로그래밍은 Keil 컴파일러를 사용하였습니다. 인터넷은 없었지만 하이텔, 천리안 등 PC통신에서 빠른 어셈블러와 고급 언어(?)인 C 언어 간의 성능 논쟁이 많았습니다. 그렇지만 막상 현업에서는 일단 만들어서 파는 게 목적이므로 그냥 C 언어로 빠르게 프로그래밍을 하게 됩니다. 제목에서도 썼듯이 8051을 사용한 개발 중에는 참으로 많은 프로그래밍 환경을 경험했습니다. 다행히도 컴파일러는 Keil 컴파일러를 이용한 C언어만 사용했는데, EPROM을 열심히 지워가면서 프로그래밍을 하기도 했고, ROM Emulator도 당연히 사용했었습니다. 이때는 8051 MPU Emulator도 있었습니다. 가격은 수백만 원 했지만 라인이나 함수 단위 실행과 브레이크 포인트 등 디버깅 기능이 있어서 EPROM을 지워가면서 하는 것보다는 무척 편한 방법입니다. 8051을 이용한 개발을 끝낼 무렵에는 ISP를 이용한 프로그래밍 방식도 사용했었습니다.  

제목은 8051이라고 썼지만 사실 저 사진에 나오는 80C51을 사용한 기억은 없습니다. 전부 그 파생 모델이었 던 것으로 기억합니다. 이렇게 인터넷에 글을 남기게 되는 세상이 오게 될 것을 미리 알았으면 그 많은 파생 모델의 코드 넘버와 어디에 사용했는지 어떤 애로 사항이 있었는지 기록했다면 더 많은 내용을 쓸 수 있었을 텐데 아쉽습니다.


 

장수하고 있는 "ATMEL AVR" 
2000년도 초였나요? 한참을 8051 계열과 AMD, NEC에서 나온 32bit MCU를 다루고 있을 즈음입니다. 주변에서 AVR이라는 예기가 계속 나옵니다. 처음에는 전원 장치 AVR(Automatic Voltage Regulator)인 줄 알았습니다. 알고 보니 MCU입니다. PC와 몇 천 원짜리 ISP 케이블만 있으면 동작시킬 수 있다고 합니다. 더 놀라운 건 컴파일러가 무료라고 합니다.

<그림3> ATMEGA8515L MCU

위 사진은 제가 처음 접한 AVR로 생각됩니다. 정확히 ATmega8515인지는 기억이 안 나지만 40핀 DIP 타입은 맞습니다. ATMEL 사는 지금은 Microchip사와 합병되었지만, 당시에는 Flash Memory를 내장하고 ISP 프로그래밍 방식을 도입한 첫 MCU입니다. 이 ISP 장비도 당시 PC에 대부분 있던 프린터 포트를 이용하여 에뮬레이션 할 수 있어서 다운로드 케이블이 몇 천 원 밖에는 하지 않았습니다.

ATMEL사는 원래 Flash Memory나 EEPROM 등을 전문적으로 개발하는 업체로 AVR Core를 라이선스 하여 AVR 시리즈의 MCU를 만들게 됩니다. 프로그래밍 방식은 MCU를 Reset 시킨 상태에서 SPI 통신으로 직접 내장 Flash Memory에 코드를 기록할 수 있도록 되어 있습니다. Flash Memory 쓰기가 완료된 후에 MCU Reset을 해제하면 프로그램을 실행하게 됩니다. 그러므로 별도의 ROM Writing 장비가 필요 없게 됩니다. 그리고 JTAG Emulator 기능을 내장하게 되어서 역시 저렴한 장비로 프로그램 디버깅을 할 수 있게 됩니다.

속도로 충분히 빨라서 꽤 오랫동안 장수하고 있는 MCU로 보이는데요. Cortex-M 시리즈가 많이 사용되는 지금도 이 AVR 시리즈의 MCU는 예전만큼은 아니지만 계속 사용되고 있습니다. 다만, 아쉬운 부분은 ATMEL사의 자만 때문인지 이렇다할 기술 개발이 없어서 결국에는 속도나 기능적인 문제(8비트 MCU이고 속도도 32비트 MCU인 Cortex-M의 수십~수백 Mhz 보다는 많이 뒤떨어짐)로 예전의 명성을 누리지 못하고 있다가 결국에는 Microchip 사에 합병되게 됩니다.


최고의 전성기를 누리는 "ST사 STM32" 
요즘은 PC를 제외하고는 전부 ARM Core를 사용한다고 해도 지나친 말이 아닐 듯합니다. 최근 뉴스를 보면 맥북에어에서도 ARM CPU를 도입한다는 예기가 나오고 있습니다. 기술적으로 예기하면 여러 가지가 있겠지만 근본적이 이유는 RISC 구조로 작고 빠르게 동작하도록 만들 수 있으면서 저전력이라는 것이라고 생각됩니다. 얼마나 저전력 이냐면 MCU로도 사용이 가능하다 일 겁니다. 임베디드 제품을 만드는데 인텔 CPU와 같이 큰 팬에 방열판을 붙이고 외부에 기다란 메모리 모듈과 SDD나 HDD를 달 수는 없는 노릇입니다. 이것은 모바일 제품도 마찬가지입니다. 그에 반하여 기능의 복잡함으로 8비트 MCU로는 더 이상 제품 성능 향상과 사용자의 요구 사항을 반영하기 어려워지고 있습니다. 이러한 것들로 인하여 ARM Core의 전성기가 되었다고 생각됩니다.  

예전에는 ARM7, ARM9, ARM11 등으로 명칭을 정했는데, 이것을 Cortex로 변경하게 됩니다. 이것도 3가지의 파생 모델이 생기는데 A, R, M입니다. A는 Advenced로 리눅스나 윈도우즈10 IoT 등 운영체제를 사용수 있는 것으로 모바일 제품에 사용됩니다. 속도도 1 Ghz 이상입니다. R은 Real Time 용입니다. 저도 이 모델은 접해 본 적은 없습니다. 마지막으로 M은 이 글에서 다루고 있는 MCU에 사용되는 것입니다. 리눅스와 같은 OS를 사용할 수는 없고 FreeRTOS와 같은 소형 Realtime용 OS를 사용할 수 있습니다. 속도는 수십~수백 Mhz입니다. I-Cache, D-Cache가 있고, M4, M7 시리즈의 경우 FPU도 내장하고 있습니다.  

ARM Core를 사용하면서부터는 예전 AVR을 사용할 때와는 상황이 많이 바뀝니다. 그동안 기술 발전으로 직접도가 향상되어 대부분의 패리패럴 디바이스는 전부 내장됩니다. 즉, 알아야 할 레지스터가 기하급수적으로 많아집니다. 모든 디바이스를 전부 동시에 사용하는 것은 아니기는 하나 예전보다는 더 제조사에서 제공하는 데이터 시트에 의존해야 하는 상황이 됩니다. 또한, Core 자체도 32비트로 바뀌면서 초기화 코드가 많아집니다. 이것을 보완하기 위해 STMicroelectronics사에서는 STM32CubeMX라는 툴을 제공합니다. 이 툴을 사용하면 Core 초기화와 PLL 설정, 내장 패리패럴 디바이스 초기화 코드를 자동으로 생성해 줍니다.  

마지막으로 2018년 1월에 TrueSTUDIO를 인수하여 개발 툴을 무료로 배포하고 있습니다. 최근의 추세를 보면 제조사에서 개발 툴을 만든 회사를 인수하여 무료로 제공하거나 기존에 유료로 판매하던 개발 툴을 무료화하는 경우가 많습니다.

<그림4> STM32F MCU Image

 

위 이미지는 STMicroelectronics에서 제공하는 이미지입니다. STM32 MCU는 많은 종류가 있어서 위에서 말한 STM32CubeMX를 사용해서 개발품에 많은 MCU를 찾는 것이 효율적입니다. 이 글을 쓰는 지금 가장 고성능의 Cortex-M 시리즈로는 Cortex-M7으로 속도는 200 Mhz 이상이고, FPU도 배정도 연산 가능한 Core를 내장하고 있습니다.

STMicroelectronics사도 지난날 ATMEL 사와 같은 길을 걸을지 훨씬 오랫동안 주력 MCU의 자리를 유지할지는 지켜볼 필요가 있을 것이나, 지금까지의 상황으로 보면 적극적인 개발 툴의 지원과 컴파일러사 인수 후 무료화 함으로써 개발에 들어가는 비용을 낮추어서 더 많은 개발자들이 비용에 대한 부담을 줄이고 지속적으로 사용할 수 있는 기반을 마련했다고 볼 수 있습니다. 이에 더해 계속 발전하고 있는 Cortex-M 시리즈에 맞는 신규 디바이스를 계속 개발 생산한다면 ATMEL의 AVR보다 더 오랫동안 사용되는 MCU가 될 수 있다고 생각됩니다.

'Technical Note' 카테고리의 다른 글

한글 Lorem Ipsum  (0) 2019.07.08
C언어 컴파일러 들  (0) 2019.06.06
마이크로컨트롤러의 발전  (0) 2019.06.06
ASCII Table (아스키코드 표)  (0) 2019.06.06
도스 프로그래밍 (메모리 모델)  (0) 2019.06.06
운영체제가 하는 일  (0) 2019.06.06

댓글(0)

Designed by JB FACTORY