AUTOSAR中CAN通信模块的CanTrcv详解

目录

一、介绍

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

1.2 CAN收发器不支持的功能

二、参考文档

三、限定与约束

3.1 限制

3.2 适用范围

四、依赖

4.1 文件结构

五、功能描述

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

5.1.1 模式切换

5.2 CAN收发器的硬件操作模式

5.2.1 “Go-To-Sleep” 模式

5.2.2 “PowerOn/ListenOnly” 模式

5.3 CAN收发器唤醒类型

5.4 启用/禁用唤醒通知

5.5 可以使用收发器唤醒模式

5.6 错误分类

5.6.1 开发错误

5.6.2 运行错误

5.6.3 瞬态故障

5.6.4 生产错误

5.6.5 扩展生产错误

5.7 驱动程序初始化的前提条件

5.8 实例概念

5.9 等待状态

5.10 具有选择性唤醒功能的收发器

六、API描述

6.1 导入的类型

6.2 类型定义

6.3 函数定义

6.4 调度函数

6.5 回调函数

6.6 外部函数

6.6.1 强制性接口

6.6.2 可选接口

6.6.3 可配置的接口


一、介绍

        本规范描述了CAN收发器驱动程序模块的功能、api和配置。CAN收发器驱动程序模块负责处理ECU上的CAN收发器硬件芯片。

        CAN收发器是一种硬件设备,它将在CAN总线上使用的信号电平适应到由微控制器识别的逻辑(数字)信号电平。

        此外,该收发器还能够检测到电气故障,如布线问题、接地偏移或长主导信号的传输。根据与微控制器的接口,它们标记由单个端口引脚总结或SPI的详细说明的检测错误。

        一些收发器支持电源控制,并通过CAN总线唤醒。市场上通常有不同的唤醒/睡眠和电源供应概念。

        在汽车环境中,主要使用了三种不同的CAN总线物理方法。这些是基于ISO11898的高速CAN(1Mbits/s),基于ISO11519的低速CAN(125Kbits/s)和基于SAE J2411的单线CAN。

        最新的发展的系统基础芯片(SBC),其中除了CAN外,还实施了电源控制和先进的监视器。这些设备被封闭在一个外壳中,并通过单个接口(例如通过SPI)进行控制。

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

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

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

1.2 CAN收发器不支持的功能

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

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

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

二、参考文档

  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.1 限制

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

3.2 适用范围

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

四、依赖

4.1 文件结构

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

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

五、功能描述

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

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

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

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

        如果一个CAN收发器驱动程序覆盖了多个CAN收发器(配置为信道),则所有收发器(信道)都处于NOT_ACTIVE状态或处于活动状态。

        在 ACTIVE 状态下,每个收发器可能处于不同的子状态。

5.1.1 模式切换

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

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

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

5.2 CAN收发器的硬件操作模式

        CAN收发器硬件可能支持比上面的状态图中所示的更多的模式转换。本章将解释依赖关系和推荐的实现行为。

        它的实现特定于决定哪个CAN收发器硬件状态被覆盖在哪个CAN收发器驱动程序软件状态中。实现必须保证所描述的CAN收发驱动器软件状态的整个功能通过实现来实现。

5.2.1 “Go-To-Sleep” 模式

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

5.2.2 “PowerOn/ListenOnly” 模式

        通常被称为“PowerOn”或“ListenOnly”的模式是一种CAN收发器硬件只能接收消息而不能发送消息的模式。此外,在接收消息期间,抑制确认位的传输。不支持这种模式,因为它超出了CAN标准,并且不被所有的CAN收发器硬件芯片所支持。

5.3 CAN收发器唤醒类型

        有三种不同的唤醒应用场景:

场景一:AUTOSAR的冷启动,收发器控制MCU的供电。

(1)MCU未通电。

(2)ECU的部分,包括CAN收发器硬件被供电。

(3)CAN收发器处于休眠模式(SLEEP )。

(4)通过CAN收发器硬件检测到CAN总线上的唤醒事件。

(5)CAN收发器硬件导致单片机供电

场景二:CAN通道与MCU的一同唤醒。

(1)MCU处于低功耗模式

(2)ECU的部分,包括CAN收发器硬件被供电。

(3)所考虑过的CAN收发器处于待机模式(STANDBY )。

(4)通过CAN收发器硬件检测到CAN总线上的唤醒事件。

(5)CAN收发器硬件会导致唤醒时的软件中断。

场景三:仅CAN通道的唤醒。

(1)单片机处于全功率模式。

(2)至少部分ECU包括CAN收发器硬件被供电。

(3)所考虑过的CAN收发器处于待机模式(STANDBY )。

(4)通过CAN收发器硬件检测到CAN上的唤醒事件。

(5)CAN收发器硬件要么导致一个软件中断的唤醒,要么被循环轮询的唤醒事件。

5.4 启用/禁用唤醒通知

【规范】CanTrcv驱动应使用的以下api来启用和禁用唤醒事件通知:

– Icu_EnableNotification

– Icu_DisableNotification

        只有在配置了参数CanTrcvIcu通道引用时,CanTrcv驱动程序才能启用/禁用ICU通道。

【规范】当收发机转换到待机模式(CANTRCV_STANDBY)时,应启用ICU通道。

【规范】当收发器转换到正常模式(CANTRCV_NORMAL)时,应禁用ICU通道。

5.5 可以使用收发器唤醒模式

        CAN收发器驱动程序提供了两种唤醒模式:

【规范】NOT_SUPPORTED模式:CAN收发器驱动程序不会产生唤醒程序。所有CAN收发器硬件类型都支持此模式。

【规范】POLLING 模式:由CAN收发器驱动程序产生的唤醒可能会导致CAN通道唤醒。在此模式下,MCU唤醒。此模式假定通过所使用的CAN收发器硬件类型提供支持。唤醒模式轮询要求在源代码中存在函数CanTrcv_CheckWakeup和主函数CanTrcv_MainFunction。

        主函数CanTrcv_MainFunction由BSW调度器调用,CanTrcv_CheckWakeup由CanIf调用。

        唤醒模式的选择通过配置参数 CanTrcvWakeUpSupport 来完成。可以通过配置参数CanTrcv唤醒来单独打开和关闭每个CAN收发器的唤醒支持。

        注意:在这两种模式下,CanTrcv_CheckWakeup函数都应存在,但该功能应基于已配置的唤醒模式(NOT_SUPPORTED或轮询)

实施提示:

        如果CAN收发器在检测到唤醒后需要由软件启动特定的状态转换(例如Sleep -> Normal),则可以在执行CanTrcv_CheckWakeup期间由CanTrcv模块完成。这种行为是特定于实现的。

        当收发器需要一个特定的状态转换时,必须通过配置涉及唤醒过程的模块(EcuM、CanIf、ICU等)来确保调用CanTrcv_CheckWakeup。

5.6 错误分类

5.6.1 开发错误

5.6.2 运行错误

5.6.3 瞬态故障

无。

5.6.4 生产错误

无。

5.6.5 扩展生产错误

【规范】CANTRCV_E_BUS_ERROR:当收发器在CAN通信期间检测到总线故障时,应发出此扩展生产错误。

【规范】当设置总线错误(BUSERR)标志时,CAN CANTRCV_E_BUS_ERROR扩展生产错误(DEM分配的值)应由收发器模块检测到,这取决于它是否由硬件配置和支持。

5.7 驱动程序初始化的前提条件

【规范】CanTrcv模块的环境应确保所有必要的BSW驱动程序(由CanTrcv模块使用)都已初始化,并且在调用CanTrcv_Init之前可用。

        CAN总线收发器驱动程序使用针对Spi和Dio的驱动程序来控制CAN总线收发器的硬件。因此,在初始化CAN总线收发器驱动程序之前,这些驱动程序必须可用并准备好操作。

        CAN收发器驱动程序可能对初始化序列和对收发器设备的访问有定时要求,这必须由这些所使用的底层驱动程序来实现。

对时间的要求可能是这样的:

(1)CAN总线收发器驱动器驱动程序初始化的调用必须在通电后尽早执行,以便能够为ECU内的所有其他用户及时读取出收发器硬件中的所有必要信息。

(2)所使用的底层服务的运行时非常短和同步,以使驱动程序能够保持他自己的时间需求受到所使用的硬件设备的限制。

(3)由于某些硬件设备将端口引脚级别配置为对50µs有效,例如50µs,然后再次更改它以达到一个特定的状态(例如睡眠)。

5.8 实例概念

【规范】对于每个不同的CAN收发器硬件类型,一个ECU有一个CAN收发器驱动程序实例。一个实例服务于相同类型的所有CAN收发器硬件。

5.9 等待状态

        为了改变操作模式,CAN收发器硬件可能必须执行等待状态。

【规范】CAN收发器驱动程序应使用时间服务Tm_BusyWait1us16bit 来实现收发器状态变化的等待时间。

5.10 具有选择性唤醒功能的收发器

        部分网络是CAN系统中一些节点处于低功耗模式,而其他节点正在通信的状态。这就降低了功耗整个网络。低功耗模式下的节点会被预定义的唤醒帧唤醒。

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

【规范】如果收发器硬件支持选择性唤醒,则应使用配置参数 CanTrcvHwPnSupport 来表示。

【规范】当CanTrcvHwPnSupport = TRUE,配置一下api用于选择性唤醒功能:

  • – CanTrcv_GetTrcvSystemData,
  • – CanTrcv_ClearTrcvWufFlag,
  • – CanTrcv_ReadTrcvTimeoutFlag,
  • – CanTrcv_ClearTrcvTimeoutFlag and
  • – CanTrcv_ReadTrcvSilenceFlag
  • 【规范】如果支持选择性唤醒,则CAN收发器应配置CanTrcvPnFrameCanId、CanTrcvPnFrameCanIdMask 、CanTrcvPnFrameDataMask。

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

            注意:对于支持选择性唤醒功能的CAN收发器,在正常模式(CANTRCV_TRCVMODE_NORMAL期间)可以检测唤醒帧。检测到的唤醒帧由收发器WUF标志发出信号。这可以确保在过渡到待机模式(CANTRCV_TRCVMODE_STANDBY)期间不会丢失唤醒帧。

    六、API描述

    6.1 导入的类型

    请参考手册。

    6.2 类型定义

    请参考手册。

    6.3 函数定义

    (1)CanTrcv_Init ——初始化

    (2)CanTrcv_SetOpMode ——将收发器的模式设置为“OpMode”的值。

    (3)CanTrcv_GetOpMode ——获取收发器的模式,并在OpMode中返回它。

    (4)CanTrcv_GetBusWuReason ——获取收发器的唤醒原因,并在参数原因中返回它。

    (5)CanTrcv_GetVersionInfo ——获取模块版本信息

    (6)CanTrcv_SetWakeupMode ——CanTrcv唤醒模式,启用、禁用或清除收发器的唤醒事件。

    (7)CanTrcv_GetTrcvSystemData ——读取收发器配置/状态数据,并通过参数TrcvSysData返回。此API仅在cantrcvhwpn支持= TRUE时才存在。

    (8)CanTrcv_ClearTrcvWufFlag ——清除收发器硬件中的WUF标志。TrcvHwPnSupport = TRUE才有效

    (9)CanTrcv_ReadTrcvTimeoutFlag ——从收发器硬件中读取超时标志的状态。此API仅在cantrcvhwpn支持= TRUE时才存在。

    (10)CanTrcv_ClearTrcvTimeoutFlag ——清除收发器硬件中的超时标志的状态。此API仅在cantrcvhwpn支持= TRUE时才存在。

    (11)CanTrcv_ReadTrcvSilenceFlag ——从收发器硬件中读取沉默标志的状态。此API仅在cantrcvhwpn支持= TRUE时才存在。

    (12)CanTrcv_CheckWakeup ——在检测到唤醒中断时,由底层CANIF调用服务。

    (13)CanTrcv_SetPNActivationState ——API配置待机和睡眠模式:CAN收发器被远程唤醒模式(标准CAN唤醒)或配置的远程唤醒帧唤醒。

    (14)CanTrcv_CheckWakeFlag ——请求从收发器硬件中检查唤醒标志的状态

    (15)CanTrcv_DeInit ——反初始化

    6.4 调度函数

    (1)CanTrcv_MainFunction ——服务扫描所有总线的唤醒事件并执行这些事件。

    (2)CanTrcv_MainFunctionDiagnostics ——定期读取收发器的诊断状态,并相应地设置产品/开发。

    6.5 回调函数

    由于CanTrcv是一个驱动程序模块,因此它不为底层模块提供任何回调函数。

    6.6 外部函数

    本章列出了模块CanTrcv需要从其他模块中获得的所有功能。

    6.6.1 强制性接口

    (1)CanIf_TrcvModeIndication ——将CanTrcv状态返回到CanIf模块

    (2)Det_ReportRuntimeError ——报告运行时错误的服务。


    AUTOSAR专栏——总目录本文主要汇总该专栏文章,以方便各位读者阅读。https://blog.csdn.net/qq_42357877/article/details/132072415?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132072415%22%2C%22source%22%3A%22qq_42357877%22%7D

    物联沃分享整理
    物联沃-IOTWORD物联网 » AUTOSAR中CAN通信模块的CanTrcv详解

    发表评论