Autosar - CanTrcv模块 -SWS (持续更新中)

        最近在工作中碰到了好几个由于CANTrcv引起的问题,想借此机会整理Autosar架构中的CanTrcv模块,主要想弄清楚CanTrcv模块在autosar架构的状态如何切换。本文特别感谢chatgpt

1 Introduction

        Can transceiver (CAN收发器) 是一种硬件设备,它将CAN总线上使用的信号电平调整为微控制器识别的逻辑(数字)信号电平。

        此外收发器可以检测电器故障如:布线问题(指CAN总线的物理连接问题)、地偏移(CAN总线的地线与其它地线或设备地线的电位差就是地偏移,会导致CAN总线的电平不平稳,出现类似噪声的干扰从而影响到CAN总线数据传输的质量与稳定性)、或长主导信号的传输。根据与微控制器的接口方式,它们会标记由单个端口引脚汇总的检测到的错误或者由SPI非常详细的标记出来。部分收发器支持通过CAN总线进行电源控制和唤醒。最新的发展包括系统基础芯片,除了CAN外还实现了电源控制和先进的看门狗,它们封装在一个外壳里,并通过单个接口(如SPI)进行控制。

主要有三种物理CAN总线方法,高速CAN(Max speed 1Mbits/s),低速CAN(Max speed 125bits/s),用于单线CAN的SAE J2411(AutoSar不支持)。

1.1 CAN收发器驱动程序的目标

        本文档的目标是指定适用于大多数当前和未来的CAN收发器设备的接口和行为。

        CAN收发器驱动程序抽象了CAN收发器的硬件。它为高层提供了一个与硬件独立的接口。它通过使用MCAL层的api来访问CAN收发器硬件,从ECU布局中进行抽象。

1.2 CAN收发器不支持的功能

        一些CAN总线收发器提供了额外的功能,例如,ECU自检或诊断方面的错误检测能力。

        ECU的自测试和错误检测并没有在AUTOSAR中定义,并且需要这样的功能将锁定大多数目前使用的收发器硬件芯片。因此,不支持“地面位移检测”、“选择性唤醒”、“坡度控制”等特征。

        AUTOSAR 不支持基于SAE J2411规定的单线CAN。

2 参考文档

  1. 基本软件模块列表 AUTOSAR_TR_BSWModuleList.pdf
  2. 分层软件架构 AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
  3. ECU配置规范 AUTOSAR_TPS_ECUConfiguration.pdf
  4. 基本软件通用要求 AUTOSAR_SRS_BSWGeneral.pdf
  5. CAN接口规范规范 AUTOSAR_SWS_CANInterface.pdf
  6. 基本软件模块说明模板 AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
  7. 基本软件模块通用规范 AUTOSAR_SWS_BSWGeneral.pdf
  8. ISO11898-道路车辆-控制器局域网(CAN)

3 限定与约束

3.1 限制

【规范】CAN总线收发器硬件应提供可映射到AUTOSAR CAN收发器驱动程序的操作模式模型的功能和接口。

3.2 适用范围

        此驱动程序可能适用于所有使用CAN进行通信的汽车域。

4 依赖

4.1 文件结构

【规范】AUTOSAR规定的命名约定应用于CanTrcv模块的所有文件。

【规范】CanTrcv模块包含以下文件:

5 功能描述

5.1 CAN收发器驱动程序操作模式

【规范】CanTrcv模块应为每个配置的收发器独立地实现如下所示的状态图。

        此图的主要思想是在通用视图中支持许多目前可用的CAN总线收发器。根据CAN收发器硬件的不同,该模型可能具有比给定CAN收发器硬件所需的状态多一到两个,但这明显地将ComM和EcurM与使用的硬件分离。

【规范】函数CanTrcv_Init会导致状态改变为CANTRCV_TRCVMODE_SLEEP或CANTRCV_TRCVMODE _STANDBY。这取决于配置,并且可以为每个收发器进行独立配置。

Normal 模式:CAN收发器处于正常工作模式,此时收发器处于活动状态且可以进行数据传输,在normal模式下,收发器会持续不断的检测总线上的数据,并负责接受和发送数据包。同时收发器也会进行错误检测和错误报告。并且Full bus communication的情况下CAN收发器驱动程序将不会检测到更进一步的唤醒信息。

Standby模式:CAN收发器处于正常工作模式的状态,此时收发器不活动状态且不进行数据传输,但仍进行常规的错误检测和状态监测。这种模式下收发器的功耗很低,可以节省电源,总线上出现唤醒信号时 ,收发器将从standby模式切换为active模式。

Sleepmode模式

其它模式:

        Go to sleep模式: “休眠”模式通常是从正常状态切换到睡眠状态时使用的临时模式。驱动程序将这种临时模式封装在CAN收发器驱动软件状态中的其中一个状态中。此外,CAN收发器驱动优先从正常状态切换到待机状态,然后通过额外的API调用从待机状态切换到睡眠状态

        PowerOn/ListenOnly模式:“上电”或“仅监听”模式是一种模式,其中CAN收发器硬件只能接收消息,而不能发送消息。此外,在接收消息时会抑制确认位的传输。这种模式不被支持,因为它超出了CAN标准,并不是所有CAN收发器硬件芯片都支持。

       如果一个CAN收发器驱动程序覆盖了多个CAN收发器(配置为信道),则所有收发器(信道)都处于NOT_ACTIVE状态或处于活动状态;在 ACTIVE 状态下,每个收发器可能处于不同的子状态。

typedef enum CanTrcv_TrcvModeType {
   CANTRCV_TRCVMODE_NORMAL = 0 
   /*!< @brief  */,
   CANTRCV_TRCVMODE_SLEEP
   /*!< @brief  */,
   CANTRCV_TRCVMODE_STANDBY
   /*!< @brief  */
} CanTrcv_TrcvModeType;

5.2 Can Trcv的唤醒类型

 以下三种不同场景,都被叫做唤醒

Scenario 1:

  •  MCU未上电
  • ECU的部分部件已经上电,包括CAN收发器硬件
  • 所考虑的CAN收发器处于休眠模式
  • CAN总线上发生了唤醒事件,被CAN收发器检测到
  • CAN收发器将使MCU上电

根据AUTOSAR标准,这被视为冷启动而不是唤醒。 

Scenario 2:

  • MCU处于低功耗模式;
  • ECU的部分部件已经上电,包括CAN收发器硬件;
  • 考虑的CAN收发器处于待机模式;
  • CAN总线上发生了唤醒事件,被CAN收发器检测到;
  • CAN收发器将会引起一个软件中断以唤醒单片机。

根据AUTOSAR标准,这被视为唤醒CAN通道和MCU。

Scenario 3:

  • 单片机处于全功率模式;
  • 至少ECU的部分部件已经上电,包括CAN收发器硬件;
  • 考虑的CAN收发器处于待机模式;
  • CAN总线上发生了唤醒事件,被CAN收发器检测到;
  • CAN收发器可能会引起一个软件中断,或者被周期性地轮询检测到唤醒事件。

根据AUTOSAR标准,这被视为唤醒CAN通道。

5.2 Enabling/Disabling 唤醒通知

启用和禁用CanTrcv驱动程序中的唤醒通知对于管理功耗避免唤醒事件丢失非常重要。CanTrcv驱动程序应使用Icu驱动程序提供的Icu_EnableNotification和Icu_DisableNotification API来启用和禁用唤醒事件通知。

ICU信道是指一个或多个外部输入线路(例如,由一个传感器提供的脉冲信号),可通过ICU(Input Capture Unit)硬件模块输入到微控制器中。 例如,在汽车上,ICU信道可能会读取车轮的速度、发动机的转速和节气门位置等参数。 CanTrcv驱动程序使用这些ICU信道来检测CAN总线上的唤醒事件。

只有为CanTrcvIcuChannelRef参数配置了引用时,驱动程序才应启用/禁用ICU通道。这将确保启用和禁用正确的通道。

为避免唤醒事件丢失,当收发器转换到待机模式(CanTrcv_Standby)时,CanTrcv驱动程序应启用ICU信道,当收发器转变到正常模式(CanTrcv_Normal)时,应禁用ICU信道。这将确保正确检测和处理唤醒事件。

5.3 唤醒模式

总之,CAN收发器驱动器提供两种唤醒模式:NOT_SUPPORTEDPOLLING。在NOT_SUPPORTED 模式下,驾驶员不会产生唤醒。在POLLING模式下,驾驶员产生的唤醒可能会导致CAN通道唤醒。唤醒模式的选择是通过配置参数完成的,这两种模式都需要CanTrcv_CheckWakeup功能的存在。在检测到唤醒后,具体状态转换的实现由各个实现自行决定。必须配置EcuM、CanIf和ICU模块,以确保在收发器需要特定状态转换时,调用CanTrcv_CheckWakeup。

5.4 驱动初始化的前提条件

【SWS_CanTrcv_00099】CanTrcv模块的环境应确保所有必要的BSW驱动程序(由CanTrcv模块使用)均已初始化在调用CanTrcv_Init之前可用(SRS_BSW_00172)

CAN总线收发器驱动程序使用Spi和Dio驱动程序来控制CAN总线收发器硬件。因此,在初始化CAN总线收发器驱动程序之前,这些驱动程序必须可用并准备好运行。
CAN收发器驱动器可能对初始化顺序和对收发器设备的访问有定时要求,这些要求必须通过这些来满足使用底层驱动程序。
时间要求可能是

  1.  CAN收发器驱动器的初始化可能需要在通电后很早发生,以便在ECU内的其他用户之前从收发器硬件中读取所有必要的信息。
  2. 所使用的底层服务的运行时间应短且同步,以满足驱动程序和所使用的硬件设备的时序要求。
  3. 由于某些硬件设备将端口引脚级别配置为在一段时间内有效(例如50µs),然后再次更改以达到特定状态(例如睡眠),因此驱动程序的运行时间可能会延长。

 5.5 配置选择唤醒的Can收发器

        在 CAN 系统中,部分节点处于低功耗模式,而其他节点正在通信。低功耗模式的节点将通过预定义的唤醒帧被唤醒, 这可以降低整个网络的功耗。

        支持选择性唤醒的收发器可以通过唤醒帧(WUF)被唤醒,另外,由在普通收发器提供的唤醒模式,即唤醒模式(WUP)。

【SWS_CanTrcv_00174】 如果支持传输器硬件有选择性唤醒,则应使用配置参数CanTrcvHwPnSupport 进行指示

【SWS_CanTrcv_00175】 仅当CanTrcvHwPnSupport = TRUE时,才应存在选择性唤醒功能的配置容器(CanTrcvPartialNetwork),并为以下 API 提供:

  • CanTrcv_GetTrcvSystemData,
  • CanTrcv_ClearTrcvWufFlag,
  • CanTrcv_ReadTrcvTimeoutFlag,
  • CanTrcv_ClearTrcvTimeoutFlag和
  • CanTrcv_ReadTrcvSilenceFlag

【SWS_CanTrcv_00177】如果支持选择性唤醒,则应配置 CAN 收发器以使用参数 CanTrcvPnFrameCanId、CanTrcvPnFrameCanIdMask 和 CanTrcvPnFrameDataMask 上的特定 CAN 帧或一组 CAN 帧进行唤醒。

【SWS_CanTrcv_00178】 如果传输器能够识别总线故障(并区分总线故障和其他硬件故障),则应使用配置参数 CanTrcvBusErrFlag 进行总线诊断

注: 对于支持选择性唤醒功能的 CAN 收发器,在普通模式(CANTRCV_TRCVMODE_NORMAL) 中可以检测到唤醒帧。唤醒帧会由传输器 WUF 标志进行信号传递。这确保在从待机模式(CANTRCV_TRCVMODE_STANDBY)转换时不会丢失唤醒帧。

【SWS_CanTrcv_00179】 如果传输器处于待机模式,则应能够使用选择性唤醒功能在预定义的唤醒帧或帧组上唤醒。传输器将保持在待机模式,直到接收到唤醒帧或帧组。

【SWS_CanTrcv_00180】 如果为传输器配置了选择性唤醒功能,则应能够在普通模式和待机模式下运行。

【SWS_CanTrcv_00181】 如果传输器配置了选择性唤醒功能,则应能够在运行时使用 CanTrcv_SetTrcvWufFlag 和 CanTrcv_ClearTrcvWufFlag API 设定并清除传输器 WUF 标志。

【SWS_CanTrcv_00182】 如果传输器配置了选择性唤醒功能,则应能够使用 CanTrcv_ReadTrcvTimeoutFlag 和 CanTrcv_ClearTrcvTimeoutFlag API 在检测唤醒帧或帧组时通知上层出现超时。

【SWS_CanTrcv_00183】 如果传输器配置了选择性唤醒功能,则应能够使用 CanTrcv_ReadTrcvSilenceFlag API 在 CAN 总线上检测到沉默时通知上层。

【SWS_CanTrcv_00184】 如果为传输器配置了选择性唤醒功能,则应能够使用 CanTrcv_GetTrcvSystemData API 检索系统信息。

6 函数定义

6.1 CanTrcv_Init

 持续更新中

6.2 CanTrcv_SetOpMode

6.3 CanTrcv_GetOpMode

6.4 CanTrcv_GetBusWuReason

6.5 CanTrcv_VersionInfo

6.6 CanTrcv_ SetWakeupMode

6.7 CanTrcv_GetTrcvSystemData

6.8 CanTrcv_ClearTrcvWufFlag

6.9 CanTrcv_ReadTrcvTimeoutFlag

7 模式切换

  通过调用CanTrcv_SetOpMode函数来请求一个模式开关。

【规范】允许将模式切换请求到当前模式,即使启用了DET,也不会导致错误。

【规范】CanTrcv模块应调用CanIf_TrcvModeIndication返回模式切换情况,并调用CanTrcv_SetOpMode,在达到请求的模式后,参照对应的CAN收发器进行回调函数CanIf_TrcvModeIndication。

7.1  CanTrcv_SetOpMode被哪个模块调用,在什么场景下调用?

7.1.1 CanSM模块切换CanTrcv模块状态

CanTrcv模块在上电后的初始状态配置,一般配置初始状态为SLEEP状态。而后,CanTrcv模块的状态通过其他模块调用CanTrcv_SetOpMode来切换。如果没有BswM的参与(Action中切换CanTrcv状态),一般都是CanSM模块调用CanIf_SetTrcvMode --> CanTrcv_SetOpMode来切换CanTrcv模块的状态。

补充:BswM模块用于控制和管理整个车辆电子系统,位于AUTOSAR的应用层,用于管理和协调各个软件模块之间的交互和通讯。对于整个车辆电子系统,BswM提供状态管理、模式管理、通信管理、系统功能管理。

持续更新中

7.2 wakeup source

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值