ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UDS 진단 통신으로 하는 소프트웨어 업데이트 5 - 메타 데이터 업데이트
    diagnostic 2025. 2. 28. 16:16

    소프트웨어 전송 후

    • 소프트웨어 전송을 완료한 후 소프트웨어 업데이트를 추적할 수 있는 메타 데이터를 기록한다. 업데이트가 잘 되었는지 확인도 필요하다. 아래 그림의 빨간 테두리 부분이다. 

     

     

    소프트웨어 번호 쓰기

    • 논점을 흐리지 않기 위해 업데이트의 이력 관리가 왜 중요한지를 설명하지는 않지만 이는 매우 중요하다. 이력 관리에 필요한 데이터를 제어기에 기록한다. 이력 기록을 위한 루틴이 정의되어 있을 수 있다. 설명을 시작할 때 루틴이 정의되어 있다고 가정했다. 앞에서 0x31 RoutineControl을 설명하였다. 동일한 서비스를 다시 설명하는 것보다 WriteDataByIdentifier와 ReadDataByIdentifier 서비스를 설명하는 것이 더 유용할 것 같아 계획을 수정한다.
    • UDS 표준에 WriteDataByIdentifier 서비스가 정의되어 있다. UDS 표준이 있다면 Diagnostic 창에서 설정이 가능하다.
    • Diagnostic 창/ Basic Diagnostic Config 탭/ 서비스 트리/ Data Transmission/ 2E WriteDataByIndetifier에서 마우스 우클릭으로 Add New Service를 한다. 아래 그림과 같이 설정한다.

    ReadDataByIdentifier 서비스를 이용하여 Write SW Number를 정의한다.

     

    • UDS에 정해진 WriteDataByIdentifier의 서비스 아이디는 0x2E이다.
    • UDS에 정해진 소프트웨어 번호의 DataIdentifier는 0xF194이다. 다른 값을 사용하는 경우도 많다. UDS 표준이 정해지기 전부터 자동차사들/협력사들이 사용해오던 DataIdentifier들이 있다.
    • 요청에 소프트웨어 번호가 파라미터로 포함되야 한다. 나는 검증 자동화를 위해 Software_Number라는 시스템 변수를 정의하여 시스템 변수를 이용하도록 했다. 
    • "Software_Number"라고 입력된 칸에서(처음에는 빈 칸이다.) "+" 버튼을 클릭하여 시스템 변수 관리 (System Variable Management) 창을 연다.

    "+" 버튼을 클릭하여 시스템 변수 관리 창을 연다.

     

    • 시스템 변수 관리 창에서 변수 추가 버튼을 클릭하여 Software_Number 변수를 정의한다. 

    시스템 변수 추가 버튼

     

    • 아래 그림과 같이 시스템 변수 Software_Number를 정의하였다. 기본으로 사용할 소프트웨어 번호를 입력하였다.

    Software_Number 시스템 변수를 정의한다.

     

    • Diagnostic Console 탭으로 이동하여 "2E F1 94 Write SW Number" 서비스를 더블 클릭하여 실행한다. 요청이 전송되고 긍정 응답을 받았다.

    WriteDataByIdentifier 서비스로 Software_Number를 쓴다.

     

     

    제어기 리셋

    • 소프트웨어 업데이트 후에 전체 제어기들을 리셋한다. 리셋 후에 제어기들은 부팅 절차에 따라 프로세서, 메모리, 주변 장치들을 점검하고 각자의 기능들을 수행할 것이다. 소프트웨어 업데이트 절차 초기에 정지 시켰던 CAN 통신도 부팅이 완료되면 시작한다. 소프트웨어 업데이트가 문제없이 되었다면 (업데이트한 소프트웨어에도 문제가 없다면) 모든 시스템들이 정상적으로 동작한다.
    • 위와 같은 용도로 제어기 리셋을 실시한다. 제어기 리셋도 정비 과정에서 하는 서비스이므로 UDS에 정의되어 있다. UDS에 정의되어 있으므로 Diagnostic 창에서 설정이 가능하다.
    • 아래 그림과 같이 설정한다. 

    ECUReset 설정

     

    • UDS의 ECUReset의 서비스 아이디는 0x11이다.
    • ResetType 입력 창을 선택하고 오른쪽 끝에 있는 '...' 버튼을 이용하여 ResetType을 선택한다. 사양서에 따라 ResetType을 선택한다. 여기서는 임의로 0x02를 선택하였다. 

    ResetType 선택

    • 모든 제어기들을 대상으로 하기에 "Is Function ID"를 체크한다. 
    • Diagnostic Console 탭으로 이동하여 "11 02 ECU Reset" 서비스를 더블 클릭하여 실행한다. 요청이 전송되고 긍정 응답을 받았다.

    제어기를 리셋한다.

     

     

     

    정비사 이그니션 off 후 on

    • 이론적으로 바로 직전 단계에서 모든 제어기들이 리셋되었을 것이라 정비사가 이니그션을 off하고 on할 필요는 없다.
    • 내가 했던 프로젝트에서는 리셋이 안 되는 제어기들이 있었다. 제어기 스스로 리셋이 되도록 하는데는 소프트웨어 변경이 필요하다. 하드웨어 변경이 필요할 수도 있다. 변경은 돈이 든다. 시간이 든다. 품질 리스크가 있다. OTA 소프트웨어 업데이트가 없던 시절이니 모든 소프트웨어 업데이트는 사람이 했다. 정비사에게 이그니션 off 후 on하라는 지침을 주는 것이 돈, 시간, 품질 면에서 유리하다. 
    • OTA 소프트웨어 업데이트가 적용된 차는 이 과정이 있으면 안 된다. 

     

     

    소프트웨어 번호 읽기

    • UDS 표준에 ReadDataByIdentifier 서비스가 정의되어 있다. Diagnostic 창에서 설정이 가능하다.
    • Diagnostic 창/ Basic Diagnostic Config 탭/ 서비스 트리/ Data Transmission/ 22 ReadDataByIndetifier에서 마우스 우클릭으로 Add New Service를 한다. 아래 그림과 같이 설정한다.

    ReaDataByIdentifier 서비스를 이용하여 Read Software Number 서비스를 정의한다.

    •  응답의 소프트웨어 번호를 시스템 변수에 저장하도록 설정하였다.  

     

    • Diagnostic Console 탭으로 이동하여 "22 F1 94 Read Software Number" 서비스를 더블 클릭하여 실행한다. 요청이 전송되고 긍정 응답을 받았다.
    • TSMaster가 시스템 변수 Software_Number와 응답을 비교하여 동일한지 확인한다. 동일하면 Real Response가 녹색으로 하이라이트된다. 다른 경우 빨간색으로 하이라이트된다.

    ReadDataByIdentifier 서비스로 Software_Number를 읽는다. 기대한 값과 응답이 동일하면 녹색으로 하이라이트한다.

     

     

    이상으로 소프트웨어 업데이트 절차를 서비스별로 분리하여 살펴보았다. 서비스들을 묶어서 한 번의 실행으로 전과정을 수행하면 편리하다. 다음 블로그에서 그 방법을 설명한다.  UDS 진단 통신으로 하는 소프트웨어 업데이트 6 - 자동 진단 :: hsl's tsmaster 사용기