본문 바로가기

조금은 전문적인 이야기/자동차 통신

Keyword Protocol 2000 #Part 1 - Physical Layer


 자 드디어 프로토콜에 대한 설명으로 넘어왔다. 이번에 설명을 할 부분은 KWP2000의 Physical Layer 라는 녀석이다. 이 녀석은 SSF 14230-1 라는 문서에서 정의가 되고 있으며, 통신을 위한 전압 레벨 및, 하드웨어적인 부분을 정의한다. 


 즉, 진단기가 제대로 동작하기 위한 하드웨어의 규격을 정의하는 것이다. 


 현재 저가로 많이 돌아다니는 OBD - II 용 모듈들을 사용하면 그다지 생각하지 않아도 될 문제이지만, 알아둬야 할 부분이 있어 포스팅을 한다. 이 것을 알아두면 좋은 점은, 앞서 말한 저가형 OBD - II 모듈의 경우 엔진등의 시스템을 진단하기 위해서는 무리가 없지만, 제조사에 따라 해당 규격의 PIN을 사용하지 않는 경우가 많기 때문에, 좀 더 전문적인 진단툴을 위해서는 알아두어야 할 내용이기 떄문이다. 당연히 자신이 하드웨어에 대해 신경을 쓸 필요가 없어도 전혀 쓸데없는 이야기가 아니다. 이 부분은 전에 포스팅을 했었던 통신 신호 분석하기 에서 쓰이는 부분이라 분석을 위해서는 당연히 알고 있어야 하는 내용이기 때문이다. 


 먼저 이 Physical Layer 라는 녀석에 대해 말을 하자면 앞서 말한 것 처럼 하드웨어의 규격을 규정하는 부분이다. OSI7 Layer(Open Systems Interconnection Reference Model) 의 포스팅을 통해 대략적인 Layer에 대한 내용을 설명을 했는데, 그 중에서 가장 밑단에 있는 기초공사 부분이다. 단 자동차 통신에서는 중간의 단계는 모두 필요가 없고, Physical layer, Data link layer, Application layer 이 세단계만 필요하다. 나머지 부분들은 SID 등을 통해 "Application layer" 에서 모두 정의를 하고 있기 때문이다. 


 그럼 어떤식으로 통신이 이루어지는가에 대해서 알아보도록 해보자. 



 통신에 대한 가장 기본적이 개념도 이다. 역시 기본 정의된 문서 답게 아주 간단하게 나와있는데, 사실 이렇게 간단하지 만은 않다. KWP2000에서 사용하는 통신 라인인 K Line으로 이루어진 통신 선을 통해 Tester가 ECU들과 통신을 한다는 내용의 그림이다. 이 그림이 틀린 것은 아니지만, 이건 단순한 개념도일 뿐 좀더 자세한 그림은 다음과 같다. 



 자 영어가 아니라서 놀랐는가? 사실 이 그림은 위의 그림과 그렇게 큰 차이는 없다. 단지 좀더 세부적으로 보여줬을 뿐이다. 테스터기와 연결되기 전 자동차의 내부 회선에 대한부분이 조금 추가가 된 것인데, ECU들이 얽힌 뒤에 K Line 회선으로 몰려들고 있다. 이 부분에 대해서는 차량이나 제조사에 따라 하나의 PIN으로 모든 ECU와 통신을 하는 경우가 있고, 각 시스템이나 그룹 별로 지정된 PIN이 존재하는 경우가 있다. 대부분의 차량의 경우(아주 오래된 차량을 제외하면...) 내부의 통신라인은 그림에서 처럼 CAN으로 이루어져 있는 경우가 많으며, 그 라인들이 Analyzer를 통해 K Line으로 통합이 되는 형식으로 이루어져 있다. ECU로 부터 나온 선들이 DD라고 불리우는 사각형 박스로 들어오는데, 이 DD는 Diagnostic Device 즉 OBD Connector를 말한다. OBD - II Connector의 PIN 지정은 제조사에 따라 틀리기 때문에 큰 의미는 없으나, 간단하게 볼 수 있는 사진을 첨부한다. 절대 귀찮아서 독일어로 된 것을 올리는 것은 아니다. 


OBD - II Connector


 이 그림에서 보면 규격이 정해진, 2,4,5,7,10,15,16 PIN을 제외하면 나머지는 "제조사 맘대로"라고 적혀있다. 말그대로 맘대로 정의를 하는 것이다. 어떤 그룹은 1번 PIN으로 통신을 할 수도 있고, 9번 아니면 12번으로 통신을 할 수도 있다는 이야기다. 


 그렇다면, 대략적인 통신에 대한 개념은 잡혔다. 그렇다면 신호는 어떻게 보내야 하는가? 이전의 SID(Service Identifier)와 PID(Parameter Identifier)의 기초 포스팅에서 보내는 메세지의 형식에 대해서 대략적으로 나마 이야기를 했었다. 잘 찾아보면 보이겠지만, 0x81 이라는 Start Communication SID 를 찾을 수 있을 것이다. 물론 Fast initialization 등의 부가적인 작업이 필요하지만, 일단 정해진 메세지 포맷 대로 메세지를 보내야 통신이 시작이 되는 것이다. Fast initialization 에 대한 부분은 다음 포스팅인 Data link Layer에서 다룰 예정이다. 


 그렇다면 그 메세지를 통신 신호 분석하기에서 설명을 했던 파형대로 보내줘야 하는데 그 부분에 대한 규정은 다음과 같다. 



 그림이 조금 어려울 수 있으나, 간단하게 설명을 하면 신호를 보내는 입장에서는 정해진 전압의 20% 이하인 경우는 무조건 "0"으로 취급을 하며 80% 이상의 경우는 무조건 "1"로 취급을 한다. 받는 쪽에서는 좀더 사이가 좁은데 각각 30%와 70% 로 규정을 하고 있다. 이를 간단하게 이야기를 하자면, 자동차 통신의 경우 크게 세가지의 전압으로 나누어 지는데, 5V 통신과 12V 통신, 그리고 24V통신으로 나누어 진다. 각 전압의 20% ~80% 의 전압으로 신호를 보내줘야지만 제대로 된 코드를 전달 할 수 있는 것이다. 


 예를 들면 가장 대중적인 12V 통신의 경우 최소한 2.4V(3.6V) ~ 9.6V(8.4V) 사이의 전압 차이 값이 유지가 되어야 한다는 것이다. 여기서 오해를 할 수가 있는데, 이 전압은 "0"과 "1"을 결정 짓는 전압을 뜻한다. 반드시 저 전압으로만 메세지를 보내야 한다는 소리가 아니다. 해당 비트의 판별을 위해 저 만큼의 전압차가 나야 한다는 이야기다. 더 간단한 이해를 위해서는 신호가 들어올때 2.4V(3.6V) 이하는 무조건 "0"으로 읽는 다는 소리이고 그 이상은 무조건 "1"로 읽는 다는 이야기다. 

 


 이 그림을 보면 좀 더 이해가 잘 될 것이다. 사실 기본적인 경우 OBD - II 커넥터에서 나오는 전압을 이용하기 때문에 그 전압을 "1"로 놓고 "0"에 대한 부분만 잘 정의를 해주면 된다. 즉 2.4V(3.6V) 이하로만 떨어뜨려 주면 된다는 뜻이다. 


 그렇다면 이렇게 테스터가 보낸 신호를 ECU는 어떻게 읽게 되는 것일까? 그 부분은 다음 내용으로 설명이 된다. 



 다소 복잡해 보이는 부분인데, 간단하게 가운데 부분만 이해를 하면 된다. K Line 부분과 Ground로 이루어져 있고, 그것을 Reading하는 부분에서 "1"인지 "0"인지를 판단 하는 것이다. 사실 이 부분에서 조금 복잡한 공식으로 "0"을 만들기 위해 저항 값을 계산하는 방법이 있는데, 그 부분은 계산된 방식을 따르는 것보단, 실제 스코프로 찍어서 조절을 하는 편이 훨씬 빠르게 조절을 할 수 있다. 


 그리고 마지막으로 한가지 더 설명을 하자면, 전의 통신 신호 분석하기에서 설명을 한 것처럼, 자동차 통신의 경우 기본적으로 "1"에서 시작이 된다. 그 "1"은 자동차의 기본 전압일 경우가 많은데, 그림을 보면 K Line이 연결이 되어 있는 부분이 보일 것이다. 그 부분이 반드시 같은 전압으로 이루어 져야 한다. 즉 무슨 말이냐 하면, ECU가 가지고 있는 전압과 Tester에 들어오는 전압이 같아야 통신이 가능하다는 이야기다. 


 일반적인 경우 차량측에서 전압을 인가 받아 사용하기 떄문에 자동차 배터리 즉, 같은 전압 소스를 사용하기 떄문에 상관이 없다. 다만, OBD - II 에서 전압이 나오지 않아 외부 전압을 사용해야 하는 경우 전압을 맞춰 주지 않으면 통신은 불가능 하다. 간단하게 말하면, 자동차의 OBD - II 에서 전압이 나오지 않아 외부 전압을 연결했는데, ECU의 전압 인가가 24V로 이루어 지고 Tester의 전압 인가가 12V로 이루어 졌다면 통신이 불가능 한 것이다. 이렬 경우는 ECU의 전압 소스에서 Tester의 전압을 인가해 주는 방법 밖에 없다.