임베디드 C 코드 파헤치기2

hyeony·2025년 5월 13일

임베디드

목록 보기
2/10
post-thumbnail

1. Microcontroller란?

가. Introduction

Microccontroller(MCU)는 single chip 위에 있는 소형 컴퓨터 시스템이다. MCU은 임베디드 애플리케이션을 타겟으로 하기 때문에, 데스크탑 컴퓨터에 비해 메모리, 속도, 외부 인터페이스 등 리소스가 매우 한정적이다.

Microcontroller은 일반적으로 다음 요소를 포함한다.

프로세서(CPU), 휘발성/비휘발성 메모리(SRAM, 플래시, EEPROM 등), 입출력 인터페이스(I/O), 주변 장치(ADC, DAC, 타이머 등), 클럭 유닛, 버스 인터페이스

위 모든 것이 하나의 칩에 내장되어 있어서, MCU은 흔히 SoC(System on Chip)이라고 불린다.

나. Anatomy of a Typical Small Microcontroller


위 그림은 가장 간단한 구성이다. 실제 MCU은 위 그림보다 훨씬 복잡하다.

① CPU(중앙 처리 장치)

  • 프로그램 명령어를 실행하는 핵심 유닛

② 프로그램 메모리

  • 보통 비휘발성 메모리
  • 전원이 꺼져도 내용 유지

③ 데이터 메모리(휘발성)

  • 런타임 시 데이터 저장용
  • 전원 차단 시 내용 소멸
  • 일시적인 데이터 저장에 사용

④ 입출력 인터페이스(I/O)

  • 외부 기기(블루투스, 센서 등)와 통신할 때 사용
  • 예시: Serial I/O, Parallel I/O

⑤ 주소 버스 / 데이터 버스

  • CPU는 명령어 실행을 위해, 주소 버스를 통해 위치를 지정하고, 데이터 버스를 통해 명령어 가져옴

⑥ 클럭 유닛

  • CPU에 클럭 신호를 공급하여 실행 속도 제어

다. MCU 예시 1 - STM32F407


위 그림은 STMicroelectronics의 STM32F407 마이크로컨트롤러이다. 중앙에는 ARM Cortex-M4 기반 CPU가 있다. 이 CPU는 ST에서 개발한 것이 아니라 ARM에서 개발하여 라이선스를 통해 ST가 사용하는 구조이다.

최대 속도는 180MHz로, 임베디드 애플리케이션에서는 매우 빠르다. 그리고 ST는 CPU 주위에 다양한 주변 장치를 추가했다.

① 연결 관련 주변장치: SPI, I2C, USB, CAN 등

② 아날로그 관련 장치: ADC, DAC, 온도센서 등

③ 제어 관련 장치: PWM, 타이머 등

④ 시스템 관련 장치: RTC(실시간 시계), PLL, 내부 RC 오실레이터

⑤ 내장 메모리:

  • 플래시 메모리: 코드 저장용(비휘발성)
  • SRAM: 데이터 저장용(휘발성)
  • OTP: 일회성 프로그래머블 메모리
  • 외부 메모리 인터페이스: SDRAM, 외부 플래시 등

라. MCU 예시 2 - PIC16F887

  • 8비트 애플리케이션에서 유명한 MCU
  • CPU는 ARM이 아닌 Microchip 고유 설계
  • 고유 명령어 세트를 사용하므로, STM32용 코드는 다시 컴파일해야 실행 가능
  • 내부 오실레이터, 타이머, EEPROM, I/O 포트, 아날로그 장치, PWM 등 기본 구조는 유사

마. MCU 예시 3 - Tiva 보드

  • Tiva 시리즈 MCU(Texas Instruments)가 탑재된 개발 보드
  • ARM Cortex-M4 기반 CPU(최대 80MHz)
  • 2KB EEPROM, 다양한 아날로그 및 연결 장치 포함
  • 특정 애플리케이션 목적에 따라 포함된 주변장치가 다름

2. Code Memory

Code 또는 Program Memory목적은 프로그램의 명령어와 상수 데이터를 저장하는 것이다.

가. ROM(Read Only Memory)

마이크로컨트롤러 내에는 다양한 종류의 Code Memory가 구현되어 있다. 가장 간단하고 cost가 효율적인 Program MemoryROM이다.

① MPROM(Mask Programmable Read Only Memory)

  • 한 번 프로그래밍하면 삭제할 수 없음

② EPROM(Ultraviolet Erasable Programmable ROM)

  • 삭제는 가능하나, 삭제 절차가 매우 번거로움
  • 회로에서 칩을 꺼내 자외선 기계에 넣고 자외선을 쬐어야 삭제 가능
  • 거의 사용 안 함

③ EEPROM(Electrically Erasable Programmable ROM)

  • 전기 전압으로 삭제 가능
  • TI의 마이크로컨트롤러가 on-chip에 2KB의 EEPROM 有 → ROM이라 불리긴 하나 삭제 가능

나. OTP(On Time Programmable)

ROM 외에도 다른 Code Memory가 있는데, 그것은 OTP이다. 이는 한 번만 프로그래밍할 수 있는 메모리를 의미한다.

다. Flash

요즘 마이크로컨트롤러 계에서는 Flash Memory가 매우 인기 있다. Flash도 전기적으로 지울 수 있는 Programmable ROM이다.

EEPROM이든, Flash든, 둘 다 비휘발성이고 지우고 다시 쓸 수 있는 메모리라는 점에서는 같지만, 둘은 제작 기술이 완전히 다르고, 비용과 속도 측면에서도 차이가 존재한다.

따라서 오늘날 마이크로컨트롤러에서 FlashCode Memory로서 지배적으로 사용되고 있다.

라. FRAM(Ferroelectric Random Access Memory)

Flash외에도 FRAM이라는 비휘발성 메모리가 존재한다. FRAMFerroelectric(강유전체) Random Access Memory를 의미한다.

하지만 대부분의 STM32 Microcontroller는 이 메모리를 Code Memory로 사용하지 않는다. 이는 Flash보다 비싸기 때문이다.

그럼에도 FRAMFlash보다 접근 속도가 매우 빨라 쓰인다. 특히, TI의 MSP Microcontroller 중 일부는 FRAM을 Code Memory로 채택했다.

예를 들어, MSP430FR2422 Microcontroller의 Block Diagram을 보면, 이 Microcontroller에는 Flash 대신 FRAM을 사용한 것을 알 수 있으며, 그 크기는 8KB이다. 이 Microcontroller는 초저전력 애플리케이션을 공략하는 것임을 시사한다.

3. Using Memory Browser

가. Code Implementation


위 코드를 컴파일하여 .elf라는 실행파일을 얻을 수 있었다. 이 파일을 target(NUCLEO-F411RE)에 다운로드하였다.

나. Memory Browsing

이번에는 Memory Browsing을 통해 임베디드 보드의 Flash에 명령어가 정말로 저장되었는지 확인해보려고 한다. 이때 마이크로컨트롤러의 프로그램 메모리의 base address가 필요하다. 이는 레퍼런스 매뉴얼에서 알 수 있다.

위 그림을 통해, 임베디드 비휘발성 메모리 구성을 알 수 있다. 총 512KB 용량의 Flash 메모리이다. 그 외에 System Memory라고 부르는 ROM이 있다. 사용자는 이 ROM에 쓸 수 없다.

ST는 이 메모리에 boot loader 코드를 미리 넣어놓았다. 테이블을 참고했을 때, 0x0800_0000부터 0x0807_FFFF까지 프로그램 명령어를 저장할 수 있다. 코드를 다운로드하면, 0x0800_0000부터 코드가 쌓이기 시작한다.

이번에는 데이터 메모리를 살펴보겠다. 데이터 메모리는 SRAM이며, 그 내용을 확인하기 전에 우선적으로 base address을 알아야 한다.

앞서 했던 방식으로 memoy browsing을 하면 정상적으로 저장되었음을 알 수 있다.

<참고 자료>
Kiran Nayak, Microcontroller Embedded C Programming: Absolute Beginners, Udemy, 2025.05.
TI 社 MSP430FR2422 Microcontroller, https://www.ti.com/product/ko-kr/MSP430FR2422
STM32F411xC/E advanced Arm®-based 32-bit MCUs - Reference manual

profile
Chung-Ang Univ. EEE.

0개의 댓글