RicoCheesethe studio log · v2.0
Live · KRRead posts
목록으로
뉴스PUBLISHED · 2026년 5월 20일·5 MIN READ

Bit-Banging, SPI, 그리고 CPLD

소프트웨어로 해야 할 일을 하드웨어에 맡겨야 하는 이유 — ESP32와 CPLD를 SPI로 연결해 타이밍 문제를 해결하는 과정을 살펴본다.

#esp32#learning#circuits#hardware
Circuits: Bit-Banging, SPI, and CPLD

소프트웨어로 해야 할 일을 하드웨어로 처리하려는 시도, 즉 "bit-banging"에 관한 작은 탐구다. 오늘의 초점은 SPI(Serial Peripheral Interface) 프로토콜이다.

전 세계에는 최대 7,000개에 달하는 통신 프로토콜이 존재한다는 주장도 있지만, 실제로 쓰는 건 소수에 불과하다. 하드웨어 영역도 다르지 않다.

Bit-Banging이란 #

Bit-banging은 하드웨어 전용 타이밍 로직을 소프트웨어로 직접 흉내 내는 기법이다. 소프트웨어 개발자가 잘 마주치지 않는 영역이지만, 하드웨어와 소프트웨어가 원활하게 맞물리려면 이 경계를 이해해야 한다.

SPI — Serial Peripheral Interface #

**SPI(Serial Peripheral Interface)**는 마이크로컨트롤러와 주변 장치 사이를 잇는 4선식(four-wire), 고속, 전이중(full-duplex) 동기 통신 프로토콜이다. 4개의 선(데이터, 클록, 칩 셀렉트, 그라운드)만으로 동작해 임베디드 시스템에서 폭넓게 쓰인다.

ESP32와 LED 스트립의 타이밍 문제 #

수업 프로젝트로 PLD를 회로에 구현하는 과제를 진행하다가, 타이밍이 정밀해야 하는 상황에서 CPLD가 얼마나 쓸모 있는지 직접 확인했다.

프로그래머블 LED를 ESP32에 직결하면 이런 문제가 생긴다.

  • ESP32는 멀티태스킹 OS를 실행하는데, Wi-Fi 인터럽트가 타이밍 정밀도를 떨어뜨린다.
  • 타이밍이 어긋나면 LED가 엉뚱한 색을 표시하거나 글리치가 생긴다.
  • 인터럽트를 끄면 Wi-Fi 패킷이 날아가고 연결이 불안정해진다.

bit-banging 방식은 Wi-Fi, 타이머, 시리얼 포트 인터럽트가 뒤엉켜 타이밍 어긋남을 더 심하게 만든다. 어느 정도 신뢰성을 확보하려면 CPU 사용률도 치솟는다.

해결책: ESP32 + CPLD + SPI #

멀티태스킹 OS와 라이트 쇼를 동시에 돌리려면, 타이밍이 까다로운 LED 구동을 하드웨어에 넘기면 된다. ESP32는 SPI를 통해 **CPLD(Complex Programmable Logic Device — 복잡 프로그래머블 논리 소자)**와 통신한다. 데이터, 클록, 셀렉트, 그라운드 선 하나씩 총 4개만 쓰면 된다.

CPLD는 ESP32로부터 시리얼 데이터를 받아 메모리에 저장한다. 여기에 펄스 생성기(pulse generator)를 CPLD 안에 함께 구성해 타이밍 문제를 막는다. SPI의 핵심은 데이터 전송 중 인터럽트가 없다는 점이다.

전송 속도는 클록 신호 주파수로 결정된다. 클록이 빠를수록 LED 업데이트가 잦고, 느릴수록 업데이트 간격이 벌어진다.

마더보드 클로즈업 — 집적 회로와 납땜 패드 Photo by Miguel Á. Padriñán on Pexels

실제 하드웨어에서의 구현 #

실제 하드웨어에서는 CPLD의 두 부분, 즉 SPI 수신기와 펄스 생성기를 기술하는 코드를 작성한다. 합성 도구(synthesis tool)가 이를 실제 논리 게이트와 플립플롭으로 바꿔준다.

이런 프로젝트에 쓸 수 있는 보드 중 하나가 Altera MAX II EPM240 CPLD Development Learning Board다. 상단에 GND와 +5V가 배치된 입력 핀 열, 중앙의 검은 사각형 안에 CPLD 프로그래머블 로직, 하단에 출력 핀 열이 자리 잡고 있다. 납땜 없이 핀만 꽂아도 된다.


이 글은 위 출처의 내용을 바탕으로 작성된 초안입니다. 원문의 의견과 정보를 그대로 전달하며, 별도의 견해를 포함하지 않습니다.