본문 바로가기

Mobility/자동차 통신 기술

CAN통신에 관하여 - 2

저번 포스팅에서 CAN통신의 등장 배경부터 특징까지 알아보았습니다. 자동차의 직접적인 성능과 밀접한 관련이 있는 통신 기법인 만큼 통신 방법의 이론, 그리고 ECU(Electric Control Unit)들의 정상 동작 여부를 test할 수 있는 소프트웨어 사용 능력이 engineer에게 중요한 역량일 것입니다.

 

CAN 통신 포스팅 1번에서 적었던 Vector 사의 CANOE가 대표적인 소프트웨어인데요, CANOE를 통해 실제 모듈을 연결하여 ECU 들의 통신 상태를 체크할 수 있고, 센서 등 모듈의 parameter를 조절하며 다양한 조건에서의 test를 할 수 있습니다. 지금은 diagnotics, streaming 정도의 간단한 기능만 사용해봤지만 앞으로 이것 저것 만져봐야겠습니다.

 

아무튼, 오늘은 CAN통신의 동작 원리, message에서 중요한 역할을 하는 ID 같은 기술적인 부분을 살펴보도록 하죠.

 


 

CAN BUS 네트워크 동작 원리

 

 

CAN은 다중 통신망(Multi Master Network)이며 CSMA/CD+AMP(Carrier Sense Multiple Access with Collision Detection) 방식을 사용합니다. 한 노드에서 메시지를 보내기 전 버스 라인이 idle 상태인지 살피고 메시지 간의 충돌을 검출합니다. 여기서 CSMA/CD에 관련된 내용을 잠시 알아보고 가시죠.

 

 

 

*CSMA/CD: 기존 CSMA 방식에 신호 충돌 처리 절차를 더한 방식으로, 유선 링크의 경우 사용합니다. frame을 전송함과 동시에 다른 두 개의 port를 이용하여 충돌을 감지하는 것인데요, frame이 목적지에 도착하기 전에 다름 frame의 bit가 발견되면 충돌이 일어나는 것으로 판단합니다. 그렇다면 CSMA는 뭘까요?

CSMA는 한글로 번역시 '반송파 감지 다중 접근'으로 해석되며 "Sense before trasmit" 즉, "전송 이전에 감지"의 원칙에 기반을 두고 있어 신호의 충돌 가능성을 줄일 수 있는 프로토콜입니다. 하지만, 하나의 노드에서 전송된 메시지의 첫 번째 bit가 다른 모든 노드에 도달하여 감지하기 까지는 시간이 걸립니다. 따라서 bus가 idle 상태라고 하더라도, 실제로는 다른 노드에서 보낸 신호의 첫 번째 bit가 도달되기 전일 수 있습니다. 이 때 충돌이 일어납니다.

 

 

그리고 CAN 네트워크 상에서 메시지는 송신측이나 수신측의 주소를 포함하지 않으며, ID로 통신한다는 것을 저번 포스팅에서 언급했습니다. 이 ID는 각 노드마다 부여되는 유일한 식별자로써, 11bits 혹은 29bits를 가집니다. 다음 그림과 같이 메시지 처음 부분에 표시하게 되죠.

 

 

출처: Fescaro 기술 blog

 

 

한 노드에서 보낸 메시지는 네트워크 내 모든 노드에서 수신하게 되고, 자신이 필요한 경우에만 받아들이며 필요하지 않은 메시지는 무시합니다. 또, 여러 노드에서 전송된 메시지의 경우 ID 숫자를 비교하여 우선순위를 정하여 수신하게 됩니다. 이 때 ID 숫자가 낮을 수록 우선 순위가 높습니다.우선 순위가 밀린 메시지는 다음 cycle에 재전송되게 됩니다.

 

 

즉, 각 메시지의 식별자는 11bits(CAN 2.0A), 29bits(CAN 2.0B)를 가지며 CAN 통신 메시지의 맨 앞에 위치하게 되고, 이는 메시지들의 우선 순위를 부여하는 역할을 수행합니다.

 

 

* CAN 2.0A(11bits ID) controller는 표준 CAN format의 메시지만 전송, 수신이 가능하며 확장 CAN format인 CAN 2.0B의 메시지는 무시합니다. 그러나 CAN 2.0B controller는 양쪽 메시지 format(CAN 2.0A, CAN 2.0B)을 송/수신할 수 있습니다.

 

 

CAN 2.0A, CAN 2.0B 메시지 송/수신, 출처: fescaro 기술 blog

 

 

마지막으로, CAN 메시지의 4가지 frame type을 살펴보겠습니다. CAN 통신에서는 4가지의 frame type을 정의하는데요, 다음과 같습니다.

 

- data frame: 데이터 전송에 사용

- remote frame: 수신할 노드에서 송신 노드에게 원하는 메시지를 요청할 때 사용

- error frame: 통신 메시지 상 error 감지, system에 알릴 때 사용

- overload frame: 메시지 동기화에 사용

 

 

 

자세한 내용은 fescaro 기술 blog에 잘 나와있습니다. CAN 통신의 대부분 내용을 공부한 blog이기도 하니, 한 번씩 읽어보시길 추천드립니다. (https://www.fescaro.com/kr/insight/blog.php#content)


 

 

이렇게 CAN 통신에 대한 대략적인 공부를 해봤습니다. 통신 기술인 만큼 기계공학도인 제가 모든 부분을 이해할 수 없었지만, 그래도 어느정도 큰 틀은 이해한 것 같습니다.

 

이론은 이 정도로 하고 실제 CAN 통신을 진단, 실시간으로 streaming 할 수 있는 software를 사용하며 역량을 길러야겠습니다.

 


 

이제 곧 추석이네요. 입사한지 한 달이 채 안됐는데 7일이나 쉰다고 생각하니 운이 좋은 것 같습니다.

실제 현업에서 종사하시는 선배분들과 대화할 수록 내년에 있을 공채 지원 때 더 많은 것을 준비해야겠다는 생각이 듭니다. 우선은 기사 자격증을 고민하고 있는데요, 일하면서 공부하는게 쉽진 않겠지만 시간을 내서 준비해봐야겠습니다.

 

 

곧 또 다른 기술에 관한 글로 찾아올게요!

행복한 연휴 보내세요 😁

'Mobility > 자동차 통신 기술' 카테고리의 다른 글

AUTOSAR에 관하여 - 1  (0) 2023.11.22
CAN 통신에 관하여 - 1  (0) 2023.09.20