MCU는 CPU나 GPU와 다르게 낯설지만, 가장 많이 사용되는 반도체 중 하나다. ST 시스템 솔루션 랩의 유지 카와노 매니저에게 MCU의 활용성과 가능성이 얼마나 큰지 들어보자.
최선의 MCU 소프트웨어 선택, 소프트웨어 계층 이해 必
상당수 개발자, 디바이스 드라이버 사용 소프트웨어 개발
모든 소프트웨어 구조가 애플리케이션 소프트웨어를 필요
[편집자주]일반적으로 반도체라 하면 컴퓨터의 CPU와 메모리처럼 일반인에게 익숙한 반도체를 떠올리기 마련이다. 반면에 전자제품 구동을 위해서 핵심 반도체로 쓰이는 MCU(Micro Controller Unit)의 경우 일반적으로 우리가 쉽게 접하는 모든 전자제품에서 사용되고 있으면서도 일반인에게는 아직 낯선 반도체다. 이런 MCU가 최근 반도체 부족 사태로 인해 언론에 오르내리며, 일반인들에게 주목받기 시작했다. 이에 본지는 MCU 반도체 전문기업인 ST마이크로일렉트로닉스의 유지 카와노 매니저의 연재기고를 통해 MCU에 대해 전문적으로 알아보는 자리를 마련했다.
■ 필요와 환경에 맞는 소프트웨어 선택
이제는 MCU(마이크로컨트롤러)를 사용하여 시스템을 개발하는 데 필요한 개발 환경을 이해했을 것이다. 다음은 MCU를 구동하는 데 사용하는 소프트웨어를 간단히 살펴보자. 이를 통해 MCU 개발에 필요한 소프트웨어의 종류와 기능에 대해 이해하는 것은 물론 필요와 환경에 맞는 소프트웨어를 선택하는데 도움이 될 것이다.
■ 소프트웨어, MCU 구동 必
소프트웨어는 MCU를 구동하는 데 반드시 필요하며 다양한 종류가 있다. MCU 개발을 위해 사용하는 일반적인 소프트웨어 종류는 다음과 같다.
○ 디바이스 드라이버
디바이스 드라이버는 특정 주변 장치를 제어하는 데 사용할 API(application programming interface)를 정의한다. 예를 들어, ST마이크로일렉트로닉스(이하 ST)가 생산하는 32-bit MCU 시리즈 STM32는 표준 주변 장치 라이브러리로 디바이스 드라이버를 제공하기 때문에, 각 제품에 대해 모든 주변 장치를 평가할 수 있다. 이러한 지원으로 32 비트 MCU를 처음 사용하는 사용자들도 쉽게 MCU 개발을 시작할 수 있다.
○ 운영 체제
운영 체제(operating system, OS)는 애플리케이션 소프트웨어와 미들웨어가 디바이스에 상관없이 잘 사용될 수 있도록 하드웨어를 추상화하는 기본 소프트웨어이다. 잘 알려진 PC용 OS에는 윈도우즈(Windows)와 리눅스(Linux)가 있으며 스마트폰용으로는 안드로이드(Android)와 iOS가 있다. MCU에서는 RTOS(Real Time OS)가 많이 사용되고 있는데, MCU의 메모리 용량에 한계가 있기 때문에 상대적으로 소프트웨어 크기가 작다고 볼 수 있다.
○ 미들웨어
OS와 애플리케이션 소프트웨어 사이의 레이어(미들 레이어(middle layer))에 위치한 소프트웨어를 통칭하여 미들웨어라고 한다. 예를 들어, 미들웨어는 USB 및 이더넷 통신을 위한 프로토콜 스택과 파일 시스템, 코덱 및 그래픽 라이브러리 등이 있다.
○ 애플리케이션 소프트웨어
최상위 레이어에 있는 소프트웨어를 통칭하여 애플리케이션 소프트웨어라고 하며, 애플리케이션 구동에만 쓰인다. 애플리케이션 소프트웨어는 세부 애플리케이션 규격을 실현하는데 없어서는 안된다.
▲그림 1 : 계층화된 소프트웨어 아키텍처
소프트웨어 개념에 대한 이해를 돕기 위해 간단히 계층화된 소프트웨어 아키텍처의 일반적인 예를 살펴보자. 그림 1은 방금 설명한 소프트웨어 종류를 포함하고 있는 계층화된 소프트웨어 아키텍처를 보여준다. 맨 아래가 하드웨어 계층(물리 계층)이며, 맨 위가 애플리케이션 계층이다. 중간은 편의상 중간 계층(middle layers)이라고 한다.
먼저, 맨 아래 계층을 살펴 보자. 여기서 하드웨어 계층은 MCU를 나타낸다. MCU는 일반적으로 레지스터들을 이용하여 동작을 조정하며, 바이너리 데이터가 이들 레지스터에 기록되고, 그 각각은 MCU 동작의 특정 목적을 달성하기 위해 지정된다. 하지만, 대부분의 32-bit MCU는 엄청난 수의 레지스터를 처리해야 하기 때문에 동작이 수행될 때마다 레지스터들의 지정된 비트들을 설정하기 전에 모든 레지스터 주소를 확인하는 것은 비현실적이다. 따라서 물리 계층 바로 위에 있는 계층인 디바이스 드라이버를 사용하여 가능한 한 이러한 태스크를 수행하는 부담을 경감시킨다.
디바이스 드라이버는 아주 유용한 소프트웨어이다. 이것은 MCU의 주변 장치 설정에 따라 API를 정의한다. 예를 들어, SPI(serial peripheral interface)를 초기화하기 위해서는 레지스터에 대해 신경 쓸 필요 없이 단순히 SPI 초기화 함수를 호출하여 초기화 코드를 작성하면 된다.
▲그림 2 : 소프트웨어 아키텍처 예
상당수의 개발자들이 디바이스 드라이버를 사용하여 애플리케이션 소프트웨어를 개발하고 있다. 그림 2-1과 같이 이러한 개발자들은 하드웨어, 디바이스 드라이버, 애플리케이션 소프트웨어 등 3개의 계층으로 구성된 간단한 소프트웨어 구조를 사용한다.
일부는 제품에 OS를 적용하기도 하는데 이것은 모든 신제품의 OS 상에서 구동되는 애플리케이션 소프트웨어 데이터를 다시 활용하기 위해서이다. 이러한 경우 모든 신제품에 같은 OS를 인스톨하여 MCU가 기존 자산을 사용할 수 있고 기능을 변경하거나 추가할 수도 있다. 그림 2-2와 같이 이러한 경우에는 하드웨어, 디바이스 드라이버, OS, 애플리케이션 소프트웨어 등 4개의 계층으로 구성된 소프트웨어 구조를 사용한다.
OS는 일반적으로 이더넷, USB, 파일 시스템과 같은 상대적으로 복잡한 통신 기능을 사용해야 하는 제품에 사용된다. 이러한 경우에, 하드웨어, 디바이스 드라이버, OS, 미들웨어, 애플리케이션 소프트웨어 등 5계층 소프트웨어 구조를 형성하기 위해, 그림 2-3에 나타낸 바와 같이 프로토콜 스택 및 파일 시스템과 같은 미들웨어가 추가된다.
마지막으로, 애플리케이션 소프트웨어가 설치되어 MCU 소프트웨어 스택을 완성한다(모든 소프트웨어 구조가 애플리케이션 소프트웨어를 필요로 한다).
요약하면 각기 다른 종류의 다양한 소프트웨어가 MCU에 사용되며 다수의 계층으로 구분할 수 있다. 이러한 소프트웨어 계층들을 이해함으로써 이런 종류의 소프트웨어들이 애플리케이션에서 수행하는 역할에 대해 이해하고 가장 효율적인 최선의 소프트웨어를 선택할 수 있다.
실제 애플리케이션 개발 관점에서, 소프트웨어 구조의 형태를 선택할 때 실현될 기능(즉 요구되는 규격)이 최우선 순위 기준이지만, 자산의 재사용 가능성(또는 레거시 지원), 개발 기간, 예산 등과 같은 요소들도 거의 동등한 중요도를 가진다. 개별 개발자들은 각기 다른 요구사항 하에서 작업을 하기 때문에, 개발자들은 다음과 같은 딜레마에 직면할 수 있다: 써드-파티 소프트웨어를 사용하는 것이 요구되는 규격을 단기간 내에 충족시킬 수 있도록 보장할 수 있지만, 비용이 예산을 초과하게 되는 문제, 자체 소프트웨어를 개발하는 것이 비용을 절감할 수 있지만, 그렇게 할 경우에 허용된 개발 기간보다 많은 시간이 필요하게 되는 문제 등이다. 이 문서에서 제공하는 정보가 여러분의 환경에서 최상의 소프트웨어를 선택하는 데 도움이 되기를 기대한다.