ABOUT ME

-

  • XCP - 설정
    application 2025. 4. 13. 15:44

    시작하기 전에

    모니터링의 제약

    TSMaster로 네트워크(CAN, LIN, FlexRay, Ethernet)의 메시지들를 모니터링 할 수 있다. CAN을 대상으로 설명하자면, CAN 버스(들)의 메시지들을 모니터링 할 수 있다. 메시지의 구조를 알면 (dbc 파일이 있으면), 메시지에 포함된 신호들을 모니터링 할 수 있다. CAN 데이터로 제동 성능 평가하기 :: hsl's tsmaster 사용기 등에서 설명한 것처럼 CAN 신호 모니터링은 차량 성능 평가나 기능 개발에 여러 모로 유용하다. 하지만 dbc와 소프트웨어를 변경하지 않고서는 새로운 신호를 모니터링 할 수 없다는 한계가 있다. 제어기 소프트웨어의 많은 변수들 중에서 그때그때 내가 필요로 하는 변수들을 선택해서 모니터링 할 수 있으면 좋지 않을까? 

     

    캘리브레이션의 제약

    간단한 예로 아래의 정차(stand_still) 상태 판정 코드가 있다고 가정하자.

    # 정차 판정 기준값
    k_vehicle_stand_still = 3 	// kph
    
    # v_whl_sped_max: 바퀴 속도들 중 최대값. 가장 빠른 바퀴 속도
    # v_whl_spd_xx: xx 코너의 바퀴 속도
    v_whl_spd_max = max(v_whl_spd_fl, v_whl_spd_fr, v_whl_spd_rl, v_whl_spd_rr)
    
    # 가장 빠른 바퀴 속도가 정차 판정 기준값보다 낮으면 정차 상태라고 판정함
    if (v_whl_spd_max < k_vehicle_stand_still): 
        v_vehicle_stand_still = True
    else
    	v_vehicle_stand_still = False

     

    위 코드에서 v_로 시작하는 변수들은 프로그램 실행 중에 차량의 주행 상태에 따라 변한다.

     

    반면 k_vehicle_stand_still은 프로그램 실행 중에 변하지 않는다. 차량 개발 중에는 해당 기능의 성능을 최적화 하기 위해서 정차 여부를 판단하는 기준 값인 k_vehicle_stand_still을 현재 3[kph]에서 2로 혹은 5로 변경해가며 평가 시험을 반복한다. k_vehicle_stand_still 처럼 프로그램 실행 중에는 변하지 않지만 개발 중에는 최적화를 위해서 변경하는 변수들을 파라미터라고 한다. 파라미터를 변경해 가면서 최적의 성능을 찾는 작업을 캘리브레이션 (calibration)이라고 한다. (튜닝이라고도 한다.) 

     

    위 코드를 제어기에 넣으려면, 코드를 마이콤에서 실행 가능한 바이너리 형대로 변환하고 (이 작업을 컴파일이라고 한다.), 바이너리 파일을 제어기 마이콤의 플래시 메모리에 다운로드해야(이 작업을 플래시/프로그래밍 이라고 한다.) 한다. 컴파일과 플래시는 짧아도 수분에서 수십분 걸린다. 제동 제어기에는 이런 파라미터들이 수천개 있다. 엔진 제어기에는 수만개가 있다. 간단한 제어기에는 수십개 정도가 있을 것으로 짐작한다. 개발 중에 모든 파라미터들을 변경하지는 않지만 수백개 정도는 변경을 시도할 것이다. 만일 파라미터를 바꿀 때마다 컴파일과 플래시를 해야 한다면, 수백개 파라미터들을 캘리브레이션 하더라도 컴파일과 플래시에만 수천내지 수만분의 시간이 소모될 것이다. (이 시간이 다 돈이다. 인건비, 차량 운행 시간, 차량 연료비, 시험장 사용 시간 ...) 컴파일과 플래시 없이 캘리브레이션을 할 수 있다면 좋지 않을까?

     

    XCP

    자동차 산업은 위 한계를 극복하기 위하여 (== 원가 절감을 위하여) CAN 통신으로 모니터링 하고자 하는 변수들을 선택적으로 전송하도록 할 수 있도록 하고 파라미터를 컴파일과 플래시 없이 변경할 수 있는 기술을 개발하였다. 이 기술은 CCP(CAN Calibration Protocol)라는 불린다. 후에 이 기술은 CAN뿐 아니라 FlexRay와 이더넷 등 다른 통신에도 적용되었다. 새 기술은 CAN뿐 아니라 다른 통신도 지원하기에 CCP의 앞에 C을 무엇의 X로  바꾼 XCP라는 이름을 갖게 되었다. 

     

    TSMaster는 XCP 모니터링과 캘리브레이션 기능을 지원한다. 그 사용 방법을 설명한다.

     

     

     

    개요

    • 설정
      • Calibration 창
      • Devices
      • Devices/ ECU - a2l
    • 측정
    • 캘리브레이션

     

     

    설정

    Calibration 창

    • TSMaster는 여러 프로그램들의 모음이다. TSMaster에는 XCP 모니터링과 캘리브레이션을 위한 Calibration 창 등의 도구들이 포함되어 있다. 아래의 방법으로 Calibration 창을 열 수 있다.
    • TSMaster를 시작한다. 시작 화면에서 오른쪽 Start 그룹 아래 Create new project를 클릭한다.

    • Select a main feature of TSMaster 창이 열린다. Calibration을 선택한다.

    • XCP Calibration과 CCP Calibration 중에서 선택할 수 있다. 이 설명에서는 XCP Calibration을 선택한다. 

    • 새 작업 디렉토리를 만든다. 나는 xcp_exercise라는 디렉토리를 만들었다. 

    • 아래와 같이 Calibration 창이 열린다. Parameter Curve 창과 Stimulation 창이 함께 기본으로 열린다. 나는 오른쪽에 System Messages 창과 아래쪽에 Graphics 창을 추가하였다. 

    • 이미 프로젝트를 연 상태에서는 메인 메뉴/ Application/ Calibration Manager 버튼을 클릭하여 Calibration 창을 열 수 있다.

     

    • Calibration 창(캘리브레이션창)의 왼쪽은 Calibration Element(캘리브레이션 요소) 영역이다. Devices(디바이스)를 루트로 트리 구조를 볼 수 있다. 캘리브레이션창의 오른쪽은 상세 영역이다. 캘리브레이션 요소 트리에서 요소를 선택하면, 요소의 상세를 설정할 수 있다. 

     

    Devices

    • 만일 Devices 아래 것도 없다면, 아래 그림과 같이 Devices에서 마우스 우클릭하여 New ECU를 선택하여 ECU를 추가한다.  

    • Device를 선택한 상태에서, 상세 창에 Add ECU Prefix To System Variable을 체크할 수 있다. (TSMaster의 작동 방식을 추측해 보면,) 사용자가 모니터링이나 캘리브레이션을 하려고 선택한 제어기의 각 변수나 각 파라미터에 대응하는 TSMaster의 시스템 변수가 생성된다. 이 시스템 변수들의 이름은 제어기의 변수/ 파라미터와 동일하다. 만인 Devices 아래 ECU와 ECU_1이라는 두 개의 제어기가 있고, 두 제어기에 동일한 이름의 변수가 있다고 가정하자. 그러면 시스템 변수를 보고 어느 제어기의 변수인지 알 수 없다. 이럴 경우, 시스템 변수 이름 앞에 ECU 혹은 ECU_1 이라는 접두사가 붙어있으면 구분이 쉽다. 이 접두사 여부를 체크한다. 제어기가 하나 밖에 없을 경우 공연히 시스템 변수 이름이 길어진다는 단점이 있다. 

     

     

    Devices/ ECU - a2l

    • CAN 통신에는 dbc 파일이 있다. dbc 파일에는 메시지에서 신호를 추출하여 이진수값을 물리량으로 환산하는데 필요한 정보가 있다.
    • XCP 통신에는 a2l 파일이 있다. a2l 파일에는 dbc 처럼 신호를 추출하여 이진수값을 물리량으로 환산하는데 필요한 정보가 있다.
      • 신호가 메시지에 있는 것이 아니라 제어기 마이콤의 메모리에 있는 것이라 메시지 아이디와 신호 위치 대신 메모리 주소가 있다. 
      • 신호가 변수일 수도 있고 파라미터일 수도 있다. 그 종류 정보가 있다. 
      • 신호의 크기 정보가 있다. 신호가 8 비트, 16 비트 혹은 다른 어떤 크기인지. 신호가 단순 변수인지 어레이나 더 복잡한 구조체인지.
      • 신호의 이진수값을 물리량으로 환산하는 방법 정보가 있다. 
    • CAN 통신에서 dbc를 연결하듯, XCP 통신에서 a2l을 연결해야 한다.
      • 이 설명에서는 벡터사의 XCPSim.exe 이라는 윈도에서 동작하는 XCP 시뮬레이터를 제어기 대신 사용한다. 
      • XCPSim.exe은 벡터사 제품을 설치하면 함께 설치된다. (XCPSim.a2l, XCPSim.hex도 설치된다.) 나는 벡터사의 CANape 평가판을 설치하였다.
    • XCP 통신에 a2l을 연결하기 위해 캘리브레이션 요소 영역에서 Decives/ ECU를 선택한다. 상세 영역의 Database에서 파일 열기 버튼을 클릭한다.   

     

    • CANape를 설치할 때 기본 선택을 그대로 적용하였다면, XCPSim.a2l 파일은 아래 경로에 있다.
    C:\Users\Public\Documents\Vector\CANape Examples 22\XCPDemo

     

    • a2l 파일을 선택하면 파싱이 진행된다. 파싱이 완료되면 Devices/ ECU/ Database에 신호들의 정보가 입력된다.

    a2l을 로드하기 전 Database. 아무 정보가 없다.

     

     

    a2l을 로드한 후 Database. 신호 정보들이 있다.

     

    • a2l 로드 전/후의 Devices/ ECU/ Protocol 설정의 차이는 아래와 그림들과 같다. a2l 파일에 설정 정보들이 포함되어 있다는 것을 짐작할 수 있다. 왼쪽이 전, 오른쪽이 후이다.

    Protocol Settings

     

    DAQ Settings

     

     

    Event List

     

     

    Optional Commands

     

    • a2l 로드 전/후의 Devices/ ECU/ Memory 설정의 차이는 아래와 그림들과 같다. a2l 파일에 설정 정보들이 포함되어 있다는 것을 짐작할 수 있다. 왼쪽이 전, 오른쪽이 후이다.

    Memory Configuration

     

     

    Memory Segments (RAM 메모리 설정)

     

     

    Memory Flash (플래시 메모리 설정)

     

     

    Download/ Upload 설정. 차이 없다.

     

    • 위에서 설명에 빠졌다. XCP가 아닌 CCP 프로토콜을 적용하는 경우, Driver에서 CCP를 선택할 수 있다. 

     

    • Devices/ ECU/ Protocol/ Protocol Settings에서 해야할 중요한 설정이 하나 더 있다. Seed and Key DLL 설정이다. XCP 통신으로 제어기 내부 신호들에 접속할 수 있고 파라미터를 바꿀 수 있으므로, XCP 통신 통제가 필요하다. Seed & Key 방식을 사용한다. XCP에는 Seed & Key를 위한 통신이 정의되어 있다. TSMaster와 제어기는 Seed로부터 Key를 생성하는 알고리즘을 공유하고 있어야 한다. 이 알고리즘은 제어기 제조사에서 만든다. 그리고 dll 형태로 배포한다. TSMaster가 이 dll을 사용하도록 설정해야 한다. Devices/ ECU/ Protocol/ Protocol Settings/ Seed and Key DLL에서 설정한다.    

     

     

    XCP를 통한 제어기 소프트웨어 변수 측정과 파라미터 캘리브레이션 방법은 다음 블로그 포스트에서 설명한다. XCP - 측정 :: hsl's tsmaster 사용기

     

     

     

    'application' 카테고리의 다른 글

    ts_can_flash_programmer 개발 - libTSCAN  (3) 2025.07.26
    claude.ai와 코드, 문서 분석 및 코드 작성  (3) 2025.07.26
    SecOC 구현  (0) 2025.02.11
    SecOC (Secure On-board Communication)  (0) 2025.02.09
    CRC 리버스 엔지니어링하기  (0) 2025.02.09