CAN-BUS

벨로스터N(Veloster N) CAN-BUS Part .8 - CAN Database

Mapsosa 2021. 6. 19. 16:32

캔 디버깅을 마치고 공개한 후에 벨로스터N 사용자들이 많은 NCK(N Club Korea)에도 공유를 했다.

NCK에서 캔 관련으로 검색을 해봤을 때 아무도 그에 대한 이야기를 하지 않아서 내가 최초 다 싶어서 솔직히 조금 자랑스럽게 공개를 했는데 댓글에

이런 댓글이 달렸다. 해당 링크는 https://github.com/commaai/opendbc 여기를 가리키고 있었고

여기에 들어가 보니 여러 자동차의 모델명이 나와있었는데 거기에는 현대도 있었다.

이런 것들이 있었는데 이게 뭔 소린지 훑어보던 중

이걸 보면서 대충 감이 왔다.

내가 디코딩한 캔 통신이랑 비교해서 보면 알 수가 있는데

BO_ 688에 저 688은 십진수로 변환한 CAN ID이고 SG_ SAS_Angle은 CAN의 설명 그리고 0|16은 0에서 16비트 즉 2바이트짜리 시그널이라는 것이다. 그리고 뒤에 1-는 아마도 Signed 값이 아닐까 싶다. 그리고 앞에 0.1은 곱해주는 값이고 대괄호 안에 들어가 있는 값은 아마도 bytetointLE를 했을 때 값이 지시하는 범위지 싶다.

 

여하튼 이걸 보고 난 뒤에 머리가 띵했다.

첫 번째 이유는 내가 캔 통신 디코딩하려고 했던 짓들이 개 삽질이었네 싶어서고

두 번째 이유는 그런 것도 모르고 졸라 자랑스럽게 NCK에 업로드했다는 게 쪽팔렸다. 훑어보니 계산식 틀린 게 많더라...

 

구글에 그렇게 캔버스 관련 검색해볼 때는 저런 건 안 뜨고 러시아 사이트나 뜨더니... 일단 쪽팔린 건 쪽팔린 거고 정보를 받았으니 값을 검증하고 추가해야겠다.

 

저 CAN Database를 만든 Comma Ai라는 곳은 검색해보니 자율주행 시스템을 만드는 곳인 거 같다. 양산차에도 적용이 가능한데 그중에는 현대차도 가능하다. 유튜브에 검색해보니 자율주행 퀄리티가 나쁘지 않은 것 같다. 양산차에 적용하기 위해서 CAN 통신을 해독했고 그걸 공개하고 있는 듯하다. 근데 자율주행 소프트웨어도 오픈소스로 공개하고 있더라 참 대단한 회사인 것 같다. 자율주행 모듈 가격도 1099달러로 나쁘지 않은 편이더라.

거기다가 CAN Database를 오픈소스로 공개하고 있으니 나같이 CAN을 해독한 사람들이 저기다가 해독한 걸 추가하고 해서 더 발전해나가는 거 같더라

 

여하튼 저기 있는 데이터베이스 중에 여러 현대 자동차 모델들이 있으나 그중에 가장 최신인

https://github.com/commaai/opendbc/blob/master/hyundai_kia_generic.dbc

 

commaai/opendbc

democratize access to car decoder rings. Contribute to commaai/opendbc development by creating an account on GitHub.

github.com

이 파일을 보니 내가 해독한 벨로스터N의 캔 디코딩과 어느 정도 일치하는 것 같다.

 

저 캔 통신 Database는 .dbc 형태로 되어있는데 이 파일 타입에 대해 검색을 해보니

https://www.csselectronics.com/screen/page/can-dbc-file-database-intro/language/en

 

CAN DBC File Explained - A Simple Intro [+Editor Playground]

What is a CAN DBC file? In this simple intro we explain the CAN database syntax incl. practical J1939/OBD2 examples and an online editor playground - learn more!

www.csselectronics.com

이 사이트를 찾을 수 있었다.

 

https://www.csselectronics.com/screen/page/can-dbc-file-database-intro/language/en

이게 정확한 보는 법인 것 같다.

그러니까

BO_ 688 SAS11: 5 MDPS
 SG_ SAS_Angle : 0|16@1- (0.1,0.0) [-3276.8|3276.7] "Deg"  _4WD,ACU,AFLS,AVM,CLU...ETC...

이 시그널이 있을 때 

688은 CAN ID, SAS11은 NAME, 5는 총 바이트 수, MDPS는 이 CAN을 쏘는 부품

SAS_Angle은 Name, 0은 스타트 비트, 16은 길이(bit) @1이 1이면 Little Endian, 0이면 Big Endian, +는 Unsigned -는 Signed,  괄호 안에 첫 번째 0.1은 곱해주는 값, 뒤에 0은 더하거나 빼주는 값, 대괄호 안은 범위, 따옴표 안은 단위, 그 뒤에 4WD 뭐 이런 거는 이 값을 수신받는 부품들이라는 것이다.

 

이제 저걸 토대로 CAN ID들을 둘러보니 내가 계산한 온도 등은 거의 다 틀렸더라.

딱 유온이랑 냉각수 온도 두 개 중에 하나만 맞았다.

그리고 내가 발견 못한 값도 정말 많았다. 그리고 저기 없는 값도 그나마 조금은 있어 개 삽질 한건 아니라는 안심이 들기는 했다.

 

근데 일단은 저기에는 벨로스터N 수동에서는 절대로 안 나오는 CAN ID들이 포함되어 있다.

수정 내용에 하이브리드 용 캔 통신까지 들어 있는 걸로 보아 이름 그대로 Hyundai Kia 범용으로 일단 저기다가 다 처박고 알아서 골라 쓰라는 것 같다. 다른 메이커들은 다 차종 별로 분류해놨던데 이건 왜 이런지 모르겠지만

 

아무튼 저번 글에서도 말했듯이

벨로스터N C-CAN에서 받을 수 있는 CAN ID는

64, 66, 67, 68, 127, 128, 129, 339, 356, 399, 447, 512, 544, 593, 608, 688, 764, 781, 790, 809, 832, 897, 899, 902, 903, 909, 913, 916, 1008, 1015, 1040, 1067, 1078, 1155, 1157, 1170, 1181, 1184, 1191, 1193, 1253, 1254, 1255, 1265, 1280, 1281, 1287, 1292, 1294, 1312, 1322, 1342, 1345, 1349, 1351, 1353, 1363, 1365, 1366, 1367, 1369, 1407, 1414, 1415, 1419, 1427, 1440, 1456, 1460, 1486, 1487, 1491, 1530, 1952, 1960, 1988, 1996, 2001, 2004, 2009, 2012, 2016, 2017, 2024

이게 전부 다

즉, OpenDBC에서 이 값만 빼고는 지우면 된다.

HKG에 없는 값은 아마도 벨로스터N의 특수한(e-LSD라던지) 부품의 CAN ID인 것 같다.

 

https://github.com/MapsosaOMG/opendbc/blob/master/Hyundai_Veloster_N_Manual.dbc

 

MapsosaOMG/opendbc

democratize access to car decoder rings. Contribute to MapsosaOMG/opendbc development by creating an account on GitHub.

github.com

뭐 이런식으로 초안을 작성해보기는 했는데 이건 손으로 하는게 아니고 프로그램으로 하는 것 같다. 그래서 손으로 작성하기는 좀 빡세서 이걸 계속 메인터넌스는 못할 것 같다.

 

그리고 혹시나 다른 차종이 추가된 OpenDBC는 없나해서 OpenPilot의 Fork를 찾아보다가 한 포크에서 Veloster JS의 CAN ID List도 찾아냈다.

  CAR.VELOSTER: [{
    64: 8, 66: 8, 67: 8, 68: 8, 127: 8, 128: 8, 129: 8, 273: 8, 274: 8, 275: 8, 339: 8, 354: 3, 356: 4, 399: 8, 512: 6, 544: 8, 558: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1170: 8, 1181: 5, 1186: 2, 1191: 2, 1265: 4, 1280: 1, 1282: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1356: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1378: 4, 1407: 8, 1414: 3, 1415: 8, 1419: 8, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1486: 8, 1487: 8, 1491: 8, 1530: 8, 1532: 5, 1872: 8, 1988: 8, 1996: 8, 2000: 8, 2001: 8, 2004: 8, 2008: 8, 2009: 8, 2012: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8
  }]

구버전 같던데 구버전에는 있다가 최신 버전에선 사라졌나 봄.

여하튼 저 CAN ID 리스트와 벨로스터N의 CAN ID 리스트를 비교해보면

https://docs.google.com/spreadsheets/d/1805WioYwTi0Y80oqsw9FpkPTxioVkwh_4TYW_X8Xf6Q/edit?usp=sharing 

 

CAN ID JS VS JSN

Sheet1 JS,JSN 64,64 66,66 67,67 68,68 127,127 128,128 129,129 273 274 275 339,339 354 356,356 399,399 447 512,512 544,544 558 593,593 608,608 688,688 764 781 790,790 809,809 832,832 884 897,897 899,899 902,902 903,903 905 909,909 913 916,916 1008 1015 1040

docs.google.com

이렇다.

OpenDBC에 없는 값은 노란색으로 JS에만 없는 값에는 주황색으로 표시했다. 혹시 벨로스터N에만 있는 값이 있으면 찾기 쉽지 않을까 해서 해봤다.

 

하여튼 간에 OpenDBC를 참조해서 내가 디코딩한 값에서 최대한 오류를 수정하고 OpenDBC에서 최대한 많은 값을 찾아내서 적용시켜 봐야겠다.

 

혹시 데이터베이스에 나와 있는 말들이 도대체 뭘 의미하는지 모르겠는 사람이 있다면(혹시 나 말고도 있다면) GSW를 찾아보면 그나마 알 수 있다. 물론 모든 것들이 해석이 되는 건 아니지만 그래도 어느 정도 알 수는 있다.

이런식으로 FPCM이 뭔지 용어들이 정리가 되어 있다. 이걸 보고 자신의 용도에 필요없는 시그널은 과감하게 걸러버리는게 좋다.

반응형