ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UDS 진단 통신으로 하는 소프트웨어 업데이트 6 - 자동 진단
    diagnostic 2025. 3. 2. 11:55

    자동 진단 (Automatic Diagnostic)

     

    앞에서 정의한 서비스 단계들을 하나로 묶어서 작업 그룹을 정의한다. 작업 그룹을 실행시키면 모든 서비스 단계들이 한 번에 순차적으로 "자동" 실행된다.  

     

     

    작업 그룹 정의

    • Diagnostic 창/ Automatic Diagnostic 탭/ 작업 그룹 트리 영역의 "빈 공간"에서 마우스 우클릭하여 "Add a new group"을 선택한다. 폴더 아이콘으로 표시되는 새 작업 그룹이 만들어진다. 
    • [주의] "빈 공간"을 선택한 상태가 아니라 항목을 선택된 상태에서 "Add a new group"하면 새 작업 그룹은 선택된 항목 아래에 생성된다. 

    Automatic Diagnostic에서 한 번 클릭으로 자동으로 실행할 수 있는 UDS 플로우를 구성할 수 있다.

     

    • 방금 만든 작업 그룹을 선택하고 마우스 우클릭하여 뜬 팝-업 메뉴에서 "Edit Name"을 선택하고 작업 그룹의 이름을 변경한다.
    • 나는 software_update라고 정했다. 소트프웨어 업데이트 관련한 UDS 플로우들을 여러 개 정의한다면 여기에 모아서 정의할 것이다. (UDS 플로우는 곧 설명한다.)

    작업 그룹, UDS 플로우의 이름을 바꿀 때 Edit Name을 사용한다.

     

    • [주의] 팝-업 메뉴에 "Delete selected"와 "Delete all flows"가 있다. 나는 블로그에 쓸 화면을 캡쳐하기 위해 반복해서 Add와 Delete을 했다. Delete all flows의 아이콘이 내가 익숙한 삭제 아이콘이다. 나는 아마 습관적으로 이 아이콘이 있는 Delete all flows를 클릭했을 것이다. 작업했던 것들 모두가 삭제되었다. 이것은 내가 원한 것이 아니었다. 나는 삭제 대상을 선택한 후에  Delete selected를 했어야 했다.  😱

    Delate all flows의 아이콘이 익숙하여 Delete selected를 해야할 순간에 Delete all flows를 하지 않도록 주의가 필요하다.

     

    • 작업 그룹 안에 "UDS 플로우""들"을 정의할 수 있다. UDS 플로우는 앞에서 정의한 "서비스""들"로 구성한다.
    • 개별 서비스를 "시험 스텝"이라고 부른다. 작업 "단계"라는 의미인 것 같다. "시험(Test)"이라고 하는 이유는 스텝의 실행 결과를 미리 입력한 정답과 비교하여 패스/페일 (pass/fail)을 판정하기 때문인 것이라 짐작한다.
    • 작업 그룹 안에 작업 그룹을 정의할 수도 있다. (윈도의 폴더 구조와 같은 개념이다.)  하위 작업 그룹이라고 하겠다. 하위 작업 그룹 안에 UDS 플로우들을, 그 UDS 플로우들에 스텝들을 정의할 수 있다.
    • 하위 작업 그룹 안에 하위 작업 그룹을 몇 번이나 중첩해서 정의할 수 있는 지 끝까지 해보지는 않았다. 3개까지는 확인해 보았다. 3개 이상은 너무 복잡할 것 같다.

     

    UDS 플로우

    • 작업 그룹이 선택된 상태에서 마우스 우클릭으로 Add a new uds flow를 한다. 작업 그룹에서 했던 방법으로 이름을 변경한다. 나는 software_update_hsl이라고 했다. hsl은 소프트웨어 이름이다. hsl_1 소프트웨어가 나온다면 나는 새 UDS 플로우를 정의할 것이다. 그리고 그 UDS 플로우의 이름을 software_update_hsl_1으로 하려는 의도이다.

    그룹을 선택하고 Add a new uds flow를 한다.

     

    • UDS 플로우를 구성하는 시험 스텝들을 정의할 차례다. 

     

    시험 스텝 (Test Step)

    • Diagnostic 창/ Automatic Diagnostic 탭/ 작업 그룹 트리 영역에서 변경할 UDS 플로우를 "더블" 클릭(한번 클릭으로는 전환이 안 된다.)하여 화면 오른쪽 부분을 선택한 UDS 플로우의 정의로 전환한다. 
    • 화면 위쪽에 Unlock/Lock 스위치를 Unlock으로 한다. 
    • UDS 플로우 정의 영역에서 마우스 우클릭하여 팝-업 메뉴를 띄우고, Add New Test Step/ SelectConfig를 선택한다.  

    UDS 플로우에 새 스템을 추가한다. 스텝의 종류(type)에는 Normal, SelectConfig, SeedAndKey, TesterPresent, SystemVarEvent가 있다. 앞에서 정한 서비스를 선택할 경우, SelectConfig를 선택한다.

     

    • 스위치가 Lock으로 된 상태에서는 팝-업 메뉴에 Add New Test Step 항목이 없다. 

    Lock되어 있으면 Add New Test Step이 안 된다. Unlock 상태에서 한다.

     

    • 새 시험 스텝이 추가된다.
    • 입력할 스텝들은 아래 그림의 빨간색 박스친 것들이다. 

    예로 정한 소프트웨어 업데이트 절차이다.

     

    • ServiceName 칸을 선택하여, 칸의 오른쪽에 있는 아래 방향 꺽쇠 버튼을 클릭하여 드롭다운 리스트를 보면, 앞(Basic Diagnostic Config)에서 정의한 서비스들을 볼 수 있다. 플로우의 스텝 순서에 따라 선택한다. 

    SelectConfig 타입은 데이터를 일일이 입력하지 않고, SeriveName 칸에서 미리 정한 서비스들 중에서 선택하는 방법으로 데이터를 입력한다. 일일이 입력하는 타입이 Normal 이다.

    • 맨 처음은 Extended Diag Session이다. 빈 칸들이 미리 정의한 Extended Diag Session 서비스의 데이터로 채워진다.
    • Response에 입력된 값이 실행 시 제어기의 실제 응답과 비교될 정답이다. 실제 응답과 정답이 동일하면 Response 칸은 녹색으로 하이라이트된다. 다르면 빨간색으로.
    • Extended Diag Session은 전체 제어기들을 대상으로 하는 요청이다. Address를 Functional로 변경한다. Extended Diag Sessiond를 정의할 때 Is Function ID에 체크했다. 기본은 Physical Address로 설정되어 있다. 

    Extended Diag Session은 전체 제어기를 대상으로 하는 요청이다. Address를 Functional로 설정한다.

     

    • 동일한 방법으로 Stop CAN Tx, Programming Sessin, Request Seed 스텝들을 추가한다.
    • 시드를 받으면 아래 순서에 따라 SendKey를 해야 한다. 
      • 바로 직전에 Request Seed 요청을 하여 제어기로 부터 시드를 받는다.
      • 시드와 미리 정해서 공유한 알고리즘을 이용하여 미니프로그램(혹은 dll)으로 키를 계산하고,
      • 계산된 키를 제어기로 전송한다.
    • 위 기능을 한 번에 할 수 있는 스텝 타입이 있다. SeedAndKey 타입이다. Type을 SeedAndKey로 설정한다.
    • ServiceName을 수동으로 입력한다. 나는 Send Key라고 했다.
    • Address는 Physical이다. 프로그래밍할 제어기하고만 통신하니까.
    • Request에서는 바로 직전 Request Seed 스텝의 Seed Level이 "1"이므로 레벨을 맞춰 "Seed Level:1 Key Level:2"로 설정한다. 

    SeedAndKey 타입의 스텝은 시드 & 키에서 시드를 받아 키를 생성하고 전송하는 절차를 한 번에 수행한다.

     

    • 위에 설명한 방법으로 소프트웨어 업데이트에 필요한 나머지 스텝들을 추가한다. 모든 스텝들을 추가하면 UDS 플로우의 정의는 아래 그림처럼 된다.

    처음 진단 모드 진입에서 마지막 소프트웨어 번호 검증까지 소프트웨어 업데이트의 스텝을을 순차적으로 입력하여 UDS 플로우를 정의하였다.

     

    • 스텝을 입력한 후에 순서를 바꾸려면 옮길 행을 선택한 후 드래그&드롭하면 된다. (드래그할 행을 선택할 때, Valid 칸 외 다른 칸을 선택해야 한다. Valid 칸을 선택하면 드래그가 안 된다.)

     

    실행

    • 실행 버튼을 클릭하여 선택한 UDS 플로우를 실행시킨다.

    UDS 플로우를 실행한다.

     

    • UDS 플로우를 마우스 우클릭 후 팝-업 메뉴에서 Start UDS Flow를 선택하여 실행할 수도 있다. 
    • 실행 과정은 아래 비디오와 같다. 

    tsmaster automatic diagnostic programming

     

     

     

    결론

    • UDS 진단 통신으로 소프트웨어 업데이트하는 방법을 설명하였다. 
    • 먼저, TP (Transport Protocol) 설정을 한다. 운반(Transport)할 데이터 크기가 CAN 통신의 한 프레임에 다 들어갈 수 없기에 데이터를 쪼개서 여러 프레임들에 나눠서 보내야 한다. 데이터를 쪼개고 각 프레임들을 식별하는 방법(Protocol)이 필요하기 때문이다. 
    • UDS 표준에 있는 서비스들을 자동차사의 진단 사양서에 따라 정의하였다. UDS 표준이 있은 후에 진단 통신이 있었던 것이 아니라 진단 통신이 있은 후에 UDS 표준이 정해졌다. 동일한 기능의 서비스도 자동차사별로 파라미터 정의가 다를 수 있다.  
    • 보안 접속 (Security Access)에 시드 & 키 방식이 널리 적용된다. TSMaster는 시드 & 키 절차를 간단하게 설정할 수 있는 기능을 제공한다. 이를 이용하여 시드 & 키 절차를 설정 방법을 설명하였다.
    • 업데이트할 소프트웨어는 파일 형태로 제공된다. 파일 다운로드에는 UDS의 0x34 RequestDownload 0x36 TransferData  0x37 RequestTransferExit 서비스들이 묶음으로 사용된다. TSMaster는 Combined Services로 0x343637 DownloadFile 이라는 것을 제공한다. 이를 설정하는 방법을 설명하였다.
    • 소프트웨어 업데이트라는 작업은 위에 설명한 단위 서비스들을 순차적으로 묶어서 하게 된다. TSMaster는 단위 서비스들을 묶어서 정의하는 UDS 플로우, UDS 플로우들을 정리/보관할 수 있는 작업 그룹이란 개념 위에 구성된 "Automatic Diagnostic"라는 기능을 제공한다. 이 기능을 사용하는 방법을 설명하였다. 한 번의 클릭으로 소프트웨어 업데이트가 실행되는 것을 보여주었다. 
    • 길고 지루한 설명을 끝까지 읽어주신 독자 분들께 감사드립니다. ☺️

     

    목차 :: hsl's tsmaster 사용기