IVS

[Bootloader] UDS Service

レ(゚∀゚;)ヘ=З=З=З 2024. 2. 2. 10:07
728x90

Bootloader

: 운영 체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고. 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램

UDS (Unified Diagnostic Service)

: (ISO 14229 표준) 통합 진단 서비스, 진단 시스템이 차량의 ECU와 통신하기 위해 사용하는 프로토콜
역할 ① 오류 진단 ② ECU Reprogramming

OTA (Over The Air)

: 차량 제어기의 소프트웨어 업데이트를 무선으로 할 수 있는 기술

Session

① Default Session Programming Session Extened Session

 


UDS Service

 

(1) UDS : TP (Transport Protocol)

2024.01.03 - [IVS] - [OTA] UDS : TP (Transport Protocol)

 

(2-1) UDS : SessionControl

Default Session → non-Default Session으로 이동, 일정 시간동안 반응이 없으면 다시 Default Session으로 돌아감

(V에 다운로드 하기 위한 과정)
① CAN 통신을 줄이기 위해 Communication message 제어
② 다운로드
③ V에 다운로드
④ 5초 뒤에 Default Session으로 돌아가려고 하므로 TesterPresent(현재를 유지하라는 것)을 2초마다 송출
⑤ 현재 Session 유지

<Session Timing Parameter>

Timing parameter Type Recommended reload ms Timout ms
S3client Timer reload value 2000ms < S3client
S3server Timer reload value - 5000ms

2000ms : 2초 주기로 현재 유지
< S3client : 한 번 놓치는 것을 감안
5000ms : 얼마나 있다가 Default Session으로 돌아갈 것인가(5초)

① S3client : 현재 상태 유지 위해 TesterPresent을 송출하는 Timer Parameter
② S3Server : DefaultSession으로 돌아가기 위한 Timing Parameter

<CAN Message 구조 - Request>

실제 전자제어 suspension이 받는 것
SID(Service ID)
 : 0x10
SFID(Sub-Function ID)
① 0x01 : Default Session
② 0x03 : Extended Session

더보기

* DLC는 항상 8로 설정 → 항상 8바이트 길이의 데이터를 가져야 함

→ 8바이트 미만의 데이터를 가지게 되면 Filter Byte로 채워줌

① Request의 Filter Byte : 55
② Response의 Filter Byte : AA

 

<CAN Message 구조 - Positive Response>

제어기가 응답하는 것
SID(Service ID)
 : 0x50
SFID(Sub-Function ID)
① 0x01 : Default Session
② 0x02 : Programming Session
③ 0x03 : Extended Session
SessionParameterRecord
(하단에 설명)

 

<SessionParameterRecord>

Parameter # of bytes Resolution minimum value maximum value
P2Server_max 2 1ms 0ms 65535ms
P2*Server_max 2 10ms 0ms 655350ms

P2Server_max : ECU가 응답해야 하는 Timeout 시간 == 50ms
(Default Session에 날려서 제어기가 응답해야 하는 시간 설정)
P2*Server_max : ECU가 지연 응답을 요청했을 때 Timeout 시간 == 5000ms
(지연요청 후 보내는 값)

더보기

Response의 SID RES는 Request의 SID에 0x40을 더해준 값
→ Request : 0x10
→ Response : 0x50

 

더보기

7DF : Functional Request, 모든 제어기에 보내는 CAN ID

→ 7D3, 7DB는 특정 제어기에만 보내는 CAN ID

① 7DF로 Default Session
② 7DF로 고장 감지 중단 신호 보냄 (이제부터 Communication Message가 오지 않기 때문)
③ 7DF로 Extended Session
④ 7DF로 Communication Message 중단 신호
⑤ 개별 제어기와 통신
⑥ 중간중간에 Default Session으로 돌아오지 않도록 TesterPresent 보냄

 

(3) UDS : NRC (Negative Response Codes)

: 부정 응답 코드

SID(Service ID) : 0x7F

더보기

NRC에도 순서가 있다... → ISO 14229에 나와있음

 

(4) UDS : EcuReset

<CAN Message 구조 - Request>
SID(Service ID) : 0x11
SFID(Sub-Function ID)
① 0x00 : ISOSAEReserved
② 0x01 : hardReset (MCU가 꺼졌다 켜지는 것)

<CAN Message 구조 - Positive Response>
SID(Service ID) : 0x51
SFID(Sub-Function ID)
PowerDownTime(꺼지는데 걸리는 시간) → 필수값 아님

 

(5) UDS : SecurityAccess

<CAN Message 구조 - RequestSeed(Request)>
SID(ServiceID) :
0x27
SFID(Sub-Function ID) → securityAccessType = requestSeed (홀수)
SecurityAccessDataRecord : 최소 1Byte 이상

더보기

SecurityAccess에서 RequestSeed는 홀수로 나타냄
SendKey는 RequestSeed+1로 하여 짝수로 나타냄

<CAN Message 구조 - RequestSeed(Response)>
SID(ServiceID) : 
0x67
SFID(Sub-Function ID)
SecuritySeed → 선택사항


<CAN Message 구조 - sendKey(Request)>
SID(ServiceID) : 
0x27
SFID(Sub-Function ID) → securityAccessType = sendKey (짝수)
SecurityKey

<CAN Message 구조 - RequestSeed(Response)>
SID(ServiceID) : 
0x67
SFID(Sub-Function ID)
SecuritySeed → 선택사항

더보기

진단기에서 제어기에 Seed 요구
(Seed, Key) 키 쌍으로 이루어져 있음

 

(6) UDS : CommunicationControl

<CAN Message 구조 - Request>

SID(ServiceID) : 0x28
SFID(Sub-Function ID) 
① 0x00 : enableRxAndTx, 받고 보내라는 것
② 0x03 : disableRxAndTx, 받지도 말고 보내지도 말라는 것
CommunicationType
① 0x00 : ISOSAEReserved
② 0x1 : normalCommunicationMessages

<CAN Message 구조 - Response>

SID(ServiceID) : 0x68
SFID(Sub-Function ID)

 

(7) UDS : RoutineControl

<CAN Message 구조 - Request>
SID(Service ID) : 0x31
SFID(Sub-Function ID)
① 0x00 : ISOSAEReserved - 예약
② 0x01 : startRoutine - 시작
③ 0x02 : stopRoutine - 그만
④ 0x03 : requestRoutineResults - 결과가?
⑤ 0x04 - 0x7F : ISOSAEReserved - 예약
RoutineIdentifier

routineControlOptionRecord

<CAN Message 구조 - Response>
SID(ServiceID) : 0x71
routineControlType
routineIdenttifier
routineInfo
routineStatusRecord

 

(8) UDS : WriteDataByIdentifier

: 진단기/외부에서 제어기에 write 해주는 service

<CAN Message 구조 - Request>
SID(Service ID) : 0x2E
DataIdentifier (DID) - 2Byte
DataRecord
: 쓰려는 Data

<CAN Message 구조 - Response>
SID(ServiceID) : 0x6E
DataIdentifier - 2Byte : 어떤거에 대한 data인지

(9) UDS : ReadDataByIdentifier

→ 한 번에 여러 개 read 가능 (연속으로 응답 가능)

<CAN Message 구조 - Request>
SID(Service ID) : 0x22
DataIdentifier

<CAN Message 구조 - Response>
SID(ServiceID)
DataIdentifier

→ 일반적으로 Default Session에서도 읽을 수 있음


(10) UDS : SPRMIB

: 긍정적인 응답 베시지가 서버에 의해 억제되어야 하는지 여부 나타내는 비트
모든 제어기가 7DF로 긍정응답을 한꺼번에 응답하면 CAN이 튀게 됨 → 억제하기 위해 사용

① 0(FALSE) : 긍정 응답 메시지를 억제하지 않음
② 1(TRUE) : 응답 메시지를 억제함 (부정일 때만 응답)

 

 

 

 

 

 

 

'IVS' 카테고리의 다른 글

[IVS 1기] Intelligent vehicle school 1기 수료 후기  (0) 2024.04.28
[AUTOSAR] AUTOSAR_Tutorial  (0) 2024.02.01
[OTA] UDS : TP (Transport Protocol)  (0) 2024.01.03