티스토리 뷰

자동차

AE / SOME/IP & vsomeip

삼전동해커 2023. 7. 11. 18:37

출처 : https://github.com/COVESA/vsomeip/wiki/vsomeip-in-10-minutes#prep

 

vsomeip in 10 minutes

An implementation of Scalable service-Oriented MiddlewarE over IP - COVESA/vsomeip

github.com

 

 

GENIVI는 차량 내에 다양한 기능과 표준을 제공하기 위한 IT 회사들의 연합이다. BMW, ford, bosch 등이 있다. 대기업들의 기술 독점을 막기위함이다.

이 GENIVI가 이름을 바꾼게 Connected Cart System Aliance (COVESA)로 이름을 바꾼 것이다.

 

 

Header

- service ID : 각 서비스에 대해 지정된 ID값

- Method ID : 0 - 32767은 Method에 대해, 32768 - 65535는 events에 대한 ID 값

- Length : payload의 길이 byte값

- Client ID : ECU 장비의 ID값

- Session ID : 세션에 대한 ID값

- Protocol version : 0x01 고정

- Interface version : 서비스 인터페이스 버전

- Message type

   - REQUEST(0x00) : response를 받아야하는 request

   - REQUEST_NO_RETURN(0x01) : 전송만 하는 request

   - NOTIFICATION(0x02) : 응답없이 notification/event를 알려주는 request

   - RESPONSE(0x80) : request에 대한 응답

- Return code

   - E_OK(0x00) : error가 없음

   - E_NOT_OK(0x01) : error가 발생

   - E_WRONG_INTERFACE_VERSION(0x08) : interface version이 안 맞음

   - E_MALFORMED_MESSAGE(0x09) : 메세지가 직렬화되지 않아서 읽어들일 수 없음

   - E_WRONG_MESSAGE_TYPE(0x0A) : 이상한 메세지 타입이 들어옴

 

Payload에는 serialized data가 포함되어 있음. 위 사진에서는 기초적인 데이터 타입만으로 구성된 payload임.

 

SOME/IP protocol

2가지 주요 포인트가 있음.

1. UDP통신 / TCP 통신

2. publish/subscribe와 request/response 통신 패턴

 

SOME/IP 밑에선 TCP/UDP 통신이 진행된다. UDP 통신에서는 SOME/IP가 fragmentation되지 않고 전송된다. 즉 UDP에서는 하나 이상의 패킷이 있을 순 있지만, 하나의 패킷이 1400bytes를 넘기면 안된다는 것이다. 이를 넘기는 패킷은 TCP로 전송되어야 한다. 

TCP 통신과정에서 sync error가 발생하면 magic cookies라고 불리는 값으로 다음 메세지의 시작점을 찾는다.

 

통신에서 service 인터페이스는 표시되어야 한다. 왜냐면 같은 인터페이스 내에 같은 인스턴스가 존재하기 때문에.

인스턴스 ID는 SOME/IP header에 없음. 인스턴스는 전송 프로토콜의 포트 넘버로 구분됨. 즉, 같은 인터페이스의 여러 인스턴스가 같은 포트로 전송될 일은 없음.

SOME/IP 통신 과정

SOME/IP에서 이벤트 그룹으로 묶임. 이벤트 자체에 subscribe하는게 아니라 event group에 subscribe하게 됨.

SOME/IP service discovery

 

Specification of SOME/IP Message Format (serialization)

serialization은 UDP나 TCP 메세지의 페이로드가 어떻게 표현되는지를 설명한다. serialization의 단점은 순서에서 벗어난 메세지 세그먼트를 재정렬해주지 않는다는 것이다. 

 

Message ID는 32bit로 RPC call을 확인하거나 이벤트를 확인하는데 사용한다.

Method ID는 

protocol version은 SOME/IP 헤더의 포멧을 확인하는데 사용한다. (페이로드 포멧은 포함하지 않는다.)

protocol version은 8bit으로 SOME/IP의 버전을 포함해야 한다. 

VSOME/IP overview

VSOME/IP 통신은 다른 장비와의 통신 뿐만 아니라 내부적인 통신도 관련이 있다.

두 장비는 TCP/UDP 통신을 사용하고, 포트 넘버나 다른 파라미터 등을 결정한다. 이러한 파라미터는 configuration file을 통해서 설정한다.

내부 통신은 Boost.Asio 라이브러리를 사용하는 unix domian 소켓을 사용하는 local endpoint를 사용해 통신한다. 내부통신은 D-bus 데몬과 같은 central component를 사용하지 않기 때문에 매우 빠르다.

 

central Routing Manager는 외부로 보낼 메세지가 있을 때나 외부에서 들어온 메세지를 뿌려줄 때 동작한다. 장비 당 routing manager는 하나만 있다. 첫 vsomeip 통신에서 아무것도 세팅되지 않았을 때 routing manager가 동작한다.

 

Vsomeip는 SOME/IP와 SOME/IP SD 프로토콜만 관여하지 데이터 구조의 직렬화에는 관여하지 않는다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함