그라운드 임베디드 EN 유튜브 구독

실험실

SPI 통신 시뮬레이션

클럭 한 번에 한 비트씩, 마스터와 슬레이브가 동시에 주고받는 모습을 봅니다. 칩 선택, 네 가지 모드, 모드가 어긋났을 때 값이 밀리는 현상까지 확인합니다.

보내기

버스 파형 CS · SCK · MOSI · MISO

세로 점선이 마스터가 값을 읽는 순간입니다. 노란 띠는 지금 위치입니다.

계산 결과

보낸 값 (MOSI)
슬레이브가 내보낸 값
마스터가 읽은 값 (MISO)
한 바이트 시간

이렇게 해 보세요

  1. 보내기를 누르면 먼저 CS 선이 LOW로 내려갑니다. 그 슬레이브만 깨어나고, 다른 슬레이브의 MISO는 떠 있는 상태(회색)로 남습니다.
  2. 클럭이 한 번 뛸 때마다 MOSI로 한 비트가 나가고, 같은 순간 MISO로 한 비트가 들어옵니다. 마스터 화면의 TX와 RX가 함께 채워지는 것을 보세요.
  3. 대상을 슬레이브 B로 바꾸면 CS1이 내려가고 B가 응답합니다. 클럭과 데이터 선은 같이 쓰지만 CS는 칩마다 따로입니다.
  4. 모드를 0에서 3으로 바꿔 보세요. 쉴 때 클럭이 HIGH로 바뀌지만 값은 똑같이 읽힙니다. 두 모드 모두 올라가는 에지에서 읽기 때문입니다.
  5. 모드를 1이나 2로 바꾸면 마스터가 내려가는 에지에서 읽게 되어, 받은 값이 한 비트 밀립니다. 통신이 안 되는 것이 아니라 값이 틀리게 읽히는 것이 모드 오류의 특징입니다.

읽는 법

SPI는 마스터와 슬레이브의 시프트 레지스터 두 개가 고리처럼 이어진 구조입니다. 마스터가 클럭을 여덟 번 주면 양쪽의 8비트가 통째로 자리를 바꿉니다. 그래서 읽기만 하고 싶어도 마스터는 무언가를 보내야 하고, 쓰기만 해도 무언가가 들어옵니다.

모드 쉴 때 클럭 (CPOL) 읽는 에지 (CPHA)
0 LOW 첫 번째 = 올라갈 때
1 LOW 두 번째 = 내려갈 때
2 HIGH 첫 번째 = 내려갈 때
3 HIGH 두 번째 = 올라갈 때

이 실험실의 두 슬레이브는 올라가는 에지에서 읽고 내려가는 에지에서 값을 바꾸는 칩으로 가정했습니다. 많은 센서와 플래시 메모리가 이렇게 동작하며, 그래서 모드 0과 3을 모두 지원한다고 적혀 있습니다.

자세한 설명은 SPI 노트에 있습니다.

FREE PDF무료 전자책 3권 받기돌려 본 원리를 글로 정리해 두고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →