MCU는 CPU나 GPU와 다르게 낯설지만, 가장 많이 사용되는 반도체 중 하나다. ST 시스템 솔루션 랩의 유지 카와노 매니저에게 MCU의 활용성과 가능성이 얼마나 큰지 들어보자.
UART 통신, 내장 발진 회로로 구현 가능
클록 주파수 오류 2%∼3% 이내 UART 통신 동작
STM32F103, 사용자 주파수 조정 레지스터 제공
[편집자주]일반적으로 반도체라 하면 컴퓨터의 CPU와 메모리처럼 일반인에게 익숙한 반도체를 떠올리기 마련이다. 반면에 전자제품 구동을 위해서 핵심 반도체로 쓰이는 MCU(Micro Controller Unit)의 경우 일반적으로 우리가 쉽게 접하는 모든 전자제품에서 사용되고 있으면서도 일반인에게는 아직 낯선 반도체다. 이런 MCU가 최근 반도체 부족 사태로 인해 언론에 오르내리며, 일반인들에게 주목받기 시작했다. 이에 본지는 MCU 반도체 전문기업인 ST마이크로일렉트로닉스의 유지 카와노 매니저의 연재기고를 통해 MCU에 대해 전문적으로 알아보는 자리를 마련했다.
■ 질문
UART(Universal Asynchronous Receiver Transmitter) 통신을 사용할 계획이 있으며, 부품 수를 최소화하기 위해 UART를 위한 클록 소스로서 MCU 내장 발진 회로를 사용할 것을 고려하고 있다. UART 통신을 내장 발진 회로를 사용하여 구현할 수 있는지, 아니면 외부 발진 소자를 사용해야 하는지 궁금하다.
■ 답변
UART 통신을 위한 클록 단자는 없지만, UART는 MCU의 내부 클록과 동기화된다(그림 1 참조). 일반적으로 클록 주파수 오류가 2% 또는 3% 이내라면, UART 통신은 동작한다. MCU 내장 발진 회로의 주파수가 이 범위 이내라면 이를 사용할 수 있다. MCU가 PLL을 가지고 있고 UART가 PLL 출력 클록을 사용한다면, PLL 주파수 오류를 물론 고려해야만 한다. 또한 통신할 대응 소자의 클록 주파수 오류를 고려해야 한다. 소자가 2% 이상의 주파수 오류를 가지고 있는 경우, MCU 주파수 오류가 1% 이하여야 전체 오류가 3%를 초과하지 않아 통신 오류를 방지할 수 있다. MCU 내장 발진 회로와 PLL의 주파수 오류에 대한 정보는 데이터시트를 확인하기 바란다.
▲그림 1 : UART(Universal Asynchronous Receiver Transmitter)
■ 클록 소스에서 UART까지의 경로
MCU 내장 발진 회로와 UART 모듈 사이의 경로 상에는 UART 통신 속도를 조정하기 위한 복수의 클록 분배기(프리스케일러라고도 한다)가 있다. 일부 MCU는 내장 발진 회로 바로 다음이나 UART 모듈에 보다 가깝게 위치하여 주파수를 증가시키는 PLL(phase locked loop)를 가지고 있다. 그림 2는 이들 2개의 구성을 나타낸 것이다(PLL 여부에 따라). 그림 2(a)는 PLL을 포함하고 있는 ST마이크로일렉트로닉스의 STM32F103의 구성이며, 그림 2(b)는 PLL이 없는 ST마이크로일렉트로닉스의 STM8S이다. 그림 2(a)에서 내장 발진 회로에 의해 생성된 클록은 PLL에 공급되기 전의 1/2이다. PLL은 클록을 2에서 16으로 증가시켜 다른 분배기에 공급한다. 이 분배기는 UART 모듈에 주파수를 제공하기 전에 사용자가 설계한 주파수에 클록을 제공하기 위해 다시 클록을 나눈다.
그림 2(b)의 구성은 PLL을 가지고 있지 않다. 클록 주파수는 UART 모듈에 공급되기 전에 사용자-설계 주파수가 되기 위해 2개의 분배기에 의해 분배된다.
다음으로 이 경로의 각 회로에 의해 생성되는 주파수 오류에 대해 살펴보자.
▲그림 2 : 클록 소스에서 UART까지의 경로의 예
■ MCU 내장 발진 회로
일반적으로 MCU에 내장된 발진 회로들은 레지스터 (R)과 커패시터 (C)를 사용하는 링 발진기(ring oscillator)이다. 주파수는 R과 C의 값에 의해 결정되고; 이들 값은 MCU 제조 조건에 따라 달라지기 때문에 발진 주파수 역시 제품에 따라 달라진다.
일부 최신 MCU의 주파수는 일정 범위의 주파수 오류를 유지하기 위해 출고 전에 보정된다(튜닝 또는 트리밍). 대부분의 경우, 약 1%의 범위로 조정된다. 그림 3은 출고 시 STM32F103의 주파수 오류를 나타낸 것이다.
출고 전에 보정된 내장 발진 회로의 오류를 그림 3의 빨간색 상자로 나타냈다. 표는 이러한 형태의 MCU에 대한 주파수 오류가 25 ℃의 TA(MCU 온도)에 대해 -1.1%에서 +1.8% 사이로 보정되었다는 것을 나타내고 있다. -40℃에서 105℃ 사이의 TA에 대해 오류는 -2%에서 2.5% 사이로 변동된다. 이것은 UART 통신의 허용범위 내에 있다.
STM32F103은 사용자들이 구매 후에 조정할 수 있도록 내장 발진 회로의 주파수를 조정할 수 있는 레지스터를 제공하며, 이에 대한 규격을 그림 3에 파란색 상자로 표시했다. RCC_CR 레지스터를 설정하여 사용자는 오류를 1% 이내로 낮출 수 있기 때문에 UART 통신을 지원할 수 있다. 주의할 것은 보정을 위해서는 기준 주파수가 필요하다는 것이다. 최소 가능 오류 특성으로 정확한 주파수를 생성하기 위해 보정이 반드시 필요하다. 이 주파수를 기준으로 조정을 해야만 한다. 보정 시 시계용 수정 발진기를 기준 주파수 발생기로 사용할 수 있다.
▲그림 3 : 실제 제품의 내장 발진 회로 에러
■ 분배기
분배기(divider)는 일반적으로 클록을 분할하는 디지털(논리) 회로이기 때문에 분배기 이후에는 주파수 오류가 변화하지 않고 동일한 비율로 유지된다. 분배기는 기본적인 다운카운터(down-counter )로 구성되어 있어, 매번 2개를 계산하는 펄스를 출력하거나 1/2 분배기, 1/3 분배기 또는 1/n 분배기를 구성하기 위해 각각 n 클록 펄스를 출력한다.
클록 펄스를 계수하는 것은 주파수 오류에 영향을 미치지 않기 때문에 원래의 주파수 오류 그대로 전송된다. 하지만, 분할 방식이 MCU에 따라 다르기 때문에 MCU 제조업체를 통해 확인해야만 한다.
■ PLL (phase locked loop)
PLL은 클록을 2, 3 또는 n으로 증폭시킬 수 있다. 증폭된 클록의 주파수 오류는 기본적으로 변화하지 않지만, 증폭된 클록 파형은 지터를 포함하고 있다. 지터는 클록 펄스 신호의 상승/하강 에지 위치가 일시적으로 이동하는 현상이다.
그림 4는 STM32F103의 PLL 규격과 지터 특성을 나타낸 것이다. 지터 값을 빨간색 상자로 나타냈다. 단위가 ps이기 때문에 값은 매우 작다. 물론 지터가 부분적으로 클록 주기를 변동시키지만, 전체 클록 주기에는 영향을 미치지 않으며, 이것은 주파수가 영향을 받지 않는다는 것을 의미한다.
하지만, 이러한 세부적인 사항은 STM32F103에만 해당하는 것이다. 다양한 MCU들은 각기 다른 PLL 형태와 특성을 가지고 있다. PLL의 특성에 대해서는 각 MCU의 데이터시트를 확인해야만 하며, PLL이 주파수 오류를 생성한다면 이들이 UART 통신 오류의 원인이 될 수 있는지를 반드시 고려해야 한다.
▲그림 4 : PLL 특성
■ 랩업(Wrap-up)
요약하면, 가장 영향력이 큰 요인은 MCU 내장 발진 회로의 주파수 오류다. 분배기와 PLL은 일반적으로 주파수 오류를 발생시키지 않는다. (주의: 각 MCU의 세부사항을 확인해야 한다.)
그러므로 UART 통신 가능 여부는 MCU의 내장 발진 회로와 통신 관련 부품의 주파수 오류를 고려하여 결정해야 한다.
■ 기타 통신 방법
다른 통신 방법들에 대해서 간단하게 설명한다. 일반적으로 클록 동기식 통신 방법은 데이터-동기화된 클록을 출력한다. 이러한 클록을 사용하여 입력 데이터를 동기화할 경우에는 주파수 오류를 신경 쓸 필요가 없다. 예를 들어 SPI(serial peripheral interface)와 I2C(inter-integrated circuit)는 클록 동기식 방법이며, MCU 내부 클록 주파수 오류에 영향을 받지 않는다.
UART 외에 USB(universal serial bus)가 비동기식 통신 방법이다. 각 USB 규격(예를 들어, 완전-속도 또는 고속)은 주파수 오류를 규정하고 있다. 일부는 주파수 오류가 ?0.25% 이내여야 한다고 지정하고 있으며, 이 경우 MCU 내장 발진 회로를 사용할 수 없기 때문에 외부 발진기를 사용해야만 한다.
그러나 오늘날 몇몇 MCU는 외부 수정 발진기 없이 USB 통신을 할 수 있다(예를 들어, ST마이크로일렉트로닉스의 STM32L0x2). 각 MCU의 규격을 확인하기 바란다.