푸조 진단기 사용 방법 : Diagbox, FAP앱/(푸조 전용-FAP 앱 ) 분해 도전!

<1> FAP OBD2 앱(android) CAN data 분석 도전!

peugeotory 2023. 11. 2. 11:25

(이전글)성능이나 기능면에서 푸조 차량에 사용 가능한 최고의 앱은 단연코 "FAP citroen/peugeot elm327 obd2"(이하 FAP앱으로 지칭)입니다. 어쩌면 단 하나 밖에 없는 앱 같습니다. (푸조 차량에서 동작하는 다른 앱을 본 기억이 없군요.)

 

그동안 어떻게 동작하는 무척 궁금했었는데,

CAN 분석기(CANalyst-II)도 있고, Python-CAN 오픈 소스 활용해서 앱 동작 원리를 분석하기로 했습니다.

 

 

1.  FAP앱 CAN 통신 프로토콜 및 엔진 호출 ID 확인 하기

 

우선 아래와 같이 알리에서 구매한

(1)"OBD2 wifi 동글"를  (2)"엔진 시뮬레이터"에 장착후 (3)"FAP앱"을 동작 시킵니다. 

엔진 호출용 Frame ID 체계가 푸조 엔진에 맞지 않으므로 동작하지 않습니다.

 

FAP앱이 동작하지 않지만 이렇게 연결한 이유는,

 

FAP앱 통신 규약과 푸조 엔진 호출 Frame ID와 호출 내용(바이트 정보) 등을 차량에 연결하지 않고도 알 수 있기 때문입니다.

(차량에 연결하면 너무 많은 정보가 쏟아져 들어와서 오히려 접근하기가 복잡해 지고 어려운점도 있더군요)

 

이제 추가로 CAN 분석기를 CAN 신호 라인에 병렬로 붙여 놓고, 어떤 신호들이 오고 가는지 확인해 봤습니다. 아래 결과 사진을 보면...

1)통신 규약은 ISO15765-4, 11 bit, 500k, Standard 방식 사용합니다. (Extended(29bit) 선택시 신호 잡히지 않음)

2)ECU 호출자 Frame ID = 6A8이고, 첫 호출 바이트는 01 81로 시작됩니다.

 

 

엔진이 응답하지 않기 때문에 (Frame ID = 688)에게  FAP앱 호출자 ID=6A8가 지속적으로 호출 시도중인 것을 알 수 있습니다. 

 

2.  FAP앱  <--> 푸조 508 1.6 차량에 연결하기

이제 차량에 직접 연결해서 주고 받는 CAN data 확인해 봅니다. 수많은 data가 정신없이 쏟아져 들어 오네요.. Diagbox test시 보지 못한  frame ID가 많습니다. 

 

508 1.6 차량의 경우 통신 규약은 FAP app와 동일하게 ISO15764-4 11bit 500k 프로토콜을 사용하는 것으로 확인됩니다.

 

 

단지 몇 초 정도 접속해서 CAN data 수집했는데, 정보량이 상당합니다. 왼쪽 숫자= fraim ID((총 56개) 이고 오른쪽 숫자= 호출된 횟수입니다.

 

 

(참고) Frame ID는 어떤 정보를 담고 있을까? (구글에서 찾은 자료)

 

a. 푸조 차량이 유럽에 많아서 그런지 엔진 전자장치에 대해서 자료가 많이 있기는 했습니다.(물론 오래된 차량 위주) 

(참고) https://www.208gti.fr/showthread.php?5636-Display-Affichage-Plex-tuning-%B5sdm-100/page3

 

각 frame ID 옆에 숫자들은 몇 바이트 data가 포함되는지 알려주는 숫자 이며, 엔진은 frame id = 688(8바이트)이고

6A8(8바이트)은 Diagbox(또는 FAP앱)등과 같은 진단기에 붙는 fraim ID임을 알수 있습니다. 엔진 외에 많은 frame ID가 존재하지만 차량별 옵션에 따라 다르고, frame ID에 대한 정보가 거의 없습니다. (아마도 기업 비밀?)

 

b. 각 Frame ID의 바이트 data가 어떤 정보를 담고 있는지에 대한 설명 자료를 찾았는데..(상세한 것은 아니고.. 간단히 언급하는 정도만..)

(참조) https://www.208gti.fr/showthread.php?5636-Display-Affichage-Plex-tuning-%B5sdm-100/page6

 

c. Data 부분에서 byte 별로 어떤 정보를 의미하는지는 알기가 어렵지만, 대략 설명한 자료가 있어서 감 잡을 수 있는 정도 이해가 됩니다.

(참고) https://www.208gti.fr/showthread.php?5636-Display-Affichage-Plex-tuning-%C2%B5sdm-100/page6

 

208 bit 1+2 - 엔진 속도

208 bit 3 - 엔진 토크

208 bit 4 - 가속 페달 위치

208 bit 5 - 브레이크 페달 접점

 

305 bit 1+2 - 스티어링 휠 각도

348 bit 1 - 변속비 결속 속도

 

38D 비트 1+2 - ABS 차량 속도

38D 비트 3+4 - ABS 시작 이후 주행 거리

38D 비트 5 - ABS 세로 가속도

 

44D 비트 1+2 - 차량 속도

44D 비트 3+4 - 왼쪽 뒷바퀴 속도

44D 비트 5 +6 - 오른쪽 뒷바퀴 속도

 

488 비트 1 - 엔진 냉각수 온도

488 비트 2 - 연료 소비량

488 비트 3 - 공회전 속도 설정값

488 비트 6 - 엔진 오일 온도

488 비트 8 - 흡입 공기 온도

 

d. 프랑스 거주하는 208 차주분께서 열심히 분석해 놓은 정보도 있었습니다.

(참고) https://www.208gti.fr/showthread.php?5636-Display-Affichage-Plex-tuning-%B5sdm-100/page8

여기서 얻은 중요한 힌트는 frame ID(표에서는 ID hex)와 data(표에서는 Visual)의 바이트별 정보 의미(LABEL)와 바이트 데이터를 원하는 값으로 변환해주는 공식(FACTORS,Internal UNITS 이라고 표기된 부분)을 알아야 한다는 것입니다.  (그밖에 Unit:단위 도 알아야 하구요)

(참고): 이전글 링크에서 잠깐 언급한 정보는 "DBC" 파일 만드는데 꼭 필요한 정보이기도 합니다.

 

3.  이제 FAP 앱 접속 시작부터 CAN-BUS 분석해 봤습니다.

-대락 data 보는 방법을 익히고 나서, FAP app data 수집합니다.

완료되면, 모든 data 순차적 저장후 불러와서 6A8과 688 frame ID만 정렬해서 어떻게 동작하는지 훌터 봤습니다. 대충 설명해 보면...(아래 그림의 번호 참조)

 

1) 6A8(FAP 앱) -> 01 81 data 던져서 "엔진 ECU 있니??" 물어봅니다.

2) 688(엔진 ECU) -> 03 C1 D0 8F data 전송하여  "응 있어!" 라고 대답합니다.

연결상태에 있다고 확인이 되면 계속해서, 

3) 엔진 정보에 대해서 물어보면 정보를 알려주고

4) 어떤 에러가 있는지 물어 봅니다.

 

 

4. FAP 앱  화면에 표시되는 많은 정보들은 어떻게 가져올까?

(이전글)에서 FAP 동작시킨 결과가 있는데, 엔진 관련 많은 정보가 표시됩니다. 관련 정보들을 어떻게 가져올까? 궁금해서 FAP앱 동작시 CAN data 분석했는데, 의외로 엔진 ECU에게 요청하는 명령은 몇개 되지 않았습니다.

(아래 붉은색 참조)

 

예를 들어  6A8 : 04 21 C9 80 01 명령 보내면, 688은 연속된 많은 수의 바이트 데이터를 보냅니다. 이 바트들중 특정 위치에 있는 정보가 FAP에 보여지는 data중에 하나인데, 엔진 ECU가 알아서 엔진 데이터를 그룹으로 묶어서 진단기에 보내고 있었습니다.

 

 

모두 조사해 보니 FAP앱(6A8)에서 보내는 명령은 총 5개 밖에 없습니다!!!!!! ( 엔진 관련 부분만... )

 

1)6A8: 04 21 C9 80 01

688: 10 2E 61 FF 03 01 00 00

688: 21 03 FF FF FF FF 16 01

688: 22 AB 01 AB 00 63 8F 56

688: 23 81 B6 72 DE 7C 16 FF

688: 24 FF FF FF 52 E4 FF 01

688: 25 04 9A 04 A4 04 5A 04

688: 26 68 FF FF FF FF

 

2)6A8: 04 21 CD 80 01

688: 10 2E 61 FF 03 30 00 00

688: 21 3C 29 FF 01 00 00 6E

688: 22 00 CD 02 FA

 

3)6A8: 04 21 CC 80 01

688: 10 2E 61 FF 03 30 00 00

688: 21 01 90 00 CD 00 80 00

688: 22 FE FF FF FF 95 13 88

688: 23 13 88 13 7E 58 01 FF

688: 24 00 FF 01 03

 

4)6A8: 04 21 CA 80 01

688: 10 2E 61 FF 03 01 00 00

688: 21 5F 5C 03 E8 03 F3 03

688: 22 EE 5A 5A FF FF 00 00

688: 23 00 FF 12 13 04 98 00

688: 24 00 FF FF FF FF FF FF

688: 25 49 03 BB 3A FF 00 C6

688: 26 00 C6 FF FF 00

 

5)6A8: 04 21 CB 80 01

688: 10 2E 61 FF 03 30 00 00

688: 21 04 15 03 07 EF 10 D9

688: 22 5C 00 38 10 00 02 24

688: 23 C4 01 C9 02 FB 00 4B

688: 24 00 4B 00 01 00 01 2C

688: 25 00 4B 02 6A A8

 

바꿔 말하면,

위의 5가지 CAN 명령을 FAP앱에 보낼수 있다면, 엔진에 연결하지 않고도 FAP앱을 동작 시켜볼 수 있다는 것입니다.!!!!

 

이과정의 중요한 가치는... 바로....

FAP앱을 동작시키면서 내부 동작 원리를 이해 한다면, 나만의 앱을 만들 수도 있다는 것입니다.!!!

 

 

FAP앱에 보여지는 data가 많아서 엄청난(?) 통신이 이루어질줄 알았는데, 의외로 간단했습니다.

 

FAP앱에 데이터를 하나씩 변경해서 보내면 FAP앱 화면에서 어떤 정보가 변경되는지 알 수 있는 힌트를 얻기는 했지만, 결과를 확인하려면  앞으로 엄청난 노가다성 삽질이 필요합니다.  ㅠㅜ

 

 

 

< 다음편에 계속....>