DEENESPTFRRUARHIKOZHNL

CAN Driver (Can)

ModulCan (CAN Driver)
BSW-Modul-ID80
Standard-Header#include "Can.h"
SWS-SpezifikationAUTOSAR_SWS_CANDriver.pdf
ClusterCAN

모듈 가이드AI 생성

CAN 컨트롤러 하드웨어를 제어하고 전송, 수신 및 상태 전환을 CAN Interface에 전달합니다.
AI 생성 미검증 모델: claude-opus-5-5 · 노력: high · 온도: 제어 불가 · 프롬프트: b6833c934a77 출처 열린 질문 (2)
인과 앵커: R20-11 R20-11부터 유효 이 사양 릴리스용으로 새로 합성되었습니다.
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

CAN 컨트롤러 하드웨어를 제어하고 전송, 수신 및 상태 전환을 CAN Interface에 전달합니다.

CAN 드라이버는 하드웨어 유닛의 CAN 컨트롤러를 제어하며 CAN Interface 하위의 하드웨어 계층입니다. 드라이버는 수신, 전송 확인, Bus-off 및 모드 전환을 콜백을 통해 CAN Interface에 보고합니다[SWS_Can_00234]. Can_Init 이후 모든 컨트롤러는 STOPPED 상태가 됩니다. 각 컨트롤러는 Can_SetControllerMode를 통해 개별적이고 비동기적으로 시작되며, 성공 여부는 사후에 보고됩니다[SWS_Can_00230]. 전송은 하드웨어 전송 핸들을 통해 Can_Write로 수행됩니다. 사용 가능한 전송 객체가 없으면 드라이버는 CAN_BUSY를 반환하고 CanIf가 요청을 버퍼링합니다.

CAN 드라이버는 하드웨어 유닛의 CAN 컨트롤러에 대한 모든 접근을 캡슐화합니다. 유일한 사용자인 CAN Interface를 지원하며 수신, 전송 확인, Bus-off 및 모드 전환을 사전에 지정된 CanIf 콜백을 통해 보고합니다[SWS_Can_00234]. ECU State Manager는 Can_Init과 하드웨어별 Can_ConfigType를 사용하여 이를 초기화합니다[SWS_Can_00223]. 그 후 드라이버는 CAN_READY 상태가 되고 모든 컨트롤러는 STOPPED 상태가 됩니다SWS CANDriver 29쪽.

kontext EcuM EcuM Can Can (CAN-Treiber) EcuM->Can Can_Init / Can_DeInit SchM BSW Scheduler SchM->Can Can_MainFunction_* CanSM CanSM CanIf CanIf CanSM->CanIf 모드 요청 CanIf->CanSM 모드 및 Bus-off 알림 CanIf->Can Can_Write, Can_SetControllerMode, Can_CheckWakeup, Abfragen Can->EcuM EcuM_CheckWakeup, EcuM_SetWakeupEvent Can->CanIf CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff, CanIf_ControllerModeIndication HW CAN-Controller (Hardware) Can->HW Registerzugriff Det Det Can->Det Det_ReportError / Det_ReportRuntimeError Os Os Can->Os GetCounterValue HW->Can Interrupts / Statusflags

컨텍스트 다이어그램: EcuM, BSW Scheduler, CanIf, DET, Os 및 컨트롤러 하드웨어 간의 Can 임베딩. 출처: [SWS_Can_00234], SWS CANDriver 78쪽

각 컨트롤러는 UNINIT, STOPPED, STARTED 및 SLEEP 상태를 거칩니다[SWS_Can_91013]. 컨트롤러는 Can_SetControllerMode을 통해 개별적이고 비동기적으로 시작되며, 이때 E_OK는 단지 “수락됨”을 의미합니다[SWS_Can_00230]. 도달한 상태는 드라이버가 나중에 CanIf_ControllerModeIndication를 통해 보고합니다SWS CANDriver 33쪽. Bus-off는 하드웨어 복구 없이 컨트롤러를 STOPPED로 전환시키며, 버스 웨이크업은 컨트롤러를 SLEEP에서 STOPPED로 전환시킵니다SWS CANDriver 35쪽.

controllerzustand reset Power-on-Reset UNINIT CAN_CS_UNINIT reset->UNINIT STOPPED CAN_CS_STOPPED UNINIT->STOPPED Can_Init STOPPED->UNINIT Can_DeInit STOPPED->STOPPED Can_SetBaudrate STARTED CAN_CS_STARTED STOPPED->STARTED Can_SetControllerMode(CAN_CS_STARTED) SLEEP CAN_CS_SLEEP STOPPED->SLEEP Can_SetControllerMode(CAN_CS_SLEEP) STARTED->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) 또는 Bus-off(하드웨어) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) 또는 버스로부터의 Wakeup SLEEP->SLEEP Can_SetBaudrate

상태 다이어그램: 소프트웨어 호출 및 Bus-off와 웨이크업 이벤트에 의한 컨트롤러의 전환. 출처: [SWS_Can_91010], SWS CANDriver 38쪽

전송은 Can_Write(Hth, PduInfo)을 통해 이루어집니다. Can_IdType의 최상위 2개 비트는 CAN 2.0과 CAN FD 및 표준 ID와 확장 ID를 구분합니다[SWS_Can_00233] [SWS_Can_00416]. 사용 가능한 전송 객체가 없으면 드라이버는 CAN_BUSY를 반환하고 CanIf가 요청을 버퍼링합니다[SWS_Can_00039] SWS CANDriver 47쪽. 이벤트는 인터럽트 또는 폴링을 통해 감지됩니다. 폴링을 위해 주기적 메인 함수가 제공됩니다SWS CANDriver 41쪽:

  • Write 및 Read: 전송 확인 및 수신
  • BusOff 및 Wakeup: Bus-off 및 웨이크업 이벤트
  • Mode: 모드 전환

메인 함수는 [SWS_Can_00225]부터 [SWS_Can_00228]까지 및 [SWS_Can_00368]에 정의되어 있습니다.

오류 발생 시 드라이버는 CAN_E_UNINIT 또는 CAN_E_TRANSITION과 같은 개발 오류를 DET에 보고합니다[SWS_Can_91019]. 반환값이 있는 함수는 이때 E_NOT_OK을 반환합니다SWS CANDriver 48쪽. Bus-off 복구는 CanIf를 통해 CanSM이 담당합니다. 재시작은 다시 Can_SetControllerMode(CAN_CS_STARTED)를 통해 수행될 것으로 보입니다SWS CANInterface 138쪽. 오류 상태와 오류 카운터는 쿼리할 수 있지만, 카운터 값은 신뢰할 수 있는 버스 상태로 간주되지 않습니다[SWS_Can_91004] [SWS_Can_00516]. 질문 (열림)

역할: CanIf와 CAN 컨트롤러 사이의 하드웨어 근접 드라이버

CAN 드라이버는 하드웨어 유닛의 CAN 하드웨어에 대한 모든 액세스를 캡슐화합니다. 컨트롤러의 상태 변경은 Can_Init, Can_SetBaudrate 및 Can_SetControllerMode를 통해서만 진행됩니다. 이때 드라이버는 상태 변경을 직접 저장하지 않습니다 SWS CANDriver 30쪽. 상위 파트너는 CAN Interface입니다. 드라이버가 호출하는 모든 콜백은 CanIf에 구현되어 있으며 설정할 수 없습니다: CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff 및 CanIf_ControllerModeIndication. 또한 Det_ReportRuntimeError 및 Os 서비스 GetCounterValue [SWS_Can_00234] SWS CANDriver 73쪽가 필요합니다. 가져온 타입은 ComStack_Types, EcuM 및 Os 등에서 유래합니다 [SWS_Can_00222].

ECU State Manager는 Can_Init을(를) 통해 드라이버를 초기화합니다. 구현 지침에 따르면 런타임 중 이 함수를 최대 한 번만 호출합니다 [SWS_Can_00223] SWS CANDriver 29쪽. 주기적 메인 함수는 BSW Scheduler가 직접 호출합니다. 매개변수와 반환값이 없으며 재진입이 불가능합니다(non-reentrant). 실행 순서는 규정되어 있지 않습니다 SWS CANDriver 78쪽. 하위 방향으로 드라이버는 콜백을 제공하지 않습니다. 외부 CAN 컨트롤러는 SPI와 같은 동기식 MCAL API를 통해서만 접근할 수 있습니다 SWS CANDriver 76쪽.

kontext EcuM EcuM Can Can (CAN-Treiber) EcuM->Can Can_Init / Can_DeInit SchM BSW Scheduler SchM->Can Can_MainFunction_* CanSM CanSM CanIf CanIf CanSM->CanIf 모드 요청 CanIf->CanSM 모드 및 Bus-off 알림 CanIf->Can Can_Write, Can_SetControllerMode, Can_CheckWakeup, Abfragen Can->EcuM EcuM_CheckWakeup, EcuM_SetWakeupEvent Can->CanIf CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff, CanIf_ControllerModeIndication HW CAN-Controller (Hardware) Can->HW Registerzugriff Det Det Can->Det Det_ReportError / Det_ReportRuntimeError Os Os Can->Os GetCounterValue HW->Can Interrupts / Statusflags

컨텍스트 다이어그램: Can은 EcuM에 의해 초기화되고, BSW Scheduler에 의해 주기적으로 호출되며, CanIf에 의해 사용됩니다. CanIf, EcuM 및 DET에 통지하고, 타임아웃 처리를 위해 Os를 사용합니다. 출처: [SWS_Can_00234], SWS CANDriver 45쪽, SWS CANDriver 78쪽

Power-on부터 STARTED까지: 드라이버 및 컨트롤러 상태

드라이버 전체로는 CAN_UNINIT 및 CAN_READY 상태만 인식합니다. 리셋 후에는 CAN_UNINIT 상태에 있습니다. Can_Init은(는) 설정에 따라 모든 컨트롤러를 초기화한 후 CAN_READY로 전환합니다. Can_DeInit은(는) 컨트롤러를 초기화 해제하기 전에 모듈 상태를 CAN_UNINIT으로 설정합니다 [SWS_Can_00223] [SWS_Can_91002] SWS CANDriver 29쪽.

이와 별도로 각 컨트롤러는 Can_ControllerStateType의 네 가지 상태를 가집니다: CAN_CS_UNINIT, CAN_CS_STOPPED, CAN_CS_STARTED 및 CAN_CS_SLEEP [SWS_Can_91013].

  • STOPPED 상태에서 컨트롤러는 초기화되어 있지만 버스에 참여하지 않으며 Error Frame이나 Acknowledge를 전송하지 않습니다.
  • STARTED는 정상 작동 상태입니다.
  • SLEEP은 Sleep 모드를 지원하는 하드웨어에서만 STOPPED와 다릅니다 SWS CANDriver 31쪽.

Can_Init은(는) 모든 컨트롤러를 STOPPED로 전환합니다 SWS CANDriver 32쪽. Can_DeInit은(는) 이들을 STOPPED 또는 SLEEP에서 UNINIT으로 전환합니다 [SWS_Can_91010] SWS CANDriver 38쪽. STARTED에서 UNINIT으로 직접 가는 경로는 없습니다 SWS CANDriver 38쪽.

controllerzustand reset Power-on-Reset UNINIT CAN_CS_UNINIT reset->UNINIT STOPPED CAN_CS_STOPPED UNINIT->STOPPED Can_Init STOPPED->UNINIT Can_DeInit STOPPED->STOPPED Can_SetBaudrate STARTED CAN_CS_STARTED STOPPED->STARTED Can_SetControllerMode(CAN_CS_STARTED) SLEEP CAN_CS_SLEEP STOPPED->SLEEP Can_SetControllerMode(CAN_CS_SLEEP) STARTED->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) 또는 Bus-off(하드웨어) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) 또는 버스로부터의 Wakeup SLEEP->SLEEP Can_SetBaudrate

상태 다이어그램: CAN 컨트롤러의 라이프사이클. 소프트웨어 및 버스 이벤트가 전이를 트리거하며, STOPPED 또는 SLEEP에서 Can_DeInit만이 다시 UNINIT으로 전환합니다. 출처: [SWS_Can_91013], [SWS_Can_91010], SWS CANDriver 38쪽, SWS CANDriver 34쪽, SWS CANDriver 35쪽

각 컨트롤러는 Can_SetControllerMode(CAN_CS_STARTED)을(를) 통해 개별적으로 시작됩니다 SWS CANDriver 29쪽. 이 서비스는 비동기식으로 동작합니다. E_OK은(는) 요청이 수락되었음만을 의미합니다 [SWS_Can_00230]. STARTED로 전이할 때마다 컨트롤러는 새로 초기화되며, Can_Init 또는 Can_SetBaudrate에서 마지막으로 사용된 설정으로 수행됩니다 SWS CANDriver 59쪽. 하드웨어는 전환을 지연 적용할 수 있습니다. 따라서 드라이버는 도달한 상태를 사후에 CanIf_ControllerModeIndication을(를) 통해 보고하며, 목표 도달 여부는 상위 계층이 모니터링합니다 SWS CANDriver 33쪽. 폴링된 모드 전이는 Can_MainFunction_Mode이(가) 감지합니다 [SWS_Can_00368]. Can_GetControllerMode은(는) 현재 모드를 동기식으로 조회합니다 [SWS_Can_91014].

CAN 컨트롤러 초기화 및 시작EcuMCanIf-Nutzer (z. B. CanSM)CanIfCanBSW SchedulerCAN-ControllerUse Case: InitialisierungCan_Init(Config)모든 컨트롤러 구성Controller: CAN_CS_STOPPEDModul: CAN_READYUse Case: Controller einzeln startenCanIf_SetControllerMode(STARTED)Can_SetControllerMode(Controller, CAN_CS_STARTED)Neuinitialisierung,Start anfordernE_OK (Anforderung angenommen)E_OKloop전환이 유효해질 때까지Can_MainFunction_Mode()Statusflag lesenCanIf_ControllerModeIndication(ControllerId, CAN_CS_STARTED)<User_ControllerModeIndication>

시퀀스 다이어그램: EcuM에 의한 초기화 및 컨트롤러의 비동기 시작. 성공 메시지는 Can_MainFunction_Mode의 폴링 이후에야 이어집니다. 출처: [SWS_Can_00230], [SWS_Can_00368], SWS CANInterface 156쪽, SWS CANDriver 29쪽

하드웨어 전송 핸들을 통한 전송

CanIf는 Can_Write(Hth, PduInfo)을(를) 통해 전송 요청을 전달합니다. Hth는 하드웨어 전송 객체를 지정하며, HTH 번호는 하드웨어 유닛 내에서 고유하므로 컨트롤러도 함께 지정합니다 [SWS_Can_00233]. Can_HwHandleType은(는) 기본적으로 0..0x0FF를 포함하며, 255개를 초과하는 하드웨어 객체의 경우 0xFFFF까지의 확장 범위를 포함합니다 [SWS_Can_00429]. Can_PduType은(는) 필드 swPduHandle, length, id 및 sdu을(를) 묶습니다 [SWS_Can_00415].

Can_IdType에서는 두 개의 최상위 비트가 프레임 타입을 인코딩합니다 [SWS_Can_00416]:

  • 00: 표준 ID를 갖는 CAN
  • 01: 표준 ID를 갖는 CAN FD
  • 10: 확장 ID를 갖는 CAN
  • 11: 확장 ID를 갖는 CAN FD

이를 통해 컨트롤러에 대해 FD 전송 속도 설정이 활성화되어 있는 경우, 프레임 수준에서 CAN 2.0 프레임과 CAN FD 프레임을 혼합할 수 있습니다 SWS CANDriver 49쪽 SWS CANInterface 71쪽.

CanIf_Transmit이(가) reentrant이므로 Can_Write은(는) thread-safe해야 합니다. 사용 가능한 전송 객체가 없거나 선점형 호출이 reentrant하게 실행될 수 없는 경우 드라이버는 CAN_BUSY을(를) 반환합니다 [SWS_Can_00039] SWS CANDriver 47쪽. 이 경우 CanIf는 요청을 버퍼링합니다. 객체가 사용 가능해지면 CanIf는 Can_Write을(를) 우선순위에 따라 다시 호출합니다 SWS CANInterface 48쪽. 드라이버는 해당 CanIf_TxConfirmation까지 swPduHandle을(를) 유지합니다 SWS CANDriver 35쪽. 우선순위 역전을 방지하기 위해 Multiplexed Transmission을 정적으로 구성할 수 있으며, 이 경우 여러 하드웨어 객체가 하나의 HTH를 형성합니다 SWS CANDriver 40쪽.

확인(Confirmation)을 동반한 L-PDU 전송CanIfCanCAN-ControllerBSW SchedulerCan_Write(Hth, PduInfo)altHardware-Sendeobjekt freiswPduHandle je HTH merkenL-PDU ins Hardwareobjekt,전송 트리거E_OK사용 가능한 객체 없음 또는 재진입 실행 불가CAN_BUSYCanIfTxBuffer에 L-PDU 버퍼링프레임 전송 완료 및 버스로부터 확인됨altInterrupt-BetriebTX-InterruptPolling-BetriebCan_MainFunction_Write()대기 중인 확인(Confirmation) 검사CanIf_TxConfirmation(swPduHandle)opt해당 HTH용 버퍼링된 L-PDUCan_Write(Hth, 최고 우선순위 L-PDU)

시퀀스 다이어그램: 경로 E_OK 및 CAN_BUSY을 갖는 전송 요청, 이어서 인터럽트 또는 폴링을 통한 확인. 이후 CanIf는 버퍼링된 L-PDU를 추가 전송할 수 있습니다. 출처: [SWS_Can_00233], [SWS_Can_00039], SWS CANInterface 142쪽, SWS CANInterface 48쪽

수신 및 주기적 메인 함수

수신 시 드라이버는 CanIf_RxIndication을(를) 호출합니다. ID, 하드웨어 객체, 추상 CanIf-ControllerId와 함께 L-SDU의 길이 및 포인터를 전달합니다. 확장 프레임의 경우 CanIf가 프레임 타입을 인식할 수 있도록 ID의 MSB를 설정합니다 SWS CANDriver 43쪽. 선택적으로 사전에 구성 가능한 L-PDU 콜아웃 <LPDU_CalloutName>이(가) 연결됩니다 [SWS_Can_00443]. 이것이 false을(를) 반환하면 문서 위치(R25-11)에 따라 L-PDU는 더 이상 처리되지 않습니다 SWS CANDriver 77쪽.

이벤트는 인터럽트 또는 상태 플래그 폴링을 통해 감지됩니다. 인터럽트가 전혀 없는 순수 폴링 동작도 구성 가능해야 합니다. 폴링 시 메인 함수는 ISR 컨텍스트 대신 태스크 컨텍스트에서 동일한 콜백을 호출합니다 SWS CANDriver 41쪽. 각 메인 함수는 한 가지 유형의 이벤트를 폴링합니다:

Read 및 Write에 대한 R20-11 설명에서는 POLLING 사례만 언급합니다 [SWS_Can_00225] [SWS_Can_00226]. 후속 릴리스의 문서 위치에서는 MIXED를 추가하며, 이 경우 CanHardwareObjectUsesPolling = TRUE인 객체만 폴링됩니다 SWS CANDriver 81쪽 SWS CANDriver 79쪽. R20-11 요구사항에는 이 확장이 명시되어 있지 않습니다. CanMainFunctionRWPeriods을(를) 통해 여러 주기가 구성된 경우 함수 이름에 접미사 _<ShortName>이(가) 붙습니다 [SWS_Can_00441] SWS CANDriver 122쪽. 폴링이 전혀 없는 경우 메인 함수를 빈 define으로 구현할 수 있습니다 SWS CANDriver 81쪽.

폴링 모드에서 L-PDU 수신BSW SchedulerCanCAN-ControllerL-PDU-CalloutCanIfCanIf-NutzerloopzyklischCan_MainFunction_Read()새 L-PDU 확인altneue L-PDU vorhandenID normieren (Extended: MSB = 1),Daten ggf. in angepassten PufferoptL-PDU-Callout konfiguriert<LPDU_CalloutName>(Hrh, CanId, CanDataLegth, CanSduPtr)true / falsefalse인 경우: L-PDU 폐기CanIf_RxIndication(Mailbox, PduInfoPtr)사용자 대상 Rx 지시새 L-PDU 없음

시퀀스 다이어그램: ID 정규화, 선택적 L-PDU 콜아웃 및 CanIf로의 전달을 포함한 폴링 작동 모드에서의 수신. 출처: [SWS_Can_00226], [SWS_Can_00443], SWS CANInterface 153쪽, SWS CANDriver 43쪽

Sleep, 웨이크업 및 인터럽트 제어

드라이버는 트랜시버를 통한 것이 아니라 컨트롤러 자체가 감지한 웨이크업만 처리합니다 SWS CANDriver 45쪽. 하드웨어 웨이크업 시 컨트롤러는 SLEEP에서 STOPPED로 전환됩니다. 트리거한 L-PDU는 추가 처리되지 않습니다. EcuM_CheckWakeup은(는) CanWakeupSourceRef을(를) 통해 구성된 소스와 함께 인터럽트 또는 Can_MainFunction_Wakeup에서 호출됩니다 SWS CANDriver 35쪽. 그런 다음 EcuM은 CanIf를 통해 Can_CheckWakeup을(를) 호출합니다. 이 함수는 감지된 웨이크업을 EcuM_SetWakeupEvent을(를) 통해 보고합니다 [SWS_Can_00360] SWS CANDriver 63쪽. 오웨이크업에 대비하여 EcuM과 CanIf는 드라이버의 관여 없이 유효성 검사를 수행합니다 SWS CANDriver 45쪽.

Can_DisableControllerInterrupts 및 Can_EnableControllerInterrupts은(는) reentrant이며 중첩되어 작동합니다. n회의 Disable 호출 후에는 n회의 Enable 호출이 필요합니다. 사전에 Disable 없는 Enable은 효과가 없습니다 [SWS_Can_00231] [SWS_Can_00232] SWS CANDriver 61쪽 SWS CANDriver 62쪽.

CAN 버스로부터의 WakeupCAN-ControllerCanEcuMCanIfUse Case: Controller in CAN_CS_SLEEP버스로부터의 Wakeup 이벤트altInterrupt-BetriebWakeup-ISRPolling-BetriebCan_MainFunction_Wakeup()Controller SLEEP -> STOPPED,트리거한 L-PDU 처리 안 함EcuM_CheckWakeup(CanWakeupSourceRef의 소스)CanIf를 통한 Wakeup 소스 검사Can_CheckWakeup(Controller)optWakeup erkanntEcuM_SetWakeupEventE_OKValidierung gegen FehlwakeupsEcuM 및 CanIf에 의해 수행 (Can 제외)

시퀀스 다이어그램: SLEEP에서의 버스 웨이크업, EcuM에 대한 보고 및 Can_CheckWakeup을(를) 사용한 CanIf를 통한 확인. 출처: [SWS_Can_00360], [SWS_Can_00228], SWS CANDriver 45쪽, SWS CANDriver 35쪽

구성 세트, 파티션 및 인스턴스 참조

Can_Init은(는) Can_ConfigType에 대한 포인터를 수신합니다. 이 하드웨어별 구조에는 모든 컨트롤러에 대한 설정과 개별 컨트롤러 구성에 대한 참조가 포함되어 있습니다 [SWS_Can_00223] [SWS_Can_00413]. 모듈은 VARIANT-PRE-COMPILE 및 VARIANT-POST-BUILD를 지원합니다 SWS CANDriver 96쪽. Post-build 예시에서는 Can_Init 호출 시 여러 구성 세트 중 하나가 선택됩니다 EXP LayeredSoftwareArchitecture 120쪽. 컨트롤러별로 CanController은(는) 다른 항목 외에도 CanRxProcessing, CanTxProcessing, CanBusoffProcessing, CanWakeupProcessing 및 최소 하나의 CanControllerBaudrateConfig을(를) 정의합니다 SWS CANDriver 101쪽.

멀티 파티션 시스템에서 모듈은 각 파티션에서 독립적인 인스턴스로 작동합니다. API 호출은 자체 파티션 내에서만 적용됩니다 [SWS_Can_CONSTR_00508]. 파티션 할당에는 세 가지 규칙이 적용됩니다:

  • CanControllerEcucPartitionRef의 파티션은 CanEcucPartitionRef의 파티션의 부분 집합이어야 합니다 [SWS_Can_CONSTR_00509].
  • 통신 채널의 컨트롤러와 트랜시버 채널은 동일한 파티션을 참조합니다 [SWS_Can_CONSTR_00510].
  • 지원되지 않는 할당은 드라이버에 의해 거부됩니다 [SWS_Can_00507].

하나의 ECU 내에 있는 여러 Can 모듈은 변경된 함수 접두사로 구분됩니다 SWS CANDriver 51쪽.

오류가 발생한 경우의 동작

Development Error Detection이 활성화된 경우 드라이버는 개발 오류를 DET에 보고합니다. 코드는 CAN_E_PARAM_POINTER (0x01)부터 CAN_E_UNINIT (0x05) 및 CAN_E_TRANSITION (0x06)을 거쳐 CAN_E_INIT_FAILED (0x09)까지 다양합니다 [SWS_Can_91019]. DET에서 복귀한 후 함수는 즉시 반환되며, 반환값이 있는 함수는 E_NOT_OK을(를) 반환합니다 SWS CANDriver 48쪽. 몇 가지 예시:

  • Can_DeInit은(는) 컨트롤러가 STARTED 상태에 있는 동안 CAN_E_TRANSITION을(를) 보고합니다 [SWS_Can_91012] SWS CANDriver 59쪽.
  • Can_SetControllerMode에서 유효하지 않은 전이에 대해서는 CAN_E_TRANSITION이(가) 정의되어 있습니다. 프로덕션 코드에서 그 동작은 정의되지 않습니다 SWS CANDriver 30쪽 SWS CANDriver 32쪽.

런타임 오류로서 수신 메시지 유실에 대해 CAN_E_DATALOST이(가) 정의되어 있습니다 [SWS_Can_91020]. 이는 요구된 Det_ReportRuntimeError을(를) 통해 보고될 것으로 보입니다 [SWS_Can_00234]. 질문 Q-50225b25430c9660 (열림)

컨트롤러가 Bus-off 상태가 되면 STARTED에서 STOPPED로 전환됩니다. 드라이버는 하드웨어 복구를 수행하지 않습니다. 인터럽트를 통해 또는 Can_MainFunction_BusOff에서 CanIf_ControllerBusOff을(를) 통해 이벤트를 보고합니다 [SWS_Can_00227] SWS CANDriver 35쪽. 복구는 CanSM이 담당하며, CanIf가 CanSM_ControllerBusOff을(를) 사용하여 이를 알립니다 SWS CANInterface 138쪽. 해석: 재시작은 다시 Can_SetControllerMode(CAN_CS_STARTED)을(를) 통해 진행될 것으로 추정되며, 이때 구성을 다시 로드합니다 SWS CANDriver 59쪽. 질문 Q-83e484ab9f8b1aac (열림)

Bus-off 감지 및 알림CAN-ControllerCanBSW SchedulerCanIfCanSMController erreicht Bus-offaltInterrupt-BetriebBus-off-InterruptPolling-BetriebCan_MainFunction_BusOff()Statusbit lesenSTARTED -> STOPPED,하드웨어 복구 없음CanIf_ControllerBusOff(ControllerId)CanSM_ControllerBusOffBus-off 복구는 CanSM에 있음Use Case: Neustart (Interpretation)Neustart anfordern (Interpretation)Can_SetControllerMode(Controller, CAN_CS_STARTED)다음을 사용한 재초기화zuletzt verwendeter Konfiguration

시퀀스 다이어그램: CanSM까지의 Bus-off 감지 및 보고. 해석으로 표시된 재시작은 명시적으로 입증되지 않았습니다. 출처: [SWS_Can_00227], [SWS_Can_00234], SWS CANDriver 35쪽, SWS CANInterface 138쪽

진단을 위해 Can_GetControllerErrorState은(는) 오류 상태를 반환합니다: ACTIVE, PASSIVE 또는 BUSOFF [SWS_Can_91004] [SWS_Can_91003]. Rx 및 Tx 오류 카운터도 조회할 수 있습니다. 컨트롤러가 이를 제공하지 않는 경우 함수는 E_NOT_OK을(를) 반환합니다. 하드웨어가 카운터를 비동기식으로 관리하므로 이 값들은 버스 상태에 대한 추정에 적합하지 않습니다 [SWS_Can_00511] [SWS_Can_00516] SWS CANDriver 67쪽. Can_ErrorType은(는) 비트 오류부터 버스 잠금까지 일반적인 하드웨어 오류 유형의 상위 집합을 설명합니다 [SWS_Can_91021].

응답하지 않는 하드웨어에 대처하기 위해 드라이버는 타임아웃 처리에 OsCounter를 사용합니다 SWS CANDriver 23쪽. 모드 변경이 CanTimeoutDuration 이내에 적용되지 않으면 Can_SetControllerMode은(는) 블로킹하는 대신 함수를 종료합니다 SWS CANDriver 33쪽. Sleep 모드로 전이하는 도중 버스 웨이크업이 발생하면 Can_SetControllerMode(CAN_CS_STOPPED)은(는) E_NOT_OK을(를) 반환합니다 SWS CANDriver 35쪽.

더 자세한 증거

많은 문서 위치가 R23-11부터 R25-11에서 유래합니다. R20-11에 대해 규범적인 것은 인용된 요구사항입니다. 상태 다이어그램 SWS CANDriver 38쪽은(는) R20-11에서 직접 가져온 것입니다.

R20-11에 대해 페이로드에 제공된 요구사항 및 문서 위치를 기반으로 생성된 AI 가이드입니다. 가정은 해석으로 표시되어 있으며, 규격이 항상 기준이 됩니다.

CAN Driver (Can)

The CAN driver provides hardware-dependent access to the internal and external CAN controllers (CAN 2.0B, CAN FD, CAN XL).

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

함수 Can_Init [SWS_Can_00223] 📄 PDF

void Can_Init (const Can_ConfigType* Config);

This function initializes the module.

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

동기식 비재진입 함수 Can_Init은(는) 전달된 구성에 따라 전체 CAN 드라이버 모듈 및 관련 하드웨어 단위를 초기화합니다 [SWS_Can_00223].

사용법 및 호출 컨텍스트

Can_Init의 호출은 제어기(ECU)의 시작 단계에서 CAN 드라이버의 다른 함수가 호출되기 전에 ECU State Manager에 의해 필수적으로 수행됩니다 [SWS_Can_91012]. 파라미터로서 함수는 Config을(를) 통해 드라이버 구성(const Can_ConfigType*)에 대한 포인터를 수신하며 반환값을 제공하지 않습니다 [SWS_Can_00223].

초기화 범위 및 상태 전환

초기화의 일환으로 함수는 필요한 모든 하드웨어 레지스터를 설정하고 모든 CAN 컨트롤러를 초기화합니다 AUTOSAR_SWS_CANDriver 33쪽:

함수 호출을 통해 CAN 하드웨어의 상태 전환이 트리거되며 AUTOSAR_SWS_CANDriver 10쪽, 여기서 Can_Init은(는) 컨트롤러를 의도한 기본 상태로 전환하기 위해 레지스터 구성을 수행합니다 [SWS_Can_91010] AUTOSAR_SWS_CANDriver 36쪽.

동시성 및 제약사항

Can_Init은(는) 재진입 불가능으로 명시되어 있으므로 초기화가 진행되는 동안 병렬 또는 반복적인 호출이 발생해서는 안 됩니다 [SWS_Can_00223]. 또한 하드웨어 단위의 특정 글로벌 설정은 Can_Init 내에서만 설정할 수 있습니다 AUTOSAR_SWS_CANDriver 33쪽.

이 사용 지침은 AUTOSAR Classic R20-11의 명세 데이터를 기반으로 자동 생성되었습니다.

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

함수 Can_DeInit [SWS_Can_91002] 📄 PDF

void Can_DeInit (void);

This function de - initializes the module.

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

함수 Can_DeInit은(는) CAN 드라이버 모듈을 초기화 해제하는 역할을 합니다([SWS_Can_91002]). 시그니처 void Can_DeInit(void)을(를) 가지며, 파라미터를 받지 않고, 반환값을 제공하지 않으며, 동기식 및 비재진입으로 실행됩니다([SWS_Can_91002]). 인터페이스는 헤더 Can.h을(를) 통해 제공됩니다([SWS_Can_91002]).

호출은 소프트웨어 제어 상태 전환을 시작합니다(AUTOSAR_SWS_CANDriver 10쪽; AUTOSAR_SWS_CANDriver 41쪽). 이 과정에서 Can_DeInit은(는) 모듈 상태를 전환하고(AUTOSAR_SWS_CANDriver 33쪽) 모든 CAN 컨트롤러를 리셋합니다(AUTOSAR_SWS_CANDriver 41쪽).

동시성 및 제약사항

실행을 위해서는 하드웨어 및 모듈 상태와 관련된 엄격한 사전 조건 및 순서 요구사항이 적용됩니다:

상호 작용

오류 및 전환 동작은 유효하지 않은 상태 전환이 일관되게 포착되는 정비된 드라이버 시퀀스를 반영합니다([SWS_Can_00441]).

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

함수 Can_SetBaudrate [SWS_CAN_00491] 📄 PDF

Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️

This service shall set the baud rate configuration of the CAN controller. Depending on necessary baud rate modifications the controller might have to reset.

함수 Can_SetControllerMode [SWS_Can_00230] 📄 PDF

Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);

This function performs software triggered state transitions of the CAN controller State machine.

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

함수 Can_SetControllerMode(서비스 ID 0x03을(를) 가지며 Can.h을(를) 통해 제공됨)은 CAN 컨트롤러 상태 머신의 소프트웨어 트리거 상태 전환을 실행합니다([SWS_Can_00230], AUTOSAR_SWS_CANDriver 35쪽). 기본 컨트롤러 상태 UNINIT, STOPPED, STARTED 및 SLEEP 간의 전환을 유도하기 위해 하드웨어 관련 레지스터 설정을 수행합니다([SWS_Can_91010], AUTOSAR_SWS_CANDriver §7.3 “CAN Controller State Machine”).

사용법 및 의미론

호출은 CAN 컨트롤러를 식별하기 위한 파라미터 Controller 및 원하는 상태 전환을 지정하기 위한 Can_ControllerStateType 유형의 Transition과(와) 함께 수행됩니다([SWS_Can_00230]). 서비스는 비동기식 및 비재진입(Non Reentrant)으로 정의됩니다([SWS_Can_00230]). 반환값 E_OK은(는) 요청이 수락되었음을 확인합니다. E_NOT_OK은(는) 요청이 거부되었으며 개발 오류가 있음을 나타냅니다([SWS_Can_00230], [SWS_Can_00441]).

순서 및 상호작용

레지스터 구성을 설정한 후 Can_SetControllerMode에서 다시 빠져나옵니다(AUTOSAR_SWS_CANDriver 38쪽). Can 모듈은 하드웨어의 상태 변경 자체를 저장하지 않으므로([SWS_Can_91010]), 주기 함수 Can_Mainfunction_Mode이(가) Can_SetControllerMode에 의해 시작된 전환의 비동기 완료 또는 확인을 인계받을 것으로 보입니다(AUTOSAR_SWS_CANDriver 38쪽). 질문 Q-03edb1b665a1624b (열림)

이 텍스트는 AUTOSAR R20-11의 명세 데이터를 기반으로 AI가 생성했습니다.

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

함수 Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF

void Can_DisableControllerInterrupts (uint8 Controller);

This function disables all interrupts for this CAN controller.

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

동기식 및 재진입 가능 함수 Can_DisableControllerInterrupts은(는) 지정된 CAN 컨트롤러에 대한 모든 인터럽트를 비활성화합니다([SWS_Can_00231]). 전달은 반환값 없이 파라미터 Controller을(를) 통해 이루어집니다([SWS_Can_00231]).

호출 컨텍스트 및 동시성과 관련하여 이 함수는 재진입 가능하도록 설계되었으며 다중 호출을 지원합니다(AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”). 해석: 다중 호출은 내부 중첩 카운터를 증가시켜 해당 횟수만큼 활성화 호출이 이루어진 후에만 인터럽트가 다시 활성화되도록 할 것으로 보입니다(AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”, AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”). 질문 Q-61be56207aa92ee0 (열림)

오류 처리 영역에서 명세서는 호출 시 드라이버 모듈이 아직 초기화되지 않은 경우 오류 CAN_E_UNINIT을(를) 발생시킬 것을 요구합니다(AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”). 또한 명세서는 추가 오류(AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”) 발생을 요구합니다. 이는 유효하지 않은 컨트롤러 식별자를 확인하기 위한 것으로 추정됩니다. 질문 (열림)

CAN 드라이버 내의 상호작용에서 이 호출은 컨트롤러가 활성 상태를 유지하는 동안 컨트롤러 관련 임계 영역을 보호하는 역할을 합니다(AUTOSAR_SWS_CANDriver §7.5 “Interrupt handling”). 드라이버의 공식적인 정리 및 과거 인터페이스 변경 사항은 릴리스 노트에 문서화되어 있습니다([SWS_Can_00441]).

이 텍스트는 AI에 의해 작성되었으며 명세서에 대한 보충 사용 지침 역할을 합니다.

함수 Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF

void Can_EnableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

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

동기식 및 재진입 가능 함수 Can_EnableControllerInterrupts은(는) 파라미터 Controller을(를) 통해 지정된 CAN 컨트롤러에 대해 허용된 모든 인터럽트를 다시 활성화합니다([SWS_Can_00232]). 반환값이 없으며 헤더 파일 Can.h을(를) 통해 제공됩니다([SWS_Can_00232]).

실행 과정과 관련하여 함수는 소프트웨어 측 제어 플래그를 읽습니다(AUTOSAR_SWS_CANDriver 65쪽). 컨트롤러의 인터럽트가 이전에 여러 번 비활성화된 경우, 실제 활성화 전에 Can_EnableControllerInterrupts이(가) 동일한 횟수만큼 호출되어야 합니다(AUTOSAR_SWS_CANDriver 65쪽). 해석: 드라이버는 내부 카운터 또는 플래그를 통해 중첩된 잠금 구간을 관리할 것으로 보이므로, 모든 비활성화 호출이 완전히 상쇄된 후에만 하드웨어 인터럽트가 다시 활성화됩니다. 질문 Q-6781f0fc9ad7d221 (열림)

CAN 드라이버가 제대로 초기화되기 전에 함수가 호출되면 오류 CAN_E_UNINIT을(를) 보고합니다(AUTOSAR_SWS_CANDriver 66쪽). 이는 드라이버 컨텍스트에서 Development Error로 처리될 것으로 보입니다([SWS_Can_00441]). 질문 Q-efbbcf03a2589e4e (열림) 초기화되지 않은 상태에서 함수는 컨트롤러에 대해 추가 작업을 수행하지 않습니다(AUTOSAR_SWS_CANDriver 66쪽).

본 사용 지침은 명세를 기반으로 자동 생성되었습니다.

함수 Can_CheckWakeup [SWS_Can_00360] 📄 PDF

Std_ReturnType Can_CheckWakeup (uint8 Controller);

This function checks if a wakeup has occurred for the given controller.

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

사용 및 동작

동기식 함수 Can_CheckWakeup은(는) 특정 CAN 컨트롤러에 대해 웨이크업 이벤트가 감지되었는지 확인합니다([SWS_Can_00360], AUTOSAR_SWS_CANDriver 48쪽, AUTOSAR_SWS_CANDriver 67쪽). 헤더 파일 Can.h을(를) 통해 사용할 수 있으며 서비스 ID 0x0b을(를) 갖습니다([SWS_Can_00360]).

  • 파라미터: Controller (in)은(는) 상태를 웨이크업에 대해 점검해야 하는 CAN 컨트롤러의 식별자를 나타냅니다([SWS_Can_00360]).
  • 반환값: Std_ReturnType을(를) 반환합니다. 반환값 E_OK은(는) API 호출이 수락되었음을 나타내며, E_NOT_OK은(는) 거부를 나타냅니다([SWS_Can_00360]).
  • 동시성: 이 함수는 재진입 불가능(Non Reentrant)으로 정의됩니다([SWS_Can_00360]).

구성 및 오류 처리

함수의 가용성은 사전 컴파일 시점에 구성할 수 있습니다. 이를 통해 서비스 Can_CheckWakeup을(를) 코드에 포함하거나 코드에서 제거할 수 있습니다(AUTOSAR_SWS_CANDriver 67쪽, AUTOSAR_SWS_CANDriver 97쪽). CAN 드라이버가 초기화되기 전에 함수가 호출되면 오류 CAN_E_UNINIT을(를) 보고합니다(AUTOSAR_SWS_CANDriver 67쪽).

상호 작용

Can_CheckWakeup의 호출은 일반적으로 CAN 인터페이스에 의해 트리거됩니다(AUTOSAR_SWS_CANDriver 48쪽). 버스에서 웨이크업 이벤트가 발생한 경우 EcuM_CheckWakeup 처리 중에 CanIf_CheckWakeup이(가) 호출될 수 있습니다(AUTOSAR_SWS_CANInterface §7.18.4.1 “Wake-up detection”). [SWS_CANIF_00395]에 따라 CanIf은(는) 버스 웨이크업을 트리거한 특정 하드웨어 장치를 Can_CheckWakeup() 또는 CanTrcv_CheckWakeup()을(를) 통해 조회합니다(AUTOSAR_SWS_CANInterface 55쪽).

이 사용 지침은 자동으로 생성되었으며 AUTOSAR 릴리스 R20-11 명세서만을 기반으로 합니다.

함수 Can_GetControllerRxErrorCounter [SWS_Can_00511] 📄 PDF

Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);

Returns the Rx error counter for a CAN controller. This value might not be available for all CAN controllers, in which cas e E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Rx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

함수 Can_GetControllerTxErrorCounter [SWS_Can_00516] 📄 PDF

Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);

Returns the Tx error counter for a CAN controller. This value might not be available for all CAN controllers, in which case E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Tx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

함수 Can_Write [SWS_Can_00233] 📄 PDF

Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);

This function is called by Can If to pass a CAN message to Can Drv for transmission.

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

사용법 및 의미론

함수 Can_Write은(는) CAN 드라이버(CanDrv)로 전송할 CAN 메시지를 전달하기 위해 모듈 CanIf에 의해 동기식으로 호출됩니다([SWS_Can_00233]). 이때 호출자는 두 개의 파라미터를 전달합니다:

  • Hth: 사용할 전송 객체를 정의하고 하드웨어 단위 내에서 핸들 번호가 고유하므로 암시적으로 컨트롤러를 결정하는 하드웨어 전송 핸들([SWS_Can_00233]).
  • PduInfo: SDU 페이로드 데이터, 데이터 길이 및 CAN 식별자가 포함된 구조체에 대한 포인터([SWS_Can_00233]).

전송하기 전에 함수는 지정된 하드웨어 전송 객체를 검사하고(SWS_CANDriver 73쪽) 전달된 swPduHandle을(를) 보호합니다(SWS_CANDriver 43쪽). Std_ReturnType 유형(SRS_BSWGeneral §5.2.3.6 “Types and keywords”)의 반환값을 통해 E_OK은(는) 요청 수락을 알리며, CAN_BUSY은(는) 사용 가능한 하드웨어 전송 버퍼가 없음을 나타냅니다([SWS_Can_00233], SWS_CANDriver 51쪽).

오류 처리

실행 중 개발 오류가 발생하면 함수는 E_NOT_OK을(를) 반환합니다([SWS_Can_00233], [SWS_Can_00441]). 해석: 사용 가능한 발췌본에는 구체적인 DET 오류 코드가 명시되어 있지 않지만 잘못된 핸들이나 유효하지 않은 포인터는 E_NOT_OK의 반환을 초래할 것으로 보입니다. 질문 Q-ca947a7e0e4fd7d6 (열림)

동시성 및 제약사항

Can_Write은(는) 재진입 가능(reentrant) 또는 스레드 안전(thread-safe)으로 명시되어 있습니다([SWS_Can_00233], SWS_CANDriver 49쪽). 선점형 호출이 드라이버 측에서 재진입 불가능하게 실행될 수 있는 경우, 이는 반환값 CAN_BUSY을(를) 통해 CanIf에도 보고됩니다([SWS_Can_00233]). 호출자는 함수 호출이 반환될 때까지 PDU 메모리가 변경되지 않고 유효한 상태를 유지하도록 보장해야 합니다(SWS_CANDriver 45쪽).

상호 작용

호출 시 [SWS_Can_00416]을(를) 통해 대상 PDU 유형이 전달되며(SWS_CANDriver 51쪽), 드라이버는 최대 PDU 길이까지의 전송을 지원합니다(SWS_CANDriver 52쪽).

이 사용 지침은 AUTOSAR R20-11 명세 문서를 기반으로 자동 생성되었습니다.

함수 <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF

boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);

-

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

사용법 및 호출 컨텍스트

구성 가능한 콜아웃 인터페이스 <LPDU_CalloutName>은 L-PDU를 수신할 때마다 AUTOSAR CAN 모듈에 의해 선택적으로 호출됩니다(SWS_CANDriver §8.4.1 “Call-out function”). 함수의 선언은 헤더 파일 Can_Externals.h를 통해 제공됩니다([SWS_Can_00443]). 실제 함수 이름은 프로젝트별로 구성됩니다([SWS_Can_00443]).

입력 파라미터로 하드웨어 수신 핸들 Hrh, 식별자 CanId, 데이터 길이 CanDataLegth 및 페이로드 데이터에 대한 포인터 CanSduPtr이 전달됩니다([SWS_Can_00443]).

필터링 및 반환 값

이 함수는 boolean 값을 반환합니다. 콜아웃이 false을 반환하면 수신된 L-PDU를 더 이상 처리해서는 안 됩니다([SWS_Can_00444]). 해석: 호출 시 true이 반환되면 상위 계층으로의 정규 L-PDU 전달이 진행될 것으로 추정됩니다. 질문 Q-e96e75e93881c3af (열림)

동시성 및 제약사항

이 함수에는 서비스 ID 0x20이 할당되어 있으며 비동기(Asynchronous) 및 비재진입(Non Reentrant)으로 지정되어 있습니다([SWS_Can_00443]). 재진입이 불가능하므로 동일한 컨텍스트 내에서 병렬 호출이 발생해서는 안 됩니다.

이 텍스트는 AI에 의해 생성되었으며 참고용으로 제공됩니다. 구속력 있는 기준은 AUTOSAR 사양의 요구사항입니다.

함수 Can_MainFunction_Write [SWS_Can_00225] 📄 PDF

void Can_MainFunction_Write (void);

This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.

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

함수 Can_MainFunction_Write은(는) 파라미터 CAN_TX_PROCESSING이(가) POLLING(으)로 구성된 경우 전송 확인(TX-Confirmation)의 주기적 폴링을 수행합니다 [SWS_Can_00225], AUTOSAR SWS CAN Driver §7 “Scheduled functions”. 파라미터가 없으며(void Can_MainFunction_Write(void)), 서비스 ID 0x01을(를) 가지며 스케줄러를 위해 헤더 파일 SchM_Can.h을(를) 통해 제공됩니다 [SWS_Can_00225]. 구성 스위치를 통해 PDU 전송 처리를 위한 함수를 활성화하거나 비활성화할 수 있습니다 AUTOSAR SWS CAN Driver §10 “CanMainFunctionWrite”.

시스템에서 전송 프로세스에 폴링이 전혀 사용되지 않는 경우, 명세서에 따라 Can_MainFunction_Write은(는) 빈 디파인(define)으로 구현되어야 합니다 AUTOSAR SWS CAN Driver §7 “Scheduled functions”. 이는 순수 인터럽트 기반 시스템에서 불필요한 스케줄러 오버헤드를 방지하기 위한 것으로 보입니다. 질문 Q-2152a35397130945 (열림)

Can_MainFunction_Read 및 Can_MainFunction_BusOff과의 상호작용에서 이 루틴은 드라이버와 SchM 간의 주기적인 인터페이스를 구성합니다 AUTOSAR SWS CAN Driver §7 “Scheduled functions”. 확인 처리는 모드에 따라 하드웨어 리소스에서 직접 수행되거나 Can_MainFunction_Write의 컨텍스트에서 발생합니다 AUTOSAR SWS CAN Driver §7 “Hardware Resources”. 구체적인 호출 및 할당은 컨트롤러별 Tx 처리에 의해 지원되며 각각 참조된 요소 AUTOSAR SWS CAN Driver §10 “CanMainFunctionWrite”, AUTOSAR SWS CAN Driver §10 “Call Context”에 따라 달라집니다 [SWS_Can_00441].

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

함수 Can_MainFunction_Read [SWS_Can_00226] 📄 PDF

void Can_MainFunction_Read (void);

This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.

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

함수 Can_MainFunction_Read은(는) CAN 수신 통지([SWS_Can_00226])의 주기적 조회(폴링)에 사용됩니다. 서비스 ID 0x08을(를) 포함하는 시그니처 void Can_MainFunction_Read (void)을(를) 가지며, 실행 제어를 위해 헤더 파일 SchM_Can.h을(를) 통해 제공됩니다([SWS_Can_00226]).

사용 및 구성

이 함수는 구성 파라미터 CAN_RX_PROCESSING이(가) POLLING(으)로 설정된 경우 RX 표시(indication)의 폴링을 실행합니다([SWS_Can_00226]). 시스템에서 이 처리는 컨트롤러별로 구성될 수 있습니다([SWS_Can_00441]). CAN 드라이버에서 폴링이 전혀 사용되지 않는 경우 Can_MainFunction_Read은(는) 빈 매크로로 정의될 수 있습니다(AUTOSAR_SWS_CANDriver 77쪽).

동시성 및 제약사항

호출은 파라미터화된 트리거 주기(AUTOSAR_SWS_CANDriver 22쪽)에 따라 스케줄러 컨텍스트에서 주기적으로 수행됩니다. 실행에 대해 엄격한 조건이 적용됩니다:

해석: 재진입이 허용되지 않으므로(AUTOSAR_SWS_CANDriver 47쪽), 태스크의 구성된 호출 간격은 다음 주기 시작 전에 처리 단계가 항상 완료되도록 책정되어야 할 것으로 보입니다. 질문 Q-1f2fa9db14970b12 (열림)

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

함수 Can_MainFunction_BusOff [SWS_Can_00227] 📄 PDF

void Can_MainFunction_BusOff (void);

This function performs the polling of bus - off events that are configured statically as 'to be polled'.

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

계획된 메인 함수 Can_MainFunction_BusOff은(는) CAN 컨트롤러가 정적으로 폴링하도록 구성된 경우 해당 컨트롤러의 버스 오프 이벤트를 주기적으로 폴링하는 데 사용됩니다 [SWS_Can_00227], [SWS_Can_00109]. 시그니처 void Can_MainFunction_BusOff(void)을(를) 가지며, 파라미터를 받지 않고, 값을 반환하지 않으며, 실행 제어를 위해 헤더 SchM_Can.h을(를) 통해 제공됩니다 [SWS_Can_00227].

사용법 및 상호작용

하드웨어 이벤트는 CAN 드라이버에서 인터럽트를 통하거나 해당 상태 플래그를 폴링하여 감지될 수 있으며, 질의 구성은 하드웨어에 따라 달라집니다 [SWS_Can_00099]. 드라이버는 인터럽트를 전혀 사용하지 않도록 구성될 수도 있습니다 [SWS_Can_00007]. 시스템 전체에서 폴링을 전혀 사용하지 않는 경우, Can 모듈은 이 함수를 빈 매크로로 구현할 수 있습니다 [SWS_Can_00183].

Can_MainFunction_BusOff에서 상태 비트를 통해 버스 오프 이벤트가 감지되면 모듈은 자동 하드웨어 복구 방지 등과 같은 필요한 레지스터 설정을 수행합니다 SWS_CANDriver §7.3 “CAN Controller State Machine”, [SWS_Can_91010]. 그런 다음 모듈은 컨트롤러의 소프트웨어 상태 변경이 발생하는 관련 콜백을 통해 상위 계층 CanIf에 알립니다 SWS_CANDriver §7.3 “CAN Controller State Machine”.

호출 컨텍스트 및 제약 사항

폴링 작동 시 콜백 알림의 호출 컨텍스트는 ISR이 아니라 Can_MainFunction_BusOff의 실행 태스크입니다. 그럼에도 불구하고 모든 콜백 함수는 ISR 컨텍스트에서 호출되는 것처럼 구현되어야 합니다 SWS_CANDriver §7.9 “Notification concept”. 재진입성과 관련하여 페이로드에는 명시적인 언급이 없습니다. 글로벌 컨트롤러 레지스터 및 상태에 액세스하므로 이 함수는 재진입이 불가능할 것으로 추정됩니다. 질문 Q-38fcd72c40ce3e66 (열림)

이 사용 지침은 AI에 의해 생성되었으며 AUTOSAR 버전 R20-11의 명세서 발췌본만을 기반으로 합니다.

함수 Can_MainFunction_Wakeup [SWS_Can_00228] 📄 PDF

void Can_MainFunction_Wakeup (void);

This function performs the polling of wake - up events that are configured statically as 'to be polled'.

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

메인 함수 Can_MainFunction_Wakeup은(는) 정적으로 폴링되도록 구성된 웨이크업 이벤트의 주기적인 폴링을 수행합니다([SWS_Can_00228]). 이 함수는 시그니처 void Can_MainFunction_Wakeup(void)을(를) 가지며, 파라미터를 받지 않고, 반환값을 제공하지 않으며, Schedule Manager를 위해 헤더 SchM_Can.h을(를) 통해 제공됩니다(AUTOSAR_SWS_CANDriver 79쪽). 함수의 실행 주기는 초 단위로 구성됩니다(AUTOSAR_SWS_CANDriver 92쪽).

CAN 컨트롤러의 상태 머신(SWS_CANDriver §7.3 “CAN Controller State Machine”) 프레임워크 내에서 외부 하드웨어 웨이크업 이벤트는 인터럽트 대신 Can_MainFunction_Wakeup에서 쿼리되는 상태 비트를 통해 신호될 수 있습니다([SWS_Can_91010]). 또한 함수는 상태 전환 시 CAN 상태 레지스터의 해당 플래그를 변경 사항의 효력이 신호될 때까지 폴링합니다([SWS_Can_00370]). 상태 전환이 성공한 후 CAN 드라이버는 추상화된 CanIf ControllerId을(를) 기준으로 콜백 함수 CanIf_ControllerModeIndication을(를) 사용하여 CAN 인터페이스에 새 상태를 보고합니다([SWS_Can_00370]).

구성 및 리소스 사용과 관련하여 웨이크업 이벤트 처리를 위한 API Can_MainFunction_Wakeup()을(를) 활성화하거나 비활성화할 수 있습니다(AUTOSAR_SWS_CANDriver 97쪽). ECU에서 웨이크업 이벤트에 폴링이 전혀 사용되지 않는 경우 Can_MainFunction_Wakeup은(는) 빈 매크로로 정의될 수 있습니다(AUTOSAR_SWS_CANDriver 79쪽).

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

함수 Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF

void Can_MainFunction_Mode (void);

This function performs the polling of CAN controller mode transitions.

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

사용 및 작동 방식

계획된 메인 함수 Can_MainFunction_Mode([SWS_Can_00368])은(는) CAN 컨트롤러의 상태 전환 폴링을 수행합니다. 전달 파라미터와 반환값이 모두 없으며(void Can_MainFunction_Mode(void), 서비스 ID 0x0c), 헤더 SchM_Can.h을(를) 통해 선언됩니다 SWS_CANDriver §8.5.1.5 “Can_MainFunction_Mode”.

이 함수는 계속해서 주기적으로 호출됩니다(AUTOSAR_SWS_CANInterface 143쪽). CAN 컨트롤러의 모드가 변경되었는지 하드웨어를 확인합니다. 변경이 감지되면 CanIf_ControllerModeIndication(Controller, ControllerMode) 호출을 통해 CAN 인터페이스에 통지됩니다.

비동기 모드 모니터링

이전에 Can_SetControllerMode()을(를) 통해 모드 변경이 요청되었고 이 호출이 CanIf(으)로 성공적으로 반환되면, Can_MainFunction_Mode은(는) 완료된 컨트롤러 하드웨어의 상태 전환을 인식합니다. 그런 다음 CanIf_ControllerModeIndication을(를) 통해 CanIf에 CAN_CS_STARTED과(와) 같은 새로운 상태를 비동기식으로 알립니다 AUTOSAR_SWS_CANInterface 144쪽.

호출 컨텍스트 및 경계 조건

SchM_Can.h을(를) 통해 제공되고 Scheduled Function으로 정의되어 있으므로 주기적인 호출은 BSW 스케줄러에 의해 수행될 것으로 보입니다. 질문 Q-42edbc2aa591e8d7 (열림) 페이로드에는 이 함수에 대한 특정 오류 코드나 개발 단계가 정의되어 있지 않습니다.

이 텍스트는 AUTOSAR 명세서를 기반으로 AI에 의해 작성되었습니다.

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

타입 Can_ConfigType [SWS_Can_00413] 📄 PDF

This is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings affecting all controllers. Furthermore it contains pointers to controller configuration structures. The contents of the initializ ation data structure are CAN hardware specific.

타입 Can_PduType [SWS_Can_00415] 📄 PDF

This type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.

타입 Can_IdType [SWS_Can_00416] 📄 PDF

Represents the Identifier of an L - PDU. The two most significant bits specify the frame type: 00 CAN message with Standard CAN ID 01 CAN FD frame with Standard CAN ID 10 CAN message with Extended CAN ID 11 CAN FD frame with Extended CAN ID

타입 Can_HwHandleType [SWS_Can_00429] 📄 PDF

Represents the hardware object handles of a CAN hardware unit. For CAN hardware units with more than 255 HW objects use extended range.

타입 Can_HwType [SWS_CAN_00496] 📄 PDF

This type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller and therefore Can Drv as well as the specific Can Id.

타입 Can_ErrorStateType [SWS_Can_91003] 📄 PDF

Error states of a CAN controller.

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

Can_GeneralTypes.h의 열거형 Can_ErrorStateType은 CAN 컨트롤러 [SWS_Can_91003]의 오류 및 작동 상태를 설명합니다. 이는 CAN 버스에서의 컨트롤러 동작을 세 가지 상태를 통해 매핑합니다 SWS_CANDriver §8.2.7 “Can_ErrorStateType”:

  • CAN_ERRORSTATE_ACTIVE: CAN 컨트롤러가 버스 통신에 온전히 참여합니다 [SWS_Can_91003].
  • CAN_ERRORSTATE_PASSIVE: CAN 컨트롤러가 통신에 참여하지만, 더 이상 능동 에러 프레임(Error Frame)을 전송하지 않습니다 [SWS_Can_91003].
  • CAN_ERRORSTATE_BUSOFF: CAN 컨트롤러가 심각한 전송 오류의 결과로 버스로부터 격리되어 더 이상 통신에 참여하지 않습니다 [SWS_Can_91003].

런타임 시 상태는 동기식 드라이버 서비스 Can_GetControllerErrorState을 통해 쿼리됩니다 [SWS_Can_91004]. 이 서비스의 출력 매개변수 ErrorStatePtr는 결정된 값을 수신합니다. 동일한 시그니처를 CAN 인터페이스 AUTOSAR_SWS_CANInterface 78쪽 “CanIf_GetControllerErrorState”의 상위 함수 CanIf_GetControllerErrorState에서도 사용합니다. 동시성과 관련하여, 동일한 ControllerId에 대해 Can_GetControllerErrorState는 재진입 불가능(non-reentrant)으로 명시되어 있습니다 [SWS_Can_91004].

오류 발생 시 Can_GetControllerErrorState은 반환값 E_NOT_OK을 반환하고, 성공적으로 쿼리된 경우 E_OK를 반환합니다 [SWS_Can_91004]. 개발 오류 감지(DET)가 활성화된 경우, 드라이버 초기화 전 호출하면 CAN_E_UNINIT 오류가 발생합니다 [SWS_Can_91005]. 올바르지 않은 ControllerId는 개발 오류 CAN_E_PARAM_CONTROLLER을 트리거하며 [SWS_Can_91006], ErrorStatePtr에 널 포인터를 전달하면 개발 오류와 함께 거부됩니다 [SWS_Can_91007].

Interpretation: 인터페이스가 포인터를 순수 출력 매개변수로 취급하고 널 포인터를 개발 오류로 배제하므로, 호출자는 ErrorStatePtr을 위한 메모리 영역을 자체 책임하에 할당해야 할 것으로 보입니다. 질문 Q-5c907c21bcb50893 (열림)

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

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

타입 Can_ControllerStateType [SWS_Can_91013] 📄 PDF

States that are used by the several Controller Mode functions.

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

열거형 Can_ControllerStateType은 CAN 컨트롤러의 기본 작동 상태인 CAN_CS_UNINIT, CAN_CS_STARTED, CAN_CS_STOPPED 및 CAN_CS_SLEEP를 정의합니다 [SWS_Can_91013]. 이 유형은 CAN 컨트롤러 상태 머신의 소프트웨어 제어 상태 관리를 위해 모듈 전반에 걸쳐 사용됩니다 [SWS_Can_00017].

이 값들은 다음 컨텍스트에서 사용됩니다:

동시성 및 오류 처리와 관련하여 다음이 적용됩니다: 드라이버 함수 Can_SetControllerMode 및 Can_GetControllerMode은 재진입할 수 없습니다 [SWS_Can_00230], [SWS_Can_91014]. 드라이버 초기화 전에 Can_GetControllerMode를 호출하면 개발 오류 CAN_E_UNINIT가 보고되고 E_NOT_OK이 반환됩니다 [SWS_Can_91016]. 콜백 함수 CanSM_ControllerModeIndication은 서로 다른 컨트롤러에 대해 재진입 가능하며, 구성되지 않은 컨트롤러 ID를 CANSM_E_PARAM_CONTROLLER(으)로 DET에 보고합니다 [SWS_CanSM_00396], [SWS_CanSM_00397].

이 사용 지침은 AUTOSAR Classic R20-11의 CAN 드라이버, CAN 인터페이스 및 CAN 상태 관리자 규격의 명시 사항을 기반으로 합니다.

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

타입 Can_ErrorType [SWS_Can_91021] 📄 PDF

The enumeration represents a superset of CAN Error Types which typical CAN HW is able to report. That means not all CAN HW will be able to support the complete set.

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

열거형 Can_ErrorType은 전형적인 CAN 하드웨어가 감지하여 상위 계층에 보고할 수 있는 CAN 오류 원인의 표준화된 수퍼셋을 정의합니다 [SWS_Can_91021]. 이는 헤더 파일 Can_GeneralTypes.h를 통해 제공됩니다 SWS_CANDriver §8.2.9 “Can_ErrorType”.

해당 열거형은 수퍼셋으로 설계되었기 때문에 모든 CAN 컨트롤러가 지정된 모든 값을 반드시 지원하는 것은 아닙니다 [SWS_Can_91021]. 정의된 오류 상태는 다음과 같습니다:

  • 버스 모니터링 시 비트 오류(CAN_ERROR_BIT_MONITORING1, CAN_ERROR_BIT_MONITORING0 또는 통칭하여 CAN_ERROR_BIT),
  • 응답(Acknowledge) 오류(CAN_ERROR_CHECK_ACK_FAILED, CAN_ERROR_ACK_DELIMITER),
  • 송신자의 중재 손실(CAN_ERROR_ARBITRATION_LOST),
  • 수신 버퍼 풀로 인한 과부하 상태(CAN_ERROR_OVERLOAD),
  • 포맷 및 비트 스터핑 위반(CAN_ERROR_CHECK_FORM_FAILED, CAN_ERROR_CHECK_STUFFING_FAILED),
  • CRC 오류(CAN_ERROR_CHECK_CRC_FAILED) 및
  • 도미넌트(dominant) 레벨에서의 영구적인 버스 블로킹(CAN_ERROR_BUS_LOCK) SWS_CANDriver §8.2.9 “Can_ErrorType”.

BSW 모듈 간의 상호작용에서 이 타입은 컨트롤러 오류를 CAN 인터페이스로 전달하기 위한 콜백 함수 CanIf_ErrorNotification의 파라미터로 사용됩니다 AUTOSAR_SWS_CANInterface §8.x “CanIf_ErrorNotification”. 이때 전달되는 값은 기반 하드웨어에 의해 감지된 오류 상태에 해당할 것으로 보입니다 AUTOSAR_SWS_CANDriver §7.x “Error Notification”. 질문 Q-d23c45dd3b23ec71 (열림)

이 텍스트는 AI에 의해 생성되었으며 기술적 오리엔테이션을 목적으로 합니다.

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

Record
AUTOSAR/AP/record/CP_MOD_Can
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_Can@rel:R20-11#18ce3fd2
Content hash
18ce3fd2
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANDriver.pdf#nameddest=SWS_Can_00223

초기화 및 상태

Can_DeInit 함수

This function de - initializes the module.

void Can_DeInit (void);

This function returns the version information of this module.

void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);
Can_Init 함수

This function initializes the module.

void Can_Init (const Can_ConfigType* Config);

서비스

This function checks if a wakeup has occurred for the given controller.

Std_ReturnType Can_CheckWakeup (uint8 Controller);

This function disables all interrupts for this CAN controller.

void Can_DisableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

void Can_EnableControllerInterrupts (uint8 Controller);

This service obtains the error state of the CAN controller.

Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);

This service reports about the current status of the requested CAN controller.

Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);

Returns the Rx error counter for a CAN controller. This value might not be available for all CAN controllers, in which cas e E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Rx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);

Returns the Tx error counter for a CAN controller. This value might not be available for all CAN controllers, in which case E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Tx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);

This service shall set the baud rate configuration of the CAN controller. Depending on necessary baud rate modifications the controller might have to reset.

Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️

This function performs software triggered state transitions of the CAN controller State machine.

Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);
Can_Write 함수

This function is called by Can If to pass a CAN message to Can Drv for transmission.

Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);

콜아웃 및 예상 인터페이스

-

boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);

주기적

This function performs the polling of bus - off events that are configured statically as 'to be polled'.

void Can_MainFunction_BusOff (void);

This function performs the polling of CAN controller mode transitions.

void Can_MainFunction_Mode (void);

This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.

void Can_MainFunction_Read (void);

This function performs the polling of wake - up events that are configured statically as 'to be polled'.

void Can_MainFunction_Wakeup (void);

This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.

void Can_MainFunction_Write (void);

타입

This is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings affecting all controllers. Furthermore it contains pointers to controller configuration structures. The contents of the initializ ation data structure are CAN hardware specific.

States that are used by the several Controller Mode functions.

Error states of a CAN controller.

The enumeration represents a superset of CAN Error Types which typical CAN HW is able to report. That means not all CAN HW will be able to support the complete set.

Represents the hardware object handles of a CAN hardware unit. For CAN hardware units with more than 255 HW objects use extended range.

Can_HwType 타입

This type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller and therefore Can Drv as well as the specific Can Id.

Can_IdType 타입

Represents the Identifier of an L - PDU. The two most significant bits specify the frame type: 00 CAN message with Standard CAN ID 01 CAN FD frame with Standard CAN ID 10 CAN message with Extended CAN ID 11 CAN FD frame with Extended CAN ID

This type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.