티스토리 뷰

개발/그 외 개발관련

CanTp (CAN Transport Protocol) 모듈

부캐: 개발하는 조대리 2025. 2. 3. 19:05
반응형

CanTp (CAN Transport Protocol) 모듈

CanTp (CAN Transport Protocol, ISO 15765-2)는 AUTOSAR에서 정의된 CAN 네트워크 상에서 대용량 데이터를 송수신할 수 있도록 지원하는 전송 계층 (Transport Layer) 모듈입니다.

 

 

 

 

🔹 1. CanTp의 역할

CanTp (CAN Transport Protocol) 모듈

CAN(Controller Area Network)은 기본적으로 8바이트 이하의 데이터만 전송할 수 있습니다.
하지만 자동차에서 진단 메시지(UDS - Unified Diagnostic Services) 또는 OTA 업데이트와 같은 경우, 수백 바이트~수 킬로바이트의 데이터를 전송해야 하는 경우가 많습니다.
이를 가능하게 하는 것이 CanTp (CAN Transport Protocol)입니다.

CanTp는 CAN 네트워크 상에서 데이터를 여러 개의 CAN 프레임으로 쪼개어 전송하고 다시 조립하는 역할을 수행합니다.
주로 UDS(진단 서비스)와 함께 사용되며, DCM(Diagnostic Communication Manager)과 연계됩니다.

 

🔹 2. CanTp의 구조와 동작 원리

CanTp (CAN Transport Protocol) 모듈

CanTp는 ISO 15765-2 표준을 기반으로 작동하며, 두 가지 전송 방식을 제공합니다.

📌 2.1. CanTp의 전송 방식

1️⃣ Single Frame (단일 프레임 전송)

  • 8바이트 이하의 데이터는 하나의 CAN 메시지에 담아 전송 가능
  • 데이터가 7바이트 이하일 경우 사용
  • 구성: SF (Single Frame) + 데이터

2️⃣ Multi Frame (다중 프레임 전송)

  • 8바이트를 초과하는 데이터를 전송할 때 사용
  • 데이터를 여러 개의 CAN 프레임으로 나누어 전송
  • 구성
    • First Frame (FF): 처음 전송되는 프레임으로 전체 데이터 길이를 포함
    • Consecutive Frame (CF): 나머지 데이터 조각을 포함
    • Flow Control Frame (FC): 수신 측에서 송신 속도를 조절하기 위해 사용

 

🔹 3. CanTp 전송 과정 (Multi Frame 예제)

CanTp (CAN Transport Protocol) 모듈

예제: 30바이트 데이터 전송 과정

1️⃣ First Frame (FF) 전송

  • 데이터가 30바이트로 8바이트 초과이므로, Multi Frame 방식 사용
  • First Frame(FF)은 전체 데이터 길이 정보(30바이트)를 포함
  • 이후 데이터를 분할하여 송신

2️⃣ Flow Control (FC) 프레임 응답

  • 수신 ECU는 Flow Control (FC) 프레임을 보내 송신을 계속할 수 있도록 허용
  • FC 프레임에는 Block Size (BS), Separation Time (ST) 정보 포함

3️⃣ Consecutive Frame (CF) 전송

  • 남은 데이터를 여러 개의 CF 프레임에 나누어 전송
  • 송신 측은 FC 프레임에서 지정한 BS, ST를 준수하여 전송

 

🔹 4. CanTp의 AUTOSAR 계층 구조

CanTp는 AUTOSAR BSW (Basic Software) 계층의 일부이며, 다른 모듈과 협력하여 동작합니다.

CanTp (CAN Transport Protocol) 모듈

계층 관련 모듈

Application Layer UDS (Unified Diagnostic Services), OTA Update
Service Layer DCM (Diagnostic Communication Manager)
Communication Layer CanTp (CAN Transport Protocol)
CAN Interface Layer CanIf (CAN Interface)
Microcontroller Abstraction Layer CAN Driver

CanTp는 DCM과 연계되어 사용되며, CanIf를 통해 CAN Driver로 데이터가 전달됩니다.

 

🔹 5. CanTp의 주요 AUTOSAR 설정

CanTp (CAN Transport Protocol) 모듈

CanTp를 설정하기 위해서는 CanTp_ConfigType 구조체를 설정해야 합니다.

📌 5.1. CanTp의 주요 설정 요소

  • CanTpTxChannel: 송신 채널 설정
  • CanTpRxChannel: 수신 채널 설정
  • CanTpBlockSize (BS): 송신 시 한 번에 전송할 데이터 블록 크기
  • CanTpSTmin (Separation Time, ST): 프레임 간 최소 대기 시간
  • CanTpPadding: CAN 프레임의 패딩 설정

 

🔹 6. CanTp C 코드 예제

CanTp (CAN Transport Protocol) 모듈

6.1. CanTp 설정 예제

#include "CanTp.h"

CanTp_ConfigType CanTpConfig = {
    .CanTpTxChannel = 1,   // 송신 채널
    .CanTpRxChannel = 1,   // 수신 채널
    .CanTpBlockSize = 8,   // Flow Control에서 한번에 받을 블록 크기
    .CanTpSTmin = 10       // 송신 프레임 간 대기 시간 (10ms)
};

void InitializeCanTp(void) {
    CanTp_Init(&CanTpConfig);  // CanTp 초기화
}

 

 

6.2. CanTp 데이터 송신 예제

#include "CanTp.h"

uint8_t data[30] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
                     0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
                     0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
                     0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E};

void SendCanTpMessage(void) {
    CanTp_Transmit(1, data, sizeof(data));  // 채널 1을 통해 데이터 전송
}

 

 

6.3. CanTp 데이터 수신 예제

#include "CanTp.h"

void CanTp_ReceiveCallback(uint8_t channel, uint8_t* data, uint16_t length) {
    printf("수신된 데이터 (채널 %d, 길이 %d): ", channel, length);
    for (int i = 0; i < length; i++) {
        printf("%02X ", data[i]);
    }
    printf("\n");
}

void InitializeCanTpReceiver(void) {
    CanTp_RegisterReceiveCallback(CanTp_ReceiveCallback);  // 수신 콜백 등록
}

 

 

🔹 7. CanTp의 주요 오류 및 해결 방법

CanTp (CAN Transport Protocol) 모듈

오류 원인 해결 방법

데이터 전송 중단 Flow Control 프레임 미수신 수신 ECU가 FC 프레임을 보내는지 확인
데이터 손실 발생 CAN 버스 부하 과다 STmin을 조절하여 프레임 간격 늘리기
송신 속도 느림 Block Size(BS)가 너무 작음 BS 값을 증가시켜 여러 개의 프레임을 한 번에 전송

 

 

🔹 8. 결론

CanTp는 CAN 네트워크에서 8바이트 이상의 데이터를 효율적으로 전송할 수 있도록 도와주는 모듈입니다.
UDS 진단 메시지 전송 및 OTA 업데이트 같은 자동차 통신에서 필수적인 역할을 수행합니다.
AUTOSAR 환경에서는 CanTp가 DCM과 연계되어 동작하며, CanIf 및 CAN 드라이버를 통해 CAN 버스를 제어합니다.

🚗 CanTp 모듈을 활용하면, 자동차 내에서 대용량 데이터를 안정적으로 주고받을 수 있습니다! 🚀