DEENESPTFRRUARHIKOZHNL

CAN Transceiver Driver (CanTrcv)

ModulCanTrcv (CAN Transceiver Driver)
BSW-Modul-ID70
Standard-Header#include "CanTrcv.h"
SWS-SpezifikationAUTOSAR_SWS_CANTransceiverDriver.pdf
ClusterCAN

模块指南人工智能生成

控制外部 CAN 收发器:工作模式、唤醒检测以及通过唤醒帧的选择性唤醒。
AI 生成 未审核 模型: claude-opus-5-5 · 推理强度: high · 温度: 不可控 · 提示词: 61900c5cf397 来源 未决问题(4)
因果锚点:R20-11 自 R20-11 起有效 为此规范版本重新合成。
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

控制外部 CAN 收发器:工作模式、唤醒检测以及通过唤醒帧的选择性唤醒。

CanTrcv 控制外部 CAN 收发器,并将其映射到包含 NORMAL、STANDBY 和 SLEEP 的通用模式模型。CanIf 异步请求模式切换;驱动程序通过指示返回已达到的模式 [SWS_CanTrcv_00158]。此外,它还能检测唤醒,向 EcuM 报告唤醒,并在具备合适硬件时支持通过唤醒帧进行选择性唤醒。最重要的边界条件:仅能从 STANDBY 进入 SLEEP [SWS_CanTrcv_00104],且在通知被禁止期间不得丢失任何唤醒。

CAN 收发器驱动(CanTrcv)将外部 CAN 收发器封装在通用模式模型后。由此使 ComM 和 EcuM 与具体硬件解耦(SWS CanTrcv 第19页)。每种收发器硬件类型对应一个驱动实例 [SWS_CanTrcv_00016]。该驱动通过 CanIf 进行调用,并通过 Dio 和 Spi 控制硬件,这些底层驱动必须在 CanTrcv_Init 之前完成初始化 [SWS_CanTrcv_00099]。初始化后,每个收发器按通道配置处于 STANDBY 或 SLEEP 状态 [SWS_CanTrcv_00148]。CanTrcv_DeInit 转换至 NOT_ACTIVE [SWS_CanTrcv_91003]。

CanTrcv_SetOpMode 在 NORMAL、STANDBY 和 SLEEP 之间切换 [SWS_CanTrcv_00102]。仅允许从 STANDBY 切换至 SLEEP [SWS_CanTrcv_00104]。切换至当前模式不是错误 [SWS_CanTrcv_00161]。该函数以异步方式工作:一旦达到目标模式,CanTrcv 就会通过 CanIf_TrcvModeIndication [SWS_CanTrcv_00158] 进行报告。

zustaende cluster_power_on POWER_ON cluster_active ACTIVE start NOT_ACTIVE NOT_ACTIVE start->NOT_ACTIVE Power on stop NOT_ACTIVE->stop Power off STANDBY CANTRCV_TRCVMODE_STANDBY NOT_ACTIVE->STANDBY CanTrcv_Init() [Init-Zustand STANDBY] SLEEP CANTRCV_TRCVMODE_SLEEP NOT_ACTIVE->SLEEP CanTrcv_Init() [Init-Zustand SLEEP] NORMAL CANTRCV_TRCVMODE_NORMAL NORMAL->NOT_ACTIVE CanTrcv_DeInit() NORMAL->NORMAL SetOpMode(NORMAL) NORMAL->STANDBY SetOpMode(STANDBY) STANDBY->NORMAL SetOpMode(NORMAL) STANDBY->STANDBY SetOpMode(STANDBY) STANDBY->SLEEP SetOpMode(SLEEP) SLEEP->NORMAL SetOpMode(NORMAL) SLEEP->SLEEP SetOpMode(SLEEP)

状态图:Init 转换至 STANDBY 或 SLEEP,SLEEP 仅能通过 STANDBY 进入,DeInit 转换至 NOT_ACTIVE。来源:SWS CanTrcv 第19页、[SWS_CanTrcv_00148]

CanIf 通过 CanTrcv_CheckWakeup 检查唤醒。该函数通过 EcuM_SetWakeupEvent [SWS_CanTrcv_00146] 报告检测到的唤醒。CanTrcv_MainFunction 在 STANDBY 和 SLEEP 状态下轮询总线 [SWS_CanTrcv_00112]。CanTrcv_SetWakeupMode 可以禁止、使能通知或清除已保存的唤醒。在此过程中不得丢失任何唤醒 [SWS_CanTrcv_00095]。

支持 PN 的收发器(CanTrcvHwPnSupport)还通过配置的唤醒帧进行唤醒 [SWS_CanTrcv_00175]。在停机(Shutdown)时,CanSM 首先清除 WUF 标志,然后切换至 STANDBY [SWS_CanTrcv_00194]。随后,CanSM 异步检查唤醒标志 [SWS_CanTrcv_00224]。

出现错误时,适用以下规则:

  • 当 DET 启用时报告开发错误,当 DET 关闭时 API 返回 E_NOT_OK [SWS_CanTrcv_00050]。
  • 硬件通信故障由驱动程序作为运行时错误 CANTRCV_E_NO_TRCV_CONTROL [SWS_CanTrcv_91006] 报告。
  • CanTrcv_MainFunctionDiagnostics 将总线错误作为 CANTRCV_E_BUS_ERROR 报告给 DEM [SWS_CanTrcv_00206]。
使用部分网络关闭(SPI 异步)CanSMCanIfCanTrcvSpiAusgang: Anforderung NoCom,Transceiver NORMAL, Controller STARTEDUse Case: 第 I 部分:清除 WUF 标志,STANDBYCanIf_ClearTrcvWufFlag(TransceiverId)CanTrcv_ClearTrcvWufFlag(Transceiver)Spi_AsyncTransmit(Sequence)CanIf_ClearTrcvWufFlagIndication(TransceiverId)CanSM_ClearTrcvWufFlagIndicationCanIf_SetControllerMode(ControllerId, CAN_CS_STOPPED)CanIf_SetTrcvMode(TransceiverId, CANIF_TRCV_MODE_STANDBY)CanTrcv_SetOpMode(Transceiver, STANDBY)Spi_AsyncTransmit(Sequence)CanIf_TrcvModeIndication(TransceiverId, STANDBY)CanSM_TransceiverModeIndication(TransceiverId, STANDBY)Use Case: 第 II 部分:控制器休眠,检查唤醒标志CanIf_SetControllerMode(ControllerId, CAN_CS_SLEEP)CanIf_CheckTrcvWakeFlag(TransceiverId)CanTrcv_CheckWakeFlag(Transceiver)Spi_AsyncTransmit (Wake-Flag lesen)CanIf_CheckTrcvWakeFlagIndication(TransceiverId)<User_CheckTrcvWakeFlagIndication>

时序图:在 PN 停机时清除 WUF 标志,将收发器切换至 STANDBY 并异步检查唤醒标志。来源:SWS CanTrcv 第55页、[SWS_CanTrcv_00194]

角色:CanIf 下方的外部 CAN 收发器驱动程序

CAN 收发器驱动程序(CanTrcv)控制外部 CAN 收发器芯片。它将这些芯片的硬件状态映射到通用的工作模式模型上。该模型旨在统一覆盖众多可用的收发器。根据规范,为此它接受针对某个具体芯片可能存在一两个多余状态的代价,但由此将 ComM 和 EcuM 与硬件解耦(SWS CanTrcv 第19页)。为此,收发器硬件必须提供能够映射到此模型的接口 [SWS_CanTrcv_00098]。

向上而言,CanIf 是直接的交互伙伴:

反馈通过 CanIf_TrcvModeIndication 进行,它属于必选接口 [SWS_CanTrcv_00085]。针对 PN 指示,列出了其他 CanIf 回调 [SWS_CanTrcv_00086]。正如导入列表所示,向下 CanTrcv 使用 Dio 和 Spi 进行硬件控制,并使用 Icu、DEM 和 EcuM 类型 [SWS_CanTrcv_00084]。驱动程序使用 Tm_BusyWait1us16bit [SWS_CanTrcv_00230] 实现状态切换时的等待时间。CanTrcv_MainFunction 和 CanTrcv_MainFunctionDiagnostics 由 BSW 调度器调用(SWS CanTrcv 第47页)。

kontext EcuM EcuM / Integrationscode CanTrcv CanTrcv EcuM->CanTrcv CanTrcv_Init SchM BSW-Scheduler (SchM) SchM->CanTrcv CanTrcv_MainFunction CanTrcv_MainFunctionDiagnostics CanSM CanSM CanIf CanIf CanSM->CanIf CanIf_SetTrcvMode CanIf_ClearTrcvWufFlag CanIf_CheckTrcvWakeFlag CanIf->CanSM CanSM_TransceiverModeIndication CanIf->CanTrcv SetOpMode, GetOpMode, GetBusWuReason, SetWakeupMode, CheckWakeup, ClearTrcvWufFlag, CheckWakeFlag CanTrcv->EcuM EcuM_SetWakeupEvent CanTrcv->CanIf CanIf_TrcvModeIndication CanIf_ClearTrcvWufFlagIndication CanIf_CheckTrcvWakeFlagIndication Dio Dio CanTrcv->Dio Dio_WriteChannel Spi Spi CanTrcv->Spi SPI-Sequenzen Icu Icu CanTrcv->Icu Icu_EnableNotification Icu_DisableNotification Tm Tm CanTrcv->Tm Tm_BusyWait1us16bit Det Det CanTrcv->Det 开发与 运行时错误 Dem Dem CanTrcv->Dem Dem_SetEventStatus (CANTRCV_E_BUS_ERROR) HW CAN-Transceiver-Hardware Dio->HW Pins Spi->HW Register

上下文图:CanTrcv 由 CanIf、EcuM 和调度器调用,并通过 Dio、Spi 和 Icu 访问硬件。它向 DET 和 DEM 报告错误。来源:[SWS_CanTrcv_00084]、[SWS_CanTrcv_00085]、[SWS_CanTrcv_00146]、SWS EcuM 第35页

初始化、生命周期与去初始化

在调用 CanTrcv_Init [SWS_CanTrcv_00001] 之前,环境必须已初始化所有使用的驱动程序,特别是 Spi 和 Dio [SWS_CanTrcv_00099]。该文档出处补充了两项时间要求:初始化应在上电后尽早进行,且底层服务应简短且同步(SWS CanTrcv 第26页)。

CanTrcv_Init 根据各个连接的收发器的初始化时序以及来自 ConfigPtr 的配置初始化所有收发器 [SWS_CanTrcv_00180]。CanTrcv_ConfigType 的内容是特定于硬件的 [SWS_CanTrcv_00209]。此后每个收发器处于 CANTRCV_TRCVMODE_SLEEP 或 CANTRCV_TRCVMODE_STANDBY 状态;这是针对每个收发器可配置的 [SWS_CanTrcv_00148]。

初始化同时检查唤醒:

  • 若硬件支持,CanTrcv_Init 会检查收发器活动是否触发了唤醒。它通过 EcuM_SetWakeupEvent 报告结果,并附带来自 CanTrcvWakeupSourceRef 的源 [SWS_CanTrcv_00167]。
  • 对于支持 PN 的收发器,当 POR 或 SYSERR 标志置位时,还会重新执行配置时序。否则,保存在收发器中的配置保持有效 [SWS_CanTrcv_00182]。
  • 置位的 POR 标志还会通过 CanTrcvPorWakeupSourceRef 作为唤醒被报告 [SWS_CanTrcv_00183]。

POR 报告适用于具有集成供电的收发器。对于它们而言,被动唤醒在 ECU 看来如同上电复位(SWS EcuM 第70页)。

init start vor 环境已初始化 Spi 和 Dio start->vor init CanTrcv_Init(ConfigPtr) vor->init komm 与收发器的 通信是否正确? init->komm noctrl Laufzeitfehler CANTRCV_E_NO_TRCV_CONTROL komm->noctrl 不 baud 是否支持波特率? komm->baud 是 baudErr DET: CANTRCV_E_BAUDRATE_NOT_SUPPORTED baud->baudErr 不 seq 根据配置执行 初始化序列 baud->seq 是 porsys PN 硬件: 是否置位 POR 或 SYSERR? seq->porsys rekonf 重新执行 配置序列 porsys->rekonf 是 wu 是否因收发器活动 而唤醒? porsys->wu 否 / 无 PN 硬件 por POR-Flag gesetzt? rekonf->por porWu EcuM_SetWakeupEvent (CanTrcvPorWakeupSourceRef) por->porWu 是 por->wu 不 porWu->wu wuMeld EcuM_SetWakeupEvent (CanTrcvWakeupSourceRef) wu->wuMeld 是 ziel 各通道配置的状态: CANTRCV_TRCVMODE_STANDBY 或 CANTRCV_TRCVMODE_SLEEP wu->ziel 不 wuMeld->ziel ende ziel->ende

活动图:初始化检查硬件可达性、处理 POR/SYSERR、向 EcuM 报告唤醒,并使每个通道最终处于 STANDBY 或 SLEEP。检查的顺序为一种解释。来源:[SWS_CanTrcv_00180]、[SWS_CanTrcv_00182]、[SWS_CanTrcv_00183]、[SWS_CanTrcv_00167]、[SWS_CanTrcv_00148]

CanTrcv_DeInit [SWS_CanTrcv_91001] 将收发器硬件置于 NOT_ACTIVE 状态 [SWS_CanTrcv_91003]。在此状态下,可以通过新的配置序列对其进行配置(SWS CanTrcv 第49页)。预期的起始状态为 CANTRCV_TRCVMODE_NORMAL;否则开发错误检查将报告 CANTRCV_E_TRCV_NOT_NORMAL [SWS_CanTrcv_91005]。

工作模式 NORMAL、STANDBY 和 SLEEP

CanTrcv_TrcvModeType定义了三种模式[SWS_CanTrcv_00163]。CanTrcv_SetOpMode [SWS_CanTrcv_00002]将寻址收发器的内部状态切换到这些模式之一[SWS_CanTrcv_00102]。对于状态转换,规则如下:

zustaende cluster_power_on POWER_ON cluster_active ACTIVE start NOT_ACTIVE NOT_ACTIVE start->NOT_ACTIVE Power on stop NOT_ACTIVE->stop Power off STANDBY CANTRCV_TRCVMODE_STANDBY NOT_ACTIVE->STANDBY CanTrcv_Init() [Init-Zustand STANDBY] SLEEP CANTRCV_TRCVMODE_SLEEP NOT_ACTIVE->SLEEP CanTrcv_Init() [Init-Zustand SLEEP] NORMAL CANTRCV_TRCVMODE_NORMAL NORMAL->NOT_ACTIVE CanTrcv_DeInit() NORMAL->NORMAL SetOpMode(NORMAL) NORMAL->STANDBY SetOpMode(STANDBY) STANDBY->NORMAL SetOpMode(NORMAL) STANDBY->STANDBY SetOpMode(STANDBY) STANDBY->SLEEP SetOpMode(SLEEP) SLEEP->NORMAL SetOpMode(NORMAL) SLEEP->SLEEP SetOpMode(SLEEP)

状态图:初始化后收发器处于STANDBY或SLEEP状态。SLEEP只能通过STANDBY到达,NORMAL可从所有模式到达。DeInit导致进入NOT_ACTIVE。来源:SWS CanTrcv 第19页、[SWS_CanTrcv_00148]、[SWS_CanTrcv_00103]、[SWS_CanTrcv_00104]、[SWS_CanTrcv_91003]

CanTrcv_SetOpMode异步工作:E_OK仅表示请求已被接受(SWS CanTrcv 第33页)。只有当达到目标模式时,CanTrcv才会使用抽象的CanIf-TransceiverId调用CanIf_TrcvModeIndication [SWS_CanTrcv_00158]。CanSM会忽略针对SLEEP的此类指示,因为SLEEP仅由集成代码请求(SWS CanSM 第94页)。

对于支持PN的硬件,CanTrcv_SetOpMode还会额外检查标志POR和SYSERR [SWS_CanTrcv_00186]。在发生POR后,它会重新初始化收发器[SWS_CanTrcv_00187]。CanTrcv_GetOpMode [SWS_CanTrcv_00005]同步返回当前状态[SWS_CanTrcv_00106]。

收发器模式切换CanSMCanIfCanTrcvDio / SpiCanIf_SetTrcvMode(TransceiverId, TransceiverMode)CanTrcv_SetOpMode(Transceiver, OpMode)optPN-Hardware (CanTrcvHwPnSupport = TRUE)检查 POR/SYSERR 标志,POR 后重新初始化Dio_WriteChannel 或 SPI 序列E_OK (Anforderung angenommen)E_OK异步:目标模式将于稍后达成CanIf_TrcvModeIndication(TransceiverId, TransceiverMode)CanSM_TransceiverModeIndication(TransceiverId, TransceiverMode)CanSM 忽略针对 SLEEP 的通知

时序图:模式切换被同步接受,随后通过CanIf以指示方式向CanSM确认。来源:SWS CanTrcv 第52页、[SWS_CanTrcv_00158]、[SWS_CanTrcv_00186]

唤醒:检测、原因与通知控制

唤醒通过中断或轮询检测(SWS EcuM 第179页)。在此过程中,CanIf通过CanIf_CheckWakeup查询函数CanTrcv_CheckWakeup [SWS_CanTrcv_00143](SWS CanIf 第56页)。如果硬件支持,该函数会验证由收发器活动引起的唤醒,并通过EcuM_SetWakeupEvent [SWS_CanTrcv_00146]进行报告。

CanTrcv_MainFunction [SWS_CanTrcv_00013]在STANDBY和SLEEP状态下扫描所有总线的唤醒情况并设置唤醒标志[SWS_CanTrcv_00112]。推测它主要与轮询配置相关;配置图为此提供了值CanTrcvWakeUpByPolling(ECUC-Parameter 第185页)。 问题 Q-6144fdedb98cea44 (未决)

CanTrcv_GetBusWuReason [SWS_CanTrcv_00007]提供收发器检测到的唤醒原因[SWS_CanTrcv_00107]。可能的值例如CANTRCV_WU_BY_BUS、CANTRCV_WU_INTERNALLY或CANTRCV_WU_RESET [SWS_CanTrcv_00165]。对原因的区分细致程度在很大程度上取决于硬件(SWS CanTrcv 第35页)。

对于唤醒中断,驱动程序使用ICU通道。仅当配置了CanTrcvIcuChannelRef时,它才会调用Icu_EnableNotification和Icu_DisableNotification [SWS_CanTrcv_00171]。在切换到STANDBY时,它会激活这些通道[SWS_CanTrcv_00172]。来自R24-11的文档出处还提到了在切换到NORMAL时将其停用(SWS CanTrcv 第23页)。

通过收发器进行唤醒检测Transceiver-HardwareEcuM / IntegrationscodeCanIfCanTrcvaltWake-up per InterruptWake-up-Interrupt (ICU-Kanal)CanIf_CheckWakeup(WakeupSource)CanTrcv_CheckWakeup(Transceiver)Wake-up durch Transceiver-验证活动EcuM_SetWakeupEvent(CanTrcvWakeupSourceRef)Wake-up per PollingCanTrcv_MainFunction: Busse in检查 STANDBY/SLEEP,置位标志CanIf_CheckWakeup(WakeupSource)CanTrcv_CheckWakeup(Transceiver)EcuM_SetWakeupEvent(CanTrcvWakeupSourceRef)Use Case: Ursache abfragenCanIf_GetTrcvWakeupReason(TransceiverId, TrcvWuReasonPtr)CanTrcv_GetBusWuReason(Transceiver, reason)E_OK, reason = z. B. CANTRCV_WU_BY_BUSE_OK

时序图:通过中断或轮询经由CanIf在收发器处检查唤醒,上报给EcuM,并在随后查询其原因。来源:SWS EcuM 第179页、SWS EcuM 第138页、SWS EcuM 第140页、[SWS_CanTrcv_00146]、[SWS_CanTrcv_00112]

CanTrcv_SetWakeupMode [SWS_CanTrcv_00009]通过CanTrcv_TrcvWakeupModeType [SWS_CanTrcv_00164]控制唤醒通知:

在禁用阶段不得丢失任何唤醒[SWS_CanTrcv_00095]。清除功能用于在通知被禁用的情况下,在上层的控制下丢弃已存储的唤醒[SWS_CanTrcv_00150]。CanIf通过CanIf_SetTrcvWakeupMode将该请求转发给CanTrcv(SWS CanIf 第100页)。

选择性唤醒(Partial Networking)

在Partial Networking中,节点保持在低功耗模式,直到预定义的唤醒帧(WUF)将其唤醒。因此,支持PN的收发器不仅对唤醒图案(WUP)做出响应,也对这些帧做出响应(SWS CanTrcv 第27页)。硬件是否具备该能力由CanTrcvHwPnSupport指示[SWS_CanTrcv_00174]。仅当该参数为TRUE时,容器CanTrcvPartialNetwork和五个API才存在:CanTrcv_GetTrcvSystemData、CanTrcv_ClearTrcvWufFlag、CanTrcv_ReadTrcvTimeoutFlag、CanTrcv_ClearTrcvTimeoutFlag以及CanTrcv_ReadTrcvSilenceFlag [SWS_CanTrcv_00175]。

收发器对哪些帧做出响应由CanTrcvPnFrameCanId、CanTrcvPnFrameCanIdMask和CanTrcvPnFrameDataMask确定[SWS_CanTrcv_00177]。CanTrcv_SetPNActivationState [SWS_CanTrcv_00219]使用PN_ENABLED开启PN唤醒功能[SWS_CanTrcv_00221],并使用PN_DISABLED将其关闭[SWS_CanTrcv_00222]。

核心是关闭序列:

  1. CanSM通过CanTrcv_ClearTrcvWufFlag清除WUF标志,从而确保在进入低功耗模式时不会丢失帧唤醒。随后收发器进入STANDBY [SWS_CanTrcv_00194]。
  2. CanTrcv通过CanIf_ClearTrcvWufFlagIndication确认清除操作[SWS_CanTrcv_00195]。
  3. 最后,CanSM请求异步检查CanTrcv_CheckWakeFlag [SWS_CanTrcv_00223]。CanTrcv通过CanIf_CheckTrcvWakeFlagIndication报告结果[SWS_CanTrcv_00224]。

对于SPI连接,规范描述了一种异步变体(SWS CanTrcv 第55页)和一种同步变体(SWS CanTrcv 第57页)。

使用部分网络关闭(SPI 异步)CanSMCanIfCanTrcvSpiAusgang: Anforderung NoCom,Transceiver NORMAL, Controller STARTEDUse Case: 第 I 部分:清除 WUF 标志,STANDBYCanIf_ClearTrcvWufFlag(TransceiverId)CanTrcv_ClearTrcvWufFlag(Transceiver)Spi_AsyncTransmit(Sequence)CanIf_ClearTrcvWufFlagIndication(TransceiverId)CanSM_ClearTrcvWufFlagIndicationCanIf_SetControllerMode(ControllerId, CAN_CS_STOPPED)CanIf_SetTrcvMode(TransceiverId, CANIF_TRCV_MODE_STANDBY)CanTrcv_SetOpMode(Transceiver, STANDBY)Spi_AsyncTransmit(Sequence)CanIf_TrcvModeIndication(TransceiverId, STANDBY)CanSM_TransceiverModeIndication(TransceiverId, STANDBY)Use Case: 第 II 部分:控制器休眠,检查唤醒标志CanIf_SetControllerMode(ControllerId, CAN_CS_SLEEP)CanIf_CheckTrcvWakeFlag(TransceiverId)CanTrcv_CheckWakeFlag(Transceiver)Spi_AsyncTransmit (Wake-Flag lesen)CanIf_CheckTrcvWakeFlagIndication(TransceiverId)<User_CheckTrcvWakeFlagIndication>

时序图:在PN关闭过程中清除WUF标志,将收发器切换到STANDBY,并在控制器进入Sleep后异步检查唤醒标志。来源:SWS CanTrcv 第55页、SWS CanTrcv 第56页、SWS CanSM 第36页、[SWS_CanTrcv_00194]、[SWS_CanTrcv_00224]

用于诊断时,CanTrcv_GetTrcvSystemData [SWS_CanTrcv_00213]将收发器的配置和状态读取为uint32 [SWS_CanTrcv_00189]。超时和静默标志通过CanTrcv_ReadTrcvTimeoutFlag [SWS_CanTrcv_00215]、CanTrcv_ClearTrcvTimeoutFlag [SWS_CanTrcv_00216]和CanTrcv_ReadTrcvSilenceFlag [SWS_CanTrcv_00217]读取或清除。它们的状态由CanTrcv_TrcvFlagStateType指示[SWS_CanTrcv_00211]。

配置与实例关联

对于每种收发器硬件类型,都有一个驱动程序实例为该类型的所有器件提供服务[SWS_CanTrcv_00016]。CanIf图表展示了控制器相同但收发器类型不同的情况,这需要两个收发器驱动程序(SWS CanIf 第34页)。每个通道由一个容器CanTrcvChannel描述(重数1..*)。它包含CanTrcvHwPnSupport、CanTrcvInitState、CanTrcvWakeupByBusUsed以及唤醒源引用等内容(SWS CanTrcv 第70页)。

各来源之间的差异涉及Init之后的状态。配置图将CanTrcvOpModeNormal列为CanTrcvInitState的默认值(ECUC-Parameter 第187页)。然而,R20-11的规范性要求是[SWS_CanTrcv_00148],它规定在Init之后仅允许SLEEP或STANDBY。驱动程序必须拒绝具有不受支持的分区分配的配置[SWS_CanTrcv_00231]。

发生错误时的行为

来自[SWS_CanTrcv_00050]的开发错误遵循统一的模式。当DET启用时,API会报告:

如果DET被禁用,API在这些情况下将返回E_NOT_OK。

如果与收发器的通信发生故障,驱动程序会通过Det_ReportRuntimeError [SWS_CanTrcv_00085]报告运行时错误CANTRCV_E_NO_TRCV_CONTROL [SWS_CanTrcv_91006]。这适用于例如Init [SWS_CanTrcv_00113]、SetOpMode [SWS_CanTrcv_00114]、GetOpMode [SWS_CanTrcv_00115]、SetWakeupMode [SWS_CanTrcv_00117]、GetTrcvSystemData [SWS_CanTrcv_00190]和ClearTrcvWufFlag [SWS_CanTrcv_00196]中。CanTrcv_GetBusWuReason是一个特例:根据[SWS_CanTrcv_00116],它在这种情况下返回E_OK。不支持的波特率由Init报告为CANTRCV_E_BAUDRATE_NOT_SUPPORTED [SWS_CanTrcv_00168]。

fehler start aufruf API-Aufruf, z. B. CanTrcv_SetOpMode start->aufruf init Modul initialisiert? aufruf->init eUninit DET: CANTRCV_E_UNINIT (DET aus: E_NOT_OK) init->eUninit 不 id 收发器 ID 是否有效? init->id 是 eId DET: CANTRCV_E_INVALID_TRANSCEIVER (DET aus: E_NOT_OK) id->eId 不 ptr Zeigerparameter != NULL? id->ptr 是 ePtr DET: CANTRCV_E_PARAM_POINTER (DET aus: E_NOT_OK) ptr->ePtr 不 modus 模式 / 转换是否允许? ptr->modus ja / kein Zeiger eModus DET:CANTRCV_E_PARAM_TRCV_OPMODE、 CANTRCV_E_TRCV_NOT_NORMAL 或 CANTRCV_E_TRCV_NOT_STANDBY (DET 关闭:E_NOT_OK) modus->eModus 不 hw 通过 Dio / Spi 进行硬件访问 modus->hw 是 komm Kommunikation korrekt? hw->komm eKomm Det_ReportRuntimeError: CANTRCV_E_NO_TRCV_CONTROL 返回 E_NOT_OK (GetBusWuReason: E_OK) komm->eKomm 不 ok E_OK komm->ok 是

活动图:API调用依次经历开发错误检查以及随后的带运行时错误处理的硬件访问。检查顺序为一种解释。来源:[SWS_CanTrcv_00050]、[SWS_CanTrcv_00122]、[SWS_CanTrcv_00123]、[SWS_CanTrcv_00132]、[SWS_CanTrcv_00114]、[SWS_CanTrcv_00116]

总线错误被作为生产错误处理。前提是硬件能够将总线错误与其他错误区分开来[SWS_CanTrcv_00178],且CanTrcvBusErrFlag = TRUE [SWS_CanTrcv_00205]。此时,CanTrcv_MainFunctionDiagnostics [SWS_CanTrcv_00218]会周期性读取BUSERR标志。它将CANTRCV_E_BUS_ERROR作为DEM_EVENT_STATUS_FAILED [SWS_CanTrcv_00206]或DEM_EVENT_STATUS_PASSED [SWS_CanTrcv_00227]上报给DEM [SWS_CanTrcv_00228] [SWS_CanTrcv_00229]。DEM事件通过CanTrcvDemEventParameterRefs引用(SWS CanTrcv 第78页)。

进一步详细证据

基于有效载荷中包含的CanTrcv(Classic, R20-11)需求和文档出处的AI生成指南。来自其他版本的文档出处作为补充使用;如有差异,已明确指出。标为解释的表述不具规范性。

CAN Transceiver Driver (CanTrcv)

Controls physical bus transceiver states and wakeup detection on CAN lines.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

函数 CanTrcv_Init [SWS_CanTrcv_00001] 📄 PDF

void CanTrcv_Init (const CanTrcv_ConfigType* ConfigPtr);

Initializes the Can Trcv module.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 69eb894dc0d7 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

用法与语义

函数 CanTrcv_Init 用于对 CanTrcv 模块以及所有连接的 CAN 收发器进行基本初始化 [SWS_CanTrcv_00001] [SWS_CanTrcv_00180]。执行是同步进行的,并被指定为不可重入 [SWS_CanTrcv_00001]。作为传入参数,它通过 ConfigPtr 期望一个指向驱动配置的指针,并且没有返回值 [SWS_CanTrcv_00001]。

交互与硬件检查

在运行过程中,该函数根据配置执行所有相连收发器的硬件相关初始化序列,并在此过程中支持 AUTOSAR 堆栈的初始化序列 [SWS_CanTrcv_00180]。通过此调用,每个收发器根据其各自的配置分别切换到模式 CANTRCV_TRCVMODE_SLEEP 或 CANTRCV_TRCVMODE_STANDBY [SWS_CanTrcv_00148]。如果硬件支持,CanTrcv_Init 还会检查之前是否存在因收发器活动引起的唤醒事件,并通过 EcuM_SetWakeupEvent 使用通过 CanTrcvWakeupSourceRef 定义的源将其报告给 EcuM [SWS_CanTrcv_00167]。

错误处理

如果与硬件的通信出现错误或缺失(例如通过端口引脚或 SPI),该函数向 Default Error Tracer 报告运行时错误 CANTRCV_E_NO_TRCV_CONTROL [SWS_CanTrcv_00113]。如果开发错误检测处于激活状态,且相应收发器不支持已配置的波特率,则还会报告 CANTRCV_E_BAUDRATE_NOT_SUPPORTED [SWS_CanTrcv_00168]。

此文本由 AI 基于 AUTOSAR R20-11 规范生成。

实现者指南即将推出(复杂度 I1)

函数 CanTrcv_SetOpMode [SWS_CanTrcv_00002] 📄 PDF

Std_ReturnType CanTrcv_SetOpMode (uint8 Transceiver, CanTrcv_TrcvModeType OpMode);

Sets the mode of the Transceiver to the value Op Mode.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 62862d69beb4 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

函数CanTrcv_SetOpMode用于异步切换 CAN 收发器的操作模式[SWS_CanTrcv_00002]。它接收收发器的设备编号(Transceiver)以及所需的目标模式(OpMode),目标模式可以取值CANTRCV_TRCVMODE_NORMAL、CANTRCV_TRCVMODE_STANDBY或CANTRCV_TRCVMODE_SLEEP[SWS_CanTrcv_00102]。该函数针对不同的收发器是可重入的[SWS_CanTrcv_00002]。返回值E_OK确认切换请求已被接受;E_NOT_OK表示请求被拒绝、参数错误或硬件不支持该模式[SWS_CanTrcv_00002],[SWS_CanTrcv_00105]。

调用时必须遵循预定的状态转换:

  • 如果收发器处于模式CANTRCV_TRCVMODE_NORMAL,则仅允许将CANTRCV_TRCVMODE_STANDBY或CANTRCV_TRCVMODE_NORMAL作为目标模式传递[SWS_CanTrcv_00103]。
  • 如果收发器处于CANTRCV_TRCVMODE_STANDBY,则仅允许使用CANTRCV_TRCVMODE_SLEEP或CANTRCV_TRCVMODE_STANDBY调用该函数[SWS_CanTrcv_00104]。

在启用开发错误检测(DET)时,函数将初始化前的调用报告为CANTRCV_E_UNINIT[SWS_CanTrcv_00122],无效的收发器编号报告为CANTRCV_E_INVALID_TRANSCEIVER[SWS_CanTrcv_00123],不允许的操作模式报告为CANTRCV_E_PARAM_TRCV_OPMODE[SWS_CanTrcv_00087]。如果在收发器未处于 Normal 或 Standby 状态时请求 Standby,则触发CANTRCV_E_TRCV_NOT_NORMAL[SWS_CanTrcv_00120];在 Standby 或 Sleep 之外请求 Sleep 时,将报告CANTRCV_E_TRCV_NOT_STANDBY[SWS_CanTrcv_00121]。如果 DET 被禁用,则在这些情况下返回E_NOT_OK。在收发器通信缺失或发生故障时,向 DET 报告运行时错误CANTRCV_E_NO_TRCV_CONTROL并返回E_NOT_OK[SWS_CanTrcv_00114]。

如果硬件支持选择性唤醒(Selective Wakeup),API 会检查状态标志POR和SYSERR[SWS_CanTrcv_00186]。一旦收发器达到请求的模式,模块就会通过回调CanIf_TrcvModeIndication通知上层[SWS_CanTrcv_00158]。

此文本由 AI 基于规范要求生成。

实现者指南即将推出(复杂度 I2)

函数 CanTrcv_GetBusWuReason [SWS_CanTrcv_00007] 📄 PDF

Std_ReturnType CanTrcv_GetBusWuReason (uint8 Transceiver, CanTrcv_TrcvWakeupReasonType* reason);

Gets the wakeup reason for the Transceiver and returns it in parameter Reason.

函数 CanTrcv_SetWakeupMode [SWS_CanTrcv_00009] 📄 PDF

Std_ReturnType CanTrcv_SetWakeupMode (uint8 Transceiver, CanTrcv_TrcvWakeupModeType TrcvWakeupMode);

En ables, disables or clears wake - up events of the Transceiver according to Trcv Wakeup Mode.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 7ddf69d5a7ae 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

用法与语义

同步函数CanTrcv_SetWakeupMode用于激活、停用或清除特定收发器的唤醒事件[SWS_CanTrcv_00009]。目标收发器通过参数Transceiver传递给它,所需模式通过TrcvWakeupMode传递。状态更改成功时,函数返回E_OK。如果无法更改状态或参数无效,则返回E_NOT_OK,并且先前的状态保持不变[SWS_CanTrcv_00009]。

操作模式与交互

如果使用值CANTRCV_WUMODE_CLEAR调用TrcvWakeupMode,函数将清除寻址收发器的已存储唤醒事件[SWS_CanTrcv_00094]。在使用CANTRCV_WUMODE_ENABLE调用时,如果相关总线已有已存储的唤醒事件挂起,模块会将唤醒事件更新为“present”状态[SWS_CanTrcv_00111]。Interpretation:对于停用唤醒事件,可能同样存在相应的模式值,即使该值在当前的规范摘录中未予单独详述。 问题 Q-e0f15d1d0855db81 (未决)

错误处理与并发

该函数针对不同的收发器实例是可重入的[SWS_CanTrcv_00009]。在调用之前,收发器驱动程序必须已完全初始化:在未初始化状态下调用时,如果开发错误检测(DET)处于激活状态,则触发错误CANTRCV_E_UNINIT,否则返回E_NOT_OK[SWS_CanTrcv_00127]。Transceiver处的无效索引会导致CANTRCV_E_INVALID_TRANSCEIVER(或E_NOT_OK)[SWS_CanTrcv_00131],并且TrcvWakeupMode中不允许的模式值会报告CANTRCV_E_PARAM_TRCV_WAKEUP_MODE或返回E_NOT_OK[SWS_CanTrcv_00089]。如果与收发器不存在通信或通信出现故障,将向 Default Error Tracer 报告运行时错误CANTRCV_E_NO_TRCV_CONTROL并返回E_NOT_OK[SWS_CanTrcv_00117]。

此使用说明基于 AUTOSAR Classic R20-11 规范自动生成。

实现者指南即将推出(复杂度 I2)

函数 CanTrcv_GetTrcvSystemData [SWS_CanTrcv_00213] 📄 PDF

Std_ReturnType CanTrcv_GetTrcvSystemData (uint8 Transceiver, uint32* TrcvSysData);

Reads the transceiver configuration/ status data and returns it through parameter Trcv Sys Data. This API shall exist only if Can Trcv Hw Pn Support = TRUE.

函数 CanTrcv_ClearTrcvWufFlag [SWS_CanTrcv_00214] 📄 PDF

Std_ReturnType CanTrcv_ClearTrcvWufFlag (uint8 Transceiver);

Clears the WUF flag in the transceiver hardware. This API shall exist only if Can Trcv Hw Pn Support = TRUE.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 10eca0b578cb 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 CanTrcv_ClearTrcvWufFlag 清除所寻址 CAN 收发器硬件中的唤醒帧标志(WUF),并且仅在配置了 Selective-Wakeup 支持时可用(CanTrcvHwPnSupport = TRUE)[SWS_CanTrcv_00214]、[SWS_CanTrcv_00175]。成功清除时返回 E_OK,否则返回 E_NOT_OK [SWS_CanTrcv_00214]、[SWS_CanTrcv_00194]。

交互与流程

该 API 在进入低功耗模式时由模块 CanSM 使用,以确保在状态转换期间不会丢失帧唤醒事件 [SWS_CanTrcv_00194]。重置 WUF 标志后,必须将 CAN 收发器置于待机模式(CANTRCV_STANDBY)[SWS_CanTrcv_00194]。

并发与调用上下文

对 CanTrcv_ClearTrcvWufFlag 的调用对于不同的收发器实例(Transceiver)是可重入的 [SWS_CanTrcv_00214]。

错误处理

  • 开发错误(DET):如果错误检测处于活动状态,该函数在驱动程序未初始化时报告 CANTRCV_E_UNINIT [SWS_CanTrcv_00197],在参数无效时(Transceiver)报告错误 CANTRCV_E_INVALID_TRANSCEIVER [SWS_CanTrcv_00198]。如果 DET 被禁用,在这些情况下将直接返回 E_NOT_OK [SWS_CanTrcv_00197]、[SWS_CanTrcv_00198]。
  • 运行时错误:如果与收发器的通信失败或出错,该函数向 Default Error Tracer 报告运行时错误 CANTRCV_E_NO_TRCV_CONTROL 并返回 E_NOT_OK [SWS_CanTrcv_00196]。

本使用说明基于 AUTOSAR 规范 R20-11 自动生成。

实现者指南即将推出(复杂度 I1)

函数 CanTrcv_ReadTrcvTimeoutFlag [SWS_CanTrcv_00215] 📄 PDF

Std_ReturnType CanTrcv_ReadTrcvTimeoutFlag (uint8 Transceiver, CanTrcv_TrcvFlagStateType* FlagState);

Reads the status of the tim eout flag from the transceiver hardware. This API shall exist only if Can Trcv Hw Pn Support = TRUE.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: a58e25cc2696 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数CanTrcv_ReadTrcvTimeoutFlag直接从 CAN 收发器的硬件中读取超时标志的状态[SWS_CanTrcv_00215]。输入参数Transceiver用于标识要访问的收发器,而通过类型为CanTrcv_TrcvFlagStateType*的输出参数FlagState返回该标志的状态[SWS_CanTrcv_00215]。返回值以E_OK指示读取成功,以E_NOT_OK指示无法确定超时标志的状态[SWS_CanTrcv_00215]。

对于在收发器驱动程序中的使用和集成,适用以下边界条件:

  • 配置:仅当局部网络(Partial Networking)的硬件支持被激活(CanTrcvHwPnSupport = TRUE)时,该 API 才可用[SWS_CanTrcv_00215]。关联的配置容器CanTrcvPartialNetwork也仅在此前提下存在[SWS_CanTrcv_00175]。
  • 并发性:该函数被指定为不可重入(Non Reentrant)[SWS_CanTrcv_00215]。

错误处理根据开发错误检测(Development Error Detection,DET)的状态进行区分:

  • 如果传递了无效的收发器标识符,在 DET 处于活动状态时模块生成错误CANTRCV_E_INVALID_TRANSCEIVER;在 DET 停用时,则返回E_NOT_OK[SWS_CanTrcv_00199]。
  • 如果为FlagState传递了空指针(FlagState = NULL),在 DET 处于活动状态时模块报告错误CANTRCV_E_PARAM_POINTER;如果 DET 已关闭,调用将返回E_NOT_OK[SWS_CanTrcv_00200]。

本使用说明基于 AUTOSAR CP R20-11 规范自动生成。

实现者指南即将推出(复杂度 I2)

函数 CanTrcv_ClearTrcvTimeoutFlag [SWS_CanTrcv_00216] 📄 PDF

Std_ReturnType CanTrcv_ClearTrcvTimeoutFlag (uint8 Transceiver);

Clears the status of the timeout flag in the transceiver hardware. This API shall exist only if Can Trcv Hw Pn Support = TRUE.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 58509e1d0c7c 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数CanTrcv_ClearTrcvTimeoutFlag用于重置收发器硬件中的超时标志[SWS_CanTrcv_00216]。它仅在通过配置参数CanTrcvHwPnSupport = TRUE激活了 Partial Networking 的硬件支持时才可用[SWS_CanTrcv_00175],[SWS_CanTrcv_00216]。

使用与接口

调用通过CanTrcv.h中的接口同步进行,并指定目标收发器:

  • 参数:Transceiver作为输入值(uint8)确定要访问的收发器通道[SWS_CanTrcv_00216]。
  • 返回值:Std_ReturnType以E_OK表示硬件标志清除成功,或以E_NOT_OK表示操作失败[SWS_CanTrcv_00216]。

错误处理

如果向该函数传递了针对参数Transceiver的无效标识符,则会采用差异化的错误处理:

  • 在开发错误检测(Development Error Detection)处于激活状态时,向 DET 报告错误CANTRCV_E_INVALID_TRANSCEIVER[SWS_CanTrcv_00201]。
  • 如果开发错误检测被停用,调用将中止并向调用者返回E_NOT_OK[SWS_CanTrcv_00201]。

并发性与系统集成

该函数被归类为不可重入(Non Reentrant)[SWS_CanTrcv_00216]。因此,调用层必须避免或同步针对同一硬件单元的并行调用。此外,该函数是选择性唤醒功能(Partial Networking)功能范围的一部分;容器CanTrcvPartialNetwork中的关联配置结构同样仅在设置了CanTrcvHwPnSupport时才存在[SWS_CanTrcv_00175]。

本使用说明基于 AUTOSAR CP R20-11 规范。

实现者指南即将推出(复杂度 I1)

函数 CanTrcv_ReadTrcvSilenceFlag [SWS_CanTrcv_00217] 📄 PDF

Std_ReturnType CanTrcv_ReadTrcvSilenceFlag (uint8 Transceiver, CanTrcv_TrcvFlagStateType* FlagState);

Reads the status of the silence flag from the transceiver hardware. This API shall exi st only if Can Trcv Hw Pn Support = TRUE.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: be15c667bc30 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步且不可重入的函数CanTrcv_ReadTrcvSilenceFlag(服务 ID 0x0d)用于直接从 CAN 收发器硬件中读取 Silence 标志状态[SWS_CanTrcv_00217]。它通过头文件CanTrcv.h提供,并且由于缺乏重入性,不得并发执行[SWS_CanTrcv_00217]。

参数与返回值

  • Transceiver:输入参数(uint8),用于通过其标识符寻址相应的收发器实例[SWS_CanTrcv_00217]。
  • FlagState:输出参数,作为指向CanTrcv_TrcvFlagStateType的指针,通过该指针返回 Silence 标志的读取状态[SWS_CanTrcv_00217]。
  • 返回值(Std_ReturnType):如果能够成功读取 Silence 标志的硬件状态,则返回E_OK,否则返回E_NOT_OK[SWS_CanTrcv_00217]。

错误处理

如果为该函数的输出参数传递了空指针(FlagState == NULL),则错误处理取决于开发控制:在启用 DET 时,CAN 收发器驱动程序报告开发错误CANTRCV_E_PARAM_POINTER;如果 DET 被停用,调用将立即以E_NOT_OK中止[SWS_CanTrcv_00203]。

配置与交互

该函数位于选择性唤醒(Selective Wakeup)的上下文中。仅当通过CanTrcvHwPnSupport = TRUE配置了 Partial Networking 的硬件支持时,驱动程序中才提供关联的配置容器CanTrcvPartialNetwork以及接口CanTrcv_ReadTrcvSilenceFlag[SWS_CanTrcv_00175],[SWS_CanTrcv_00217]。

本使用说明基于 AUTOSAR 规范 R20-11 自动生成。

实现者指南即将推出(复杂度 I1)

函数 CanTrcv_CheckWakeup [SWS_CanTrcv_00143] 📄 PDF

Std_ReturnType CanTrcv_CheckWakeup (uint8 Transceiver);

Service is called by underlying CANIF in case a wake up interrupt is detected.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 3bcebb868332 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

一旦检测到唤醒中断,底层接口 CanIf 就会调用同步且可重入的函数 CanTrcv_CheckWakeup [SWS_CanTrcv_00143]。通过参数 Transceiver 寻址待检查的 CAN 收发器 [SWS_CanTrcv_00143]。返回值 E_OK 表示接受该调用,而 E_NOT_OK 则指示未接受 [SWS_CanTrcv_00143]。

如果硬件支持,该函数会检查是否确实由于收发器上的活动而存在唤醒事件 [SWS_CanTrcv_00146]。如果是这种情况,则通过带有在 CanTrcvWakeupSourceRef 中引用的唤醒源 [SWS_CanTrcv_00146] 的 API EcuM_SetWakeupEvent 向 EcuM 进行唤醒报告。

对于错误处理,在启用开发错误检测(DET)时适用以下规定:

  • 如果在 CanTrcv 模块初始化之前调用该函数,则会报告开发错误 CANTRCV_E_UNINIT;若 DET 已禁用,则该调用改为返回 E_NOT_OK [SWS_CanTrcv_00144]。
  • 如果传入无效的收发器编号,该函数会报告 CANTRCV_E_INVALID_TRANSCEIVER;若 DET 已禁用,则返回 E_NOT_OK [SWS_CanTrcv_00145]。

本使用说明完全基于 AUTOSAR Classic R20-11 的规范要求。

实现者指南即将推出(复杂度 I1)

函数 CanTrcv_SetPNActivationState [SWS_CanTrcv_00219] 📄 PDF

Std_ReturnType CanTrcv_SetPNActivationState (CanTrcv_PNActivationType ActivationState);

The API configures the wake - up of the transceiver for Standby and Sleep Mode: Either the CAN transceiver is woken up by a remote wake - up pattern (standard CAN wake - up) or by the configured remote wake - up frame.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: ed5e02955479 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 CanTrcv_SetPNActivationState 配置 CAN 收发器在待机模式和睡眠模式下的唤醒行为([SWS_CanTrcv_00219])。它确定收发器是通过标准唤醒图样唤醒,还是在局部网络(Partial Networking)框架下通过已配置的远程唤醒帧进行针对性唤醒([SWS_CanTrcv_00219])。

用法与参数

该函数通过 CanTrcv.h 提供,服务 ID 为 0x0f,并同步执行([SWS_CanTrcv_00219])。其类型为 CanTrcv_PNActivationType 的传入参数 ActivationState 用于控制工作模式:

如果收发器已成功切换到所请求的 PN 配置,则该函数返回 E_OK 作为返回值。若切换失败,则返回 E_NOT_OK;在此情况下,先前的配置保持不变([SWS_CanTrcv_00219])。

限制与错误处理

该函数不可重入(Non Reentrant)([SWS_CanTrcv_00219])。作为强制前提条件,模块 CanTrcv 必须在调用前完成完全初始化:如果在初始化之前调用,当开发错误检测处于激活状态时,该函数会向 DET 报告错误 CANTRCV_E_UNINIT;如果 DET 已停用,该调用将直接被拒绝并返回返回值 E_NOT_OK([SWS_CanTrcv_00220])。

本使用说明基于规范自动生成。

实现者指南即将推出(复杂度 I1)

函数 CanTrcv_CheckWakeFlag [SWS_CanTrcv_00223] 📄 PDF

Std_ReturnType CanTrcv_CheckWakeFlag (uint8 Transceiver);

Requests to check the status of the wakeup flag from the transceiver hardware.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 3347f44cb215 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

函数 CanTrcv_CheckWakeFlag 直接从收发器硬件请求检查唤醒标志状态([SWS_CanTrcv_00223])。该调用为异步进行,并通过输入参数 Transceiver 关联到待寻址 CAN 收发器的对应标识符([SWS_CanTrcv_00223])。

该函数返回状态 Std_ReturnType 作为返回值([SWS_CanTrcv_00223]):

在并发性方面规定该函数不可重入(Non Reentrant)([SWS_CanTrcv_00223])。由于该服务被指定为异步,返回值仅反映检查任务的接受情况;实际读取硬件应在后续进行([SWS_CanTrcv_00223])。 问题 Q-f09b7ff49c24cea8 (未决)针对该服务未列出具体的错误码以及 DET 或 DEM 报告。

本使用说明由 AI 基于 AUTOSAR 规范生成。

实现者指南即将推出(复杂度 I1)

函数 CanTrcv_DeInit [SWS_CanTrcv_91001] 📄 PDF

void CanTrcv_DeInit (void);

De - initializes the Can Trcv module.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: f6b7395c6c6d 来源
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

同步函数 CanTrcv_DeInit 用于 CAN 收发器驱动程序的去初始化 [SWS_CanTrcv_91001]。它不接收参数,不返回返回值,且被指定为不可重入(Non Reentrant)[SWS_CanTrcv_91001]。该接口通过带有服务 ID 0x10 的头文件 CanTrcv.h 提供 [SWS_CanTrcv_91001]。

执行时,该函数将 CAN 收发器硬件置于状态 NOT_ACTIVE [SWS_CanTrcv_91003]。由于 CanTrcv_DeInit 是不可重入的,因此调用之间不得发生中断或并发 [SWS_CanTrcv_91001]。

关于错误处理和时序条件适用:

  • 如果针对该模块启用了开发错误检测(Development Error Detection),该函数会检查收发器的运行模式。若调用时收发器未处于模式 CANTRCV_TRCVMODE_NORMAL,CanTrcv_DeInit 将报告开发错误 CANTRCV_E_TRCV_NOT_NORMAL [SWS_CanTrcv_91005]。
  • 由此对调用方产生的功能性前置条件是,在去初始化之前使收发器在状态 CANTRCV_TRCVMODE_NORMAL 下运行,以防止在开发模式下生成错误报告 [SWS_CanTrcv_91005]。

此使用说明基于 AUTOSAR CP R20-11 规范自动生成。

函数 CanTrcv_MainFunction [SWS_CanTrcv_00013] 📄 PDF

void CanTrcv_MainFunction (void);

Service to scan all busses for wake up events and perform these event.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 8f993661c2b3 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

函数 CanTrcv_MainFunction 作为 CAN 收发器驱动程序的核心驱动服务,用于监控所有连接的总线通道上是否发生唤醒事件并执行这些事件 [SWS_CanTrcv_00013]。它具有 C 语言签名 void CanTrcv_MainFunction(void),定义在十六进制服务 ID 0x06 下,以同步方式工作,不带传入参数或返回值 [SWS_CanTrcv_00013]。

为了进行周期性监控,该函数专门扫描处于静止状态 STANDBY 或 SLEEP 的所有总线 [SWS_CanTrcv_00112]。如果驱动程序在受监控的总线之一上检测到唤醒事件,CanTrcv_MainFunction 会设置一个内部唤醒事件标志,以触发系统中这些事件的后续执行和处理 [SWS_CanTrcv_00112]。

关于调用上下文,该接口通过头文件 SchM_CanTrcv.h 提供 [SWS_CanTrcv_00013]。Interpretation:通过该 SchM 头文件提供表明,该函数可能由 BSW 调度程序在周期性任务的上下文中周期性调用,以定期采样处于非活动状态的总线通道。 问题 Q-588109b1111a0f43 (未决)在当前规范摘录中未提及具体错误代码、向 DET 或 DEM 发送的报告以及对可重入性的要求。

本段文本由人工智能基于 AUTOSAR 规范 R20-11 生成。

实现者指南即将推出(复杂度 I1)

函数 CanTrcv_MainFunctionDiagnostics [SWS_CanTrcv_00218] 📄 PDF

void CanTrcv_MainFunctionDiagnostics (void);

Reads the transceiver diagnostic status periodically and sets product/ development accordingly.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 958c670ba046 来源 未决问题(2)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

函数 CanTrcv_MainFunctionDiagnostics(服务 ID 0x08)周期性读取收发器的诊断状态,并设置相应的生产错误和开发错误 [SWS_CanTrcv_00218]。该函数无参数,没有返回值(void CanTrcv_MainFunctionDiagnostics(void)),并通过头文件 SchM_CanTrcv.h 提供 [SWS_CanTrcv_00218]。

调用上下文与并发性

由于通过 SchM_CanTrcv.h 提供,主函数可能由 BSW 调度程序(SchM)在任务上下文中周期性调用(Interpretation)。 问题 Q-ab1f6c55abcb8d4b (未决)由于规范未标明可重入性,应假定为不可重入执行。

错误处理以及与 DEM 的交互

诊断评估取决于配置和硬件支持:

  • 如果由 BSW 报告的 BUSERR 标志已置位,该函数将调用 API Dem_SetEventStatus,其中参数 EventId 作为 CANTRCV_E_BUS_ERROR,EventStatus 作为 DEM_EVENT_STATUS_FAILED [SWS_CanTrcv_00206]。
  • 如果 BUSERR 标志已复位,CanTrcv_MainFunctionDiagnostics 将调用 API Dem_SetEventStatus,其中使用相同的 EventId(CANTRCV_E_BUS_ERROR)和状态 DEM_EVENT_STATUS_PASSED [SWS_CanTrcv_00227]。

此文本由 AI 生成。它不能替代对相应 AUTOSAR 规范的研究。

实现者指南即将推出(复杂度 I1)

类型 CanTrcv_ConfigType [SWS_CanTrcv_00209] 📄 PDF

This is the type of the external data structure containing the overall initialization data for the CAN transceiver driver and settings affecting all transceivers. Furthermore it contains pointers to transceiver configuration structures. The con tents of the initialization data structure are CAN transceiver hardware specific.

类型 CanTrcv_PNActivationType [SWS_CanTrcv_00210] 📄 PDF

Datatype used for describing whether PN wakeup functionality in Can Trcv is enabled or disabled.

类型 CanTrcv_TrcvFlagStateType [SWS_CanTrcv_00211] 📄 PDF

Provides the state of a flag in the transceiver hardware.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 4ef0e0487226 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

枚举类型CanTrcv_TrcvFlagStateType表示收发器硬件中单个标志的状态[SWS_CanTrcv_00211]。该声明通过头文件CanTrcv.h提供给应用软件模块和驱动程序[SWS_CanTrcv_00211]。

取值范围采用二进制结构,根据[SWS_CanTrcv_00211]区分两种离散状态:

  • CANTRCV_FLAG_SET:指示收发器硬件中的相应标志已设置[SWS_CanTrcv_00211]。
  • CANTRCV_FLAG_CLEARED:指示收发器硬件中的标志已清除或未设置[SWS_CanTrcv_00211]。

关于实际使用,可以确定的是,该类型主要用于硬件级寄存器状态的标准化映射[SWS_CanTrcv_00211]。Interpretation:调用层(例如 CAN 接口驱动程序或诊断模块)通常可能通过查询函数经由指针参数或返回值读取该类型,以评估潜在的错误标志或唤醒标志。 问题 Q-1b75b4baf2f4c6e3 (未决)由于该类型本身不包含任何函数逻辑、重入性限制或 DET 消息,因此有效取值范围的检查由处理它的接口负责。

此文本由 AI 生成,仅供参考。具有约束力的是 AUTOSAR 规范。

实现者指南即将推出(复杂度 I1)

类型 CanTrcv_TrcvModeType [SWS_CanTrcv_00163] 📄 PDF

Operating modes of the CAN Transceiver Driver.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: b8ef2e8c5d35 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

枚举类型CanTrcv_TrcvModeType根据[SWS_CanTrcv_00163]定义了 CAN 收发器驱动程序(CanTrcv)的标准化操作模式。该声明通过头文件Can_GeneralTypes.h提供,用于 AUTOSAR 通信栈中的跨软件接口。

取值范围和含义

根据[SWS_CanTrcv_00163],有三个枚举值可用:

  • CANTRCV_TRCVMODE_NORMAL(值0x00):标识用于发送和接收 CAN 报文的常规收发器操作模式。
  • CANTRCV_TRCVMODE_STANDBY:表示收发器的待机模式,在此模式下通信停止且功耗降低。
  • CANTRCV_TRCVMODE_SLEEP:表示收发器的睡眠模式,以实现最大程度的节能。

使用与限制

该枚举用作 CAN 收发器硬件状态的通用数据类型表示[SWS_CanTrcv_00163]。Interpretation:该类型可能主要用于收发器驱动程序的控制和查询接口中的参数传递,上层(如 CAN 接口)通过这些接口触发模式切换或读取当前状态。 问题 Q-95fceb6988818621 (未决)由于本规范摘录不包含运行时错误(DET/DEM)、重入性说明或具体函数签名,因此调用上下文和并发规则应参见各自使用的驱动程序函数。

本使用说明仅基于 AUTOSAR R20-11 中关于[SWS_CanTrcv_00163]的规范数据。

实现者指南即将推出(复杂度 I1)

类型 CanTrcv_TrcvWakeupModeType [SWS_CanTrcv_00164] 📄 PDF

This type shall be used to control the CAN transceiver concerning wake up events and wake up notifications.

AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: ceecd083c1cd 来源 未决问题(1)
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

枚举类型CanTrcv_TrcvWakeupModeType用于针对唤醒事件和唤醒通知控制 CAN 收发器[SWS_CanTrcv_00164]。该类型定义通过头文件Can_GeneralTypes.h提供,从而在整个协议栈范围内可用[SWS_CanTrcv_00164]。

取值范围包括针对各自被寻址收发器的三种控制模式[SWS_CanTrcv_00164]:

  • CANTRCV_WUMODE_ENABLE(值0x00):激活所寻址收发器上唤醒事件的通知[SWS_CanTrcv_00164]。
  • CANTRCV_WUMODE_DISABLE(值0x01):停用所寻址收发器上唤醒事件的通知[SWS_CanTrcv_00164]。
  • CANTRCV_WUMODE_CLEAR(值0x02):清除所寻址收发器中存储的唤醒事件[SWS_CanTrcv_00164]。

Interpretation:在实践中,该类型可能主要用作收发器驱动程序控制函数中的传递参数,以动态开启或关闭唤醒通知,并重置已检测到的唤醒事件。 问题 Q-c53d60cdad0442ca (未决)由于作为纯枚举类型的规范未指定函数签名、执行语义、错误代码或并发规则,因此这些方面完全由调用和处理该类型的驱动程序接口决定[SWS_CanTrcv_00164]。

本文由 AI 创建;无法保证准确性。

实现者指南即将推出(复杂度 I1)

类型 CanTrcv_TrcvWakeupReasonType [SWS_CanTrcv_00165] 📄 PDF

This type denotes the wake up reason detected by the CAN transceiver in detail. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_CANTransceiverDriver

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

Record
AUTOSAR/AP/record/CP_MOD_CanTrcv
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_CanTrcv@rel:R20-11#87475f1f
Content hash
87475f1f
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANTransceiverDriver.pdf#nameddest=SWS_CanTrcv_00001

初始化与状态

De - initializes the Can Trcv module.

void CanTrcv_DeInit (void);

Gets the version of the module and returns it in Version Info.

void CanTrcv_GetVersionInfo (Std_VersionInfoType* versioninfo);

Initializes the Can Trcv module.

void CanTrcv_Init (const CanTrcv_ConfigType* ConfigPtr);

服务 · Get…

Gets the wakeup reason for the Transceiver and returns it in parameter Reason.

Std_ReturnType CanTrcv_GetBusWuReason (uint8 Transceiver, CanTrcv_TrcvWakeupReasonType* reason);

Gets the mode of the Transceiver and returns it in Op Mode.

Std_ReturnType CanTrcv_GetOpMode (uint8 Transceiver, CanTrcv_TrcvModeType* OpMode);

Reads the transceiver configuration/ status data and returns it through parameter Trcv Sys Data. This API shall exist only if Can Trcv Hw Pn Support = TRUE.

Std_ReturnType CanTrcv_GetTrcvSystemData (uint8 Transceiver, uint32* TrcvSysData);

服务 · Set…

Sets the mode of the Transceiver to the value Op Mode.

Std_ReturnType CanTrcv_SetOpMode (uint8 Transceiver, CanTrcv_TrcvModeType OpMode);

The API configures the wake - up of the transceiver for Standby and Sleep Mode: Either the CAN transceiver is woken up by a remote wake - up pattern (standard CAN wake - up) or by the configured remote wake - up frame.

Std_ReturnType CanTrcv_SetPNActivationState (CanTrcv_PNActivationType ActivationState);

En ables, disables or clears wake - up events of the Transceiver according to Trcv Wakeup Mode.

Std_ReturnType CanTrcv_SetWakeupMode (uint8 Transceiver, CanTrcv_TrcvWakeupModeType TrcvWakeupMode);

服务 · 其他

Requests to check the status of the wakeup flag from the transceiver hardware.

Std_ReturnType CanTrcv_CheckWakeFlag (uint8 Transceiver);

Service is called by underlying CANIF in case a wake up interrupt is detected.

Std_ReturnType CanTrcv_CheckWakeup (uint8 Transceiver);

Clears the status of the timeout flag in the transceiver hardware. This API shall exist only if Can Trcv Hw Pn Support = TRUE.

Std_ReturnType CanTrcv_ClearTrcvTimeoutFlag (uint8 Transceiver);

Clears the WUF flag in the transceiver hardware. This API shall exist only if Can Trcv Hw Pn Support = TRUE.

Std_ReturnType CanTrcv_ClearTrcvWufFlag (uint8 Transceiver);

Reads the status of the silence flag from the transceiver hardware. This API shall exi st only if Can Trcv Hw Pn Support = TRUE.

Std_ReturnType CanTrcv_ReadTrcvSilenceFlag (uint8 Transceiver, CanTrcv_TrcvFlagStateType* FlagState);

Reads the status of the tim eout flag from the transceiver hardware. This API shall exist only if Can Trcv Hw Pn Support = TRUE.

Std_ReturnType CanTrcv_ReadTrcvTimeoutFlag (uint8 Transceiver, CanTrcv_TrcvFlagStateType* FlagState);

周期性

Service to scan all busses for wake up events and perform these event.

void CanTrcv_MainFunction (void);

Reads the transceiver diagnostic status periodically and sets product/ development accordingly.

void CanTrcv_MainFunctionDiagnostics (void);

类型

This is the type of the external data structure containing the overall initialization data for the CAN transceiver driver and settings affecting all transceivers. Furthermore it contains pointers to transceiver configuration structures. The con tents of the initialization data structure are CAN transceiver hardware specific.

Datatype used for describing whether PN wakeup functionality in Can Trcv is enabled or disabled.

Provides the state of a flag in the transceiver hardware.

Operating modes of the CAN Transceiver Driver.

This type shall be used to control the CAN transceiver concerning wake up events and wake up notifications.

This type denotes the wake up reason detected by the CAN transceiver in detail. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_CANTransceiverDriver