Skip to content

Commit

Permalink
FIX : CAN BUS [1] -> adjust image size #1
Browse files Browse the repository at this point in the history
  • Loading branch information
R@CC00N committed Oct 29, 2020
1 parent c2e817a commit 5cb482b
Showing 1 changed file with 29 additions and 29 deletions.
58 changes: 29 additions & 29 deletions _posts/2020-10-29-can_bus_1.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,27 @@ date : 2020-10-29 16:00:00 +0900
category : R&D
author : 서영일
author_email: [email protected]
background : /assets/2020-10-29-can_bus_1/ecu_background.png
profile_image: /assets/2020-10-29-can_bus_1/profile.png
background : /assets/2020-10-29-can_bus_1/ecu_background.jpg
profile_image: /assets/2020-10-29-can_bus_1/profile.jpg
summary : ECU 분석 환경 구축
thumbnail : /assets/2020-10-29-can_bus_1/profile.png
thumbnail : /assets/2020-10-29-can_bus_1/profile.jpg
---

# Prologue
최근 자동차 해킹에 대해 관심을 가지는 사람들이 늘고 있다. 워낙 차를 좋아해서 기회가 생기면 자동차 해킹을 해봐야겠다고 생각했었는데 마침 기술 블로그에 기고할 차례가 되어 글을 쓰게 되었다.

아무거나 다 해볼 수 있는 차가 있었으면 좋았을 것이다. 그러나 타고 다닐 차를 실습용으로 쓰기엔 불안하고, 그렇다고 실험용 차를 따로 구매하는 건 꽤 부담스럽다. 게다가 자동차 해킹 실습하는데 철판이나 바퀴 같은 게 필요한 건 아니니까 새로운 방법을 써보자!

| ![image-20201028170658529](/assets/2020-10-29-can_bus_1/image-20201028170658529.png) |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028170658529.png" alt="image-20201028170658529" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 사실 자동차는 꽤나 비싼 물건이다.... |

ECU를 활용하면 좋을 것이다. 자동차와 관련된 연산은 대부분 ECU에서 이뤄지기 때문이다. 그러한 고로, 이번 글에서는 ECU를 활용한 해킹 테스트 환경을 구성해본다.

# ECU는 무엇인가
| ![ecu_pic](/assets/2020-10-29-can_bus_1/ecu_pic.jpg) |
| ---------------------------------------------------- |
| 출처 : https://images.app.goo.gl/PRsNPqiKFuc95ni66 |
| <img src="/assets/2020-10-29-can_bus_1/ecu_pic.jpg" alt="ecu_pic" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 출처 : https://images.app.goo.gl/PRsNPqiKFuc95ni66 |

ECU는 전자제어유닛(Electronic Control Unit)의 약자로 자동차에서 필요한 각종 연산을 수행하는 일종의 컴퓨터이다. 과거에는 엔진제어유닛(Engine Control Unit)의 의미로만 사용되었으나 차량의 전자화가 이뤄지면서 다양한 모듈에서 전자제어가 사용되어 전자제어장치들을 모두 통칭할 때 사용하게 되었다. 최근에는 엔진 제어 유닛을 ECM(Engine Control Module) 이라고 부르며 TCU, BCM 등 다양한 유닛이 차량에 탑재되고 있다.

Expand All @@ -51,13 +51,13 @@ ECU 테스트 벤치를 만들기 위해 ECU를 구매해보자.

## 구매 방법

| ![pic_1](/assets/2020-10-29-can_bus_1/pic_1.png) |
| ------------------------------------------------ |
| 출처 : 현대모비스 부품정보검색 |
| <img src="/assets/2020-10-29-can_bus_1/pic_1.png" alt="pic_1" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 출처 : 현대모비스 부품정보검색 |

신품을 구매하면 좋겠으나 가격이 다소 부담스럽다. 실험에 사용하는 목적이라면 중고를 구매해도 무관하다. 인터넷 쇼핑몰이나 gparts 등에서 중고 ECU를 구할 수 있다.

| <img src="/assets/2020-10-29-can_bus_1/image-20201028131033957.png" alt="image-20201028131033957" style="zoom:67%;" /> |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028131033957.png" alt="image-20201028131033957" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 신품 가격으로 3개 쯤 살 수 있다... 🤔 |

Expand All @@ -66,53 +66,53 @@ ECU 테스트 벤치를 만들기 위해 ECU를 구매해보자.
# ECU 연결
ECU 핀들을 보면서 속이 복잡해지겠지만 걱정하지 않아도 된다. 현대/기아 차량은 정비를 위한 기술정보 사이트 GSW를 제공하고 있다. GSW를 통해 차량 전장회로도, ECU 커넥터 정보 등을 확인하여 연결하면 된다.

| ![image-20201028145437329](/assets/2020-10-29-can_bus_1/image-20201028145437329.png) |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028145437329.png" alt="image-20201028145437329" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| [회로도-엔진 전장-엔진 컨트롤 회로(A/T)] |

회원가입 후 [전장회로도 - 모델 선택 - 연식 선택 - 엔진]을 선택한 후 원하는 회로를 선택하면 된다 (ex. 전장회로도 - 아반떼(AD) - 2017 - G 1.6 GDI) 참고할 사람을 위해 상세 메뉴를 표시해두겠다. 상세 메뉴는 차종에 따라 차이가 있을 수 있다.

## 커넥터

| ![image-20201028135503667](/assets/2020-10-29-can_bus_1/image-20201028135503667.png) |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028135503667.png" alt="image-20201028135503667" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 커넥터(C100-AK) 단면도 |

실험에 사용되는 ECU(39110-2BAZA)는 2가지 종류의 커넥터가 필요하지만 이번에 사용할 핀들은 C100-AK 커넥터 하나에 모두 모여있다. 단자에 맞는 커넥터가 없는 경우에는 직접 납땜을 해야한다. 필자는 커넥터를 못 구했기 때문에 핀의 크기가 큰 1~6번 핀은 납땜으로 연결하고, 좌측 핀은 흔히 볼 수 있는 CH254(아두이노 등에 흔히 사용되는 소켓) 소켓 케이블로 연결했다.

| ![image-20201028141435630](/assets/2020-10-29-can_bus_1/image-20201028141435630.png) |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028141435630.png" alt="image-20201028141435630" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| [커넥터 정보-컨트롤 하네스-회로도] |

C-CAN, CCP-CAN 통신을 위한 High/Low 핀, 전원 및 접지 핀에 케이블을 연결한다. 여기서 주의할 점은 커넥터의 배선이기 때문에 좌우가 반대라는 것이다. 그림이 좌우로 뒤집어졌다고 생각하고 작업해야 올바른 위치에 연결할 수 있다

| <img src="/assets/2020-10-29-can_bus_1/image-20201028143346349.png" alt="image-20201028143346349" style="zoom: 15%;" /> |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028143346349.png" alt="image-20201028143346349" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| '연결만 되면 됐지' 같은 마감 상태 |

## 전원 공급

필요한 모든 선을 ECU에 연결했다면 전원을 공급해야 한다. ECU에 필요한 전압은 GSW에서 확인할 수 있다.

| ![image-20201028151400097](/assets/2020-10-29-can_bus_1/image-20201028151400097.png) |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028151400097.png" alt="image-20201028151400097" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| [정비지침서-아반떼(AD)-2017-G 1.6 GDI-엔진 제어/연료 시스템-엔진 컨트롤 모듈(ECM)-회로도] |

전압은 시동 시 배터리 전압을 따른다고 나와있으므로 자동차 배터리 전압인 12V를 공급하면 된다. 구체적인 요구사항과 신호명 각 항목에 대한 자세한 내용을 알고 싶다면 회로도-엔진 전장-엔진 컨트롤 회로(A/T)-서비스 팁을 참고하면 된다.

12V를 공급하는 방법은 여러가지가 있지만, 쓰지 않는 컴퓨터 파워서플라이를 가져와서 전원 공급에 사용하는 방법도 있다.

| <img src="/assets/2020-10-29-can_bus_1/image-20201028152046716.png" alt="image-20201028152046716" style="zoom:15%;" /> |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028152046716.png" alt="image-20201028152046716" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| [파워 서플라이 전원 정보] |

가지고 있는 파워서플라이를 확인해보니 12V/18A 전원을 지원하는 것을 확인할 수 있다. 연결해보니 동작하는 데 크게 이상은 없었다. 대강 요구사항에 맞으면 파워서플라이 케이블을 잘라내고 작업을 시작해보자. 작업 직전에 파워서플라이를 사용한 적이 있다면 캐패시터를 충분히 방전시키는 것을 잊지말자

| <img src="/assets/2020-10-29-can_bus_1/image-20201028153014068.png" alt="image-20201028153014068" style="zoom: 15%;" /> |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028153014068.png" alt="image-20201028153014068" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 파워서플라이에는 고전압이 흐르고 있다. 작업에 유의하도록 하자 |

| ![ATX power supply pinout 24 and 20 pin](https://www.smpspowersupply.com/connector_atx_pinout.GIF) |
| <img src="https://www.smpspowersupply.com/connector_atx_pinout.GIF" alt="ATX power supply pinout 24 and 20 pin" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 출처 : https://www.smpspowersupply.com/connectors-pinouts.html |

Expand All @@ -122,7 +122,7 @@ C-CAN, CCP-CAN 통신을 위한 High/Low 핀, 전원 및 접지 핀에 케이블

CAN 데이터를 송/수신하기 위해 아두이노를 사용한다. 데이터가 많이 쌓이면 아두이노가 먹통이 되는 경우가 잦아 라즈베리 파이를 추천하지만 아두이노를 쓰는 편이 더 쉽기 때문에 이번 게시글에서는 아두이노를 이용한 방법을 소개한다.

| ![image-20201028161216982](/assets/2020-10-29-can_bus_1/image-20201028161216982.png) |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028161216982.png" alt="image-20201028161216982" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 비싸서 못 사는 게 아니고 배송비 2,500원이 뼈 아프다 |

Expand All @@ -144,19 +144,19 @@ MCP2515를 사용하기 위해 라이브러리(https://github.com/Flori1989/MCP2

**다시 한 번 강조하지만, 작업 전 파워서플라이의 전원을 제거하고 방전될 때까지 충분한 시간이 지난 후 작업해야한다.**

| ![IMG_8289](/assets/2020-10-29-can_bus_1/IMG_8289.jpg) |
| ------------------------------------------------------ |
| 파워서플라이 DC 12V 열수축튜브 작업 |
| <img src="/assets/2020-10-29-can_bus_1/IMG_8289.jpg" alt="IMG_8304" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 파워서플라이 DC 12V 열수축튜브 작업 |

안전하고 깔끔한 배선 작업을 위해 다이소에서 1000원에 구할 수 있는 열수축튜브를 사용했다. 브레드보드에서 작업하기 위해 전선을 자르고 CH254 소켓을 연결했다. 이후 CAN Shield, ECU 전원들을 브레드보드에 구성했다.

| <img src="/assets/2020-10-29-can_bus_1/IMG_8304.jpg" alt="IMG_8304" style="zoom:15%;" /> |
| <img src="/assets/2020-10-29-can_bus_1/IMG_8304.jpg" alt="IMG_8304" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 브레드보드 구성 사진 |

구성에 대한 이해를 돕기 위해 그림을 준비했다.

| ![image-20201029133438034](/assets/2020-10-29-can_bus_1/image-20201029133438034.png) |
| <img src="//assets/2020-10-29-can_bus_1/image-20201029133438034.png" alt="IMG_8304" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 전체 회로도 |

Expand Down Expand Up @@ -209,7 +209,7 @@ void loop()
MCP2515 라이브러리에 들어가있는 CAN 통신 읽기 예제 코드이다. 간단한 코드지만 ECU가 정상적으로 작동하는지 확인하는 데에는 충분하다.
| <img src="/assets/2020-10-29-can_bus_1/IMG_8276.jpg" alt="IMG_8276" style="zoom:15%;" /> |
| <img src="/assets/2020-10-29-can_bus_1/IMG_8276.jpg" alt="IMG_8276" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 패킷이 너무 많이 나와서, 오래두면 아두이노 프로그램이 뻗는다 |
Expand All @@ -219,7 +219,7 @@ MCP2515 라이브러리에 들어가있는 CAN 통신 읽기 예제 코드이다
# Epilogue
| <img src="/assets/2020-10-29-can_bus_1/image-20201028163713843.png" alt="image-20201028163713843" style="zoom:25%;" /> |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028163713843.png" alt="image-20201028163713843" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 테스트 환경 전체 모습 |
Expand All @@ -234,7 +234,7 @@ MCP2515 라이브러리에 들어가있는 CAN 통신 읽기 예제 코드이다
## 입력 - 악셀 페달 포지션 센서(APS)
자동차 게임에 쓰이는 레이싱 휠/페달은 내부 구조가 복잡할 것 같지만 사실은 간단한 가변저항들로 구성되어 있다.
| <img src="https://assets.bigcartel.com/product_images/97527598/GTEYE-G25-G27-Spring-Installation-Web.jpg?auto=format&fit=max&h=1000&w=1000" alt="GTEYE Progressive Brake Spring for Logitech G25 / G27 / G29 / G920 / GTEYE" style="zoom:40%;" /> |
| <img src="https://assets.bigcartel.com/product_images/97527598/GTEYE-G25-G27-Spring-Installation-Web.jpg?auto=format&fit=max&h=1000&w=1000" alt="GTEYE Progressive Brake Spring for Logitech G25 / G27 / G29 / G920 / GTEYE" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 출처 : https://images.app.goo.gl/FmNJ5N9BgUVdgd9T6 |
Expand All @@ -244,7 +244,7 @@ MCP2515 라이브러리에 들어가있는 CAN 통신 읽기 예제 코드이다
> 페달 위치 센서는 신뢰도가 중요한 센서로, 주 신호인 센서 1과 센서 1을 감지하는 센서 2로 구성되어있다. 센서 1과 2는 서로 독립된 전원과 접지로 구성되어 있으며, 센서2는 센서 1의 출력의 1/2 출력을 발생하여, 센서 1과 2의 전압 비율이 일정 이상 벗어날 경우 에러로 판정된다.
| <img src="/assets/2020-10-29-can_bus_1/image-20201028165107310.png" alt="image-20201028165107310" style="zoom:150%;" /> |
| <img src="/assets/2020-10-29-can_bus_1/image-20201028165107310.png" alt="image-20201028165107310" style="max-width:300px;" /> |
| ------------------------------------------------------------ |
| 악셀 페달 포지션 센서 출력 전압 그래프 |
Expand Down

0 comments on commit 5cb482b

Please sign in to comment.