SOME/IP Protocol과 Service Discovery 소개 및 개념 (tistory.com)

 

SOME/IP Protocol과 Service Discovery 소개 및 개념

SOME/IP 간략 소개SOME/IP는 "Scalable service-Oriented MiddlewarE over IP"의 약자입니다. 이 미들웨어는 일반적인 자동차 사용 사례와 최소 유선 형식 수준의 AUTOSAR와 호환되도록 설계되었습니다. http://some-ip.c

jjeongil.tistory.com

 

SOME/IP 간략 소개

SOME/IP는 "Scalable service-Oriented MiddlewarE over IP"의 약자입니다. 이 미들웨어는 일반적인 자동차 사용 사례와 최소 유선 형식 수준의 AUTOSAR와 호환되도록 설계되었습니다.  http://some-ip.com/에서 공개적으로 액세스할 수 있는 사양이 제공됩니다. 이번 포스팅에서는 SOME/IP 사양의 기본 구조와 오픈 소스 구현 및 오픈 소스 구현에 대한 간략한 개요를 제공하고자 합니다.

 

먼저 SOME/IP 사양의 세 가지 주요 부분부터 살펴보겠습니다.

 

On-wire format

Protocol

Service Discovery

 

 

SOME/IP On-wire format

원칙적으로 SOME/IP 통신은 IP를 통해 devices 또는 subscribers 간에 전송되는 메시지로 구성됩니다. 다음 그림을 참고하세요.

 

두 장치(A 및 B)가 표시되어 있습니다. Device A는 B에 SOME/IP 메시지를 보내고 하나의 메시지를 반환합니다. 기본 전송 프로토콜은 TCP 또는 UDP를 활용합니다. 메시지 자체에는 큰 차이가 없습니다. 이제 Device B에서 이 메시지에 의해 Device  A에서 호출되는 기능을 제공하는 서비스를 실행하고 있다고 가정하고, 그 답으로 메시지를 보냅니다.

 

SOME/IP 메시지에는 header와 payload의 두 부분이 있습니다. 그림에서 헤더는 주로 식별자입니다:

 

Service ID : 각 서비스의 고유 식별자

Method ID : 0-32767(방법), 이벤트의 경우 32768-65535

Length : 페이로드 길이(바이트)(다음 ID도 포함, 8바이트 추가)

Client ID : ECU 내의 호출 클라이언트에 대한 고유 식별자로, 전체 차량에서 고유해야 합니다.

Session ID : 세션 처리를 위한 식별자. 각 통화에 대해 증가시켜야 합니다.

Protocol Version : 0x01

Interface Version : 주요 서비스 인터페이스 버전

Message Type :

-- REQUEST (0x00) 응답을 기다리는 요청(공백도) 

-- REQUEST_NO_RETURN (0x01) A fire&forget 요청 

-- NOTIFICATION (0x02) 응답이 없을 것으로 예상되는 알림/이벤트 콜백 요청 

-- RESPONSE (0x80) response message

Return Code : 

-- E_OK (0x00) 오류 발생이 없을 시

-- E_NOT_OK (0x01) 지저오디지 않은 오류 발생  

-- E_WRONG_INTERFACE_VERSION (0x08) Interface version 불 일치

-- E_MALFORMED_MESSAGE (0x09) 페이로드의 크기를 줄일 수 없도록 감도화 오류

-- E_WRONG_MESSAGE_TYPE (0x0A) 예상치 못한 메시지 유형 수신 (예를 들어 RE-QUEST_NO_RETURN)

 

정상적인 기능 호출과 클라이언트가 가입한 이벤트에 대한 알림 메시지에 "Requests" 및 "RESPONSE"가 있음을 알 수 있습니다. 오류는 정상적인 응답 또는 알림으로 보고되지만 적절한 반환 코드가 있습니다.

 

payload에는 직렬화된 데이터가 포함되어 있습니다. 위 그림은 전송된 데이터 구조가 기본 데이터 유형만 있는 중첩 구조라는 단순한 경우의 직렬화를 보여주고 있습니다. 이 경우, 구조 요소는 그냥 평평하게 됩니다. 즉, 단순히 적재물에 하나씩 기록된다는 뜻입니다.

 

SOME/IP Protocol

이 섹션에서는 주로 두 가지 사항이 중요합니다.

 

the so-called transport bindings (UDP and TCP)

the basic communication patterns publish/subscribe and request/response.

 

위에서 언급한 바와 같이 기본 전송 프로토콜은 UDP 또는 TCP일 수 있습니다. UDP의 경우 SOME/IP message가 분할되지 않습니다. message가 둘 이상 UDP 패킷에 있을 수 있지만 UDP 패키지는 최대 1400바이트일 수 없습니다. 큰 message는 TCP를 통해 전송되어야 합니다. 이 경우 TCP의 robustness가 사용됩니다. TCP 스트림에서 동기화 오류가 발생하면 SOME/IP 규격에서 다음 message의 시작을 다시 찾기 위해 magic cookies를 호출할 수 있습니다.

 

service interfaces를 인스턴스화해야 하며 동일한 인터페이스의 인스턴스가 여러 개 있을 수 있으므로 정의된 인스턴스(인스턴스 ID)에 대한 추가 식별자가 있어야 합니다. 그러나 인스턴스 ID는 SOME/IP 메시지 header의 일부가 아닙니다. 인스턴스는 전송 프로토콜의 포트 번호를 통해 식별됩니다. 즉, 동일한 인터페이스에서 여러 인스턴스가 동일한 포트에서 제공될 수 없습니다.

 

이제 기본 SOME/IP 통신 패턴을 보여 주는 다음 그림을 보십시오.

 

Remote Procedure Calls에 대한 표준 REQUEST/RESPONSE 메커니즘 외에도 이벤트에 대한 PUBLISH/SUBSCRIBE 패턴도 있습니다. SOME/IP 프로토콜의 이벤트는 항상 이벤트 그룹에 그룹화되므로 이벤트 자체는 가입할 수 없고 이벤트 그룹에만 가입할 수 있습니다. SOME/IP 사양도 "필드"를 알고 있습니다. 이 경우 Setter/Getter 방법이 REQUEST/RESPONSE 패턴을 따르고 있으며 변경사항의 알림 message는 이벤트입니다. Subscription 자체는 SOME/IP Service Discovery을 통해 수행됩니다.

 

 

SOME/IP Service discovery

SOME/IP 서비스 검색은 서비스 인스턴스를 찾고 서비스 인스턴스가 실행 중인지 탐지하고 publish/subscribe 처리를 구현하는 데 사용됩니다. 이것은 소위 말하는 offer messages를 통해 수행됩니다. 즉, 각 device는 이 device에서 제공하는 모든 서비스를 포함하는 메시지를 broadcast(멀티캐스트)합니다. SOME/IP SD messages는 UDP를 통해 전송됩니다. 클라이언트 애플리케이션에 서비스가 필요하지만 현재 제공되지 않는 경우 "find messages"도 보낼 수 있습니다. 다른 SOME/IP SD messages는 이벤트 그룹을 Publish/Subscribe하는 데 사용할 수 있습니다.

 

다음 그림은 SOME/IP SD messaged의 일반적인 구조를 보여줍니다.

 

vsomeip 간단 개요

도입 사례를 구현하기 전에 vsomeip이라고 하는 SOME/IP의 GENIVI 구현의 기본 구조에 대해 간단히 살펴보겠습니다.

 

그림과 같이 vsomeip은 기기 간 SOME/IP communication (외부 통신)뿐만 아니라 내부 프로세스 간 communication 도 포함합니다. 두 Device는 사용된 전송 프로토콜(TCP 또는 UDP)과 해당 매개 변수를 포트 번호 또는 기타 매개 변수로 결정하는 통신 endpoints 을 통해 통신합니다. 이러한 모든 매개 변수는 vsomeip 구성 파일에 설정할 수 있는 구성 매개 변수입니다(json 파일, vsomeip 사용자 설명서 참조). 내부 communication은 로컬 endpoint를 통해 이루어지며, 이 엔드포인트는 Boost.Asio Library를 사용하여 Unix 도메인 소켓에 의해 구현됩니다. 이 내부 통신은 D-Bus 데몬과 같은 중앙 구성 요소를 통해 라우팅되지 않으므로 매우 빠릅니다.

 

중앙 vsomeip 라우팅 관리자는 외부 디바이스로 전송해야 하는 경우에만 messages를 수신하고 외부에서 들어오는 messages를 배포합니다. Device 당 라우팅 관리자는 하나만 있으며, 아무것도 구성되지 않은 경우 실행 중인 vsomeip 애플리케이션도 라우팅 관리자를 시작합니다.

 

vsomeip은 데이터 구조의 직렬화를 구현하지 않습니다. 이는 CommonAPI의 SOME/IP Binding에서 다루고 있습니다. vsomeip은 SOME/IP Protocol과 Service Discovery을 포함합니다.

 

이는 SOME/IP 및 vsomeip에 대한 짧은 소개였습니다  그러나 처음 접하시는 분들에게는 충분할 것입니다. 더 자세한 것은 나중에 예제를 통해 설명하도록 하겠습니다.

블로그 이미지

wtdsoul

,

OBD2 블루투스 동글을 이용한 엔진체크등 자동 소거기 - 자동차 DIY - 자동차 가지고 놀기 (daum.net)

 

OBD2 블루투스 동글을 이용한 엔진체크등 자동 소거기

차량에 이상이 감지된 경우, 엔진체크등 (MIL : Malfuction Indicator Lamp)이 점등 됩니다.이때 진단단자 (OBD2 Connector)에 스캐너를 연결하여 오류코드 (DTC : Diagonostic Trouble Code)를 읽으면차량의 어느 부분

m.cafe.daum.net

 

 

 
OBD2 블루투스 동글을 이용한 엔진체크등 자동 소거기
 
작성자돌퓨터[김원준]|작성시간14.04.09|조회수1,726목록댓글 9글자크기 작게글자크기 크게

차량에 이상이 감지된 경우, 엔진체크등 (MIL : Malfuction Indicator Lamp)이 점등 됩니다.

이때 진단단자 (OBD2 Connector)에 스캐너를 연결하여 오류코드 (DTC : Diagonostic Trouble Code)를 읽으면

차량의 어느 부분에 이상이 발생했는지 대략 알 수 있습니다.

 

차량에 이상이 발생했다면, 그 원인을 찾아서 수리를 하는 것이 올바른 방법이겠지만,

수리를 해도 엔진체크등을 지울 수 없는 경우도 있습니다.

특히 배기관련 튜닝을 한 경우에 흔하게 발생하는 문제 입니다.

 

많은 운전자들이 이런 문제 때문에, 스캐너로 주기적으로 DTC를 삭제하며 운행을 하는데, 무척 번거로운 일입니다.

그래서, 시중에서 쉽게 구할 수 있는 OBD2 블루투스 동글을 개조하여

자주 발생하는 DTC코드를 기억하였다가,  오류가 발생하면 자동으로 지워주는 장치를 만들어 보았습니다.

 

-------------------------------------------------------------------------------

 

얼마전... 

 

평소에 일은 잘 안하고, 자동차 경주에 나갈 기회만 호시탐탐 노리고 있는 것으로 보이는 

인피동 노땅 회원분으로부터 카톡이 왔습니다.

 

예전에 만들었던 학습형 DTC 자동 소거기 (참조: http://cafe.daum.net/playwithcar/7MdY/23 )

여분이 있냐는 내용이 었는데, 사실대로(^^;) 없다고 하려다가...

뭔가 느낌이 이상해서 어디다 쓰려고 하냐고 물어봤더니, 아는 분 차량에 자꾸 오류가 떠서 그렇다고 하시더군요.

 

그런데 그 차량이 바로....,...

요런 계기판을 가진 좀 특별한 차량이더군요...

 

좀 넓게 볼까요? 뭔가 좀... 아니 마구 복잡하네요

 

엔진룸도 심상치 않게 생겼군요... 무슨 차일까요?

 

저... 저요?

 

네 무려... 무르시엘라고 LP640 입니다.

 

아벤타도르에게 자리를 물려주기 전까지, 람보르기니의 기함이었던 멋진 녀석이죠...

람보를 한번 뜯어봐야겠다는 호기심에 그만 일을 벌이고 말았습니다.

또 수십만원을 날릴 기회가 생긴거죠 ㅠㅠ

 

:

:

:

 

몇 일 뒤... 땅바닥에 찰싹 달라붙어 있는 무르시를 만났고, 일단 어떤 오류가 있는지 스캔해 봤습니다.

 

현재는 2개의 오류 코드가 떠 있지만, 배기/Miss fire 관련 오류 몇가지가 계속 발생한다고 합니다.

배기 튜닝이 된 상태이기 때문에, 일반적인 수리 방법으로는 해결이 되지 않는다는군요.

 

그래서 급히 DTC 소거기를 만들어서 연결해 봤는데...

OTL... 이 차량은 (2008년식 무르시엘라고) OBD단자에 CAN이 없었습니다.

DTC 소거기는 CAN 방식만을 지원하기 때문에 이 차에는 아무런 쓸모가 없더군요.

어쩔 수 없이 기념사진만 찍고ㅠㅠ 무르시와는 일단 이별을 하게 되었습니다.

 

 

 

CAN을 지원하지 않는 구형 차량도 대부분 K-Line은 지원하기 때문에,

K-Line 방식으로 DTC 소거기를 다시 만들면 되지만, 그러려면 시간도 많이 걸리고,

비용도 많이 들어가기 때문에 포기 할까하다가.... 좋은 생각이 떠 올랐습니다.

 

자동차의 진단단자(OBD2I 단자)에 꽂고 스마트폰이나 노트북등과 블루투스로 연결하여

차량의 상태 (속도, RPM, 냉각수온, 유온등)를 실시간으로 확인할 수 있는 "OBD2 블루투스 동글" 이라는 장치가 있습니다.

 

1~3만원대의 저렴한 가격으로 구입할 수 있고, 대부분의 차량에 사용가능하죠. 이렇게 생겼습니다.

 

요즘 많은 분들이 차량에 설치하여 "Torque" ( https://play.google.com/store/apps/details?id=org.prowl.torque )와

같은 스마트폰용 어플을 사용하여 보조 게이지로 사용하고 계시죠.

 

 

OBD2 동글은 ELM-327이라는 자체 프로토콜을 지원하며, ELM-327은 차량의 종류/연식등에 따라

다른 여러가지 통신방식을 간단한 AT 커맨드 방식으로 변환해 주는 일종의 번역장치 입니다.

ELM-327에 대하여 자세히 알고 싶으신 분은 http://elmelectronics.com/ 를 참조하시기 바랍니다.

 

이 제품을 사용하면, CAN, K-LIne을 포함하여, 전 세계의 구형~신형 차량 대부분을 지원할 수 있는

다양한 통신 프로토콜을 비교적 쉽게 사용할 수 있습니다.

 

 

DTC 소거기는 CAN 밖에 지원하지 않아서 구형 차량에는 사용할 수 없지만,

차량에서 사용되는 다양한 OBD 관련 프로토콜을 모두 지원하는 ELM-327이

들어 있는 블루투스 동글을 약간 개조하면 비교적 쉽게 문제를 해결 할 수 있을 것입니다..

 

가지고 있던 OBD2 블루투스 동글을 분해해 보았습니다. 제품 상단에 붙어 있는 작은 PCB가 블루투스 모듈입니다.

 

블루투스 모듈은 ELM-327 chip과 시리얼통신(UART)으로 연결되어 있습니다.

블루투스 모듈을 제거하고, ELM-327에서 나온 시리얼통신 라인을 제가 제작한 CPU 보드와 연결합니다.

 

CPU보드는 다른용도로 만들었던 것을 개조한것이라서 살짝 지저분합니다.^^

 

그리고, ELM-327을 통하여 기존의 학습형 DTC 자동 소거기와 같은 기능을 할 수 있도록 프로그램을 작성하였습니다.

 

 

드디어 완성 되었는데....그런데, 이렇게 만들어 놓고보니, 조금 더 욕심이 생겼습니다.

 

"제어 회로(CPU보드)를 OBD2 동글 안에 넣을 수 있지 않을까?"

 

블루투스 모듈을 떼어 낸 자리에 넣을 수 있도록 아주 작은 회로를 만들었습니다.

회로설계와 아트웍 작업 후, 주문한 PCB가 도착했습니다. 주문한 량보다 훨~~~씬 많이 보내주셨네요^^

 

크기는 아래 사진과 같습니다. 100원짜리 동전과 비교해 보시죠~

 

이제 OBD2 동글을 몇 대 더 구입했는데... 어? 외형은 같은데... 내부의 블루투스 모듈이 다른 종류네요ㅠㅠ

그런데 다행히, 시리얼통신 및 전원핀은 동일하여 그대로 사용할 수 있었습니다. 휴우....

살짝 팁을 한가지 알려드리자면... 국내 오픈마켓에서 2~3만원에 판내되는 OBD2 블루투스 동글은

AliExpress나 EBay등을 통하여 직접 구매할 경우 $10 이하로 구매할 수 있습니다.

저는 $7도 안되는 가격에 구입했죠... (좀 오래 걸리긴 하지만, 무료배송^^)

 

이제 조심스럽게 블루투스 모듈을 제거 합니다.

 

아래 사진처럼, 블루투스 모듈을 떼어낸 자리에 새로 제작한 제어회로를 부착합니다.

 

이제, 프로그램 작성을 위해 개발용 장비/PC와 연결합니다.

 

PC를 통하여 AT 커맨드로 오류를 읽어봤습니다.

지난번에 스캐너로 읽은것과 동일한 오류코드가 읽히는군요.

 

새로운 회로에 맞도록 수정한 펌웨어를 기록한 후

 

케이스에 스위치용 구멍을 하나 뚫고... 조립합니다.

 

완성~ 아주 심플하죠?

 

이제 OBD2 진단단자가 달려 있는 거의 모든 차량에서 사용할 수 있는 학습형 DTC 자동 소거기가 만들어졌습니다^^

 

이 제품의 상단에는 작은 버튼 하나와, 적색/녹색 LED가 달려 있습니다.

차량의 전원이 켜져 있는 동안, 주기적으로 오류를 검사하여 차량에 이상이 없을 경우는 녹색 LED가 깜박이고,

DTC 오류가 있을 경우에는 적색 LED가 깜박입니다. 이 때 버튼을 짧게 누르면 DTC 오류가 삭제됩니다.

 

오류가 발생했을때, 버튼을 3초간 누르고 있으면 적색 LED가 빠르게 깜박이고,

현재 발생한 DTC오류를 기억합니다. 오류는 64개 까지 기억가능하며,

(64개보다 더 많은 오류가 발생하는 차량은... 폐차장으로)

기존에 기억된 오류가 있다면 추가하여 기억하게 되고,

추후 기억한 오류가 발생할 경우 자동으로 지워줍니다.

 

기억하지 않은 오류가 발생할 경우는 정말로 차에 이상이 발생한 경우이므로,

DTC를 삭제 하지 않고 적색 LED가 깜박입니다.

 

버튼을 5초 이상 누르고 있으면 녹색 LED가 빠르게 깜박이면서 기억한 내용을 모두 지우게 됩니다.

설치는... 진단 단자에 꽂기만 하면 끝입니다.

 

이제 무르시의 깊은 곳(?)에 있는 진단단자에 꽂고 오류를 기억시켰습니다.

잠시 후.... 경고등이 꺼진 깨끗한 계기판을 볼 수 있었습니다.^^

 

참, 무르시엘라고는 ECU가 2개라고 하는군요. 그래서 경고등도 Left, Right 2개가 있습니다. 참 희안하죠?

 

 

 

 

 

  •  
블로그 이미지

wtdsoul

,

https://tb.kibo.or.kr/ktms/board/download.do?rbsIdx=441&idx=403&fidx=1&usg=AOvVaw055O89vj3goNb6vkVO-DZL 

 

 

 

블로그 이미지

wtdsoul

,

제품 목록 | Vector

 

소프트웨어

ASAP2 Lib ASAP2 파일 읽기 및 쓰기를 위한 함수 라이브러리
ASAP2 Tool-Set ECU 디스크립션 파일의 생성 및 편집
CANalyzer ECU, 전체 네트워크 및 분산 시스템의 분석
CANape ECU 계측, 캘리브레이션, 진단 및 플래싱
CANape log 효율적이고 유연한 ADAS 로깅
CANdb++ CAN/CAN FD 네트워크를 위한 설계 환경
CANdelaStudio 차량 진단 사양화
CANoe ECU, 전체 네트워크 및 분산 시스템의 테스트, 시뮬레이션, 진단 및 분석을 위한 멀티 버스 툴
CANoe Test Package VAG Volkswagen을 위한 CANoe 기반 CAN Conformance 테스트
CANoe.DiVa ECU 진단 소프트웨어의 자동 테스트
BASELABS Create Embedded 자율 주행 기능을 위한 데이터 퓨전 개발
DaVinci Configurator Pro AUTOSAR 베이직 소프트웨어 및 RTE 설정
DaVinci Developer ECU의 AUTOSAR SWC 설계
DYNA4 폐-루프(Closed-loop) 시스템 테스트에서 가상 테스트 주행을 통한 효율적인 기능 개발
Indigo 진단 테스터
MDF4 Lib MDF3 및 MDF4 파일 읽기 및 쓰기를 위한 함수 라이브러리
ODXStudio ODX 진단 데이터 보기 및 편집
PREEvision E/E 엔지니어링 솔루션
Squore 프로젝트 모니터링에서 효율적인 의사결정을 위한 소프트웨어 분석
TA Tool Suite AUTOSAR Multi-Core ECU의 타이밍 동작을 최적으로 관리
vCDM 전문적인 캘리브레이션 데이터 관리
vCDMstudio 파라미터 설정 파일 편집
VectorCAST 소프트웨어 개발 라이프 사이클 전체에서 테스팅 활동을 자동화
vFlash ECU 플래싱
vMDM 전문적인 계측 데이터 관리
vMeasure 다양한 소스의 시간 동기식 수집
vSignalyzer 계측 데이터 표시, 평가 및 문서화
vTESTstudio 임베디드 시스템을 위한 편리한 자동화 테스트 시퀀스 설계
vVIRTUALtarget AUTOSAR ECU를 위한 가상 테스트
 

제품 목록

소프트웨어, 하드웨어, 라이브러리 및 드라이버, 임베디드 소프트웨어: 약 75개의 벡터 제품을 해당 카테고리에서 알파벳 순으로 찾을 수 있으며, 제품에 관한 자세한 정보를 확인할 수 있습니다

www.vector.com

 

하드웨어

Accessories CAN, FlexRay, BroadR-Reach, Ethernet, OBD 및 K-Line을 위한 케이블과 어댑터
Bus Transceiver CAN, CAN FD, LIN,  K-Line, FlexRay, 센서 및 J1708 인터페이스를 위한 벡터 전용 버스 트랜시버
RT Rack CANoe RT 운영에 최적화된 실시간 운영체제를 갖춘 고성능 산업용 PC
CSM Measurement Modules 빠르고 정확하며 유연한 계측
GL Loggers 다양한 차량 어플리케이션을 위한 데이터 로거 제품군
Smart Logger E-Mobility 및 ADAS 개발을 위한 지능형 로깅 솔루션
VH1160 CANoe를 사용하여 CAN 및 LIN 적합성 테스트하기 위한 하드웨어
VH4110 스마트 디바이스 테스트를 위한 USB 라우터
VH5110A 충전소 및 전기자동차 간의 CCS 충전 통신 분석을 위한 하드웨어
VH6501 CAN (FD) 네트워크에 정교하고 재현 가능한 외란을 인가하는 스트레스 하드웨어
VN0601 ARINC 429를 위한 네트워크 인터페이스
VN1530/VN1531 CAN 및 LIN을 위한 네트워크 인터페이스
VN1600 USB 인터페이스를 갖춘 CAN, CAN FD, LIN, K-Line, J1708 및 IO 네트워크 인터페이스
VN2640 USB 인터페이스를 갖춘 MOST150 네트워크 인터페이스
VN4610 Car2X/V2X 통신을 위한 네트워크 인터페이스
VN5611/VN5612/VN5601 Ethernet interfaces and adapter for portable use
VN5620/VN5430 차량용 Ethernet (및 CAN FD) 을 위한 네트워크 인터페이스
VN5650/VN5240 온보드 어플리케이션을 위한 Ethernet 인터페이스
VN7572 PCIe 인터페이스를 갖춘 FlexRay, CAN FD, LIN 및 K-Line 네트워크 인터페이스
VN7610 USB 인터페이스를 갖춘 CAN FD 및 FlexRay 네트워크 인터페이스
VN7640 USB 인터페이스를 갖춘 CAN FD, LIN, FlexRay, K-Line, J1708 및 Ethernet 네트워크 인터페이스
VN8900 FlexRay, CAN FD, LIN 및 K-Line을 위한 모듈식 네트워크 인터페이스 시스템
VP6400 / VP7400 스마트 로거 어플리케이션을 위한 플랫폼
vSECC 지능형 충전소를 위한 범용 제어 장치
VT System 효율적인 ECU 테스트를 위한 모듈식 테스트 환경
VX0312 Ethernet/BroadR-Reach 및 CAN을 위한 네트워크 인터페이스
VX1000 초고속 데이터 전송 속도를 지원하는 확장 가능한 ECU 인터페이스
VX1161 여러 ECU를 위한 컴팩트한 계측 및 캘리브레이션 하드웨어

임베디드 소프트웨어 컴포넌트

MICROSAR Adaptive 동적 AUTOSAR Adaptive 소프트웨어 플랫폼
MICROSAR Classic AUTOSAR ECU를 위한 베이직 소프트웨어
CANbedded CAN 통신을 위한 소프트웨어 컴포넌트
CANbedded J1939 J1939 어플리케이션을 위한 소프트웨어 컴포넌트
CANbedded LIN LIN 통신을 위한 소프트웨어 컴포넌트
Flash Bootloader ECU 리프로그래밍 소프트웨어

라이브러리 & 드라이버

Vector D-PDU API D-DPU API(ISO 22900-2)를 통한 표준화된 차량 통신
PassThru XL Library SAE J2534 기반 어플리케이션을 위한 벡터 네트워크 인터페이스 사용
RP1210 API 상용 차량의 진단 인터페이스 액세스를 위한 프로그래밍 인터페이스
XL Driver Library 벡터 네트워크 인터페이스를 위한 드라이버 라이브러리
블로그 이미지

wtdsoul

,

BMW SOME/IP

경로 및 정보 2023. 2. 14. 11:03

https://voib.tistory.com/2

 

 

글쓴이는 현재 유럽 OEM 관련 SOME/IP Project를 진행 중이며 진행 하면서 배운 것들을 정리 할 겸 글을 써 보았다.

(AUTOSAR 1.5.1 SOME/IP 규격 기반)

https://www.autosar.org/standards/foundation/

 

1. SOME/IP(Scalable service-Oriented MiddlewarE over IP) Overview

BMW 주도하에 Automotive 영역에서 Device(ECU)간 Ethernet 기반 Data 통신을 지원하기 위해 만들어진 Protocol이다.

 

SOME/IP 는 SOA(Service Oriented Architecture)기반으로 설계 된 Protocol이다.

각 기능이 Service별로 구별 되어 있으며,

각 Service는 Service를 제공하는 Provider(Server), Service를 이용하는 Consumer(Client)로 구분 되어 있다.

 

2. SOME/IP 

Device 끼리 SOME/IP Protocol을 통해 Data를 주고 받는 것이 주 목적이다.

SOME/IP 관련 Header 가 존재하며 data 가 Serializatoin 된 Payload가 존재 한다.

Header 와 Payload는 Byte형태이다.

- SOME/IP Header

더보기
닫기

Service ID : 서비스 unique ID
Method ID : 0-32767(Method), 32768-65535 (Event)
Length : Payload length
Client ID : ECU 내의 unique ID=> 하나의 Service ID 안에 여러 Client 가 존재 할 수 있다.
Session ID : Session ID, SOME/IP 통신 마다 증가해야 하며, SOME/IP sequence를 구별 하기 위해 사용한다.
Protocol Version : 0x01 (현재 default 값은 1이다)
Interface Version : Service Interface의 Major 버전이다.

Message Type : 
-- REQUEST (0x00) Response를 기다리는 요청
-- REQUEST_NO_RETURN (0x01) A fire&forget 요청  
-- NOTIFICATION (0x02) Response 기대 없이 이벤트 형식의 data 만 전송
-- RESPONSE (0x80) Response message

Return Code :  
-- E_OK (0x00) 정상
-- E_NOT_OK (0x01) 비정상 return

-- E_UNKNOWN_SERVICE (0x02) Service 못 찾음

-- E_UNKNOWN_METHOD(0x03) Method 못 찾음

-- E_NOT_READY (0x04) Application 미 준비 상태

-- E_NOT_REACHABLE (0x05) System 이 비정상 상태

-- E_TIMEOUT (0x06) Timeout

-- E_WRONG_PROTOCOL_VERSION (0x07) Protocl version 불 일치

-- E_WRONG_INTERFACE_VERSION (0x08) Interface version 불 일치

-- E_MALFORMED_MESSAGE (0x09) 비정상 Packet 형태
-- E_WRONG_MESSAGE_TYPE (0x0a) Message Type 불 일치 
-- RESERVED (0x0b - 0x1f) 페이로드의 크기를 줄일 수 없도록 감도화 오류 
-- RESERVED (0x020 - 0x5e) 예상치 못한 메시지 유형 수신 (예를 들어 RE-QUEST_NO_RETURN)

 

- Payload Serialization

  규격 참고

보통 Protocol의 Header 및 Serilization 부분은 규격을 자세히 읽어 보는 것이 좋은것 같다.

그리고 직접 PCAP과 비교해보면서 보면 훨씬 이해가 빠를 것이다.

 

- Transport Protocol

SOME/IP 는 UDP 또는 TCP 기반으로 통신을 하게 된다. 

보통 Packet 크기 MTU 사이즈 이상 되게 되면 TCP를 사용하게 되며

현재는 Runtime 시점에 동적으로UDP <->TCP 전환 내용은 요구사항에 없다.

규격에서 제안 하는 Transprot Protocol 선택 가이드라인 

더보기
닫기

     #Use TCP only if very large chunks of data need to be transported (> 1400 Bytes) and no hard latency requirements in the case of errors exists

#Use UDP if very hard latency requirements (<100ms) in case of errors is needed

#Use UDP together with SOME/IP-TP if very large chunks of data need to be transported (> 1400 Bytes) and hard latency requirements in the case of errors exists

#Try using external transport or transfer mechanisms (Network File System, APIX link, 1722, ...) when they are more suited for the use case. In this case SOME/IP can transport a file handle or a comparable identifier. This gives the designer additional freedom (e.g. in regard to caching).

 

TCP 사용 시 중요한 것은 Nagle's Algorithm이 off 되야 된다는 것이다.

SOME/IP 중요성 중에 하나가 실시간 성이기 때문이다.

 

Consumer 와 Provider 간은 하나의 Connection을 기반으로 통신해야 한다.(TCP는 Heavy 한 Protocol 이며 TCP Connection은 최소화 해야 한다.)

 

UDP 기반으로 MTU 이상 Packet을 전송 하기 위해서는 SOME/IP-TP라는 것을 이용해 보내게 된다.

결국 Data를 Segment하며 Header에 offset 정보를 담아서 보내게 되는 형식이다.

 

- Communication 

규격에서 제안 하는 SOME/IP 통신 방법은 Request/Response(Method), Fire&Forget, Events, Field 총 4가지 이다.

아래 그림으로 충분히 설명이 가능 할 것이다.

   
   

 

- Error Handling

Error 발생 시 규격에서 제안 하는 방법은 총 2가지 존재한다.

  • Return codes in the Response Messages of methods.
  • Explicit Error Messgaes

Response Message의 Returen code에 Error code를 Returne 해주는 방법 과 Paload에 Error mesage(Message Type 0x81)을 담아서 보내는 방법이 있다.

후자는 Consumer Provider 간의 Error message 약속이 존재해야 한다.

글쓴이가 느끼기엔 Error Handling 관련 부분이 타 Protocol Spec(RFC, 3GPP) 대비 많이 부족한 부분인것 같다.

앞으로 많은 부분이 Update 될 것 같다.

 

3. SOME/IP Service Discovery(SOME/IP-SD)

각 Provider 와 Consumer는 시작 전 서로의 정보(Version, IP address, Port ...)들을 알고 있지 않는다.

SOME/IP Service Discovery라는 Step을 통해서 Provider 와 Consumer간 서로의 정보를 교환하게 된다.

 

경험상 SOME/IP-SD flow 다음과 같이 2가지가 존재 할 수 있다.

1) TTL 안에 OfferService가 오는 경우

2) TTL expired 된 후 FindService가 전송 되는 경우

Concept OfferService와 FindService를 통해 서로의 IP addres, Port 등등을 주고 받는 것이며,

주고 받은 정보 기반으로 SOME/IP 통신을 하게 된다.

 

SOME/IP-SD는 Mulitcast를 이용하기 때문에 무조건 UDP 를 사용해야 한다.

이와 관련된 자세한 내용을 알기 위해서는 규격의 StateMachine Diagram을 이해 하는 것이 좋다.

 

여기서 주의 할 것은 Subscribe는 Mandatory가 아니다, Event 혹의 Field의 Notication이 필요 없을 경우는 Subscription 과정을 생략 해도 된다.

1) TTL 안에 OfferService가 오는 경우 2) TTL expired 된 후 FindService가 전송 되는 경우
   

 

 

- Message format

SOME/IP의 Payload에 SOME/IP-SD Header와 Option이 위치하게 된다.

각 Header들은 규격을 읽어 보길 추천한다.

아래는 중요한 것들만 요약 하였다.

Type = SD Type

더보기
닫기

[0x00] = FindService

[0x01] = OfferService

[0x02] = RequestService
[0x03] = RequestServiceAck
[0x04] = FindEventgroup
[0x05] = PublishEventgroup
[0x06] = SubscribeEventgroup
[0x07] = SubscribeEventgroupAck

Index 1st options = option reference index

Service ID = Vehicle에서 Service Unique ID

Instance ID = Service 하위의 Instance ID 

TTL = OfferService lifetime,  Note : TTL Timer Expired 시 Client에서 FindService가 전송 됨

Type = option type, ( [0x06] = "IPv6 Endpoint Option”=>IPv6 사용)

IPv4/6 Address = SOME/IP 를 수신 받기 위한 Local IP

L4-Proto = Transport Layer Protocol, (0x06(TCP), 0x11(UDP))

Port Number = SOME/IP 를 수신 받기 위한 Port

 

- State Machine

가장 중요한 그림이다.

아래 그림만 이해 할 수 있으면 SOME/IP-SD 반은 이해 한다고 볼 수 있다.

머리속으로 상상해 가며 State Machine을 따라 가보 기를 권장한다.

Provider(Server) Consumer(Client)
   

 

 

블로그 이미지

wtdsoul

,

VN5620 / VN5430 | Vector

 

VN5620 / VN5430

차량용 Ethernet 및 CAN/CAN FD를 위한 고성능 네트워크 인터페이스

www.vector.com

 

VN5620/VN5430 – 차량용 Ethernet 및 CAN/CAN FD를 위한 고성능 네트워크 인터페이스

블로그 이미지

wtdsoul

,

WP29 checklist_1.pdf (autocrypt.co.kr)

 

출처 : UN 유럽 경제위원회 정보부 면책 조항 :이 문서는 정보 제공만을 목적으로 합니다. 특정 문제 또는 사실적 상황에 대한 법적 의견 또는 법적 조언에 의존하거나 해석해서는 안됩니다. WP.29 의 궁금한 사항은 AUTOCRYPT 팀에 직접 문의 부탁드립니다. UNECE WP.29 체크리스트 2020 년 6 월 UN 은 자동차 사이버 보안에 관한 두 가지 새로운 규정을 공식적으로 채택했습니다. 이에 따라 자동차 산업에 종사하는 경우 조직에서 수행해야 하는 몇 가지 작업 (OEM, Tier-1 공급 업체, 소프트웨어 제공 업체 등)이 있습니다. CYBER SECURITY MANAGEMENT SYSTEMS (CSMS).. 일반 산업 / 부문 차량 설계에서 사이버 보안 위험 식별 및 관리 테스트를 포함한 위험관리 확인 위험평가가 최신 상태로 유지되고 있는지 확인 사이버 공격 모니터링 및 대응 사이버 보안 성공된 사례 분석 지원 새로운 위협 및 취약성 평가 제조업체 부문 CSMS 차량적용가능 확인 위험평가 분석 및 주요사항 식별 위험을 줄이기 위한 완화 조치 식별 완화 조치가 의도대로 작동하는지 식별 사이버공격에 대한 예방조치 확인 차량 유형별 활동 모니터링 모니터링 활동 보고서 승인기관 전송 SOFTWARE UPDATE MANAGEMENT SYSTEMS (SUMS).. 일반 산업 / 부문 차량유형에 대한 하드웨어 및 소프트웨어 버전 기록 형식승인과 관련된 소프트웨어 식별 소프트웨어 구성요소 확인 소프트웨어 업데이트 및 상호 종속성 확인 차량 표적 식별 및 소프트웨어 업데이트 호환성 확인 소프트웨어 업데이트가 매개변수에 영향을 미치는지 확인 소프트웨어 업데이트가 안전에 영향을 미치는지 확인 차량 소유자에게 소프트웨어 업데이트 알림 제조업체 부문 SUMS 차량적용가능 확인 소프트웨어 매커니즘 보호 및 무결성 보장 소프트웨어 식별번호 보호 차량에서 소프트웨어 식별번호 가능여부 확인 출처 : UN 유럽 경제위원회 정보부 면책 조항 :이 문서는 정보 제공만을 목적으로 합니다. 특정 문제 또는 사실적 상황에 대한 법적 의견 또는 법적 조언에 의존하거나 해석해서는 안됩니다. WP.29 의 궁금한 사항은 AUTOCRYPT 팀에 직접 문의 부탁드립니다. OVER-THE-AIR (OTA) SOFTWARE UPDATES.. 업데이트 실패 시 복원기능 전원이 충분한 경우만 업데이트 실행 안전한 실행 보장 사용자에게 업데이트 완료됨을 확인 필요 차량이 업데이트 실행이 가능한지 확인 필요 정비가 필요할 경우 사용자에게 알림 필요

블로그 이미지

wtdsoul

,


아이템/시스템: SbW(Steer by Wire), IDB, MGH 등 제품군 혹은 제품의 Variant를 뜻하는 의미로 생각됩니다.
컴포넌트: 아이템을 구성하는 하위 Sub 시스템(파워팩, 센서 등등)들을 컴포넌트로 부르거나, 
SW 관점에서는 하나의 Unit 과 같이 특정 기능을 수행하는 Function 단위로도 컴포넌트라는 단어로 불리는 것 같습니다.

 

 

 

 

블로그 이미지

wtdsoul

,

 

Hacking into Toyota’s global supplier management network (eaton-works.com)

 

Hacking into Toyota’s global supplier management network

Inside an exploit that allowed logging in to Toyota’s GSPIMS application as any user, including system admins.

eaton-works.com

 

 

Key Points / Summary:

  • I hacked Toyota’s Global Supplier Preparation Information Management System (“GSPIMS”), a web app used by Toyota employees and their suppliers to coordinate projects, parts, surveys, purchases, and other tasks related to the global Toyota supply chain.
  • System Admin access achieved through accidentally introduced backdoor as part of a user impersonation/”Act As” feature.
  • Any user could be logged in to just by knowing their email, completely bypassing the various corporate login flows.
  • Read/write access to the global user directory containing 14k+ users was achieved.
  • Data access achieved: 14k+ corporate user account details, confidential documents, projects, supplier rankings/comments, and more. Data access was global and not limited to North America.
  • Issue was responsibly disclosed to Toyota in November 2022 and fixed in a timely manner.

Over the course of a slow week in late October 2022, I decided to explore the subdomains of various major companies to see if I could find any exploits worth reporting/writing about. I found several interesting Toyota websites. In 7 days, I reported 4 different security issues to Toyota, all of which were classified as “critical”. One of the reports had a remarkably severe impact and is one of the most severe vulnerabilities I have ever found (so far!)

I discovered what was essentially a backdoor login mechanism in the Toyota GSPIMS website/application that allowed me to log in as any corporate Toyota user or supplier just by knowing their email. I eventually uncovered a system administrator email and was able to log in to their account. Once that was done, I had full control over the entire global system. I used the word “staggering” to describe the amount of data I had access to in the Jacuzzi SmartTub hack, but that was relatively minor compared to this. I had full access to internal Toyota projects, documents, and user accounts, including user accounts of Toyota’s external partners/suppliers. External accounts include users from:

GSPIMS stands for “Global Supplier Preparation Information Management System”. It is an Angular single-page-application. Based on a license key embedded in the app for AG Grid, it was created by SHI International Corp – USA on behalf of Toyota. At first, I didn’t know what GSPIMS was. Google showed a few job listings about it, but otherwise seemed obscure. I didn’t think it was that important at first, but I decided to put some time into it to see what might be hiding behind the login screen. It wasn’t until I bypassed the login screen that I saw the “Global Supplier Preparation Information Management System” label. Sounds important!

Bypassing the login

The login screen features corporate Toyota and Supplier login options:

There should be a “Are you a Hacker?” option.🙂

Both options supply the same list of login methods:

  • TMNA = Toyota Motor North America
  • TME = Toyota Motor Europe
  • TMC = Toyota Motor Corporation (Japan)
  • TDEM = Toyota Daihatsu Engineering & Manufacturing (Asia)
  • Other Affiliates = Unknown, this button does not currently work

If you work for/with Toyota on any continent, it is likely you can log in to the system using one of these options. I do not work for Toyota, so I had to get past this login screen by patching the JavaScript code.

Developers control access to Angular routes/pages by implementing CanActivate and CanActivateChild. Basically, when a user attempts to navigate to a route/page, you would determine if they are allowed to view it, and then return true or false. By patching both to return true, you can usually fully unlock an Angular app:

The logout code also needed to be removed to prevent a redirect back to the login page:

With those patches applied, the app loads and can be browsed:

In the Jacuzzi SmartTub case, patching the JavaScript was all that was needed to achieve full access, since their API was improperly secured. In GSPIMS’ case, no data would load from the API. All the endpoints would return HTTP status 401 – Unauthorized responses due to the missing login cookie. This was the case for every page I browsed. Toyota/SHI had seemingly secured their API correctly, and at this point I was about to write this site off as “probably secure”. I don’t bother reporting single-page-application bypasses unless it also exposes a leaky/improperly secured API.

JWTs for everyone!

Before abandoning work on the GSPIMS app, I looked through its code to see if there might have been any API keys, secret API endpoints, or anything else that might be interesting. I came across this function in the user service. Can you spot what is interesting about it?

JWT stands for JSON Web Token. Think of it as a session token that represents your valid authenticated session on a website. You typically get a JWT after logging into a website using your email and password. You then provide the JWT to secured parts of a website or API to prove your identity and what you are allowed to access. More information

It is interesting because it appears to be generating a JWT based on a provided email. No password required. I decided to compose this HTTP request to see if that createJWT endpoint actually worked. Even if it worked, it wouldn’t be enough without a valid email, which could have been difficult to figure out, especially if the underlying userbase was small.

Corporate Toyota emails use a predictable format in North America: firstname.lastname@toyota.com. That made guessing a valid email easier, but I still had to find someone. I Googled for Toyota employees involved in the supply chain, hoping to find someone who may be registered in the GSPIMS system. I found a promising match and formulated their email address based on their name. Then I fired off the createJWT HTTP request, and it returned a valid JWT!

It seems like I had discovered a way to generate a valid JWT for any Toyota employee or supplier registered in GSPIMS, completely bypassing the various corporate login flows, which probably also enforce two-factor authentication options. The reason createJWT exists will be revealed later in this post.

Utilizing the JWT was easy. The GSPIMS API authenticates via cookie, so I just added it through Chrome’s dev tools:

Escalating to System Admin

The user I logged in had the role of “Mgmt – Purchasing” which probably means they are in charge of organizing purchases of things from suppliers through this system. I had access to some data at this point, but I felt there was more waiting to be unlocked. Looking at the HTTP requests and responses, there is a rolePrivileges node in the user/details API response that returns information about the currently logged in user:

I wanted to try and find a user with the System Admin role. I noticed another API endpoint named findByEmail that returned information about a user’s account by just providing a valid email. Conveniently, this also tells you who the user’s managers are:

Imagine having 3 different managers to report to!😱

Checking the managers of the managers, etc. made it easy to find accounts that had elevated access to the system. Eventually I found a North America Regional Admin. That gave me access to the User Administration section. I then poked around more and found users with even higher access, such as Supplier Admin, Global Admin, and finally, System Admin.

In the GSPIMS settings, the tabs that appear are dependent on your role. There’s Regional Settings for Regional Admins, Global Settings for Global Admins, and System Admin Settings for System Admins. System Admins can access all the tabs. I also noticed that System Admins had access to substantially more users in the User Administration section. Regional Admins are probably only able to manage users in their region, whereas System Admins could manage everyone. With a System Admin JWT, I basically had total, global control over the entire system.

A few screenshots of various sets of users. Take note of the user and page counts in the bottom right corner (there’s a lot – 14,063 users across 563 pages!) Click on any image to enlarge it in a new tab.

American users
Asian users
Japanese users
American System Admins
European users
More Japanese users

I could edit any of those users:

Or add a new user using the user import button above the columns. There is also an export users button you can use to download user information.

Exploring the impact

Having full access, I looked around the GSPIMS app to see what was available to me as a System Admin. I was very careful to not modify anything. Here’s the System Admin Settings if you are curious about what is there. Nothing too exciting – it just controls what roles can access certain features.

Now on to more interesting things. The Parts section has a list of parts associated with the various projects. You choose an affiliate at the top and then the project to see the list of parts. Here is the parts list for a project:

It’s worth noting the projects are in codenames/numbers. It didn’t say anything like “2024 Toyota Corolla”. With a lot more time I probably could have figured out the codenames, but that was outside the scope of this investigation. Speaking of projects, I had access to all the active, global, and inactive projects:

I could view the details of each project, including who is involved, the schedule and milestones, and some type of survey feature. Click on any image to enlarge it in a new tab.

Project Parts List
Add/Remove Users
Project Schedule
Surveys
System Management

Can’t forget about the documents! Classified documents are all the rage nowadays.

Reviewing the HTTP trace I captured, I noticed you can also see Toyota’s various comments about their suppliers. It’s probably also visible in the UI somewhere.

The HTTP trace was captured by just having Fiddler open while browsing the app. The API is very generous with the amount of data it returns, in particular with the users list. You could download a lot of user information by increasing the page size and flipping through the pages.

You could also see all the suppliers and how Toyota ranks them regarding risk, delivery, and prep. There are almost 3,000 of them:

Finally, I discovered what the createJWT API was actually used for. There is an “Act As” feature that let me log in as any of those 14k+ global users. I could easily log in as anyone and get an idea of what projects they are working on, their tasks, surveys, etc. Whoever made the Act As system apparently didn’t realize they added a backdoor to the entire system. The Act As feature is only visible to certain users, like the System Admin user I was logged in as.

That is one long drop-down list.

If a threat actor had discovered this issue, the consequences could have been severe. Here’s a few bad things they could have done. Please note that these are just ideas and none of these were carried out.

  • Added their own user account with an elevated role, to retain access should the issue ever be discovered and fixed.
  • Downloaded and leaked all the data.
  • Delete everything or modify data in a way to be disruptive to global Toyota operations. Hopefully Toyota/SHI have working backups?
  • Craft a highly targeted phishing campaign to attempt to capture real corporate login details, which could have exposed other Toyota systems to attacks. There’s 14k+ users available to attack. It’s one thing to have 14k+ corporate emails, but it’s another to have 14+ corporate emails and know exactly what they are working on/have worked on. If a supplier user has a habit of reusing passwords, it’s possible their own infrastructure could be attacked too.

Reporting to Toyota

The issue was reported to Toyota on November 3, 2022, and they responded later that same day confirming they received the report. On November 23, 2022 they confirmed the issue was remediated, although I noticed it was fixed before that when I randomly tested. I then informed them I would publish my writeup after the industry standard 90-day period has passed.

Toyota/SHI fixed the issue by making the createJWT and findByEmail endpoints return HTTP status 400 – Bad Request in all cases.

Out of all the security issues I have reported so far to various vendors, Toyota’s response was the fastest and most effective. I was very impressed with how quickly they responded and fixed the issue. Some companies can be slow to respond or fail to respond at all, so this experience was refreshing.

Thanks to this responsible disclosure, Toyota avoided what could have been a catastrophic leak of not only their own employees’ data, but the data of their partners/suppliers. Embarrassing internal comments and supplier rankings could have been published for the world to see. Toyota and their suppliers have been hit by cyberattacks before and it could have easily happened again.

Unfortunately, the reward for reporting this critical issue was $0. While it’s fun to find significant vulnerabilities like these, I will probably start shifting my efforts to companies offering monetary rewards help to sustain these often-lengthy investigations and writeups. PS: If you/your company’s security team are currently hiring, feel free to say hello🙂.

블로그 이미지

wtdsoul

,

LIN 개요

경로 및 정보 2023. 2. 7. 09:04

기술블로그 - INSIGHT - 페스카로(FESCARO) - 자동차 소프트웨어 전문기업(자동차 사이버보안, 제어기, V2X)

 

기술블로그 - INSIGHT - 페스카로(FESCARO) - 자동차 소프트웨어 전문기업(자동차 사이버보안, 제어기,

페스카로는 자율주행차, 전기차, 커넥티드카 등 미래차의 모든 SW솔루션을 제공합니다. 자동차 사이버보안부터 게이트웨이 제어기, V2X, SDV까지 다가오는 미래차 산업의 혁신을 주도합니다.

www.fescaro.com

1. LIN 개요

1.1 LIN이란?

LIN(Local Interconnect Network)이란, 자동차 네트워크에서 컴포넌트들 사이의 통신을 위한 직렬 통신 시스템입니다. LIN은 CAN과 같이 다중화되고 있는 네트워크를 보완하기 위해 고안된 저가형 임베디드 네트워킹의 표준이며, 자동차 업계에서 가장 보편적으로 사용합니다. 대부분의 현대식 저가형 8비트 마이크로컨트롤러에 내장된 표준 시리얼 유니버셜 비동기 송/수신기(UART)를 사용하면 비교적 저렴하게 LIN통신을 구현할 수 있습니다. LIN은 보통 CAN의 고대역폭과 다기능이 필요하지 않은 액추에이터와 스마트 센서들 사이의 통신에 사용됩니다. 파워윈도우 기능, 좌식조절기 기능과 같이 그다지 높은 성능을 필요로하지 않는 기능들을 CAN으로 구현하기에는 많은 비용이 요구되므로, 이러한 기능들을 구현할 때에는 LIN을 사용합니다.

1.2 LIN 적용 대상 애플리케이션

Application segmentsSpecific LIN application examples
Roof Sensor, light sensor, light control, sun roof
Steering Wheel Cruise control, wiper, turning light, climate control, radio
Seat Seat position motors, occupant sensors, control panel
Engine Sensors, small motors, cooling fan motors
Grille Grille shutter
Climate Small motors, control panel
Door Mirror, central ECU, mirror switch, window lift, seat control switch, door lock
Illumination Vehicle trim enhancement, sill plates illuminated with RGB LED

이 외에도 LIN 통신은 주차할 때 갑자기 나타나는 장애물을 감지해 운전자에게 경고하는 전후방 주차보조시스템(PAS, Parking Assist System)과 주변 상황을 위에서 보듯 내려다봄으로써 주차할 때 옆 차와의 접촉 사고를 피하게 해주는 어라운드 뷰 모니터(AVM, Around View Monitor), 핸들 조작 없이 엑셀과 브레이크의 조작만으로 주차를 가능하게 하는 주차 조향 보조 시스템(SPAS, Smart Parking Assist System) 등과 같은 운전자 보조 시스템에 적용되고 있습니다.

1.3 LIN 특징1.3.1 단일 마스터-다중 슬레이브 구조

LIN 버스는 단일 마스터-다중 슬레이브 구조로 되어있어, CAN 프로토콜과는 달리 LIN 프로토콜은 버스 중재(메시지의 우선순위에 따라 어떤 메시지가 먼저 버스에 전송될지를 결정하는 것)를 하지 않습니다. LIN 프로토콜에서는 하나의 마스터 노드가 LIN 버스 내 모든 통신을 제어합니다. 이 마스터 노드로 인해 LIN 통신이 시작(메시지 전송 초기화)되며, 모든 슬레이브 노드는 마스터 노드의 허가를 받아야만 마스터 또는 버스 내에 있는 다른 슬레이브 노드들에게 응답을 할 수 있습니다.

1.3.2 멀티캐스트 수신

마스터 또는 슬레이브 태스크로부터 메시지 프레임이 전송될 때, 네트워크상에 연결된 모든 노드들은 메시지를 읽을 수 있습니다. 식별자 바이트에 따라, 수신 노드는 동작을 시작할 것인지 여부를 결정합니다.

1.3.3 클럭 동기화 방식

Synch Break에 이어 마스터 노드가 전송한 Synch Field를 이용하여 모든 슬레이브 노드들은 마스터 클럭에 동기를 맞춥니다.

1.3.4 가변 데이터 프레임

식별자 필드(그림 3 참조)의 두 비트(ID4, ID5)는 메시지 필드의 길이를 나타냅니다. 이 비트들을 이용하면 데이터의 길이를 조절 할 수 있습니다. 또한 송수신 데이터의 양이 제한되어 있을 때 데이터의 오버헤드를 줄여줍니다.

1.3.5 데이터 체크섬과 에러 검출

메시지 프레임에 포함된 데이터는 inverted modulo256-checksum으로, 식별자 바이트는 XOR 알고리즘으로 에러를 검출합니다.

1.3.6 네트워크 내 손상 노드 검출

마스터 태스크는 메시지 프레임의 전송을 제어하므로 모든 노드에게 정보를 요청하고, 각 노드들이 올바르게 동작하고 있는지 점검합니다.

2. LIN 버스 동작 원리

2.1 마스터 슬레이브 구조

LIN 버스는 마스터 슬레이브 구조로 되어있습니다. 이 구조에서는 하나의 마스터 노드가 네트워크 내 모든 통신을 제어합니다. LIN 버스는 데이터를 요청하거나 제어 명령을 전송하는 마스터 노드와 마스터 노드로부터의 데이터 요청에 상응하는 데이터를 수집하여 응답하거나 마스터 노드로부터 수신된 제어 명령에 상응하는 동작을 수행하는 슬레이브 노드들로 구성됩니다. 마스터 노드와 슬레이브 노드의 역할은 다음과 같습니다.

구분역할
마스터 노드 – 통신 속도 정의
– 동기 신호 전송
– 데이터 모니터링
– sleep/wake up mode 전환
슬레이브 노드 – 동기 신호 대기
– 동기 신호를 이용하여 동기화
– 메시지 식별자 이해

LIN 버스는 하나의 마스터 노드와 여러 개(최대 16개까지)의 슬레이브 노드들로 구성되어 있습니다. 또한 아래 그림과 같이 마스터 노드는 마스터 태스크와 슬레이브 태스크로 구성되어 있으며, 슬레이브 노드는 슬레이브 태스크만으로 구성되어 있습니다.

 

 

2.2 LIN 메시지 프레임

LIN 버스에서 전송의 기본 단위는 프레임이며, 이는 헤더(header)와 응답(response)으로 나뉘어집니다. 헤더는 항상 마스터 노드의 마스터 태스크가 전송하며, 3개의 필드(SYNC BREAK, SYNC, ID)로 구성됩니다. 응답은 슬레이브 태스크가 전송하며, 데이터 페이로드(DATA 1~n)와 체크섬(CHECKSUM)으로 구성됩니다.

 

 

2.2.1 LIN 메시지 헤더

1) 동기 브레이크 필드(SYNC BREAK Field)
메시지 프레임의 시작을 나타내는 필드입니다. 이 필드는 마스터 태스크가 전송(마스터 태스크만 전송 가능)하며, 슬레이브 태스크가 동기 필드를 준비할 수 있도록 합니다.

2) 동기 필드(SYNC Field)
슬레이브가 마스터 클럭과 동기를 맞추는데 필요한 신호가 포함된 필드입니다. 슬레이브들은 이 신호를 이용하여 현재의 bit time을 측정하고, 슬레이브 내부의 baud rate을 다시 계산하여 동기를 맞춥니다.

3) 식별자 필드(ID Field)
메시지의 내용(메시지의 주소)과 길이에 대한 정보를 나타내는 필드입니다. 식별자 필드는 메시지의 목적지를 가리키는 것이 아니라 메시지 프레임의 내용을 설명하여, 궁극적으로 LIN 네트워크에서 어떤 노드가 이 메시지에 어떻게 반응할지(수신, 응답 전송, 무시)를 결정하는 필드입니다.

 

 

헤더를 수신하면 모든 슬레이브 태스크는 메시지의 식별자(주소)를 확인하며 패리티를 검증하고, 수신할 것인지를 결정합니다. 만약 이 메시지에 대해 응답을 해야 한다면 슬레이브 태스크는 데이터 페이로드와 체크섬을 LIN 메시지 프레임의 응답부분에 채운 뒤 버스에 전송합니다.

2.2.2 LIN 메시지 응답

1) 데이터 필드(DATA Field)
데이터 필드는 8비트로 구성된 2~8개의 필드로 구성됩니다. 데이터 필드는 헤더의 식별자에 응답하는 슬레이브 태스크에 의해 쓰여집니다. 이 때, 버스 중재가 없기 때문에 단 하나의 슬레이브 태스크만 각 식별자에 대해 응답할 수 있으며, 다른 모든 슬레이브 태스크는 응답을 읽는 것이 제한됩니다.

2) 체크섬 필드(CHECKSUM Field)
모든 데이터 바이트(식별자를 포함하지 않은 데이터 프레임)의 modulo-256 합을 포함합니다. 이를 이용하여 메시지의 유효성을 판단합니다.

2.3 마스터 슬레이브 동작 과정 정리

LIN 네트워크는 마스터 슬레이브 구조로 동작하며, 마스터 노드의 마스터 태스크가 모든 LIN 네트워크 통신을 제어합니다. 마스터와 슬레이브의 동작을 도식으로 표현하면 다음과 같습니다.

 

 

3. LIN 버스의 두가지 상태

LIN 버스는 두가지 상태(Sleep 모드, Active)를 가집니다. 데이터가 버스에 있는 동안, 모든 노드는 Active 상태에 놓여집니다. 그러나 특정 시간(4초 이상)동안 버스가 유휴상태이면, 불필요한 전력을 낭비하지 않기 위해 마스터에 의해 LIN 버스는 저전력 동작 모드(Sleep 모드)로 전환됩니다. 또한 LIN 2.0부터 마스터가 첫 번째 바이트가 0이고, 식별자(ID)가 0x3C인 진단 프레임을 전송하면 모든 슬레이브들은 자동으로 Sleep 모드로 전환됩니다. 이러한 진단 프레임을 go-to-sleep-command라 부릅니다. 이후 다시 데이터가 감지되면(WAKEUP 프레임이 LIN 버스에 전송되면) 다시 정상모드(Active)로 복귀합니다.
WAKEUP 프레임은 Sleep 모드를 종료시키고 버스를 활성화시키기 위한 프레임입니다. WAKEUP은 버스가 sleep 모드이고, 노드 내부적으로 WAKEUP에 대한 요청이 있을 때 버스의 모든 노드(마스터, 슬레이브)에 의해 전송될 수 있습니다.

블로그 이미지

wtdsoul

,