JINTBEAT Design Life

SPI - 기본 개념 (CPOL / CPHA) 본문

🖥️ - ARM

SPI - 기본 개념 (CPOL / CPHA)

jintbeat_design 2026. 5. 16. 05:49
반응형

 

SPI의 CPOL / CPHA

 

SPI 모드는 보통 이렇게 표현한다.

 

Mode CPOL CPHA
Mode 0 0 0
Mode 1 0 1
Mode 2 1 0
Mode 3 1 1

 

- CPOL : Clock Polarity → Clock의 기본 상태(idle state)

- CPHA : Clock Phase → 어느 edge에서 sampling 할지

 

CPOL = Clock Polarity

 

CLK이 쉬고 있을 때, idle 상태가 LOW냐 HIGH냐를 정함

 

CPOL = 0 → idle CLK = LOW
CPOL = 1 → idle CLK = HIGH

 

CPHA = Clock Phase

 

데이터를 첫번 째 edge에서 읽을 지, 두 번째 edge에서 읽을 지를 정함.

 

CPHA = 0 → 첫 번째 edge에서 sampling
CPHA = 1 → 두 번째 edge에서 sampling

 

여기서 "첫 번째 edge"는 /CS가 LOW로 내려가고 나서 처음 발생하는 SCLK edge를 말함.

 

Mode 0 : CPOL = 0, CPHA = 0

 

 

Mode 0은 CLK 기본 값이 LOW이고, rising edge에서 데이터를 읽음.

Idle CLK  = LOW
Sample    = Rising edge
Change    = Falling edge

 

SPI Flash에서 가장 흔하게 쓰는 모드.

 

Mode 1 : CPOL = 0, CPHA = 1

 

 

 

 

Mode 1도 CLK의 기본 값은 LOW이다. 하지만 첫 번째 edge가 아니라 두번 째 edge에서 읽기 때문에, falling edge에서 sample한다.

 

Mode 2 : CPOL = 1, CPHA = 0

 

 

Mode 2는 CLK의 기본 값이 HIGH이고, CPHA = 0이므로 첫 번째 edge에서 sample한다.

IDLE이 HIGH니까, 첫 번째 edge는 falling edge이다.

 

Mode 3 : CPOL = 1, CPHA = 1

 

 

CLK의 기본 값이 HIGH이고, 두 번째 edge에서 sample하기 때문에, rising edge에서 데이터를 읽음.

 

한 쪽 edge에서 데이터 변경 + 반대쪽 edge에서 데이터 sampling!!!

 

즉, Master가 데이터를 바꾸는 edge와 Slave가 데이터를 읽는 edge가 같으면 위험하다. 데이터가 바뀌는 순간에 읽으면

Setup / Hold Timing이 깨질 수 있기 때문이다.

 

그래서 보통 : Chage edge → 데이터 준비, Sample edge → 안정된 데이터 읽기

구조로 동작한다.

 

Winbond SPI Flash 같은 디바이스는 보통 Mode 0과 Mode 3을 지원한다. 

 

둘은 차이가 있어 보이지만, sample edge는 둘 다 rising edge이다.

 

Mode 0: idle LOW,  rising edge sample
Mode 3: idle HIGH, rising edge sample

 

차이는 통신 시작 전/후 CLK idle 상태이다. 

그래서 Flash 입장에서는 /CS가 내려간 후 clock edge 기준으로 데이터를 맞춰 처리할 수 있어서 Mode 0/3 둘다 지원하는 경우가 많다.

 

 

 

 

📋 : Chatgpt 질의 응답 내용을 바탕으로 작성된 내용입니다.

 

 

 

 

 

 

 

 

반응형

'🖥️ - ARM' 카테고리의 다른 글

SPI - Daisy Chain  (0) 2026.05.26
Barrel Shifter란?  (0) 2026.04.15
ELF(Executable and Linkable Format) 이란?  (2) 2026.04.12
Linker - (2)  (2) 2026.04.09
Linker - (1)  (0) 2026.04.09