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기 수료 후기 (85) | 2024.04.28 |
---|---|
[AUTOSAR] AUTOSAR_Tutorial (0) | 2024.02.01 |
[OTA] UDS : TP (Transport Protocol) (0) | 2024.01.03 |