MCU는 CPU나 GPU와 다르게 낯설지만, 가장 많이 사용되는 반도체 중 하나다. ST 시스템 솔루션 랩의 유지 카와노 매니저에게 MCU의 활용성과 가능성이 얼마나 큰지 들어보자.
MCU 연결 툴 선택, 용도·콘텐츠 따라서 결정
ICE, 실시간 추적 등 향상된 디버깅 기능 제공
MCU 업체, JTAG 디버깅 모듈 포함 제품 공급
[편집자주]일반적으로 반도체라 하면 컴퓨터의 CPU와 메모리처럼 일반인에게 익숙한 반도체를 떠올리기 마련이다. 반면에 전자제품 구동을 위해서 핵심 반도체로 쓰이는 MCU(Micro Controller Unit)의 경우 일반적으로 우리가 쉽게 접하는 모든 전자제품에서 사용되고 있으면서도 일반인에게는 아직 낯선 반도체다. 이런 MCU가 최근 반도체 부족 사태로 인해 언론에 오르내리며, 일반인들에게 주목받기 시작했다. 이에 본지는 MCU 반도체 전문기업인 ST마이크로일렉트로닉스의 유지 카와노 매니저의 연재기고를 통해 MCU에 대해 전문적으로 알아보는 자리를 마련했다.
MCU(마이크로컨트롤러) 소프트웨어의 개발 환경에 관한 이전 글에서는 MCU를 이용한 시스템 개발에 필요한 툴과 IDE(integrated development environment)를 위주로 전반적인 개발 작업에 대해서 설명하였다. 이번 기사에서는 호스트 PC를 대상 보드로 연결하고자 할 때 사용할 수 있는 다양한 툴(디버그 케이블, 회로내 에뮬레이터, 기타 에뮬레이터)과 자신의 용도에 적합한 툴을 선택하는 것에 대해서 설명하려고 한다.
MCU 소프트웨어 개발 시에 디버깅 작업을 하기 위해서는 호스트 PC를 대상 보드로 연결하기 위해서 툴을 필요로 한다. 통상적으로 여기에는 두 가지 타입의 툴을 이용할 수 있다. 회로내 에뮬레이터(in-circuit emulator)와 온칩 에뮬레이터(on-chip emulator)가 그것이다. 그러면 이들 툴의 특징에 대해서 살펴보자.
■ 회로내 에뮬레이터, 대상 보드 상 비어 있는 MCU 소켓 프로브 연결 디버깅
회로내 에뮬레이터(ICE, in-circuit emulators)를 이용하면 대상 보드 상의 비어 있는 MCU 소켓으로 프로브를 연결해서 디버깅을 할 수 있다. ICE는 내부적으로 MCU에 해당되는 에뮬레이션 기능과 메모리칩을 포함하고 있는 것으로서, MCU를 대신해서 목표 보드 상의 신호들을 모니터링하고 제어할 수 있다. ICE의 에뮬레이션 기능이 CPU를 대신해서 목표 보드 상의 신호들을 이용해서 주변장치 회로들을 에뮬레이트한다. ICE의 가장 두드러진 특징은 실시간 추적(real-time tracing) 같은 향상된 디버깅 기능을 제공한다는 것이다. 소프트웨어 개발 시에 문제가 발생했을 때는 ICE를 이용해서 문제의 원인을 찾아낼 수 있다. 요즘에는 흔히 회로내 에뮬레이터를 단순히 "ICE"가 아니라 "full ICE"라고 한다(그림 1).
▲그림 1 : 회로 내 에뮬레이터(ICE)
ICE는 실시간 추적 같은 향상된 디버깅 기능을 제공하는 대신에, 다음과 같은 단점이 있다.
o 대상 보드로 소켓을 갖추어야 한다.
o ICE 하드웨어는 가격이 비싸다.
o MCU 사양에 따라서 적합한 ICE 모델을 선택해야 한다.
이러한 단점 때문에 오늘날에는 MCU 소프트웨어 개발 시에 흔히 온칩 에뮬레이터(on-chip emulator)를 이용하고 있으나, 소프트웨어를 상세하게 분석하고자 하는 경우에는 여전히 ICE가 널리 이용되고 있다. 그리고 당연히 소프트웨어 개발 작업의 조기 단계에서부터 ICE를 사용하고자 하는 개발 엔지니어들도 여전히 존재하고 있다.
■ 온칩 에뮬레이터, 디버그 케이블·장치 명령 컨버터 기능 탑재
오늘날 많은 경우에 플래시 메모리를 내부적으로 통합하고 있는 MCU들은 디버깅 모듈을 내부적으로 포함하고 있다. 호스트 PC 상의 IDE가 "프로그램 실행(run the program)"이나 "프로그램 중지(stop the program)"와 같은 명령을 실행하면, 디버그 케이블(또는 대상 보드) 안에 설치돼 있는 명령 컨버터가 이 명령을 MCU의 디버깅 모듈이 해석할 수 있는 것으로 변환하고, 디버깅 모듈이 수신된 명령에 따라서 CPU로 명령을 전송한다(그림 2).
▲그림 2 : 온칩 에뮬레이터
호스트 PC와 대상 MCU를 연결하기 위해서 사용하는 디버그 케이블이나 장치가 명령 컨버터 기능을 갖추고 있으면 이것을 온칩 에뮬레이터(on-chip emulators)라고 한다. 오늘날 이용되고 있는 온칩 에뮬레이터는 크게 다음과 같은 두 가지 타입으로 분류할 수 있다.
o JTAG 에뮬레이터
JTAG 에뮬레이터는 JTAG(Joint Text Action Group)라고 하는 기관에서 보드 테스트 기능을 토대로 해서 디버그 기능을 향상시켜서 개발한 에뮬레이터 타입이다. 다수의 MCU 업체들에서 JTAG 디버깅 모듈을 포함하는 MCU 제품을 제공하고 있다. 이와 함께 다수의 써드파티 업체들(툴 업체들)에서 각기 업체들에서 제조한 MCU에 이용할 수 있도록 JTAG 에뮬레이터를 제공하고 있다. 그러므로 예를 들어서 2건의 개발 작업이 각기 다른 MCU를 이용해야 할 때 이들 MCU가 둘 다 JTAG 디버깅 모듈을 포함하고 있고 동일한 코어 타입이라고 한다면(또 때로는 서로 다른 코어 타입이라 할지라도) JTAG 에뮬레이터를 재사용할 수 있으므로 툴에 대한 투자비용을 절감할 수 있다는 뜻이 된다. STMicroelectronics(ST)는 STM32 시리즈 MCU 제품을 제공하고 있는데 이들 모든 제품은 ARMⓡ Cortex-M™ 코어(M0/M3/M4)를 채택하고 있다. 이와 함께 ST는 이 시리즈에 호환 가능한 JTAG 에뮬레이터로서 ST-LINK/V2를 제공하고 있다.
o 전용적 에뮬레이터
이 타입의 에뮬레이터는 특정 MCU 업체의 고유한 코어를 채택한 MCU에 이용하기 위한 것이다. 통상적으로 고유 코어를 채택한 MCU는 그 업체에 고유한 디버깅 모듈을 포함한다. 각기 MCU 업체나 써드파티 업체에서 이와 같은 고유한 디버깅 모듈을 처리하기 위한 에뮬레이터를 제공하고 있다. 전용적 에뮬레이터는 각기 디버깅 모듈에 이용하도록 최적화된 것으로서 다른 업체의 모듈에는 사용할 수 없다. 그러므로 범용적이지 않다.
회로내 에뮬레이터와 온칩 에뮬레이터에 관한 더 자세한 내용은 해당 써드파티 업체들의 웹사이트에서 볼 수 있다.
어떤 MCU를 선택하느냐에 따라서 그 MCU로 설치되어 있는 디버깅 모듈이 달라진다. 만약 MCU가 JTAG 모듈을 포함하고 있는 것이라면 JTAG 에뮬레이터가 필요할 것이다. 또 마찬가지로 선택한 MCU가 고유 코어를 채택하고 있다면 그 코어와 호환 가능한 디버깅 모듈을 사용해야 할 것이고 그에 따라서 적합한 전용적 에뮬레이터가 필요할 것이다.
그러므로 어떤 타입의 온칩 에뮬레이터를 선택하느냐는 사용하는 MCU에 달렸다. 또한 온칩 에뮬레이터를 선택하느냐 회로내 에뮬레이터를 선택하느냐는 디버깅의 용도와 디버깅하고자 하는 콘텐츠에 따라서 결정할 수 있을 것이다.