본문 바로가기

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

J1850 Physical Layer/Data link Layer


 이번에는 상용 프로토콜의 마지막인 J1850 에 대해 다루어 보도록 하겠다. 여태까지 KWP 2000, CAN, ISO 9141 의 프로토콜들의 1번과 2번을 다뤘는데, 이 프로토콜을 마지막으로 상용 프로토콜들에 대한 설명은 끝나게 된다. 물론 설명을 했던 것들 이외에도 프로토콜 제작자의 창의력을 마음껏 맛볼 수 있는 변종 프로토콜들이 있지만 어느정도 베이스는 상용 프로토콜을 베이스로 두기 떄문에 분석을 하는데 큰 무리는 없을 것이다. 


 사실 J1850 과 ISO 9141 의 경우는 요즘 차량에서는 쉽게 볼 수 있는 프로토콜은 아니다. 꽤나 오래된 프로토콜인데, 그 중에서도 J1850 은 대부분 미국차에서만 사용이 되기 때문에 더더운 찾아보기 힘들다. 그렇다고 해도 다른 메이커에서도 아예 없지는 않기 때문에, 알아둬야 할 필요성은 있다. 그렇다면 어떤식으로 이루어 지는지 알아보자. 



 이 녀석의 OSI Layer 표이다. 역시나 1번, 2번 그리고 7번으로 이루어져 있다. 사실 CAN을 제외하면 모두 동일하다고 볼 수 있는 것이다. 몇번 말을 했지만, 1번과 2번이 거의 모든 프로토콜들의 핵심을 이루고 있으며 7번의 경우는 대부분 공유를 한다. 그런 연유로 7번을 통짜로 한번에 설명을 하려고 하는데, 사실 이 7번의 양이 그렇게 만만하지는 않다. 



  공식 문서에서 정의하는 J1850 의 종류이다. 크게 세가지로 분류가 되어 있는데, 자동차에서는 Class B 를 주로 쓰게 된다. 이 Class B 에서도 종류가 나누어 지는데, 크게 보자면 다음과 같다. 



 이렇게 크게 두가지로 나누어지며, 통신속도가 다른 것 되에도 HW 적으로 큰차이가 있다. Single wire 와 Dual wire 의 차이인데, 통신을 한 개의 라인으로 하느냐 두개의 라인으로 하느냐의 차이이다. 이 것만 본다면, CAN과 굉장히 유사하다는 것을 알 수 있는데, 개인적인 생각으로는 CAN 이 이 녀석의 진화된 버전이 아닌가 싶기도 하다. 



 각 유형의 특징을 열거한 부분이다. 사용하는 메이커 그룹을 보면 VPW의 경우는 GM과 Chrysler 계열이 사용을 하고 PWM 은 Ford 계열에서 사용을 한다. 통신 속도와 전압 레벨은 정해진 규격을 따르기 때문에 어려운 부분은 전혀 없다. 



 비록 VPW 의 표이기는 하지만 이녀석의 특징은 비트를 읽는 방식에 있다. PWM 에 대해 조금이라도 알고 있는 공돌이라면, 비트를 읽는 방식이 폭에 따라 바뀔 것이라는 간단한 추측은 가능할 것이다. 그 추측은 맞으며 이 녀석은 "0" 과 "1" 로 이루어진 간단한 비트 로 읽히는 것이 아니라 비트의 폭까지 염두를 해야 하는 프로토콜이다. 



 먼저 기본적인 PWM 을 알아보도록 하다. Dual wire 로 이루어진 이녀석의 파형은 다음과 같다. CAN 의 통신 신호와 굉장히 유사해 보이는데, 보이기만 유사해 보이는 것이다. 이녀석을 읽는 방법은 다음과 같다. 



 복잡해 보이는가? 간단하게 설명을 하자면, 통신 속도에 준하는 비트의 단위를 1로 보면(TV) 그 비트의 단위 만큼의 "길이" 를 통해 데이터를 읽는 것이다. 비트 "1"을 뜻 하는 비트의 길이는 "1" 이며, "0을 뜻 하는 비트의 길이는 "3" 이다. 즉 TV1 은 "1" 이며, TV3 은 "0" 으로 읽으면 된다. 



 Single wire 로 이루어진 VPW 의 파형이다. VPW 의 경우는 PWM 의 코드 외에 다른 형식의 Pulse 방식이 추가가 되어 있다. 특 "0" 과 "1" 을 판별하는 Pulse 가 추가가 되었다는 소리인데, 다음과 같이 이루어 진다. 



 TV1, TV2 라고 설명되어 진 부분이 있는데, 그 부분을 보면 PWM 의 3 보다 짧은 2로 이루어져 있으며, 두개가 반전이 되어 있는 것을 알 수 있다. 즉 이런식으로 읽으면 되는 것이다. 



 생각보다는 간단하지 않은가? (Passive 과 Active 로 나누어져 있는 부분은 좀더 심화 되는 내용이니, 해당 부분에 대해 알고 싶다면 공식 문서를 참조하길 바란다.) 정리를 해보면 VPW 의 코드를 읽는 방법은 이런식으로 이루어 지게 된다. 



 상대적으로 굉장히 직관적으로 보이는 코드 표인데, 이런식으로 비트를 읽으면 되는 것이다. 사실 PWM 의 단순함에 비해 VPW 의 복잡함 때문에 많은 문서에서는 VPW 에서 집중적으로 다루어 져 있다. 여기까지 읽었다면, 제일 처음에 소개가 되어 있는 VPW 의 타이밍 표를 어느정도 이해를 할 수 있을 것이다. 그 표에서는 해당 비트를 읽는 타이밍과 메세지 포멧에 사용되는 부분의 타이밍이 나와있는 표이다. 


 자 그렇다면 이제 비트를 읽을 수 있게 되었으니, 메세지 포멧을 살펴보자. 메세지 포멧은 기본적으로 KWP 2000 과 그렇게 큰 차이는 없다. 



 신경을 쓸 부분은 Header 와 Data 로 이루어진 부분이다. 그 외의 부분은 J1850 컨트롤러가 알아서 해주는 부분이며, 그에 대한 타이밍은 위에서 모두 설명 했다. 컨트롤러를 사용해야 하는 이유는 사실 J1850 의 경우 몇 가지 이유로 시리얼 방식으로는 제어를 하기가 힘들다. 가장 큰 문제는 비트를 읽는 방식에 있으며, 두번째로는 CS(CRC) 의 계산방식에 있다. 



 따라서 이 그림이 우리가 신경을 써야 하는 부분이다. 실제 통신 데이터를 살펴보면, Header/Data/CRC 만 나오기 때문인데, CRC 의 경우는 계산하는 방식이 일반적인 J1850 을 따르는 부분이 있기는 하지만, 그렇지 않은 녀석들도 있어 스펙을 확인을 해야 한다. Length 가 데이터에 없는 것을 눈치 챘다면, 이 CS가 얼마나 중요한지는 감이 올 것이다. (사실 일부 변종의 경우는 Length 가 메세지 포멧에 들어있기도 하다.) 그렇다면, Header 부분에 대해서 알아보면 다른 프로토콜과 마찬가지로 세가지로 나누어져 있다. FMT/TGT/SRC 인데, Key byte 가 없는 이 녀석은 FMT 에서 세팅이 된 값을 보고 메세지 포맷을 결정한다. 



 FMT 의 모습이 조금 다르지만, 다른 프로토콜과 마찬가지로 각 비트가 의미하는 부분이 있다. 별다른 세팅방식이 없는 이 녀석은 여기에서 전체적인 메세지의 형식이 판별이 된다. 메세지 처리의 우선 순위와, 헤더의 바이트 숫자, 그리고 IFR 을 사용하는 지 등에 대한 내용이 여기 들어있다. 





 헤더의 모습이 판별이 되면 TGT와 SRC를 사용하는 녀석일 경우 해당 데이터가 따라 붙게 되고, 그렇지 않을 경우 한 바이트로 이루어진 헤더 뒤에 Data 가 붙게 된다. "대부분" 의 J1850 의 경우는 CS를 포함 최대 12 개의 바이트로 이루어진 통신을 하는데, 그렇지 않은 녀석도 있으니, 만나게 되더라도 놀라지 말기를 바란다. 이 이후의 부분은 7 번을 따르기 때문에 다른 프로토콜과 동일하다고 보면 되며, 문제가 되는 변종을 제외하면, 사실 굉장히 직관적인 프로토콜이다. 실제 통신 데이터를 보면 좀더 쉽게 파악이 가능 할 것이다. 


PWM

Tester  : C4 10      F2 20 53 10                  

ECU    : C4 F2      10 7F 20 00 00 00 22 FB F2   

Tester  : C4 10      F2 22 02 00 AF 10            

ECU    : C4 F2      10 62 02 00 06 06 F2         

Tester  : C4 10      F2 13 3E 10                  

ECU    : C4 F2      10 53 14 02 11 72 04 00 81 F2

ECU    : C4 F2      10 53 03 35 11 78 04 01 6C F2


VPW

Tester  : 6C 10      F1 20 64         

ECU    : 6C F1      10 60 72         

Tester  : 6C 10      F1 3C 21 82      

ECU    : 6C F1      10 7C 21 0C 01 98

Tester  : 6C 10      F1 22 11 0C 01 7D

ECU    : 6C F1      10 62 11 0C 02 47


 각 헤더에 대한 해석은 직접 해보길 바란다. 사실 PWM 과 VPW 의 차이점이라고 보기엔 무리가 있지만(그 둘의 차이는 스코프로 찍어봐야 알 수 있으므로...), 헤더의 차이에 대한 부분은 확실하게 나와 있는 예이기 때문이다. 


 ISO 9141 과 J1850 의 경우 설명하는 부분이 상대적으로 KWP 2000 이나, CAN 에 비해서는 짧은 편인데 그 첫 번째 이유는 현재는 그렇게 많이 쓰이는 프로토콜이 아니라, 이 정도만 알아도 되기 때문이며 두 번째 이유는 OBD - I 이던 시절에 전성기를 이룬 프로토콜들이라 수 많은 변종들이 존재하기 때문이다. 스펙상으로 어물쩡 넘어가는 부분들은 각 메이커 별 트윅을 통해 많은 부분이 다른 "변종" 프로토콜로 만들어 져 있기 때문이다. 기본적인 스펙에 더해서 변경이 된 부분을 파악을 해야 제대로 된 분석이 가능하다는 이야기다. 


 이렇게 대표적인 4 개의 자동차 통신용 프로토콜의 설명이 끝났는데, 다음 부터는 본격적으로 7 번의 설명을 할 예정이다. UDS 를 제외한 나머지 프로토콜은 이 7 번을 대부분 공유를 하기 때문에, 각 프로토콜로 다루지 않았던 Data field 에 대한 이야기를 주로 하게 될 것이다.