DEENESPTFRRUARHIKOZHNL

CAN Transport Layer (CanTp)

ModulCanTp (CAN Transport Layer)
BSW-Modul-ID35
Standard-Header#include "CanTp.h"
SWS-SpezifikationAUTOSAR_SWS_CANTransportLayer.pdf
ClusterCAN

모듈 가이드AI 생성

긴 메시지를 CAN 프레임으로 분할하고 수신된 세그먼트를 흐름 제어와 함께 다시 재조립합니다.
AI 생성 미검증 모델: claude-opus-5-5 · 노력: high · 온도: 제어 불가 · 프롬프트: 69cea53d1819 출처 열린 질문 (1)
인과 앵커: R20-11 R20-11부터 유효 이 사양 릴리스용으로 새로 합성되었습니다.
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

긴 메시지를 CAN 프레임으로 분할하고 수신된 세그먼트를 흐름 제어와 함께 다시 재조립합니다.

CAN Transport Layer는 단일 CAN 프레임에 맞지 않는 메시지를 분할하고 Flow Control을 통해 데이터 흐름을 제어하며 ISO 15765-2에 따라 수신된 세그먼트를 다시 조립합니다 [SWS_CanTp_00033]. PduR과 CanIf 사이에 위치하며, 자체 페이로드 버퍼가 없고 상위 계층의 Copy 서비스를 통해 전송 및 수신 데이터를 세그먼트 단위로 복사합니다 [SWS_CanTp_00298]. 수락된 각 전송은 상위 계층에 보고함으로써 완료되며 성공 시 E_OK, 타임아웃 또는 중단 시 E_NOT_OK로 완료됩니다. 이 모든 것은 CanTp_Init을 전제로 하며 타임아웃은 주기적인 MainFunction이 모니터링합니다.

CanTp는 CAN Transport Layer입니다. 긴 메시지를 CAN 프레임으로 분할하고 데이터 흐름을 제어하며 수신된 세그먼트를 재조립합니다. 이때 사양에 별도의 규정이 없는 한 ISO 15765-2를 따릅니다 [SWS_CanTp_00033]. 이 모듈은 PduR과 CanIf 사이에 위치하며 자체 페이로드 버퍼가 없습니다. 데이터는 상위 계층의 Copy 서비스를 통해 세그먼트 단위로 복사합니다 [SWS_CanTp_00298] [SWS_CanTp_00216].

kontext Nutzer DCM / Com (TP-Nutzer) PduR PduR Nutzer->PduR TP-Dienste CanTp CanTp PduR->CanTp CanTp_Transmit CanTp_CancelTransmit / CanTp_CancelReceive CanTp_ChangeParameter / CanTp_ReadParameter CanTp->PduR PduR_CanTpStartOfReception PduR_CanTpCopyRxData / PduR_CanTpCopyTxData PduR_CanTpRxIndication / PduR_CanTpTxConfirmation CanIf CanIf CanTp->CanIf CanIf_Transmit (SF, FF, CF, FC) Det DET CanTp->Det Det_ReportError Det_ReportRuntimeError CanIf->CanTp CanTp_RxIndication CanTp_TxConfirmation BswM BswM (Modusmanagement) BswM->CanTp CanTp_Init / CanTp_Shutdown Sched Schedule Manager (zyklischer Task) Sched->CanTp CanTp_MainFunction

컨텍스트 다이어그램: CanTp와 PduR, CanIf, 모드 관리, 스케줄러 및 DET 간의 인터페이스. 출처: [SWS_CanTp_00216], SWS CanTp 17쪽

전원을 켠 후 CanTp는 CANTP_OFF 상태에 있습니다 [SWS_CanTp_00168]. CanTp_ConfigType을(를) 포함한 CanTp_Init은(는) [SWS_CanTp_00208] 모든 연결을 유휴 상태로 전환하며 [SWS_CanTp_00030], 그 후 CANTP_ON이(가) 적용됩니다 [SWS_CanTp_00170]. CanTp_Shutdown은(는) 누구에게도 알리지 않고 모든 연결을 닫습니다 [SWS_CanTp_00202] [SWS_CanTp_00200]. 연결 채널들은 각자의 타이머를 가지고 서로 독립적으로 작동합니다 [SWS_CanTp_00122]. 전송 채널이 사용 중인 경우 CanTp는 E_NOT_OK(으)로 새 요청을 거부합니다 [SWS_CanTp_00123].

전송 시 CanTp_Transmit은(는) 길이(및 해당하는 경우 MetaData)만 평가합니다 [SWS_CanTp_00225]. 길이에 따라 SF 또는 세그먼트화된 세션이 뒤따릅니다 [SWS_CanTp_00232]. 각 세그먼트에 대해 CanTp는 PduR_CanTpCopyTxData(으)로 데이터를 가져오고 [SWS_CanTp_00086] FF 및 각 블록 이후 N_Bs 동안 Flow Control을 기다립니다 [SWS_CanTp_00315]. 해석: 이 호출은 수락 여부만 보고하며 전송 종료는 PduR_CanTpTxConfirmation [SWS_CanTp_00176] [SWS_CanTp_00204]을(를) 통해 비동기적으로 전달됩니다. 질문 (열림)

수신 시 CanTp는 먼저 PduR_CanTpStartOfReception(으)로 버퍼를 요청합니다 [SWS_CanTp_00079]. 그런 다음 PduR_CanTpCopyRxData(으)로 각 CF를 복사합니다 [SWS_CanTp_00269]. 버퍼가 부족하면 CanTp는 매 MainFunction마다 이를 다시 질의하고 최대 WFTmax회의 FC(WAIT)를 전송합니다 [SWS_CanTp_00222] [SWS_CanTp_00223]. 끝에는 PduR_CanTpRxIndication이(가) 위치합니다 [SWS_CanTp_00084]. 타임아웃은 주기적인 CanTp_MainFunction이(가) 모니터링합니다 [SWS_CanTp_00164].

N-SDU의 세그먼트 수신CanIfCanTpPduRUse Case: First FrameCanTp_RxIndication(FF)N_Br gestartetPduR_CanTpStartOfReception(TpSduLength)BUFREQ_OK, 사용 가능한 버퍼 크기PduR_CanTpCopyRxData(FF-Daten)CanIf_Transmit(FC: CTS, BS, STmin)loop블록의 각 CF마다CanTp_RxIndication(CF)PduR_CanTpCopyRxData(6/7 Byte)BUFREQ_OK, Restpufferalt남은 버퍼가 다음 블록에 충분하지 않음N_Br 실행 중CanTp_MainFunctionPduR_CanTpCopyRxData(길이 0, NULL_PTR)BUFREQ_OK, RestpufferCanIf_Transmit(FC: WAIT)최대 WFTmax회Puffer ausreichendCanIf_Transmit(FC: CTS)Use Case: Letzter Consecutive FrameCanTp_RxIndication(letzter CF)PduR_CanTpCopyRxData()PduR_CanTpRxIndication(E_OK)

시퀀스 다이어그램: 버퍼 협상 및 Flow Control CTS/WAIT를 포함한 세그먼트화된 수신. 출처: [SWS_CanTp_00269], [SWS_CanTp_00222], SWS CanTp 38쪽

CanTp는 오류를 세 가지 방식으로 처리합니다. 개발 오류는 DET에 보고하고 E_NOT_OK을(를) 반환합니다 [SWS_CanTp_00294]. 타임아웃과 같은 프로토콜 오류는 세션을 중단하고 E_NOT_OK(으)로 PduR에 전달됩니다 [SWS_CanTp_00205] [SWS_CanTp_00311]. Cancel 서비스를 통한 요청에 따른 중단에도 동일하게 적용됩니다 [SWS_CanTp_00255] [SWS_CanTp_00263]. Cancel 서비스의 유효하지 않은 ID에 대해 R20-11은 CANTP_E_PARAM_ID을(를) 요구하는 반면 [SWS_CanTp_00254], 최신 릴리스들은 다른 코드를 명시합니다.

CAN 스택에서의 역할: PduR과 CanIf 간의 전송 프로토콜

CanTp는 CAN Transport Layer입니다. 단일 CAN 프레임에 맞지 않는 메시지를 세그먼트로 분할하고 데이터 흐름을 제어하며 수신된 세그먼트를 재조립합니다 (SWS CanTp 24쪽, SWS CanTp 17쪽). 기반은 ISO 15765-2입니다. 사양에서 명시적으로 제외하지 않는 한 이 표준의 모든 권장사항이 적용됩니다 [SWS_CanTp_00033]. CanTp는 CANTP_ON 상태에서만 세그먼트화 및 재조립을 수행합니다 [SWS_CanTp_00238].

상위 방향으로 CanTp는 PduR에 다음 서비스를 제공합니다: CanTp_Transmit [SWS_CanTp_00212], CanTp_CancelTransmit [SWS_CanTp_00246] 및 CanTp_CancelReceive [SWS_CanTp_00257]. 자체적으로 CanTp는 상위 방향으로 PduR_CanTpStartOfReception, PduR_CanTpCopyRxData, PduR_CanTpCopyTxData, PduR_CanTpRxIndication 및 PduR_CanTpTxConfirmation을(를) 호출하고, 하위 방향으로는 CanIf_Transmit을(를) 호출합니다 [SWS_CanTp_00216]. 하위 계층은 CanTp_RxIndication [SWS_CanTp_00078]을(를) 통해 수신된 프레임을 보고하고 CanTp_TxConfirmation [SWS_CanTp_00076]을(를) 통해 전송 확인을 보고합니다. 두 함수 모두 인터럽트 컨텍스트에서 호출 가능해야 합니다 [SWS_CanTp_00235] [SWS_CanTp_00236]. 최신 문서 구절들은 호출자로 L-SDU Router(LSduR)를 언급합니다 (SWS CanTp 27쪽). 반면 R20-11의 요구사항은 [SWS_CanTp_00031] 및 [SWS_CanTp_00335]과 같이 CAN Interface를 언급합니다.

CanTp에는 자체 페이로드 버퍼가 없습니다. 전송 데이터는 상위 계층에서 직접 가져오고 [SWS_CanTp_00298], 수신 데이터는 상위 계층의 메모리에 즉시 복사합니다 (SWS CanTp 35쪽). 이로 인해 상위 계층에 잠금 기간이 발생합니다 (SWS CanTp 35쪽):

  • 상위 계층은 CanTp_Transmit이(가) E_OK(으)로 반환되는 즉시 PduR_CanTpTxConfirmation이(가) 도착할 때까지 전송 버퍼를 잠긴 상태로 유지합니다.
  • 상위 계층은 PduR_CanTpStartOfReception에 대해 BUFREQ_OK을(를) 제공한 즉시 PduR_CanTpRxIndication이(가) 도착할 때까지 수신 버퍼를 잠긴 상태로 유지합니다.
kontext Nutzer DCM / Com (TP-Nutzer) PduR PduR Nutzer->PduR TP-Dienste CanTp CanTp PduR->CanTp CanTp_Transmit CanTp_CancelTransmit / CanTp_CancelReceive CanTp_ChangeParameter / CanTp_ReadParameter CanTp->PduR PduR_CanTpStartOfReception PduR_CanTpCopyRxData / PduR_CanTpCopyTxData PduR_CanTpRxIndication / PduR_CanTpTxConfirmation CanIf CanIf CanTp->CanIf CanIf_Transmit (SF, FF, CF, FC) Det DET CanTp->Det Det_ReportError Det_ReportRuntimeError CanIf->CanTp CanTp_RxIndication CanTp_TxConfirmation BswM BswM (Modusmanagement) BswM->CanTp CanTp_Init / CanTp_Shutdown Sched Schedule Manager (zyklischer Task) Sched->CanTp CanTp_MainFunction

컨텍스트 다이어그램: CanTp는 PduR과 CanIf 사이에 위치합니다. 모드 관리에 의해 초기화되고 스케줄러에 의해 주기적으로 트리거되며 DET에 오류를 보고합니다. 출처: [SWS_CanTp_00216], [SWS_CanTp_00217], [SWS_CanTp_00164], SWS CanTp 17쪽, Mode Management Guide 54쪽

라이프사이클: CANTP_OFF, CanTp_Init 및 독립적인 연결 채널

CanTp는 CANTP_OFF 및 CANTP_ON 상태를 알고 있습니다 [SWS_CanTp_00027]. 전원을 켠 후 모듈은 CANTP_OFF 상태에 있으며 [SWS_CanTp_00168], 오직 이 상태에서만 포스트 빌드 구성을 업데이트할 수 있습니다 [SWS_CanTp_00169].

CanTp_Init은(는) CanTp_ConfigType에 대한 포인터를 수신합니다 [SWS_CanTp_00208] [SWS_CanTp_00340]. 이 함수는 모든 전역 변수를 초기화하고 각 연결을 유휴 상태인 CANTP_RX_WAIT 또는 CANTP_TX_WAIT(으)로 설정하며 [SWS_CanTp_00030], 그 후 CANTP_ON이(가) 적용됩니다 [SWS_CanTp_00170]. 환경은 추가적인 사용 전에 반드시 CanTp_Init을(를) 호출해야 합니다 [SWS_CanTp_00199]. 모드 관리 가이드에서는 NvM_ReadAll에 따라 BswM 규칙이 이를 담당합니다 (Mode Management Guide 54쪽). CANTP_ON에서의 재호출은 진행 중인 모든 연결을 폐기하고 유휴 상태로 되돌립니다 [SWS_CanTp_00273] [SWS_CanTp_00111].

CanTp_Shutdown은(는) 모든 열려 있는 연결을 닫고 리소스를 해제하며 CANTP_OFF을(를) 설정합니다 [SWS_CanTp_00202]. 이때 CanTp는 중단된 전송에 대해 누구에게도 알리지 않습니다 [SWS_CanTp_00200] (SWS CanTp 58쪽).

CANTP_ON에서는 여러 연결이 동시에 실행됩니다 [SWS_CanTp_00096]:

  • 각 N-SDU는 연결 채널에 정적으로 할당됩니다. 각 채널은 자체 타이머, 버퍼 및 자체 상태 머신을 가집니다 [SWS_CanTp_00121] [SWS_CanTp_00122].
  • 채널은 내부적으로만 보입니다 [SWS_CanTp_00285]. 채널의 수는 구성 도구가 결정합니다 [SWS_CanTp_00289].
  • 전송 채널이 CANTP_TX_PROCESSING 상태에 있으면 CanTp는 CanTp_Transmit을(를) 통한 새 요청을 E_NOT_OK(으)로 거부합니다 [SWS_CanTp_00123]. 이미 진행 중인 세션에 포함된 N-SDU에 대해서도 동일하게 적용됩니다 [SWS_CanTp_00206].
  • 여러 N-SDU가 채널을 공유하고 사용 가능한 여유 채널이 없는 경우 CanTp는 전송을 거부하거나 수신을 중단합니다 [SWS_CanTp_00288] (SWS CanTp 42쪽).
lebenszyklus cluster_on CANTP_ON cluster_rx Rx-Verbindungskanal cluster_tx Tx-Verbindungskanal PowerUp Einschalten OFF CANTP_OFF (포스트 빌드 구성 변경 가능) PowerUp->OFF RXW CANTP_RX_WAIT OFF->RXW CanTp_Init (erfolgreich) TXW CANTP_TX_WAIT OFF->TXW CanTp_Init (erfolgreich) RXP CANTP_RX_PROCESSING RXW->RXP SF/FF empfangen RXP->RXW 더 이상의 N-PDU가 예상되지 않음 또는 중단 TXP CANTP_TX_PROCESSING TXW->TXP CanTp_Transmit = E_OK TXP->OFF CanTp_Shutdown (알림 없음) TXP->TXW 전송 종료 또는 중단

상태 다이어그램: CanTp_Init 이후 수신 및 전송 채널은 서로 독립적으로 WAIT와 PROCESSING 사이를 전환하며, CanTp_Shutdown은 CANTP_OFF로 되돌립니다. 출처: [SWS_CanTp_00027], [SWS_CanTp_00030], [SWS_CanTp_00170], [SWS_CanTp_00202], SWS CanTp 27쪽

전송: CanTp_Transmit부터 확인(confirmation)까지

CanTp_Transmit은(는) TxPduId 및 PduInfoPtr을(를) 수신합니다 [SWS_CanTp_00212]. MetaData가 없으면 CanTp는 총 길이 SduLength만 평가하고 데이터 버퍼에는 접근하지 않습니다 [SWS_CanTp_00225] [SWS_CanTp_00299]. MetaData가 있는 경우 모든 SF, FF 및 CF에 대한 주소 정보를 추가로 저장합니다 [SWS_CanTp_00334]. 데이터가 N-PDU에 맞으면 CanTp는 SF를 전송하고, 그렇지 않으면 다중 프레임 세션을 시작합니다 [SWS_CanTp_00232] (SWS CanTp 60쪽). 최대 전송 길이(TX_DL)는 EcuC의 PduLength에서 도출됩니다 [SWS_CanTp_00354]. 해석: 이 호출은 동기식으로 요청 수락 여부만 보고하며, 실제 전송은 비동기식으로 실행됩니다 [SWS_CanTp_00176]. 질문 Q-b6d13590324e2906 (열림) 수락 후 CanTp는 모든 경우에 PduR_CanTpTxConfirmation [SWS_CanTp_00177] [SWS_CanTp_00204]을(를) 통해 종료를 보고합니다.

각 세그먼트(SF, FF, CF)에 대해 CanTp는 PduR_CanTpCopyTxData을(를) 호출하며 [SWS_CanTp_00086], 첫 번째 호출까지 타이머 N_Cs가 실행됩니다 [SWS_CanTp_00167]. 상위 계층이 BUFREQ_E_BUSY을(를) 반환하면 CanTp는 나중에 다시 시도합니다 [SWS_CanTp_00184]. ISO 15765-2에는 재시도가 정의되어 있지 않으므로 CanTp는 항상 재시도 매개변수를 NULL로 설정합니다 [SWS_CanTp_00272].

FF 이후 및 각 블록의 마지막 CF 이후 CanTp는 N_Bs 하에서 Flow Control 프레임을 기다립니다 [SWS_CanTp_00315]. 이를 통해 수신자는 추가 CF를 허용하거나 지연시킵니다 [SWS_CanTp_00282]. 세션이 성공적으로 완료되면 E_OK과(와) 함께 PduR_CanTpTxConfirmation이(가) 이어집니다 [SWS_CanTp_00090]. 동일한 풀(Pull) 시퀀스를 50바이트 예제(SWS CanTp 37쪽)와 DCM에서 CanTp로 이어지는 경로(SWS PduR 104쪽)가 보여줍니다.

N-SDU의 세그먼트 전송PduRCanTpCanIfUse Case: 트리거CanTp_Transmit(TxPduId, PduInfoPtr)SduLength만 해당 (+ MetaData)E_OKN_Cs 실행 중Use Case: First FramePduR_CanTpCopyTxData()BUFREQ_OKCanIf_Transmit(FF)CanTp_TxConfirmation(E_OK)N_Bs 실행 중: FC 대기CanTp_RxIndication(FC: CTS, BS, STmin)loop블록의 각 CF마다 (BS개 프레임, 간격 STmin)PduR_CanTpCopyTxData()BUFREQ_OKCanIf_Transmit(CF)CanTp_TxConfirmation(E_OK)각 블록 후 다시 FC 대기 (N_Bs)Use Case: AbschlussPduR_CanTpTxConfirmation(E_OK)

시퀀스 다이어그램: CanTp는 PduR에 세그먼트 단위로 데이터를 요청하고, FF 및 각 블록 이후 Flow Control을 기다리며, 마지막에 E_OK로 확인합니다. 출처: [SWS_CanTp_00212], [SWS_CanTp_00086], [SWS_CanTp_00315], [SWS_CanTp_00090], SWS CanTp 73쪽

수신: 버퍼 협상, Flow Control 및 재조립

들어오는 각 SF 또는 FF에 대해 CanTp는 PduR_CanTpStartOfReception(으)로 수신 시작을 보고합니다 [SWS_CanTp_00079]. 사용 가능한 버퍼 크기는 출력 매개변수를 통해 반환되며 N-SDU보다 작을 수 있습니다 [SWS_CanTp_00080]. FF의 경우 CanTp는 사전에 타이머 N_Br을 시작합니다 [SWS_CanTp_00166]. 결과가 나온 후에만 Flow Control을 전송하며, 그 내용은 이 결과에 따라 달라집니다 [SWS_CanTp_00064] [SWS_CanTp_00277]. 수신 세션의 모든 FC는 BS 및 STmin에 대해 동일한 값을 갖습니다 [SWS_CanTp_00067]. FC는 매 BS개의 Consecutive Frames 이후에 따릅니다 [SWS_CanTp_00278].

각 CF 이후 CanTp는 PduR_CanTpCopyRxData(으)로 페이로드를 전달하고 이때 남은 버퍼를 확인합니다 [SWS_CanTp_00269]. CAN 2.0의 경우 CF당 6 또는 7바이트입니다. 한 블록의 마지막 CF 이후 남은 버퍼가 다음 블록에 충분하지 않은 경우 CanTp는 타이머 N_Br을 시작합니다 [SWS_CanTp_00325] [SWS_CanTp_00082]. 이 타이머가 실행되는 동안:

성공 여부와 관계없이 세션이 종료되면 CanTp는 PduR_CanTpRxIndication을(를) 호출합니다 [SWS_CanTp_00084]. 패딩 유무와 상관없이 CanTp는 실제로 사용된 데이터 바이트만 상위로 전달합니다 [SWS_CanTp_00116].

N-SDU의 세그먼트 수신CanIfCanTpPduRUse Case: First FrameCanTp_RxIndication(FF)N_Br gestartetPduR_CanTpStartOfReception(TpSduLength)BUFREQ_OK, 사용 가능한 버퍼 크기PduR_CanTpCopyRxData(FF-Daten)CanIf_Transmit(FC: CTS, BS, STmin)loop블록의 각 CF마다CanTp_RxIndication(CF)PduR_CanTpCopyRxData(6/7 Byte)BUFREQ_OK, Restpufferalt남은 버퍼가 다음 블록에 충분하지 않음N_Br 실행 중CanTp_MainFunctionPduR_CanTpCopyRxData(길이 0, NULL_PTR)BUFREQ_OK, RestpufferCanIf_Transmit(FC: WAIT)최대 WFTmax회Puffer ausreichendCanIf_Transmit(FC: CTS)Use Case: Letzter Consecutive FrameCanTp_RxIndication(letzter CF)PduR_CanTpCopyRxData()PduR_CanTpRxIndication(E_OK)

시퀀스 다이어그램: 버퍼 협상, 블록 단위 Flow Control 및 버퍼 부족 시 대기 단계를 포함한 세그먼트화된 수신. 출처: [SWS_CanTp_00079], [SWS_CanTp_00269], [SWS_CanTp_00222], [SWS_CanTp_00084], SWS CanTp 76쪽

rxstart Ein CanTp_RxIndication: SF 또는 FF 수신됨 Kanal Kanal in CANTP_RX_PROCESSING? Ein->Kanal Art MetaData 포함 또는 기타 N_AI인가? Kanal->Art 예 Sor PduR_CanTpStartOfReception() Kanal->Sor 아니요 Ign Frame ignorieren Art->Ign 예 Neu laufenden Empfang abbrechen, Frame als neuen Empfang behandeln Art->Neu nein (gleiche N_AI) Neu->Sor Erg 반환값은? Sor->Erg NotOk 수신 중단: FC 없음, PduR_CanTpRxIndication 없음 Erg->NotOk BUFREQ_E_NOT_OK Ovfl FF: FC(OVFLW) senden, abbrechen SF: abbrechen Erg->Ovfl BUFREQ_E_OVFL Typ Frame-Typ? Erg->Typ BUFREQ_OK Sf SF: Daten kopieren, PduR_CanTpRxIndication Typ->Sf SF Puf FF: 버퍼가 다음 블록에 충분한가? Typ->Puf FF Cts FC(CTS) senden Puf->Cts 예 Br N_Br starten, Puffer in MainFunction abfragen Puf->Br 아니요

액티비티 다이어그램: 수신되는 SF 또는 FF에 대해 채널 상태 및 PduR_CanTpStartOfReception의 결과를 기반으로 CanTp가 결정하는 방식. 출처: [SWS_CanTp_00124], [SWS_CanTp_00337], [SWS_CanTp_00081], [SWS_CanTp_00318], [SWS_CanTp_00353], SWS CanTp 67쪽

어드레싱, MetaData 및 패딩

기능적 어드레싱(1:n)은 SF에 대해서만 허용됩니다 [SWS_CanTp_00092]. 기능적 핸들을 통한 세그먼트화된 세션을 CanTp는 거부하고 CANTP_E_INVALID_TATYPE을(를) 보고합니다 [SWS_CanTp_00093] (SWS CanTp 39쪽). Extended 또는 Mixed Addressing의 경우 CanTp는 첫 번째 데이터 바이트의 N_TA 또는 N_AE로부터 N-SDU를 결정합니다 [SWS_CanTp_00095] [SWS_CanTp_00284] [SWS_CanTp_00283]. 식별자 할당에는 다음이 적용됩니다 (SWS CanTp 44쪽):

  • 각 NSduId는 정확히 하나의 LSduId에 할당됩니다 [SWS_CanTp_00035].
  • FC의 LSduId는 N_TA 또는 N_AE와 함께 정확히 하나의 NSduId를 식별합니다 [SWS_CanTp_00094].
  • 여러 N-SDU는 Extended/Mixed Addressing의 경우 또는 MetaData의 경우에만 동일한 N-PDU를 참조할 수 있습니다 [SWS_CanTp_00328].

일반(generic) 연결은 MetaData를 사용하여 작동합니다. CanTp는 SF 또는 FF로부터 주소 정보를 저장하고 [SWS_CanTp_00330], 이를 PduR_CanTpStartOfReception에 전달하며 [SWS_CanTp_00331] 이후의 CF들을 이에 대해 검사합니다 [SWS_CanTp_00333]. 채널이 이미 수신 중인 경우 CanTp는 MetaData가 포함된 추가 SF 또는 FF를 무시합니다 [SWS_CanTp_00337].

패딩은 N-SDU별로 활성화됩니다 (SWS CanTp 43쪽). 채우기 값은 CANTP_PADDING_BYTE입니다 [SWS_CanTp_00059]. 페이로드가 최대 8바이트인 프레임의 경우 다음이 적용됩니다:

  • Rx 패딩이 적용된 경우 CanTp는 8바이트인 SF 및 마지막 CF만 수락하고 [SWS_CanTp_00344] FC를 8바이트로 전송합니다 [SWS_CanTp_00347].
  • Tx 패딩이 적용된 경우 CanTp는 SF 및 마지막 CF를 8바이트로 채웁니다 [SWS_CanTp_00348].

전송 길이가 유효한 DLC와 일치하지 않는 경우 CanTp는 다음 상위의 유효한 값까지 채웁니다 [SWS_CanTp_00351]. 수신 길이 RX_DL은 CanTp가 처음 수신된 CAN_DL로부터 도출합니다 [SWS_CanTp_00350].

시간 모니터링, 런타임 매개변수 및 요청에 따른 중단

CanTp_MainFunction [SWS_CanTp_00213]은(는) 주기적으로 호출됩니다. 이는 N_As, N_Bs, N_Cs, N_Ar, N_Br, N_Cr 및 STmin을 모니터링합니다 [SWS_CanTp_00164] (SWS CanTp 63쪽). 주기는 CanTpMainFunctionPeriod [SWS_CanTp_00300]에 따릅니다. 이 값은 호출하는 태스크의 주기 시간과 일치해야 합니다 (SWS CanTp 77쪽). 예시로 타이밍 분석에서는 5ms 태스크를 언급합니다 (TR Timing Analysis 117쪽).

두 서비스가 런타임에 N-SDU의 수신 매개변수 BS 및 STmin에 접근합니다: CanTp_ChangeParameter은(는) 이를 변경하고 [SWS_CanTp_00302], CanTp_ReadParameter은(는) 이를 읽습니다 [SWS_CanTp_00323]. 둘 다 CanTpChangeParameterApi = TRUE인 경우에만 존재합니다 (SWS CanTp 61쪽). BS는 단지 상한값일 뿐이며, CanTp는 버퍼 사정상 이보다 낮출 수 있습니다 [SWS_CanTp_00091]. 진행 중인 수신 세션의 FF와 마지막 CF 사이에서 CanTp는 E_NOT_OK(으)로 모든 변경을 거부합니다 [SWS_CanTp_00303] [SWS_CanTp_00304]. 일반 연결의 경우 변경 사항은 전체에 적용됩니다 [SWS_CanTp_00338].

진행 중인 전송은 요청에 따라 중단할 수 있습니다:

오류가 발생한 경우의 동작

개발 오류. 감지가 활성화된 경우 CanTp는 오류를 DET에 보고하고 E_NOT_OK [SWS_CanTp_00294] [SWS_CanTp_00217]을(를) 반환합니다 (SWS CanTp 49쪽). 코드는 [SWS_CanTp_00293]이(가) 정의합니다. 일반적인 사례:

릴리스 간의 차이: Cancel 서비스에서 유효하지 않은 PduId에 대해 R20-11은 CANTP_E_PARAM_ID [SWS_CanTp_00254] [SWS_CanTp_00260]을(를) 요구합니다. 최신 문서 구절들은 대신 CANTP_E_INVALID_TX_ID 또는 CANTP_E_INVALID_RX_ID을(를) 언급합니다 (SWS CanTp 59쪽). R20-11의 경우 해당 요구사항이 적용됩니다.

런타임 오류. Default Error Tracer로 전달됩니다 [SWS_CanTp_00352]:

프로토콜 오류. 상위 계층에 E_NOT_OK을(를) 전달하며 세션을 종료합니다 [SWS_CanTp_00205]:

PduR은 부정 확인을 사용자(예: 이후 복구를 담당하는 DCM)에게 전달합니다 (Error Description 29쪽, Error Description 28쪽). 프로덕션 오류는 DEM이 FiM을 통해 처리합니다 [SWS_CanTp_00291].

abbruch cluster_tx Sendeseite cluster_rx Empfangsseite t1 PduR_CanTpCopyTxData = BUFREQ_E_NOT_OK TA Sendesitzung abbrechen t1->TA t2 N_Cs abgelaufen t2->TA t3 N_As abgelaufen t3->TA t4 N_Bs abgelaufen t4->TA t5 OVFLW 또는 유효하지 않은 FS를 포함한 FC t5->TA t6 Tx 패딩 시 8바이트보다 짧은 FC t6->TA t7 CanIf_Transmit(SF/FF/CF) = E_NOT_OK t7->TA t8 CanTp_TxConfirmation(E_NOT_OK) t8->TA t9 CanTp_CancelTransmit = E_OK t9->TA r1 N_Ar abgelaufen RA Empfangssitzung abbrechen r1->RA r2 N_Cr abgelaufen r2->RA r3 PduR_CanTpCopyRxData = BUFREQ_E_NOT_OK r3->RA r4 WFTmax FC(WAIT) erreicht r4->RA r5 Rx 패딩 시 마지막 CF가 너무 짧음 r5->RA r6 CanIf_Transmit(FC) = E_NOT_OK r6->RA r7 CanTp_CancelReceive = E_OK r7->RA TC PduR_CanTpTxConfirmation(E_NOT_OK) TA->TC RC PduR_CanTpRxIndication(E_NOT_OK) RA->RC

액티비티 다이어그램: 모든 중단 원인은 방향별로 PduR에 대한 부정적인 보고로 귀결됩니다. 출처: [SWS_CanTp_00205], [SWS_CanTp_00343], [SWS_CanTp_00355], [SWS_CanTp_00342], [SWS_CanTp_00223], [SWS_CanTp_00084], Error Description 28쪽

더 자세한 증거

CanTp 사양 발췌본(R20-11)을 기반으로 AI가 생성한 가이드입니다. 링크된 요구사항만이 구속력을 가지며, 다른 릴리스의 문서 구절은 설명용으로만 사용됩니다.

CAN Transport Layer (CanTp)

Provides segmentation and reassembly of CAN messages up to 4095 bytes (ISO 15765-2).

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

함수 CanTp_Init [SWS_CanTp_00208] 📄 PDF

void CanTp_Init (const CanTp_ConfigType* CfgPtr);

This function initializes the Can Tp module.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 62b706f68200 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

동기식 및 비재진입 함수 CanTp_Init은 CanTp 모듈을 초기화합니다[SWS_CanTp_00208]. 이 함수는 매개변수 CfgPtr를 통해 포스트 빌드 구성 데이터(CanTp_ConfigType)에 대한 포인터를 전달받으며 반환값을 갖지 않습니다[SWS_CanTp_00208]. 모듈 환경은 모듈을 추가 처리에 사용하기 전에 반드시 CanTp_Init를 호출해야 합니다[SWS_CanTp_00199].

초기화 동안 모듈의 모든 전역 변수가 초기화되고, 모든 전송 프로토콜 연결은 세그먼트화된 전송 및 세그먼트화된 수신이 모두 활성화되지 않은 CANTP_ON의 하위 상태로 전환됩니다[SWS_CanTp_00030]. 이때 수신 경로는 CANTP_RX_WAIT 상태에, 송신 경로는 CANTP_TX_WAIT 상태에 있게 됩니다[SWS_CanTp_00030]. 성공적으로 완료되면 모듈은 내부 상태 CANTP_ON로 전환됩니다[SWS_CanTp_00170].

모듈이 이미 전역 상태 CANTP_ON에 있을 때 CanTp_Init이 호출되면, 함수는 송신 및 수신 작업이 모두 실행되지 않도록 모듈을 Idle 상태로 재설정합니다[SWS_CanTp_00111].

개발 오류 감지(Development Error Detection)가 활성화된 경우, CanTp_Init를 호출하기 전에 PDU Router 또는 CAN Interface가 모듈의 함수(CanTp_GetVersionInfo 제외)를 실행하려고 시도하면 CanTp 모듈은 오류 CANTP_E_UNINIT을 보고합니다[SWS_CanTp_00031].

이 텍스트는 사양을 기반으로 AI에 의해 작성되었습니다.

구현자 가이드 준비 중 (복잡도 I2)

함수 CanTp_Shutdown [SWS_CanTp_00211] 📄 PDF

void CanTp_Shutdown (void);

This function is called to shutdown the Can Tp module.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: e5430e2cac5b 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

사용법 및 호출 컨텍스트

함수 CanTp_Shutdown은(는) 전체 CanTp 모듈을 정돈된 방식으로 종료([SWS_CanTp_00211])하는 역할을 합니다. 이 인터페이스는 헤더 파일 CanTp.h을(를) 통해 제공되며 서비스 ID 0x02([SWS_CanTp_00211])을(를) 가집니다. 호출은 동기식으로 처리되며, 전달 매개변수를 받지 않고 반환값을 제공하지 않습니다([SWS_CanTp_00211]).

상태 전이 및 정리

실행 시 CanTp_Shutdown은(는) 아직 보류 중인 모든 전송 프로토콜 연결을 닫고 할당된 모든 리소스를 해제하며 CanTp 모듈을 CANTP_OFF 상태로 전이합니다([SWS_CanTp_00202]). 중단 동작의 핵심적인 측면은 아직 보류 중인 프레임 전송 또는 프레임 수신 프로세스에 대해 상위 계층으로의 어떠한 알림도 명시적으로 트리거되어서는 안 된다는 점입니다([SWS_CanTp_00200]).

동시성 및 제약 조건

이 함수는 재진입 불가능(Non Reentrant)으로 명시되어 있습니다([SWS_CanTp_00211]). 따라서 서로 다른 실행 컨텍스트나 인터럽트 루틴에서 동시에 호출해서는 안 됩니다. 특정 오류 코드나 오류 관리로의 알림은 인터페이스 기능 범위에 명시되어 있지 않습니다.

이 사용 지침은 AUTOSAR Classic Release R20-11 사양을 기반으로 자동 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I1)

함수 CanTp_Transmit [SWS_CanTp_00212] 📄 PDF

Std_ReturnType CanTp_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr);

Requests transmission of a PDU.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 7a5280a26edd 출처 열린 질문 (1)
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

사용

함수 CanTp_Transmit은(는) CAN 전송 계층을 통한 N-SDU의 전송을 요청하는 데 사용됩니다 [SWS_CanTp_00212]. 매개변수로는 전송할 PDU의 식별자(TxPduId) 및 데이터, 길이, 메타데이터에 대한 포인터(PduInfoPtr)가 전달됩니다 [SWS_CanTp_00212]. 호출은 E_OK(으)로 성공적인 수락을, E_NOT_OK(으)로 요청의 거부를 보고합니다 [SWS_CanTp_00212]. 호출은 동기적으로 확인되는 반면, 전송 처리는 비동기적입니다 [SWS_CanTp_00176] (해석: 사양 표의 "Synchronous" 표시는 요청 수락과 관련된 것으로 보입니다). 질문 Q-df438ddaa4963aba (열림)

상호작용 및 PDU 처리

메타데이터가 포함된 N-SDU의 경우 모듈은 SF, FF 및 CF N-PDU에 사용하고 FC N-PDU 식별에 사용하기 위해 (Normal, Extended, Mixed 11 bit, Normal fixed 또는 Mixed 29 bit와 같은 어드레싱 형식에 따라) 주소 정보를 저장합니다 [SWS_CanTp_00334]. 메타데이터가 사용되지 않는 경우 CanTp_Transmit은(는) SF 또는 FF PCI를 준비하기 위해 길이 사양 SduLength에만 액세스하고 N-SDU 데이터 버퍼는 사용하지 않습니다 [SWS_CanTp_00225].

오류 처리 및 동시성

  • 오류 검사: DET가 활성화되어 있고 PduInfoPtr이(가) NULL 포인터인 경우, 함수는 오류 CANTP_E_PARAM_POINTER을(를) 보고하고 추가 작업 없이 반환합니다 [SWS_CanTp_00321].
  • 채널 할당: 할당된 채널이 CANTP_TX_PROCESSING 상태에 있거나 해당 N-SDU 식별자에 대해 이미 세션이 진행 중인 경우, 전송 요청이 거부되고 E_NOT_OK이(가) 반환됩니다 [SWS_CanTp_00123], [SWS_CanTp_00206].
  • 재진입성: 이 서비스는 서로 다른 PDU ID에 대해서는 재진입이 가능하지만(reentrant), 동일한 PDU ID에 대해서는 재진입이 불가능합니다(non-reentrant) [SWS_CanTp_00212].

이 텍스트는 AUTOSAR Classic R20-11 명세를 기반으로 AI에 의해 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I2)

함수 CanTp_CancelTransmit [SWS_CanTp_00246] 📄 PDF

Std_ReturnType CanTp_CancelTransmit (PduIdType TxPduId);

Requests cancellation of an ongoing transmission of a PDU in a lower layer communication module.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: f7624766b8a1 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

동기식 함수 CanTp_CancelTransmit은 하위 통신 모듈에서 진행 중인 PDU 전송의 취소를 요청하며[SWS_CanTp_00246], 이를 통해 송신 작업의 취소를 시작합니다[SWS_CanTp_00274]. 매개변수로 해당 PDU의 식별자(TxPduId)가 전달됩니다[SWS_CanTp_00246]. 반환값으로 E_OK는 대상 모듈에 의한 취소의 성공적인 수행을 나타내며, E_NOT_OK은 거부를 나타냅니다[SWS_CanTp_00246].

함수 호출 후 해당 연결에서의 전송이 취소됩니다[SWS_CanTp_00243]. 취소가 성공적으로 실행되면, 모듈 CanTp은 상위 레이어에 취소를 알리기 위해 음의 결과 E_NOT_OK과 함께 확인 PduR_CanTpTxConfirmation를 반드시 호출합니다[SWS_CanTp_00255].

개발 오류 감지(Development Error Detection)가 활성화된 경우, CanTp_CancelTransmit은 TxPduId의 유효성을 검사합니다. 매개변수가 유효하지 않으면 개발 오류 CANTP_E_PARAM_ID가 생성되고 E_NOT_OK이 반환됩니다[SWS_CanTp_00254]. 현재 전송 프로세스에 있지 않은 N-SDU에 대해 취소가 요청되면, 모듈은 런타임 오류 CANTP_E_OPER_NOT_SUPPORTED를 Default Error Tracer(DET)에 보고하고 마찬가지로 E_NOT_OK을 반환합니다[SWS_CanTp_00254].

동시성과 관련하여, 이 함수는 서로 다른 PDU-ID에 대해서는 재진입 가능하지만, 동일한 TxPduId에 대해서는 동시에 호출되어서는 안 됩니다[SWS_CanTp_00246].

본 사용 지침은 AUTOSAR 규격을 기반으로 자동 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I2)

함수 CanTp_CancelReceive [SWS_CanTp_00257] 📄 PDF

Std_ReturnType CanTp_CancelReceive (PduIdType RxPduId);

Requests cancellation of an ongoing reception of a PDU in a lower layer transport protocol module.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: ccccdf72ba41 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

함수 CanTp_CancelReceive은 하위 전송 프로토콜 모듈에서 진행 중인 PDU의 수신을 동기식으로 취소합니다[SWS_CanTp_00257]. 이 함수는 헤더 파일 CanTp.h를 통해 사용할 수 있으며 서비스 ID 0x4c을 갖습니다[SWS_CanTp_00257].

사용 및 호출 조건

입력 매개변수 RxPduId을 통해 취소할 PDU의 식별자가 전달됩니다[SWS_CanTp_00257]. 호출은 동기식으로 처리되며 비재진입(Non Reentrant)으로 명시되어 있습니다[SWS_CanTp_00257]. Std_ReturnType 타입의 인터페이스는 반환값으로 다음을 제공합니다:

  • E_OK: 대상 모듈에 의해 취소가 성공적으로 실행되었습니다[SWS_CanTp_00257].
  • E_NOT_OK: 대상 모듈에 의해 취소가 거부되었습니다[SWS_CanTp_00257].

오류 처리

개발 오류 감지(Development Error Detection)가 활성화된 경우 함수는 매개변수 RxPduId을 검증합니다[SWS_CanTp_00260]:

  • RxPduId의 값이 유효하지 않은 경우, CanTp_CancelReceive은 개발 오류 CANTP_E_PARAM_ID를 보고하고 E_NOT_OK을 반환합니다[SWS_CanTp_00260].
  • 현재 수신 프로세스에 있지 않은 N-SDU에 대해 취소가 요청되면, 모듈은 런타임 오류 CANTP_E_OPER_NOT_SUPPORTED을 Default Error Tracer에 보고하고 E_NOT_OK을 반환합니다[SWS_CanTp_00260].

인접 모듈과의 상호작용

수신 취소가 성공적으로 실행되면, CanTp는 상위 레이어에 취소를 알리기 위해 알림 결과 E_NOT_OK과 함께 콜백 함수 PduR_CanTpRxIndication을 호출합니다[SWS_CanTp_00263].

본 사용 지침은 AUTOSAR Classic R20-11 규격을 기반으로 하며 자동으로 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I1)

함수 CanTp_ChangeParameter [SWS_CanTp_00302] 📄 PDF

Std_ReturnType CanTp_ChangeParameter (PduIdType id, TPParameterType parameter, uint16 value);

Request to change a specific transport protocol parameter (e.g. block size).

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 2d391dbc31e8 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

동기식 함수 CanTp_ChangeParameter은 블록 크기([SWS_CanTp_00302])와 같은 특정 전송 프로토콜 매개변수를 런타임에 변경하는 데 사용됩니다. 헤더 파일 CanTp.h를 통해 제공되는 이 서비스는 PDU 식별자(id), 매개변수 식별자(parameter) 및 새로 설정할 값(value)을 전달받습니다([SWS_CanTp_00302]). 성공적으로 수행되면 함수는 E_OK을 반환하며, 변경이 실패하거나 거부되면 E_NOT_OK을 반환합니다([SWS_CanTp_00302]).

동시성 및 호출 조건과 관련하여 다음 요구사항이 적용됩니다:

  • 인터페이스는 비재진입(Non Reentrant)으로 구현되어 있습니다([SWS_CanTp_00302]).
  • 호출 시점에 해당 N-SDU가 이미 진행 중인 수신 프로세스에 있는 경우, CanTp_ChangeParameter은 즉시 중단되고 E_NOT_OK을 반환하며 매개변수 값을 변경하지 않습니다([SWS_CanTp_00304]).

제네릭 연결에서 특별한 상호작용이 존재합니다: MetaData를 포함하는 N-SDU에 대해 이 함수가 호출되면, 매개변수 변경은 모든 제네릭 연결에 적용되며 이후의 모든 수신 프로세스에 반영됩니다([SWS_CanTp_00338]).

이 사용 지침은 명세 요구사항을 기반으로 자동 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I1)

함수 CanTp_ReadParameter [SWS_CanTp_00323] 📄 PDF

Std_ReturnType CanTp_ReadParameter (PduIdType id, TPParameterType parameter, uint16* value);

This service is used to read the current value of reception parameters BS and STmin for a specified N - SDU.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 949f6cb3df18 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

사용

동기식 함수 CanTp_ReadParameter은 지정된 수신 N-SDU에 대한 수신 매개변수 BS(Block Size) 또는 STmin(Separation Time minimum)의 현재 값을 읽어오는 데 사용됩니다[SWS_CanTp_00323]. 선언은 헤더 파일 CanTp.h를 통해 제공됩니다[SWS_CanTp_00323].

이 인터페이스는 다음 매개변수를 가집니다:

  • id(in): 수신 매개변수를 읽어올 수신된 N-SDU의 식별자(타입 PduIdType)입니다[SWS_CanTp_00323].
  • parameter(in): 읽어올 매개변수(타입 TPParameterType의 BS 또는 STmin)를 결정합니다[SWS_CanTp_00323].
  • value(out): 읽어온 매개변수 값이 제공되는 uint16에 대한 포인터입니다[SWS_CanTp_00323].

함수는 반환값으로 Std_ReturnType을 제공하며, 이때 E_OK은 요청 수락을, E_NOT_OK는 거부를 나타냅니다[SWS_CanTp_00323].

오류 처리

개발 오류 감지(Development Error Detection)가 활성화된 경우, CanTp_ReadParameter은 매개변수 id 및 parameter의 유효성을 검사합니다[SWS_CanTp_00324]. 이 매개변수 중 하나가 유효하지 않으면 함수는 개발 오류 CANTP_E_PARAM_ID를 보고하고 E_NOT_OK를 반환합니다[SWS_CanTp_00324].

동시성 및 제약사항

이 함수는 비재진입(Non Reentrant)으로 명시되어 있습니다[SWS_CanTp_00323]. 호출자는 동일한 인터페이스에 대한 병렬 접근을 피해야 합니다.

본 텍스트는 AUTOSAR R20-11 규격 문서를 기반으로 AI에 의해 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I1)

함수 CanTp_MainFunction [SWS_CanTp_00213] 📄 PDF

void CanTp_MainFunction (void);

The main function for scheduling the CAN TP.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 64a7b42182e1 출처 열린 질문 (1)
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

함수 CanTp_MainFunction은(는) CAN 트랜스포트 프로토콜(CAN TP)의 주기적 스케줄링을 위한 중앙 진입점 역할을 합니다 [SWS_CanTp_00213], [SWS_CanTp_00164]. 이 함수는 서비스 ID 0x06을(를) 가지며, 시그니처 void CanTp_MainFunction(void)을(를) 가지고 헤더 SchM_CanTp.h을(를) 통해 제공됩니다 [SWS_CanTp_00213]. 파라미터를 받지 않으며 반환값도 없습니다 [SWS_CanTp_00213].

호출 컨텍스트 및 타이밍 제어

호출은 필요한 주기 시간에 따라 Schedule Manager 또는 Free Running Timer 모듈에 의해 시작됩니다 [SWS_CanTp_00164]. 모듈 내에서 CanTp_MainFunction은(는) 프로토콜 시퀀스의 시간 모니터링 및 제어를 담당합니다 [SWS_CanTp_00164]. 구체적으로 이 함수는 다음 타이머 및 시간 조건 처리에 관여합니다:

  • 전송 및 확인의 프로토콜 타임아웃: N_As, N_Bs, N_Cs 및 N_Ar, N_Br 그리고 N_Cr [SWS_CanTp_00164].
  • 최소 프레임 분리 시간 준수 STMmin [SWS_CanTp_00164].

오류 처리 및 동시성

페이로드에는 이 함수에 대한 DET 또는 DEM 전용 오류 코드가 정의되어 있지 않습니다. 해석: 주기적으로 호출되는 스케줄링 함수로서 CanTp_MainFunction은(는) 재진입이 불가능하며 내부 타이머의 올바른 감소를 보장하기 위해 일관된 호출 주기가 필요할 것으로 보입니다. 질문 Q-2fe22e31085abf49 (열림)

이 텍스트는 AUTOSAR 사양 R20-11을 기반으로 AI에 의해 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I1)

함수 CanTp_RxIndication [SWS_CanTp_00214] 📄 PDF

void CanTp_RxIndication (PduIdType RxPduId, const PduInfoType* PduInfoPtr);

Indication of a received PDU from a lower layer communication interface module.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 38e732456055 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

사용법 및 의미론

동기 함수 [SWS_CanTp_00214]은(는) 하위 통신 인터페이스 모듈에 의한 N-PDU 수신을 CAN 전송 모듈에 알립니다. 호출 시 수신된 PDU의 식별 정보(RxPduId)와 포인터 PduInfoPtr을(를) 통해 길이(SduLength), 페이로드(SduDataPtr) 및 관련 메타데이터가 전달됩니다. 이 함수는 반환값이 없습니다.

동시성 및 호출 컨텍스트

이 함수는 서로 다른 PDU ID에 대해서는 재진입 가능하지만 동일한 PDU ID에 대해서는 재진입 불가능합니다 [SWS_CanTp_00214]. CanTp_RxIndication은(는) 인터럽트 컨텍스트에서 호출될 수 있으며, 예를 들어 CAN 수신 인터럽트에서 직접 호출될 수 있습니다 [SWS_CanTp_00235].

일반 연결에서의 상호작용

메타데이터가 포함된 싱글 프레임(SF) 또는 퍼스트 프레임(FF)에 대해 호출될 때 CanTp는 포함된 주소 정보(예: Normal-fixed 또는 Mixed-29-Bit 주소 지정의 경우 N_SA 및 N_TA)를 저장합니다. 이 정보는 상위 계층과의 연결 설정, 플로우 제어(FC) 프레임 전송 및 연속 프레임(CF) 감지에 사용됩니다 [SWS_CanTp_00330]. 후속 CF 및 수신된 FC 프레임의 경우 CanTp는 메타데이터의 주소 데이터를 저장된 값과 대조하여 확인합니다 [SWS_CanTp_00333], [SWS_CanTp_00336].

오류 처리 및 패딩

DET가 활성화되어 있고 PduInfoPtr이(가) NULL 포인터인 경우, 함수는 오류 CANTP_E_PARAM_POINTER을(를) 보고하고 아무 작업 없이 반환합니다 [SWS_CanTp_00322]. 최대 8바이트 페이로드를 가진 프레임에 대한 패딩 검사가 활성화된 경우(CanTpRxPaddingActivation 또는 CanTpTxPaddingActivation이(가) CANTP_ON와(과) 같음), 길이 오류 발생 시 런타임 오류 CANTP_E_PADDING이(가) DET에 보고됩니다:

  • SduLength < 8을(를) 포함한 SF는 거부됩니다 [SWS_CanTp_00345].
  • SduLength != 8을(를) 포함한 마지막 CF는 E_NOT_OK과(와) 함께 PduR_CanTpRxIndication()을(를) 통해 진행 중인 수신을 중단합니다 [SWS_CanTp_00346].
  • SduLength < 8을(를) 포함한 수신된 FC는 E_NOT_OK과(와) 함께 PduR_CanTpTxConfirmation()을(를) 통해 진행 중인 전송을 중단합니다 [SWS_CanTp_00349].

이 텍스트는 AI에 의해 생성되었으며 가이드 역할을 합니다. AUTOSAR 사양이 결정적인 기준입니다.

구현자 가이드 준비 중 (복잡도 I2)

함수 CanTp_TxConfirmation [SWS_CanTp_00215] 📄 PDF

void CanTp_TxConfirmation (PduIdType TxPduId, Std_ReturnType result);

The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 2541d17fed91 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

CanTp 모듈은 전송된 PDU에 대한 확인 호출을 수신하기 위해 헤더 CanTp.h을(를) 통해 동기 콜백 함수 CanTp_TxConfirmation(서비스 ID 0x40)을(를) 제공합니다 [SWS_CanTp_00076] [SWS_CanTp_00215]. 이 인터페이스를 통해 하위 통신 인터페이스 모듈은 PDU 전송의 성공적인 발송 또는 실패를 알립니다 [SWS_CanTp_00215].

매개변수 및 반환값

이 함수는 반환값을 제공하지 않으며(void) 두 개의 입력 매개변수를 요구합니다 [SWS_CanTp_00215]:

  • TxPduId: 전송된 PDU의 ID [SWS_CanTp_00215].
  • result: 전송 상태. E_OK 값은 성공적인 전송을 확인하는 반면, E_NOT_OK은(는) PDU 전송의 실패를 나타냅니다 [SWS_CanTp_00215].

오류 처리

CanTp_TxConfirmation이(가) 결과값 E_NOT_OK(으)로 호출되면 CanTp 모듈은 관련 전송 세션을 중단합니다 [SWS_CanTp_00355].

동시성 및 실행 컨텍스트

동시성과 관련하여 이 함수는 서로 다른 PDU ID에 대해서는 재진입 가능하지만 동일한 PDU ID에 대해서는 재진입 불가능합니다 [SWS_CanTp_00215]. 인터럽트 컨텍스트에서 호출 가능해야 하며, 예를 들어 CAN 송신 인터럽트에서 직접 호출될 수 있습니다 [SWS_CanTp_00236].

이 사용 지침은 AUTOSAR Classic Release R20-11 사양을 기반으로 자동으로 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I2)

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_CanTp
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_CanTp@rel:R20-11#c6495517
Content hash
c6495517
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANTransportLayer.pdf#nameddest=SWS_CanTp_00208

초기화 및 상태

This function returns the version information of the Can Tp module.

void CanTp_GetVersionInfo (Std_VersionInfoType* versioninfo);
CanTp_Init 함수

This function initializes the Can Tp module.

void CanTp_Init (const CanTp_ConfigType* CfgPtr);

서비스

Requests cancellation of an ongoing reception of a PDU in a lower layer transport protocol module.

Std_ReturnType CanTp_CancelReceive (PduIdType RxPduId);

Requests cancellation of an ongoing transmission of a PDU in a lower layer communication module.

Std_ReturnType CanTp_CancelTransmit (PduIdType TxPduId);

Request to change a specific transport protocol parameter (e.g. block size).

Std_ReturnType CanTp_ChangeParameter (PduIdType id, TPParameterType parameter, uint16 value);

This service is used to read the current value of reception parameters BS and STmin for a specified N - SDU.

Std_ReturnType CanTp_ReadParameter (PduIdType id, TPParameterType parameter, uint16* value);

This function is called to shutdown the Can Tp module.

void CanTp_Shutdown (void);

Requests transmission of a PDU.

Std_ReturnType CanTp_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr);

콜백

Indication of a received PDU from a lower layer communication interface module.

void CanTp_RxIndication (PduIdType RxPduId, const PduInfoType* PduInfoPtr);

The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.

void CanTp_TxConfirmation (PduIdType TxPduId, Std_ReturnType result);

주기적

The main function for scheduling the CAN TP.

void CanTp_MainFunction (void);

타입

Data structure type for the post - build configuration parameters.