SPI 통신 시뮬레이션
클럭 한 번에 한 비트씩, 마스터와 슬레이브가 동시에 주고받는 모습을 봅니다. 칩 선택, 네 가지 모드, 모드가 어긋났을 때 값이 밀리는 현상까지 확인합니다.
SPIIDLECS HIGH · 대기
밝으면 HIGH, 어두우면 LOW실제로는 수 µs 안에 끝나는 일을 느리게 보여 줍니다
3D 장면을 불러오는 중입니다
보내기
0~9, A~F로 두 자리를 입력해 주세요.
버스 파형 CS · SCK · MOSI · MISO
세로 점선이 마스터가 값을 읽는 순간입니다. 노란 띠는 지금 위치입니다.
계산 결과
- 보낸 값 (MOSI)
- 슬레이브가 내보낸 값
- 마스터가 읽은 값 (MISO)
- 한 바이트 시간
모드가 슬레이브와 맞지 않아 값이 한 비트 밀려 읽혔습니다. 통신은 되는 것처럼 보이지만 값이 틀립니다.
이렇게 해 보세요
- 보내기를 누르면 먼저 CS 선이 LOW로 내려갑니다. 그 슬레이브만 깨어나고, 다른 슬레이브의 MISO는 떠 있는 상태(회색)로 남습니다.
- 클럭이 한 번 뛸 때마다 MOSI로 한 비트가 나가고, 같은 순간 MISO로 한 비트가 들어옵니다. 마스터 화면의 TX와 RX가 함께 채워지는 것을 보세요.
- 대상을 슬레이브 B로 바꾸면 CS1이 내려가고 B가 응답합니다. 클럭과 데이터 선은 같이 쓰지만 CS는 칩마다 따로입니다.
- 모드를 0에서 3으로 바꿔 보세요. 쉴 때 클럭이 HIGH로 바뀌지만 값은 똑같이 읽힙니다. 두 모드 모두 올라가는 에지에서 읽기 때문입니다.
- 모드를 1이나 2로 바꾸면 마스터가 내려가는 에지에서 읽게 되어, 받은 값이 한 비트 밀립니다. 통신이 안 되는 것이 아니라 값이 틀리게 읽히는 것이 모드 오류의 특징입니다.
읽는 법
SPI는 마스터와 슬레이브의 시프트 레지스터 두 개가 고리처럼 이어진 구조입니다. 마스터가 클럭을 여덟 번 주면 양쪽의 8비트가 통째로 자리를 바꿉니다. 그래서 읽기만 하고 싶어도 마스터는 무언가를 보내야 하고, 쓰기만 해도 무언가가 들어옵니다.
| 모드 | 쉴 때 클럭 (CPOL) | 읽는 에지 (CPHA) |
|---|---|---|
| 0 | LOW | 첫 번째 = 올라갈 때 |
| 1 | LOW | 두 번째 = 내려갈 때 |
| 2 | HIGH | 첫 번째 = 내려갈 때 |
| 3 | HIGH | 두 번째 = 올라갈 때 |
이 실험실의 두 슬레이브는 올라가는 에지에서 읽고 내려가는 에지에서 값을 바꾸는 칩으로 가정했습니다. 많은 센서와 플래시 메모리가 이렇게 동작하며, 그래서 모드 0과 3을 모두 지원한다고 적혀 있습니다.
자세한 설명은 SPI 노트에 있습니다.