본문 바로가기
SENT통신

[SPC통신] 1강. SPC Protocol 소개

by 아이언벨 2023. 2. 15.
반응형
SPC = Master Trigger + SENT Frame

 

SPC은 기본적으로 SENT통신을 기반으로 합니다.

SENT 통신을 잘 모르신다면 우선 SENT통신에 대해 이해하셔야 합니다.

 

 

SENT통신에 대한 자세한 내용은 링크 걸어두겠습니다.

 

SENT통신 포스팅 1 : https://ironbell.tistory.com/entry/sent01

 

[SENT통신] 1강. SENT(Single Edge Nibble Transmission)/SAE J2716 개요

안녕하세요. 아이언벨입니다. 첫 블로그 글은 SENT 통신에 대해 이야기해보겠습니다. (지금 진행하는 프로젝트가 SENT통신 이어서 첫 블로그 글이 SENT 통신이 되어버렸네요.) SENT란? SENT는 Single Edhe

ironbell.tistory.com

SENT통신 포스팅 2 : https://ironbell.tistory.com/entry/sent02

 

[SENT통신] 2강. SENT(Single Edge Nibble Transmission)/SAE J2716 장점 및 Frame 정보

안녕하세요. 아이언벨입니다. [SENT] SENT(Single Edge Nibble Transmission)/SAE J2716 이란? #1 (https://ironbell.tistory.com/2) 에 이어 두 번째 SENT 통신 관련 블로그를 작성하겠습니다. 첫 번째 글에 언급한 단방향

ironbell.tistory.com

 

SPC Protocol이란

 

SPC = Short PWM Code의 약자입니다. 제가 알고 있는 PWM이 Pulse Witdh Modulation의 약자라면 흠..

왜!? Short PWM Code라고 이름을 붙였는지 정확히 이해는 되지 않습니다. 

 

추측하자면 Trigger 신호 때문인거 같습니다.

Short = 한개의 Frame에 1개의 Trigger 송신 

그리고 Trigger의 Pulse witdh를 제어해서 송신하기 때문에 Short PWM Code 라고 이름을 붙였지 않았을까? 생각합니다.

 

 

그럼 SPC에 대해 간단하게 설명하겠습니다.

 

SENT와 SPC의 연결 구조

 

SENT통신은 1:1 통신이며 단방향 통신입니다.

즉 Master1개와 Slave1개로 동작하며 Slave(Sensor)가 일방적으로 Master에게 데이터를 전송합니다.

 

SPC의 등장 이유는 Slave의 수가 여러개 일때 보다 효율적으로 관리하기 위해서 입니다.

 

SENT에서 Slave가 여러개라면 어떻게 해야할까요?

Slave의 수만큼 와이어가 연결되어야 하죠.

그리고 Master의 SENT Data를 입력 받는 Port도 Slave의 수만큼 증가해야 합니다.

그런데 자동차 통신은 어떻게든 Wire를 줄여 비용과 무게를 줄이려고 합니다.

그래서 SENT에서 발전된 것이 SPC입니다.

 

SPC통신은 1:n(최소 1개 ~ 최대 4개) 통신이며 양방향 통신입니다.

1개의 Master가 최대 4개의 Slave와 연결하여 통신을 하기 위해 만들어졌습니다.

양방향이라고 하여 Master가 Slave에게 데이터를 전달하지는 않습니다

Master는 단순히 n번째 Slave에게 데이터를 취득하기 위해 트리거를 발생시키는 역할만 합니다.

여기서 중요한 핵심은 이 트리거 신호의 Pulse width(tick time)로 특정 Slave에 데이터를 요청한다는 것입니다.

 

NXP SPC 문서에 발견한 SPC Frame Format

 

기존 SENT는 데이터를 수신받는 Master에게 일방적인 데이터를 전송하였다면,

SPC는 Master가 n번째 Slave에게만 데이터를 요구할 수 도 있으며,

1~4번까지 차래대로 데이터를 요구할 수 도 있습니다.

또 필요에 따라 어떤 Slave에게도 데이터를 요청하지 않아 통신 Bus가 계속 Idle상태를 유지할 수 도 있습니다.

즉 Master가 모든 타이밍을 제어합니다. 

 

그런데 보통은 1번 -> 2번 -> 3번 -> 4번 -> 1번 이렇게 순차적으로 측정하게 만듭니다.

제가 진행한 SPC 관련 프로젝트는 모두 그랬습니다.

 

SPC의 주의사항은 Slave는 고유의 ID(0~3)가 정의되어 있어야 하며, 한 개의 Bus에 중복되는 ID가 있으면 안 됩니다.

 

 

SPS통신 구현

  • Master

원하는 n번째 Slave에게 해당 Tick Time으로 Trigger를 발생시키고 이후 나오는 SENT Frame를 취득하면 됩니다.

기존 SENT통신에서 SENT Data를 읽기만 했다면 SPC에서는 Trigger를 발생시켜야 하는 임무가 필요합니다.

당연히 Slave가 보내주는 SENT Frame이 끝나고 다음 Trigger를 발생시키는 타이밍 제어도 필요합니다.

제가 구현했을 때는 Slave가 보내주는 SENT Frame 끝나고 바로 Trigger를 발생시키도 SPC의 영향은 없었습니다.

SPC 자료를 수집하면서 Trigger와 Trigger 사이 혹은 SENT Frame 이후 Trigger 발생 시간에 대한 정의는 찾을 수 없었습니다.

 

  • Slave

기존 SENT통신에서는 단순히 전원이 인가되어 MCU가 살아나는 순간부터 연속적으로 SENT Frame을 전송했다면

SPC에서는 Master Trigger를 모니터링 하고 있다가 자신의 ID가 불리면 한개의 SENT Frame을 전송하면 됩니다. 

 

 

마무리

SENT통신을 이해하셨다면 SPC는 별거 없다는 느끼셨을 것입니다.

그런데 구현하기 위해서는 조금 복잡해 집니다.

일방적으로 받기만 하거나, 보내기만 했던 SENT와는 다르게 Master, Slave모두 보내고 받는 기능이 추가되어야 하니까요.

 

문의사항 있으면 댓글로 남겨주세요.

반응형

댓글