데이터계측분석/데이터통신 기술자료

SPI 통신 프로토콜

에이티에스 2023. 9. 16. 17:06
728x90
 

SPI 또는 직렬 주변 장치 인터페이스는 근거리 통신에 사용되는 동기식 직렬 통신 인터페이스입니다. 주로 임베디드 시스템에서 한 장치에서 다른 장치로 데이터를 전송하는 데 사용됩니다. 1979년 모토로라에서 설계하고 1980년대 중반에 개발했습니다. 이후 전자 커뮤니티와 업계에서 비공식 표준이 되었습니다.

 

SPI는 컨트롤러와 주변 장치 간의 통신에 사용되는 전이중 인터페이스입니다. 즉, 두 장치가 동시에 데이터를 보낼 수 있습니다. SPI는 별도의 클록 라인을 사용하여 데이터 비트가 전송되는 속도를 동기화합니다. 데이터는 상승 또는 하강 클럭 에지에서 동기화됩니다. 따라서 SPI 통신은 하나의 데이터 라인에만 의존하지 않습니다.

 

SPI 연결에는 4개의 로직 신호가 있습니다.

  • SCLK: 직렬 클럭(컨트롤러에서 출력)
  • COPI: 컨트롤러 출력, 주변 장치 입력(컨트롤러에서 데이터 출력)
  • CIPO: 컨트롤러 입력, 주변 장치 출력(주변 장치에서 데이터 출력)
  • CS: Chip Select(데이터가 전송되고 있음을 알리는 컨트롤러의 출력)

 

직렬 클럭은 때때로 CLK 또는 SCK로 축약되기도 합니다. 컨트롤러 장치의 COPI 라인은 주변 장치의 COPI 라인에 연결됩니다. 마찬가지로 컨트롤러의 CIPO는 주변 장치의 CIPO에 연결됩니다. I2C의 주소 개념과 달리 SPI는 데이터를 수신할 주변 장치를 나타내는 라인인 칩 선택을 사용합니다. 일부 통신 프로토콜에는 여러 컨트롤러가 있을 수 있지만 SPI에는 항상 하나의 컨트롤러만 있습니다. 버스에서 여러 컨트롤러를 연결하려는 경우 다른 통신 프로토콜을 사용하는 것이 좋습니다.

 

데이터 전송

새로운 데이터 전송을 시작하기 위해 컨트롤러는 먼저 칩 선택 핀을 High에서 Low로 설정합니다. 즉, 논리 1에서 논리 0으로. 이러한 방식으로 주변 장치를 선택하면 컨트롤러가 클럭을 생성하고 데이터 신호 전송을 시작합니다. 이를 단순화하기 위해 먼저 하나의 주변 장치에만 초점을 맞출 것입니다.

 

SPI로 문자 S를 보낼때 컨트롤러는 클럭 신호의 상승 에지 또는 하강 에지에 대한 데이터를 보낼 것입니다.

 

이 예를 간단히 설명하고 상승 에지를 사용한다고 합시다.

ASCII의 대문자 S는 01010011입니다. 직렬 통신은 일반적으로 LSB(최하위 비트)가 있는 데이터를 먼저 전송하므로 이 순서를 반대로 하여 11001010 얻습니다. 수신기(데이터를 수신하는 장치)가 클럭의 상승 에지를 감지하면 데이터 라인(COPI)을 보고 정보 비트를 읽습니다.

 

데이터 수신

반응형

주변 장치에서 컨트롤러로 데이터를 보내려면 별도의 CIPO 회선을 사용합니다. 이름에서 알 수 있듯이 데이터는 컨트롤러에서 "내부"로 이동하고 주변 장치에서 "외부"로 이동합니다. 데이터는 미리 결정된 클럭 주기 수로 다시 전송됩니다. 컨트롤러는 주변 장치가 일부 데이터를 반환할지 여부와 그 양을 미리 알아야 합니다. 그렇지 않으면 얼마나 많은 클럭 신호를 보내야 하는지 알 수 없으며 일부 데이터가 손실될 수 있습니다.

 

또 다른 예를 살펴 보겠습니다. 이번에는 주변 장치가 컨트롤러로부터 데이터를 수신할 때 대문자 E를 보내도록 합시다. ASCII의 대문자 E는 01000101이므로 10100010로 전송됩니다. 아래 이미지에서 볼 수 있듯이 컨트롤러는 두 개의 클럭 주기를 생성합니다. 첫 번째 동안 컨트롤러는 데이터를 보내고 주변 장치는 유휴 상태입니다. 두 번째 주기 동안 컨트롤러는 유휴 상태가 되고 주변 장치는 일부 데이터를 다시 보냅니다.

SPI는 전이중이므로 이 작업이 동시에 발생할 수 있습니다. 

 

다중 주변 장치 구성(칩 선택)

앞서 언급했듯이 하나의 SPI 컨트롤러에 여러 주변 장치를 연결할 수 있습니다. 주변 장치와 통신하기 위해 컨트롤러는 CS 신호를 활성화하여 주변 장치를 선택합니다. 이를 수행하는 방법에는 일반 모드 또는 데이지 체인 모드의 두 가지가 있습니다.

 

일반 모드

컨트롤러에는 각 SCLK, COPI 및 CIPO 회선 중 하나가 있지만 주변 장치 수에 따라 여러 CS 회선이 있습니다. 주변 장치는 동일한 CS 라인을 공유할 수 없으며 각 회선에는 고유한 CS 라인이 있어야 합니다.

 

특정 주변 장치로 데이터를 보내려면 컨트롤러에서 칩 선택 신호를 활성화해야 합니다. 즉, CS 라인의 신호는 낮게 당겨지고 다른 신호는 높게 유지됩니다. 이것은 비유적으로 말해서 주변 장치가 데이터를 살펴보게 합니다. 다른 모든 사람들은 전송되는 데이터를 볼 수 있지만 신호가 높기 때문에 데이터를 않습니다.

 

COPI/CIPO 회선의 클럭 및 데이터는 선택한 주변 장치에서만 사용할 수 있습니다. 둘 이상의 주변 장치를 선택하면(신호가 낮음) CIPO 라인의 데이터가 손상됩니다. 컨트롤러가 어떤 주변 장치가 데이터를 전송하는지 파악할 수 있는 방법은 없습니다.

 

이미지에서 볼 수 있듯이 주변 장치의 수가 증가함에 따라 CS 라인의 수도 증가합니다. 이렇게 하면 컨트롤러에서 많은 I/O 핀을 쉽게 차지하고 주변 장치 수를 제한할 수 있습니다. 

 

반응형

데이지 체인 모드

 컨트롤러와 모든 주변 장치에는 각 SCLK, COPI, CIPO 및 CS 라인 중 하나가 있습니다. 일반 모드와 달리 데이지 체인 모드에서는 단일 CS 라인이 연결된 모든 주변 장치로 이동합니다.

 

모드는 컨트롤러의 COPI 회선을 첫 번째 주변 장치의 COPI 회선에 연결하여 시작됩니다. 그 후의 각 주변 장치는 CIPO 회선을 다음 주변 장치의 COPI 회선에 연결합니다. 마지막으로 연결된 주변 장치에 도달하면 CIPO 회선을 컨트롤러의 CIPO 회선에 연결합니다. 그런 다음 CS 라인이 올라가 모든 칩을 동시에 활성화합니다.

 

컨트롤러는 모든 데이터를 한 번에 보냅니다. 데이터는 한 주변 장치에서 다음 주변 장치로 오버플로됩니다. 기본적으로 주변 장치는 데이터를 가져와 이웃에게 전달합니다. 따라서 전송된 데이터의 첫 번째 비트는 마지막 주변 장치에서 끝납니다. 연결된 모든 주변 장치에 도달하려면 처음부터 충분한 데이터를 전송해야 합니다.

 

물이 데이터이고 병이 주변 장치인 물병을 채우는 것과 같다고 상상해 보십시오. 바닥(이 경우 마지막 주변 장치)을 먼저 채워야 합니다. 마지막으로 물을 채울 것은 병 상단 (첫 번째 주변 장치)입니다.

 

이 모드는 일반적으로 컨트롤러가 데이터를 다시 수신할 필요가 없는 출력 전용 시스템에서 사용됩니다. 이러한 상황에서 컨트롤러의 CIPO 라인을 반드시 연결할 필요는 없으며 차이가 없습니다. 그러나 데이터를 컨트롤러로 반환해야 하는 경우 해당 CIPO 회선을 연결된 상태로 유지하십시오.

 

데이지 체인을 사용하면 데이터 전송 속도를 감소시키면서 일반 모드보다 더 많은 주변 장치를 연결할 수 있습니다. 한 가지 주의해야 할 점은 이 모드가 모든 SPI 장치에서 지원되는 것은 아니라는 것입니다. 

 

 

SPI 모드(클럭 극성 및 위상)

데이터 비트는 상승 또는 하강 에지에서 전송될 수 있습니다.  데이터가 상승 또는 하강 에지에서 전송되는지 여부를 결정하기 위해 컨트롤러는 클럭 극성(CPOL) 및 클럭 위상(CPHA)을 구성합니다.

 

CPOL은 클럭 신호가 활성화되지 않았거나 소위 유휴 상태일 때 클럭 신호의 극성을 설정합니다. 유휴 상태는 칩 선택이 높고 전송 시작 시 로우로 전환되는 기간과 해당 전송이 끝날 때 로우로 전환되는 기간입니다. CPHA는 상승 또는 하강 클럭 에지를 사용하여 데이터를 샘플링 및/또는 시프트하는 클럭 위상을 선택합니다.

 

클럭 극성과 위상은 서로 다른 종류의 직렬 장치와 SPI 통신을 가능하게 합니다. CPOL과 CPHA는 모두 0 또는 1의 두 가지 상태를 가질 수 있습니다. CPOL과 CPHA 비트의 상태에 따라 4가지 SPI 모드를 사용할 수 있습니다. 

 

CPHA가 0이면 상승 또는 하강에 관계없이 첫 번째 클럭 에지에서 데이터가 캡처된다는 것입니다. CPHA가 1이면 두 번째 클럭 에지에서 데이터가 캡처됩니다. 이 경우 데이터는 첫 번째 전체 클럭 주기 전에 반주기 동안 안정적이어야 합니다.

 

반응형

다음은 이러한 네 가지 SPI 모드의 몇 가지 예입니다.

 

SPI 모드 0에서는 클록 펄스에 지연이 없습니다. 데이터는 상승하는 SCLK 에지에서 샘플링되고 하강 에지에서 바깥쪽으로 이동합니다. 이 모드의 유휴 상태에서 클럭 극성이 낮습니다.

 

.SPI 모드 1에서 클록 펄스는 약간의 지연(반주기) 후에 시작됩니다. 데이터는 하강 SCLK 에지에서 샘플링되고 상승 에지에서 바깥쪽으로 이동합니다. 이 모드의 유휴 상태에서 클럭 극성이 낮습니다.

 

반응형

SPI 모드 2에서는 클록 펄스에 지연이 없습니다. 데이터는 하강 SCLK 에지에서 샘플링되고 상승 에지에서 바깥쪽으로 이동합니다. 이 모드의 유휴 상태에서 클럭 극성이 높습니다.

 

SPI 모드 3에서 클록 펄스는 약간의 지연(반주기) 후에 시작됩니다. 데이터는 상승하는 SCLK 에지에서 샘플링되고 하강 에지에서 바깥쪽으로 이동합니다. 이 모드의 유휴 상태에서 클럭 극성이 높습니다.

 

가장 일반적인 모드는 0과 3이며 대부분의 SPI 장치가 이를 지원합니다.

 

SPI의 장단점

장점:

  • 여러 주변 장치를 가질 수 있습니다.
  • 간단한 장치와의 통신에 사용할 수 있습니다.
  • 양자 통신을 허용하는 전이중 인터페이스
  • UART 및 I2C 프로토콜보다 빠름
  • 클럭은 데이터 속도를 정의하며 수동 사양이 필요하지 않습니다.
  • 데이터 프레이밍이 필요하지 않습니다.

단점:

  • 하나의 컨트롤러만 가질 수 있습니다.
  • UART 및 I2C보다 더 많은 핀 사용
  • 단거리 전용(1미터 미만)
  • 칩 선택은 프로세서에서 추가 핀을 제거합니다.
  • 일반적으로 각 주변 장치에 대해 개별 CS 라인이 필요합니다.
  • 주변 장치는 서로 직접 통신할 수 없습니다.

 

728x90
반응형
그리드형

'데이터계측분석 > 데이터통신 기술자료' 카테고리의 다른 글

라우터와 스위치의 차이점  (0) 2023.09.19
I2C 통신 프로토콜  (0) 2023.09.17
UART 통신 프로토콜  (0) 2023.09.16
CANOpen 네트워크 토폴로지  (0) 2023.09.10
EtherCAT 프로토콜  (0) 2023.05.12