임베디드 시스템/STM32-LTDC,LCD-TFT,LVGL

C-배열 데이터를 디스플레이로 전송하는 두 가지 방법: LTDC vs SPI

지노랩/JinoLab 2025. 7. 18. 11:53

임베디드 그래픽 애플리케이션에서, **C-배열(C-array)**로 준비된 비트맵 데이터를 실제 화면에 그려 주는 핵심 메커니즘은 크게 두 가지입니다.
STM32 계열 칩 중 일부 보드는 LTDC(LCD-TFT Display Controller) 주변장치를 활용하고, 그 외 보드는 SPI(Serial Peripheral Interface) 혹은 유사 직렬 인터페이스를 사용합니다.
이번 포스팅에서는 두 방식을 전문 엔지니어 눈높이에 맞춰 차근차근 비교·정리해 드립니다.


1. LTDC 기반 전송 방법

1.1 LTDC가 하는 일

  • 버스 마스터 역할
  • 프레임 버퍼(C-배열)에서 원하는 주소를 직접 읽어
  • 24비트 RGB 병렬 인터페이스와 함께 VSYNC/HSYNC/DE/CLK 같은 동기 신호를 디스플레이 모듈로 스트리밍

CPU 개입 없이 DMA 수준으로 메모리→패널 전송이 이루어지므로,
화면 갱신 타이밍이 일정하고 고속 애니메이션 구현에 유리합니다.

1.2 설정 코드 흐름

  1. 프레임 버퍼 주소 등록
// hltdc: HAL_LTDC 핸들러
// frame1_bitmap: 첫 번째 프레임 C-배열 시작 주소
HAL_LTDC_SetAddress(&hltdc, (uint32_t)frame1_bitmap, LTDC_LAYER_1);
  1. TDC 활성화
__HAL_LTDC_ENABLE(&hltdc);
  1. Optional) 레이어 변경
    필요 시 HAL_LTDC_Reload()로 레이어 교체 타이밍 지정 가능

이후 LTDC는 백그라운드에서 계속 프레임 버퍼 데이터를 읽어 패널로 전송합니다.


2. SPI 기반 전송 방법

2.1 동작 원리

  1. CPU 또는 DMA가 플래시에 저장된 C-배열을 읽고
  2. SPI 주변장치의 데이터 레지스터에 쓴 뒤
  3. CLK/MOSI 선을 통해 디스플레이 모듈로 전송

하드웨어 LTDC가 없는 보드에서도 표준 SPI만으로 그래픽을 구현할 수 있습니다.

2.2 코드 예시: 블로킹 전송

// hspi: HAL_SPI 핸들러
// frame_bitmap: RGB565 포맷 C-배열
uint32_t total_pixels = 480 * 270;
for (uint32_t i = 0; i < total_pixels; i++) {
    // 한 픽셀(2바이트) 전송
    HAL_SPI_Transmit(&hspi, (uint8_t*)&frame_bitmap[i], 2, HAL_MAX_DELAY);
}

2.3 성능 최적화: DMA 활용

// 메모리 → SPI(페리퍼럴) 자동 전송 설정
HAL_SPI_Transmit_DMA(&hspi, (uint8_t*)frame_bitmap, total_pixels * 2);
// 전송 완료 인터럽트로 다음 동작 제어 가능

DMA를 사용하면 CPU 개입 없이 대용량 그래픽 데이터를 백그라운드로 전송할 수 있어,
CPU는 그래픽 처리 외 로직에 집중할 수 있습니다.


3. 두 방식 비교

항목 LTDC SPI (또는 직렬)

지원 보드 STM32F4 시리즈 Discovery/F7 시리즈 등 모든 NUCLEO 보드, 저사양 MCU
데이터 인터페이스 24라인 병렬 + VSYNC/HSYNC/DE/CLK 신호 단일/다중 MOSI, SCLK, CS
CPU 부담 거의 없음 (DMA 수준) 블로킹 전송 시 높음, DMA 사용 시 중간
설정 복잡도 다수 레지스터 초기화 필요 (해상도·타이밍) 간단: SPI 설정 + 반복문/ DMA 호출
전송 속도 매우 빠름 (최대 해상도·프레임율 지원) SPI 대역폭에 의존 (수십~수백 Mbps)

4. 결론 및 적용 가이드

  • 고속 애니메이션, 복수 레이어, 고해상도 구현이 필요하다면 LTDC 사용을 추천
  • 간단한 UI, 저메모리·저사양 보드에는 SPI + DMA 방식이 적합
  • 실제 설계 시
    1. 보드 데이터시트로 LTDC 지원 여부 확인
    2. SPI 대역폭DMA 채널 수 검토
    3. 영상 해상도, 픽셀 포맷, 프레임 버퍼 크기를 계산해 메모리 예산 맞추기

다음 포스팅에서는 병렬 RGB vs MIPI DSI vs CSI 등 다양한 디스플레이 인터페이스의 특성과 설계 포인트를 다룹니다.