| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- keynote 도형 복사
- booth multiplier 설계
- Async FIFO
- 연산 가속기 설계
- keynote 도형 회전
- c
- keynote
- keynote 사용법
- Cortex-M3
- Keynote 표
- cadence conformal eco
- asynchronous fifo
- i2c
- ACK Polling
- FIFO 설계
- LEC
- C언어
- ISR
- malloc
- 곱셈기 설계
- LinkedList
- ARM
- 자료구조
- Sync FIFO
- booth multiplier
- booth algorithm
- SPI mode
- BSS
- 비동기 FIFO 구조
- lec check
- Today
- Total
JINTBEAT Design Life
SPI - 기본 개념 (CPOL / CPHA) 본문
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 |