-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
FIX : CAN BUS [1] -> adjust image size #1
- Loading branch information
R@CC00N
committed
Oct 29, 2020
1 parent
c2e817a
commit 5cb482b
Showing
1 changed file
with
29 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 등 다양한 유닛이 차량에 탑재되고 있다. | ||
|
||
|
@@ -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개 쯤 살 수 있다... 🤔 | | ||
|
||
|
@@ -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 | | ||
|
||
|
@@ -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원이 뼈 아프다 | | ||
|
||
|
@@ -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;" /> | | ||
| ------------------------------------------------------------ | | ||
| 전체 회로도 | | ||
|
||
|
@@ -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;" /> | | ||
| ------------------------------------------------------------ | | ||
| 패킷이 너무 많이 나와서, 오래두면 아두이노 프로그램이 뻗는다 | | ||
|
@@ -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;" /> | | ||
| ------------------------------------------------------------ | | ||
| 테스트 환경 전체 모습 | | ||
|
@@ -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 | | ||
|
@@ -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;" /> | | ||
| ------------------------------------------------------------ | | ||
| 악셀 페달 포지션 센서 출력 전압 그래프 | | ||
|