MCU Q&A ② 마이크로컨트롤러(MCU)는 우리 일상생활의 밥솥에서부터 최첨단 자동차까지 그 쓰임새가 다양한 핵심적인 부품이다. 그렇다면 우리는 MCU의 어디까지 알고 있는 것일까. 단지 자신이 쓰고자 하는 시스템에 걸맞는 기본적인 스펙만을 따져 제품을 선택하는가. 또는 EEPROM을 MCU에 어떻게 연결하는지, MCU와 DSP의 차이점은 무엇인지, MCU 주변장치를 선택하는 기준은 무엇인지 궁금하지 않는가. e4ds 뉴스는 4회에 걸쳐 MCU Q&A를 연재한다. 평소에 궁금했던 점이나 간과했던 정보들이 제품 선택에 도움이 됐으면 한다
<MCU Q&A ②.
마이크로컨트롤러(MCU)는 우리 일상생활의 밥솥에서부터 최첨단 자동차까지 그 쓰임새가 다양한 핵심적인 부품이다. 그렇다면 우리는 MCU의 어디까지 알고 있는 것일까. 단지 자신이 쓰고자 하는 시스템에 걸맞는 기본적인 스펙만을 따져 제품을 선택하는가. 또는 EEPROM을 MCU에 어떻게 연결하는지, MCU와 DSP의 차이점은 무엇인지, MCU 주변장치를 선택하는 기준은 무엇인지 궁금하지 않는가. e4ds 뉴스는 4회에 걸쳐 MCU Q&A를 연재한다. 평소에 궁금했던 점이나 간과했던 정보들이 제품 선택에 도움이 됐으면 한다.>
마사루 스가이(Masaru Sugai)
ST마이크로일렉트로닉스(www.st.com)
1회: MCU를 선택할 때 어떤 기준을 적용해야 하나요?
2회: EEPROM을 MCU에 어떻게 연결하나요?
3회: MCU와 DSP의 차이점은 무엇입니까?
4회: MCU 주변장치 부품 선택 가이드 전원
<QUESTION>
외부 메모리로 사용하기 위해 EEPROM(Electrically Erasable Programmable Read-Only Memory)을 MCU 에 연결하고 싶습니다. 연결할 수 있는 많은 방법이 있다고 들었습니다. 다양한 옵션을 설명해 주시겠어요?
<EXPLANATION>
EEPROM의 경우 SPI(Serial Peripheral Interface), I2C(Inter-Integrated Circuit), Microwire, 1-Wire를 포함하여 여러 가지 다양한 데이터 액세스 방법을 사용할 수 있습니다. 많은 MCU는 주변장치 기능으로 SPI 및 I2C를 포함하고 있기 때문에 주로 이들 두 가지 방법이 사용됩니다. 한 예로 ST마이크로일렉트로닉스(STMicroelectronics, 이하 ST)에서 제작한 EEPROM을 STM8L 시리즈 MCU에 어떻게 연결하는지 살펴보겠습니다. I2C 버스는 풀업 레지스터와 함께 단 2개의 양방향 NMOS 오픈 드레인 신호 라인을 갖고 있습니다. 그림 1(a)는 I2C를 버스 표준으로 사용하는 M24xxx 시리즈 EEPROM에 연결된 MCU를 보여줍니다.
SPI 신호 라인은 SCK, MISO, MOSI, SS의 4 종류가 있습니다. 그림 1(b)은 M95xxx 시리즈 EEPROM에 연결된 MCU의 한 예를 보여줍니다. 단자 이름이 SPI 신호 이름과 다르기 때문에 신호 라인은 SPI 신호 이름으로 표시됩니다.
그림 1. EEPROM을 MCU에 연결하기
MCU 하드웨어는 I2C 버스와 SPI 버스에 대해 모두 기본적인 통신 제어를 수행하지만 추가적인 소프트웨어가 필요합니다. 제어 소프트웨어의 동작은 사용하는 MCU 종류에 따라 다르므로 자세한 내용은 관련 사용자 매뉴얼을 참조하십시오.
MCU와 EEPROM 인터페이싱하기
EEPROM의 데이터 액세스 방법은 직렬 버스 방식과 병렬 버스 방식 두 가지로 나눌 수 있습니다. 병렬 버스 방식은 많은 수의 신호 라인을 사용해야 하므로 – 예를 들면 데이터 신호에 8비트, 어드레스 신호에 (메모리 크기에 따라) 수 비트 등 - 대부분 직렬 버스 방식이 흔히 사용됩니다. 일반적인 직렬 버스 표준에는 SPI, I2C, Microwire, 1-Wire 등이 있습니다. 최근 대부분의 MCU는 주변장치 기능으로 SPI와 I2C를 포함하고 있으며, 주로 이들 중 하나가 MCU를 위한 인터페이스로 사용됩니다.
어드레스 데이터와 연산 코드(op-code)는 디바이스 간 통신을 통해 교환됩니다. op-code는 EEPROM마다 다르며, Write Enable/Disable, Register Read/Write, Data Read/Write를 포함하고 있습니다. 이러한 신호는 MCU 소프트웨어를 사용하여 제어됩니다.
I2C
I2C는 Philips에 의해 개발된 통신 프로토콜을 지원하는 직렬 버스입니다. 각 노드는 7비트 어드레스가 할당됩니다. 16개 노드를 위한 어드레스가 예약되지만, 나머지(이론상 최대 112개)는 단일 버스에 연결할 수 있습니다.
그림 2. STM8L 시리즈 MCU의 I2C 모듈
I2C 통신 프로토콜은 기본적으로 Philips에서 사용하는 프로토콜을 준수하지만, 각 MCU는 조금씩 다른 방식으로 프로토콜을 사용합니다. 이 프로토콜을 보다 명확히 이해할 수 있도록 일례로 STM8L 시리즈 MCU의 I2C 기능을 살펴보겠습니다(그림 2).
먼저, 통신 흐름을 보겠습니다(그림 2(a)). 마스터 디바이스가 클록 신호(SCL)를 발생시키고, 시작 조건(Start Condition)이 발생되면 데이터 전송이 시작되고, 그런 다음 정지 조건(Stop Condition)이 발생되면 데이터 전송이 종료됩니다.
마스터 디바이스에 설치된 소프트웨어가 시작 조건과 정지 조건을 모두 발생시킵니다. MCU가 EEPROM에 액세스할 때 MCU는 마스터 디바이스입니다. 슬레이브 모드에서 자체 어드레스와 범용 호출 어드레스를 인식할 수 있습니다. 데이터 및 어드레스는 8비트 데이터 단위(1바이트)로 MSB부터 먼저 전송됩니다. 시작 조건이 발생된 후 전송되는 첫 번째 바이트에는 어드레스가 포함되어 있습니다. 어드레스는 항상 마스터 디바이스로부터 전송됩니다. 8 클록 사이클로 구성된 1바이트가 전송된 후 9번째 클록 펄스가 발생됩니다. 이러한 간격 동안 수신기는 승인 비트(ACK)를 송신기에 전송해야 합니다.
그림 3. STM8L 시리즈 MCU의 I2C 통신 프로토콜
다음으로 그림 2(b)를 보기로 하겠습니다. 그림은 MCU 내부의 I2C 모듈 구조를 보여줍니다. 여기서 SDA는 데이터 신호이고, SCL은 클록입니다. 모듈은 출력 또는 입력을 위해 데이터를 비트별로 시프트하는 데이터 시프트 레지스터를 포함하고 있습니다. 사용자는 데이터 레지스터를 통해 송/수신된 데이터에 액세스할 수 있습니다. 모듈에는 또한 어드레스와 PEC 값을 검사하는 비교기가 내장돼 있습니다. “PEC”는 “Packet Error Check”의 약자를 의미합니다. 이것은 데이터가 정상적으로 전송되었는지 여부를 검사하는 데 사용되는 추가적인 정보입니다.
통신 속도는 표준 모드가 100kbps인 SCL 주파수에 의해 결정됩니다. 그러나 STM8L은 400kbps의 통신 속도를 달성할 수 있는 Fast Mode를 제공합니다.
전송 시퀀스를 제어하기 위해서는 소프트웨어를 사용해야 합니다. STM8L에는 그림 3과 같은 시퀀스 다이어그램이 있는 사용자 매뉴얼이 제공됩니다. 이러한 시퀀스를 따라 소프트웨어를 생성하면 통신 연산을 실행할 수 있습니다.
I2C 절차를 따르면 각 EEPROM에 지정된 어드레스, 데이터, op-code(Write Enable/Disable, Register Read/Write, Data Read/Write)를 통신할 수 있습니다.
SPI
SPI는 Motorola(현재 Freescale Semiconductor, Inc.)에 의해 제안된 통신 표준입니다. SPI의 물리적 기능은 클록-동기 직렬 통신과 동일합니다. SPI는 클록(SCLK), 마스터 출력/슬레이브 입력(MOSI), 마스터 입력/슬레이브 출력(MISO), 슬레이브 선택(SS)의 4종류 통신 신호를 사용합니다. SCK는 마스터 디바이스에서 발생하는 출력인 동기 클록이고, MOSI 및 MISO는 SCK에 동기화된 데이터 신호이며, SS는 슬레이브 인식 신호입니다. 마스터 디바이스가 Low 신호를 출력하면, 슬레이브는 SS를 입력으로 수신하고, 만약 그 상태가 Low이면 슬레이브는 선택을 승인합니다. 이 신호는 칩 선택(CS)과 유사합니다.
SPI 통신 프로토콜은 기본적으로 Motorola에서 사용하는 프로토콜을 준수하지만, 각 MCU는 조금씩 다른 방식으로 프로토콜을 사용합니다. SPI 기능을 보다 명확히 이해할 수 있도록 STM8L 시리즈 MCU를 다시 한번 살펴보겠습니다(그림 4).
그림 4. STM8L 시리즈 MCU의 SPI 모듈
그림 4(a)에서 보듯이 클록 위상과 관련해 데이터 래칭의 타이밍은 두 가지 파라미터인 클록 극성(CPOL)과 클록 위상(CPHA)에 의해 결정할 수 있습니다. STM8L은 출력 또는 입력을 위해 데이터를 비트별로 시프트하는 내장된 데이터 시프트 레지스터를 포함하고 있습니다. 전송된 데이터는 Tx 버퍼에 저장되고, 수신된 데이터는 Rx 버퍼에 저장됩니다. CPU는 Rx 및 Tx 버퍼를 통해 송/수신된 데이터에 액세스합니다.
데이터 전송 속도는 SCK 주파수에 의해 결정됩니다. STM8L는 보레이트 발생기를 내장하고 있으므로, 이 주파수를 원하는 값으로 설정할 수 있습니다. STM8L의 최대 레이트는 8MHz이지만, 규격은 사용하는 MCU에 따라 다르므로 해당 MCU에 제공되는 데이터 시트를 참조하십시오.
I2C와 달리 SPI 통신은 기본적으로 클록-동기 직렬 통신과 동일하기 때문에 SPI는 사용자가 전송 시퀀스를 제어할 필요가 없습니다. 1바이트는 클록 사이클당 1비트 레이트로 전송됩니다.
동기 직렬 통신과 같은 방식으로 각 EEPROM에 지정된 어드레스, 데이터, op-code(Write Enable/Disable, Register Read/Write, Data Read/Write)를 통신할 수 있습니다.
참조 정보
EEPROM을 MCU에 연결하는 실용적인 방법에 대해서는 다음을 참조하십시오.
(1) M24LR-디스커버리: EEPROM(M24LR) 및 MCU(STM8L)는 4.5cm × 9.0cm PCB에 실장됩니다. 이 보드는 I2C를 통해 EEPROM과 MCU 사이에서 통신 연산을 실행할 수 있습니다. 회로 다이어그램과 이 소프트웨어에 대한 정보는 다음 사이트에서 무료로 다운로드할 수 있습니다.
http://www.st.com/web/en/catalog/tools/FM116/SC1444/PF253360?sc=m24lr04e-discovery
(2) 애플리케이션 노트 AN2014: 이 문서는 ST EEPROM을 표준 MCU에 연결하는 방법을 설명합니다. 또한 I2C, SPI, Microwire을 사용하여 연결하는 자세한 설명을 볼 수 있습니다. PDF 파일은 다음 사이트에서 무료로 다운로드할 수 있습니다.
http://www.st.com/web/en/resource/technical/document/application_note/CD00042024.pdf