Files
autosar_standard_spec_v4.4/Communication/AUTOSAR_SWS_CANTransceiverDriver.md
T

76 KiB
Raw Blame History

CAN 收发器驱动规范

AUTOSAR CP Release 4.4.0 文档 ID 071AUTOSAR_SWS_CANTransceiverDriver

元信息

项目 内容
文档标题 CAN 收发器驱动规范(Specification of CAN Transceiver Driver
文档所有者 AUTOSAR
文档责任方 AUTOSAR
文档标识号 071
文档状态 Final(正式版)
AUTOSAR 标准组成部分 Classic Platform(经典平台)
标准发布版本 4.4.0

文档变更历史

日期 发布版本 变更方 变更描述
2018-10-31 4.4.0 AUTOSAR Release Management 移除了 API CanTrcv_MainFunctionDiagnosticsCanTrcv_MainFunction 在未初始化状态下的 DET 上报行为
2017-12-08 4.3.1 AUTOSAR Release Management 在状态机图中加入了 CanTrcv_DeInit API;编辑性修改,新增"运行时错误"
2016-11-30 4.3.0 AUTOSAR Release Management 新增 CanTrcv_DeInit API;更新了序列图;CanTrcvGetVersionInfo 重命名为 CanTrcvVersionInfoApi;更新了配置参数的 Configuration classMainFunction 周期的小幅修正
2014-10-31 4.2.1 AUTOSAR Release Management 修订了 CAN 收发器的配置;wait state 功能的细微修正;澄清了关于唤醒源的内容
2014-03-31 4.1.3 AUTOSAR Release Management 修订了 SPI 接口的配置;修订了收发器驱动的命名约定
2013-10-31 4.1.2 AUTOSAR Release Management 从调度函数 API 表中移除了 "Timing" 行;编辑性修改;移除了关于变更文档的章节
2013-03-15 4.1.1 AUTOSAR Administration 更新了序列图;按新的 SWS_BSWGeneral 重新编写
2011-12-22 4.0.3 AUTOSAR Administration 新增对 Partial Networking(部分网络)的支持;实现了 Production error(生产错误)概念;更新了波特率配置参数处理;新增检测"上电由 CAN 通信引起"的支持;修正了 API 的可重入性属性;修正了部分需求;修正了可选接口表
2009-12-18 4.0.1 AUTOSAR Administration 更改了 CanTrcv 状态名并修改了状态图;不再限制 SBC(System Basis Chip)的使用;允许向当前模式请求模式切换;CanTrcv 驱动必须在每次模式切换请求到达所请求模式后调用 CanIf_TrcvModeIndication
2010-02-02 3.1.4 AUTOSAR Administration 唤醒事件报告:在 R4.0 中,CanTrcv 存储唤醒事件。CanIf 周期性调用 CanTrcv_CheckWakeup() 来检查唤醒事件;唤醒模式:在 R4.0 中,不支持通过中断机制的唤醒,仅有 POLLING 和 NOT_SUPPORTED 唤醒模式可用;新增 Sleep Wait Count:新增用于进入睡眠模式的等待计数(CanTrcvSleepWaitCount);修订了法律免责声明
2008-08-13 3.1.1 AUTOSAR Administration 修订了法律免责声明
2007-12-21 3.0.1 AUTOSAR Administration 将 API 名 CanIf_TrcvWakeupByBus 更改为 CanIf_SetWakeupEvent;新增错误码 CANTRCV_E_PARAM_TRCV_WAKEUP_MODECanTrcv_GetOpModeCanTrcv_GetBusWuReasonCanTrcv_GetVersionInfo API 的输出参数更改为指针类型;修改了 API CanTrcv_CB_WakeupByBus;扩展了文档元信息;做了小幅版式调整
2007-01-24 2.1.15 AUTOSAR Administration CAN 收发器驱动位于 CAN 接口之下。来自更高层的所有 API 访问都通过 CAN 接口路由;每种 CAN 收发器硬件类型使用一个 CAN 收发器驱动。不同的 CAN 收发器硬件类型使用不同的 CAN 收发器驱动;修订了法律免责声明;新增了发布说明;修订了"用户建议";新增了"修订信息"
2006-05-16 2.0 AUTOSAR Administration 初始发布

目录

  1. 介绍(Introduction .................................................................................................. 8
  2. 缩略语和缩写(Acronyms and abbreviations ........... 10
  3. 相关文档(Related documentation ........................................ 11
    • 3.1 输入文档 ........................................................................................ 11
    • 3.2 相关标准和规范 .................................................................. 11
    • 3.3 相关规范 ...................................................................................... 11
  4. 约束和假设(Constraints and assumptions ............... 12
    • 4.1 限制 ...................................................................................................... 12
    • 4.2 对汽车领域的适用性 ..................................................... 12
  5. 对其他模块的依赖(Dependencies to other modules ... 13
    • 5.1 文件结构 ...................................................................................... 13
  6. 需求追踪(Requirements Traceability ............................. 14
  7. 功能规范(Functional specification ................................. 22
  8. API 规范(API specification ................................................. 30
  9. 序列图(Sequence diagram ................................................. 49
  10. 配置规范(Configuration specification ................ 56
  11. 不适用需求(Not applicable requirements ...... 78

1 介绍(Introduction

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

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

此外,收发器能够检测电气故障,如接线问题、地偏置或长时间显性位的传输。根据与微控制器的接口方式,它们可以由单个端口引脚汇总报告所检测到的错误,或通过 SPI 提供详细错误信息。

一些收发器支持电源控制和通过 CAN 总线唤醒。市场上存在不同的唤醒/休眠以及电源控制方案。

在汽车环境中,主要使用三种不同的 CAN 总线物理层。它们是:高速 CAN(最高 1 Mbit/s)的 ISO11898、低速 CAN(最高 125 Kbit/s)的 ISO11519,以及单线 CAN 的 SAE J2411。

最新发展包括系统基础芯片(SBCSystem Basis Chips),其中除了 CAN 之外还集成了电源控制和高级看门狗。这些都封装在一个芯片内并通过单一接口(例如通过 SPI)进行控制。

1.1 CAN 收发器驱动的目标

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

CAN 收发器驱动抽象了 CAN 收发器硬件。它向上层提供与硬件无关的接口。通过使用 MCAL 层的 API 访问 CAN 收发器硬件,它将自身与 ECU 布局解耦。

1.2 显式未涵盖的 CAN 收发器功能

一些 CAN 总线收发器提供附加功能,例如 ECU 自检或用于诊断的错误检测能力。

ECU 自检和错误检测未在 AUTOSAR 中定义,要求这些功能将排除目前使用的大多数收发器硬件芯片。

因此,不支持诸如"地偏移检测"、"选择性唤醒"、"斜率控制"等功能。

1.3 符合 SAE J2411 的单线 CAN 收发器

AUTOSAR 不支持符合 SAE J2411 的单线 CAN。


2 缩略语和缩写(Acronyms and abbreviations

缩写 描述
ComM Communication Manager(通信管理器)
DEM Diagnostic Event Manager(诊断事件管理器)
DET Default Error Tracer(默认错误跟踪器)
DIO Digital Input Output(数字输入输出,SPAL 模块)
EB Externally Buffered channels(外部缓冲通道)。待传输数据的缓冲区位于 SPI Handler/Driver 之外
EcuM ECU State ManagerECU 状态管理器)
IB Internally Buffered channels(内部缓冲通道)。待传输数据的缓冲区位于 SPI Handler/Driver 之内
ISR Interrupt Service Routine(中断服务例程)
MCAL Micro Controller Abstraction Layer(微控制器抽象层)
Port Port moduleSPAL 模块的端口模块)
n/a Not Applicable(不适用)
SBC System Basis Chip(系统基础芯片)。一种集成 CAN 和/或 LIN 收发器、看门狗和电源控制的设备
SPAL Standard Peripheral Abstraction Layer(标准外设抽象层)
SPI Channel SPI 通道。数据交换的软件介质,由相同条件定义:配置参数、相同大小的数据元素数量、数据指针(源和目标)或位置。有关详细信息,请参见 SPI 驱动规范
SPI Job SPI 作业。由一个或多个具有相同片选信号的通道组成。作业被认为是原子的,因此不能被中断。作业还分配有优先级。有关详细信息,请参见 SPI 驱动规范
SPI Sequence SPI 序列。要传输的若干连续作业的集合。序列依赖于静态配置。有关详细信息,请参见 SPI 驱动规范
CAN Channel CAN 通道。通过 CAN 收发器从 CAN 控制器连接到 CAN 网络的物理通道
API Application Programming Interface(应用程序编程接口)

3 相关文档(Related documentation

3.1 输入文档

  • [1] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf
  • [2] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
  • [3] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration.pdf
  • [4] General Requirements on Basic Software — AUTOSAR_SRS_BSWGeneral.pdf
  • [5] Specification of CAN Interface — AUTOSAR_SWS_CANInterface.pdf
  • [6] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
  • [7] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf

3.2 相关标准和规范

  • [8] ISO11898 Road vehicles - Controller area network (CAN)

3.3 相关规范

AUTOSAR 提供了基础软件模块的通用规范 [7](SWS BSW General),该规范对 CAN 收发器驱动同样有效。

因此,SWS BSW General 规范应被视为 CAN 收发器驱动的附加和必需规范。


4 约束和假设(Constraints and assumptions

4.1 限制

[SWS_CanTrcv_00098] ⌈ CAN 总线收发器硬件应提供可映射到 AUTOSAR CAN 收发器驱动操作模式模型的功能和接口。 ⌋ (SRS_BSW_00172)

另见第 7.1 章。

4.2 对汽车领域的适用性

本驱动可适用于所有使用 CAN 进行通信的汽车领域。


5 对其他模块的依赖(Dependencies to other modules

模块 依赖
CanIf 所有 CAN 收发器驱动都位于 CanIf 之下
ComM ComM 通过 CanIf 控制 CAN 收发器驱动的通信模式。每个 CAN 收发器驱动独立受控
DET DET 从 CAN 收发器驱动获取开发错误信息
DEM DEM 从 CAN 收发器驱动获取生产错误信息
DIO 使用 DIO 模块访问通过端口连接的 CAN 收发器设备
EcuM EcuM 通过 CanIf 从 CAN 收发器驱动获取唤醒事件信息
SPI 使用 SPI 模块访问通过 SPI 连接的 CAN 收发器设备

5.1 文件结构

5.1.1 代码文件结构

[SWS_CanTrcv_00064] ⌈ AUTOSAR 规定的命名约定适用于 CanTrcv 模块的所有文件。 ⌋ (SRS_BSW_00300)

[SWS_CanTrcv_00065] ⌈ CanTrcv 模块由以下文件组成:

文件名 需求 描述
CanTrcv.c SWS_CanTrcv_00069 实现通用 C 文件。它不包含中断例程。
CanTrcv.h SWS_CanTrcv_00052 仅包含与其他 BSW 模块相关的信息(API)。根据配置产生的 API 差异被封装。

6 需求追踪(Requirements Traceability

下表列出了本规范所基于的需求,以及这些需求在哪些需求规范条目中得到满足。

注:完整的需求追踪矩阵非常长(>80 项),此处保留表头并列出前 10 条代表性条目作为示例。完整表格见原文 PDF 第 14-22 页。

需求 描述 满足于
SRS_BSW_00005 µC 抽象层(MCAL)的模块不得有硬编码的水平接口 SWS_CanTrcv_00999
SRS_BSW_00006 µC 抽象层(MCAL)之上的软件模块的源代码不应与处理器和编译器相关 SWS_CanTrcv_00999
SRS_BSW_00007 所有用 C 语言编写的 BSW 模块应符合 MISRA C 2012 标准 SWS_CanTrcv_00999
SRS_BSW_00009 所有 BSW 模块应按照统一标准进行文档化 SWS_CanTrcv_00999
SRS_BSW_00010 所有 BSW 模块的内存消耗应为已定义配置的所有支持平台提供文档 SWS_CanTrcv_00999
SRS_BSW_00101 基础软件模块应能在单独的初始化函数中初始化变量和硬件 SWS_CanTrcv_00001
SRS_BSW_00160 AUTOSAR BSW 模块的配置文件应可读 SWS_CanTrcv_00090, SWS_CanTrcv_00091, SWS_CanTrcv_00093, SWS_CanTrcv_00095
SRS_BSW_00161 AUTOSAR 基础软件应提供对更高级软件层标准化的微控制器抽象层接口 SWS_CanTrcv_00999
SRS_BSW_00164 中断服务例程的实现应由操作系统、复杂驱动或模块完成 SWS_CanTrcv_00999
SRS_BSW_00168 SW-C 应通过基础软件通用 API 中定义的函数进行测试 SWS_CanTrcv_00999
SRS_BSW_00171 在 ECU 中不需要的 BSW 组件的可选功能应在预编译时可配置 SWS_CanTrcv_00013
SRS_BSW_00172 内置于 BSW 模块中的调度策略应与系统中使用的策略兼容 SWS_CanTrcv_00001, SWS_CanTrcv_00013, SWS_CanTrcv_00090, SWS_CanTrcv_00091, SWS_CanTrcv_00098, SWS_CanTrcv_00099
SRS_BSW_00300 所有 AUTOSAR BSW 模块应通过无歧义的名称标识 SWS_CanTrcv_00064
SRS_BSW_00304 所有 AUTOSAR BSW 模块应使用以下数据类型替代原生 C 数据类型 SWS_CanTrcv_00999
SRS_BSW_00305 数据类型命名约定 SWS_CanTrcv_00999
SRS_BSW_00306 AUTOSAR BSW 模块应与编译器和平台无关 SWS_CanTrcv_00999
SRS_BSW_00307 全局变量命名约定 SWS_CanTrcv_00999
SRS_BSW_00308 AUTOSAR BSW 模块不应在头文件中而应在 C 文件中定义全局数据 SWS_CanTrcv_00999
SRS_BSW_00309 所有 AUTOSAR BSW 模块应通过显式使用 const 关键字标记所有只读用途的全局数据 SWS_CanTrcv_00999
SRS_BSW_00310 API 命名约定 SWS_CanTrcv_00001, SWS_CanTrcv_00002, SWS_CanTrcv_00005, SWS_CanTrcv_00007, SWS_CanTrcv_00008, SWS_CanTrcv_00009, SWS_CanTrcv_00013
... ... ...

<!-- 完整内容见原文 PDF 第 14-22 页 -->


7 功能规范(Functional specification

7.1 CAN 收发器驱动操作模式

[SWS_CanTrcv_00055] ⌈ CanTrcv 模块应为每个已配置的收发器独立实现下图所示的状态图。 ⌋ (SRS_Can_01098, SRS_Can_01099, SRS_Can_01100)

Power on                                                                               Power off
                                  POWER_ON
                                       NOT_ACTIVE
        CanTrcv_Init()  ACTIVE
              [CFG1]                                              CanTrcv_Init()
                                                                     [CFG3]
   3(a)        CanTrcv_DeInit()                                          1(a)
              CANTRCV_TRCVMODE_SLEEP         CANTRCV_TRCVMODE_NORMAL
                                            1(c)
                                CanTrcv_Init()
                                   [CFG2]                          2(b)
                                      CanTrcv_DeInit()
                  3(b)                                                   1(b)
                              CANTRCV_TRCVMODE_STANDBY
                                                              2(a)

图例:
1 - CanTrcv_SetOpMode(CANTRCV_TRCVMODE_NORMAL)
2 - CanTrcv_SetOpMode(CANTRCV_TRCVMODE_STANDBY)
3 - CanTrcv_SetOpMode(CANTRCV_TRCVMODE_SLEEP)

此图的主要目的是以通用方式支持迄今为止可用的众多 CAN 总线收发器。根据 CAN 收发器硬件的不同,该模型对给定的 CAN 收发器硬件可能多出一两个状态,但这将明显将 ComM 和 EcuM 与所用硬件解耦。

[SWS_CanTrcv_00148]CanTrcv_Init 函数会引起向 CANTRCV_TRCVMODE_SLEEPCANTRCV_TRCVMODE_NORMALCANTRCV_TRCVMODE_STANDBY 的状态变更。这取决于配置,并可为每个收发器独立配置。 ⌋ ()

状态 描述
POWER_ON ECU 已完全上电。
NOT_ACTIVE CAN 收发器硬件状态取决于 ECU 硬件以及 Dio 和 Port 驱动配置。CAN 收发器驱动尚未初始化,因此不活动。
ACTIVE 已调用 CanTrcv_Init 函数。它将 CAN 收发器驱动带入活动状态。根据配置,CAN 收发器驱动进入 CANTRCV_TRCVMODE_SLEEPCANTRCV_TRCVMODE_STANDBYCANTRCV_TRCVMODE_NORMAL 状态。
CANTRCV_TRCVMODE_NORMAL 完全总线通信。如果 CAN 收发器硬件控制 ECU 电源,则 ECU 完全供电。CAN 收发器驱动不再检测唤醒信息。
CANTRCV_TRCVMODE_STANDBY 无法通信。如果 CAN 收发器硬件控制 ECU 电源,ECU 仍处于供电状态。从此模式到 CANTRCV_TRCVMODE_SLEEP 的转换是唯一有效的。可以通过总线或本地唤醒事件唤醒。
CANTRCV_TRCVMODE_SLEEP 无法通信。根据电源管理的责任归属,ECU 可能断电。可以通过总线或本地唤醒事件唤醒。

如果一个 CAN 收发器驱动覆盖多个 CAN 收发器(配置为通道),则所有收发器(通道)要么都处于 NOT_ACTIVE 状态,要么都处于 ACTIVE 状态。

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

7.1.1 操作模式切换

通过调用 CanTrcv_SetOpMode 函数请求模式切换。

[SWS_CanTrcv_00161] ⌈ 对当前模式的模式切换请求是允许的,且即使启用 DET 也不应导致错误。 ⌋ ()

[SWS_CanTrcv_00158] ⌈ 对于通过 CanTrcv_SetOpMode 进行的每次模式切换请求,在到达所请求模式后,CanTrcv 模块应使用抽象 CanIf TransceiverId 调用对应 CAN 收发器的回调函数 CanIf_TrcvModeIndication。 ⌋ ()

7.2 CAN 收发器硬件操作模式

CAN 收发器硬件可能支持比上述状态图更多的模式转换。本章解释了其依赖关系和建议的实现行为。

由实现决定哪个 CAN 收发器硬件状态被哪个 CAN 收发器驱动软件状态所覆盖。实现必须保证所描述的 CAN 收发器驱动软件状态的完整功能由该实现来实现。

7.2.1 临时"Go-To-Sleep"模式示例

通常称为"Go-to-sleep"的模式是从 Normal 切换到 Sleep 时的临时模式。驱动将这种临时模式封装在某个 CAN 收发器驱动软件状态内。此外,CAN 收发器驱动先从 Normal 切换到 Standby,然后通过额外的 API 调用从 Standby 切换到 Sleep。

7.2.2 "PowerOn/ListenOnly"模式示例

通常称为"PowerOn"或"ListenOnly"的模式是 CAN 收发器硬件只能接收消息而无法发送消息的模式。此外,在接收消息期间不发送应答位。不支持此模式,因为它在 CAN 标准之外,并且并非所有 CAN 收发器硬件芯片都支持。

7.3 CAN 收发器唤醒类型

存在三种不同的场景通常称为唤醒:

场景 1

  • MCU 未上电。
  • ECU 部分(包括 CAN 收发器硬件)已上电。
  • 所考虑的 CAN 收发器处于 SLEEP 模式。
  • CAN 收发器硬件检测到 CAN 总线上的唤醒事件。
  • CAN 收发器硬件使 MCU 上电。

在 AUTOSAR 术语中,这被视为冷启动而非唤醒。

场景 2

  • MCU 处于低功耗模式。
  • ECU 部分(包括 CAN 收发器硬件)已上电。
  • 所考虑的 CAN 收发器处于 STANDBY 模式。
  • CAN 收发器硬件检测到 CAN 总线上的唤醒事件。
  • CAN 收发器硬件触发软件中断以唤醒。

在 AUTOSAR 术语中,这被视为 CAN 通道和 MCU 的唤醒。

场景 3

  • MCU 处于全功率模式。
  • 至少 ECU 部分(包括 CAN 收发器硬件)已上电。
  • 所考虑的 CAN 收发器处于 STANDBY 模式。
  • CAN 收发器硬件检测到 CAN 上的唤醒事件。
  • CAN 收发器硬件触发软件中断以唤醒,或周期性地轮询唤醒事件。

在 AUTOSAR 术语中,这被视为 CAN 通道的唤醒。

7.4 使能/禁用唤醒通知

[SWS_CanTrcv_00171] ⌈ CanTrcv 驱动应使用 ICU 驱动提供的以下 API 来使能和禁用唤醒事件通知:

  • Icu_EnableNotification
  • Icu_DisableNotification

仅当为参数 CanTrcvIcuChannelRef 配置了引用时,CanTrcv 驱动才应使能/禁用 ICU 通道。 ⌋ ()

CanTrcv 驱动应确保以下内容以避免丢失唤醒事件:

[SWS_CanTrcv_00172] ⌈ 当收发器转换到 Standby 模式(CANTRCV_STANDBY)时,应使能 ICU 通道。 ⌋ ()

[SWS_CanTrcv_00173] ⌈ 当收发器转换到 Normal 模式(CANTRCV_NORMAL)时,应禁用 ICU 通道。 ⌋ ()

7.5 CAN 收发器唤醒模式

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

[SWS_CanTrcv_00090]NOT_SUPPORTED 模式 ⌋ (SRS_BSW_00388, SRS_BSW_00389, SRS_BSW_00390, SRS_BSW_00392, SRS_BSW_00393, SRS_BSW_00394, SRS_BSW_00408, SRS_BSW_00160, SRS_BSW_00172, SRS_Can_01090)

NOT_SUPPORTED 模式下,CAN 收发器驱动不生成唤醒。所有 CAN 收发器硬件类型都支持此模式。

[SWS_CanTrcv_00091]POLLING 模式 ⌋ (SRS_BSW_00388, SRS_BSW_00389, SRS_BSW_00390, SRS_BSW_00392, SRS_BSW_00393, SRS_BSW_00394, SRS_BSW_00395, SRS_BSW_00408, SRS_BSW_00160, SRS_BSW_00172, SRS_Can_01090, SRS_Can_01092)

POLLING 模式下,由 CAN 收发器驱动生成的唤醒可能导致 CAN 通道唤醒。在此模式下,不可能产生 MCU 唤醒。此模式假设所用 CAN 收发器硬件类型的支持。唤醒模式 POLLING 要求源代码中存在函数 CanTrcv_CheckWakeup 和主函数 CanTrcv_MainFunction

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

唤醒模式的选择由配置参数 CanTrcvWakeUpSupport 完成。每个 CAN 收发器的唤醒支持可由配置参数 CanTrcvWakeupByBusUsed 单独开启或关闭。

注: 在两种模式下,函数 CanTrcv_CheckWakeup 都应存在,但其功能应基于所配置的唤醒模式(NOT_SUPPORTEDPOLLING)。

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

必须通过相关模块(EcuM、CanIf、ICU 等)的配置确保在收发器需要特定状态转换时调用 CanTrcv_CheckWakeup

7.6 错误分类

7.6.1 开发错误

错误类型 相关性 相关错误码 值 [hex]
API 调用时为 CAN 收发器传入了错误的参数 Development CANTRCV_E_INVALID_TRANSCEIVER 1
API 调用时传入了空指针参数 Development CANTRCV_E_PARAM_POINTER 2
API 服务在未初始化的情况下被使用 Development CANTRCV_E_UNINIT 11
API 服务在错误的收发器操作模式下被调用 Development CANTRCV_E_TRCV_NOT_STANDBY / CANTRCV_E_TRCV_NOT_NORMAL 21 / 22
API 服务调用时 TrcvWakeupMode 参数无效 Development CANTRCV_E_PARAM_TRCV_WAKEUP_MODE 23
API 服务调用时 OpMode 参数无效 Development CANTRCV_E_PARAM_TRCV_OPMODE 24
配置的波特率不被收发器支持 Development CANTRCV_E_BAUDRATE_NOT_SUPPORTED 25
模块初始化失败,例如在 post-build 中以无效指针调用 CanTrcv_Init() Development CANTRCV_E_INIT_FAILED 27

7.6.2 运行时错误

错误类型 相关错误码 值 [hex]
与收发器无/不正确的通信 CANTRCV_E_NO_TRCV_CONTROL 26

7.6.3 瞬态故障

无瞬态故障。

7.6.4 生产错误

无生产错误。

7.6.5 扩展生产错误

[SWS_CanTrcv_00228]

字段 内容
错误名称 CANTRCV_E_BUS_ERROR
简短描述 在通信过程中发生了 CAN 总线错误
详细描述 当收发器在 CAN 通信期间检测到总线故障时,应发出此扩展生产错误。
检测条件 - 失败 当与总线故障对应的标志被置位时,应使用参数 EventIdCANTRCV_E_BUS_ERROREventStatusDEM_EVENT_STATUS_FAILED 调用 Dem_SetEventStatus。见 SWS_CanTrcv_00206, SWS_CanTrcv_00229
检测条件 - 通过 当与总线故障对应的标志未被置位时,应使用参数 EventIdCANTRCV_E_BUS_ERROREventStatusDEM_EVENT_STATUS_PASSED 调用 Dem_SetEventStatus。见 SWS_CanTrcv_00227, SWS_CanTrcv_00229
二级参数 N/A
所需时间 N/A
监控频率 持续

⌋ (SRS_BSW_00339, SRS_BSW_00385)

[SWS_CanTrcv_00229] ⌈ 当 Bus Error(BUSERR)标志被置位时(取决于是否配置并被硬件支持),扩展生产错误 CANTRCV_E_BUS_ERROR(由 DEM 分配值)应可由 CAN 收发器模块检测到。 ⌋ ()

7.7 驱动初始化的前置条件

[SWS_CanTrcv_00099] ⌈ CanTrcv 模块的环境必须确保在调用 CanTrcv_Init 之前,所有必要的 BSW 驱动(由 CanTrcv 模块使用)已初始化并可用。 ⌋ (SRS_BSW_00172)

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

CAN 收发器驱动对初始化序列和收发器设备的访问可能有时间要求,所使用的底层驱动必须满足这些要求。

时间要求可能是:

  1. CAN 总线收发器驱动的初始化调用必须在通电后尽早执行,以便及时从收发器硬件读取 ECU 内所有其他用户所需的所有必要信息。
  2. 所用底层服务的运行时间应非常短且是同步的,使驱动能保持其自身的时间要求(受所用硬件设备限制)。
  3. 驱动的运行时间可能由于某些硬件设备将端口引脚电平配置为有效(例如 50µs)然后再更改以达到特定状态(如 sleep)而延长。

7.8 实例概念

[SWS_CanTrcv_00016] ⌈ 对于每种不同的 CAN 收发器硬件类型,ECU 都有一个 CAN 收发器驱动实例。一个实例服务于所有同类型的 CAN 收发器硬件。 ⌋ (SRS_BSW_00347, SRS_BSW_00413, SRS_Can_01091)

7.9 等待状态

对于更改操作模式,CAN 收发器硬件可能必须执行等待状态。

[SWS_CanTrcv_00230] ⌈ CAN 收发器驱动应使用 Time 服务 Tm_BusyWait1us16bit 实现收发器状态变更的等待时间。 ⌋ ()

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

本节描述具有选择性唤醒功能的 CAN 收发器的需求。

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

支持选择性唤醒的收发器除了普通收发器提供的通过唤醒模式(WUP)唤醒外,还可以通过唤醒帧(WUF)唤醒。

[SWS_CanTrcv_00174] ⌈ 如果收发器硬件支持选择性唤醒,则应使用配置参数 CanTrcvHwPnSupport 指示。 ⌋ ()

[SWS_CanTrcv_00175] ⌈ 选择性唤醒功能的配置容器(CanTrcvPartialNetwork)和以下 API

  • 8.4.7 CanTrcv_GetTrcvSystemData
  • 8.4.8 CanTrcv_ClearTrcvWufFlag
  • 8.4.9 CanTrcv_ReadTrcvTimeoutFlag
  • 8.4.10 CanTrcv_ClearTrcvTimeoutFlag
  • 8.4.11 CanTrcv_ReadTrcvSilenceFlag

应仅在 CanTrcvHwPnSupport = TRUE 时存在。 ⌋ ()

[SWS_CanTrcv_00177] ⌈ 如果支持选择性唤醒,则 CAN 收发器应配置为使用参数 CanTrcvPnFrameCanIdCanTrcvPnFrameCanIdMaskCanTrcvPnFrameDataMask 对特定 CAN 帧或一组 CAN 帧进行唤醒。 ⌋ ()

[SWS_CanTrcv_00178] ⌈ 如果收发器具有识别总线故障(并区分总线故障和其他硬件故障)的能力,则应使用配置参数 CanTrcvBusErrFlag 指示,用于总线诊断目的。 ⌋ ()

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


8 API 规范(API specification

8.1 导入类型

本章列出了从以下文件包含的所有类型:

[SWS_CanTrcv_00084]

模块 头文件 导入类型
Can_GeneralTypes Can_GeneralTypes.h CanTrcv_TrcvModeType
Can_GeneralTypes.h CanTrcv_TrcvWakeupModeType
Can_GeneralTypes.h CanTrcv_TrcvWakeupReasonType
Dem Rte_Dem_Type.h Dem_EventIdType
Rte_Dem_Type.h Dem_EventStatusType
Dio Dio.h Dio_ChannelGroupType
Dio.h Dio_ChannelType
Dio.h Dio_LevelType
Dio.h Dio_PortLevelType
Dio.h Dio_PortType
EcuM EcuM.h EcuM_WakeupSourceType
Icu Icu.h Icu_ChannelType
Spi Spi.h Spi_ChannelType
Spi.h Spi_DataBufferType
Spi.h Spi_NumberOfDataType
Spi.h Spi_SequenceType
Spi.h Spi_StatusType
Std_Types StandardTypes.h Std_ReturnType
StandardTypes.h Std_VersionInfoType

⌋ ()

[SWS_CanTrcv_00163]

字段 内容
名称 CanTrcv_TrcvModeType
类型 Enumeration
范围 CANTRCV_TRCVMODE_SLEEP -- 收发器模式 SLEEP
CANTRCV_TRCVMODE_STANDBY -- 收发器模式 STANDBY
CANTRCV_TRCVMODE_NORMAL 0x00 -- 收发器模式 NORMAL
描述 CAN 收发器驱动的操作模式。
可通过获取 Can_GeneralTypes.h

⌋ ()

[SWS_CanTrcv_00164]

字段 内容
名称 CanTrcv_TrcvWakeupModeType
类型 Enumeration
范围 CANTRCV_WUMODE_ENABLE 0x00 -- 寻址的收发器上唤醒事件的通知已启用
CANTRCV_WUMODE_DISABLE 0x01 -- 寻址的收发器上唤醒事件的通知已禁用
CANTRCV_WUMODE_CLEAR 0x02 -- 寻址的收发器上存储的唤醒事件被清除
描述 此类型应用于控制 CAN 收发器相关的唤醒事件和唤醒通知。
可通过获取 Can_GeneralTypes.h

⌋ ()

[SWS_CanTrcv_00165]

字段 内容
名称 CanTrcv_TrcvWakeupReasonType
类型 Enumeration
范围 CANTRCV_WU_ERROR 0x00 -- 由于错误,未检测到唤醒原因。此值仅在之前向 DEM 报告了错误时报告
CANTRCV_WU_NOT_SUPPORTED 0x01 -- 收发器不支持任何唤醒原因信息
CANTRCV_WU_BY_BUS 0x02 -- 收发器检测到网络已使 ECU 唤醒
CANTRCV_WU_INTERNALLY 0x03 -- 收发器检测到网络已被 ECU 通过 NORMAL 模式请求唤醒
CANTRCV_WU_RESET 0x04 -- 收发器检测到"唤醒"是因 ECU 复位引起
CANTRCV_WU_POWER_ON 0x05 -- 收发器检测到"唤醒"是因上电后的 ECU 复位引起
CANTRCV_WU_BY_PIN 0x06 -- 收发器检测到在收发器某个引脚(不在 CAN 总线上)处的唤醒事件
CANTRCV_WU_BY_SYSERR 0x07 -- 收发器检测到 ECU 的唤醒是由与硬件相关的设备故障引起
描述 此类型表示 CAN 收发器详细检测到的唤醒原因。
可通过获取 Can_GeneralTypes.h

⌋ ()

8.2 类型定义

[SWS_CanTrcv_00209]

字段 内容
名称 CanTrcv_ConfigType
类型 Structure
范围 实现特定 --
描述 这是一个外部数据结构类型,包含 CAN 收发器驱动的整体初始化数据以及影响所有收发器的设置。此外,它还包含指向收发器配置结构的指针。初始化数据结构的内容是 CAN 收发器硬件特定的。
可通过获取 CanTrcv.h

⌋ ()

[SWS_CanTrcv_00210]

字段 内容
名称 CanTrcv_PNActivationType
类型 Enumeration
范围 PN_ENABLED -- CanTrcv 中 PN 唤醒功能已启用
PN_DISABLED -- CanTrcv 中 PN 唤醒功能已禁用
描述 用于描述 CanTrcv 中 PN 唤醒功能是启用还是禁用的数据类型。
可通过获取 CanTrcv.h

⌋ ()

[SWS_CanTrcv_00211]

字段 内容
名称 CanTrcv_TrcvFlagStateType
类型 Enumeration
范围 CANTRCV_FLAG_SET -- 收发器硬件中已置位该标志
CANTRCV_FLAG_CLEARED -- 收发器硬件中已清除该标志
描述 提供收发器硬件中某标志的状态。
可通过获取 CanTrcv.h

⌋ ()

8.3 函数定义

8.3.1 CanTrcv_Init

[SWS_CanTrcv_00001]

字段 内容
服务名 CanTrcv_Init
语法 void CanTrcv_Init(const CanTrcv_ConfigType* ConfigPtr)
服务 ID[hex] 0x00
同步/异步 同步
可重入性 不可重入
输入参数 ConfigPtr -- 指向驱动配置的指针
输入输出参数
输出参数
返回值
描述 初始化 CanTrcv 模块。
可通过获取 CanTrcv.h

⌋ (SRS_BSW_00310, SRS_BSW_00358, SRS_BSW_00369, SRS_BSW_00371, SRS_BSW_00414, SRS_BSW_00101, SRS_BSW_00172, SRS_Can_01096, SRS_Can_01097, SRS_Can_01109, SRS_Can_01110, SRS_Can_01108)

[SWS_CanTrcv_00180]CanTrcv_Init 函数应根据其初始化序列和配置(由参数 ConfigPtr 提供)初始化所有连接的 CAN 收发器。同时,它也应支持 AUTOSAR 栈的配置序列。 ⌋ ()

[SWS_CanTrcv_00100]CanTrcv_Init 函数应将 CAN 收发器硬件设置为由配置参数 CanTrcvInitState 配置的状态。 ⌋ ()

请注意,在通电和调用 CanTrcv_Init 之间的这段时间内,CAN 收发器硬件可能处于不同的状态。这取决于硬件和 SPAL 驱动配置。

复位后(例如上电)的初始化序列是 CAN 收发器驱动的关键阶段。

[SWS_CanTrcv_00167] ⌈ 如果硬件支持,CanTrcv_Init 应验证是否存在由收发器活动引起的唤醒,如果是 TRUE,则应通过 API EcuM_SetWakeupEvent(使用 CanTrcvWakeupSourceRef 中引用的唤醒源)向 EcuM 报告。 ⌋ ()

[SWS_CanTrcv_00181] ⌈ 如果启用了选择性唤醒且硬件支持:CanTrcv_Init API 应检查收发器状态的 POR 和 SYSERR 标志。 ⌋ ()

[SWS_CanTrcv_00182] ⌈ 如果 POR 标志或 SYSERR 标志已置位,则收发器应通过运行配置序列重新配置为选择性唤醒功能。如果 POR 标志或 SYSERR 标志未置位,则存储在收发器存储器中的配置仍然有效,无需重新配置。 ⌋ ()

[SWS_CanTrcv_00183] ⌈ 如果 POR 标志已置位,则应通过 API EcuM_SetWakeupEvent 向 EcuM 报告唤醒,其唤醒源值在 CanTrcvPorWakeupsourceRef 所引用的符号名称值的位位置处为"1",其他位为"0"。 ⌋ ()

[SWS_CanTrcv_00184] ⌈ 如果 SYSERR 标志已置位,则应通过 API EcuM_SetWakeupEvent 向 EcuM 报告唤醒,其唤醒源值在 CanTrcvSyserrWakeupSourceRef 所引用的符号名称值的位位置处为"1",其他位为"0"。 ⌋ ()

[SWS_CanTrcv_00113] ⌈ 如果与收发器无/不正确的通信,则 CanTrcv_Init 函数应将运行时错误码 CANTRCV_E_NO_TRCV_CONTROL 报告给默认错误跟踪器并返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00168] ⌈ 如果为 CanTrcv 模块启用了开发错误检测:CanTrcv_Init 函数应在配置的波特率不被收发器支持时引发开发错误 CANTRCV_E_BAUDRATE_NOT_SUPPORTED。 ⌋ ()

[SWS_CanTrcv_00226] ⌈ 为了实现 AUTOSAR 部分网络机制,CAN 收发器应支持为唤醒帧定义数据掩码(CanTrcvPnFrameDataMask 的配置结构是必需的)。 ⌋ ()

8.3.2 CanTrcv_SetOpMode

[SWS_CanTrcv_00002]

字段 内容
服务名 CanTrcv_SetOpMode
语法 Std_ReturnType CanTrcv_SetOpMode(uint8 Transceiver, CanTrcv_TrcvModeType OpMode)
服务 ID[hex] 0x01
同步/异步 异步
可重入性 对不同收发器可重入
输入参数 Transceiver -- API 调用必须应用到的 CAN 收发器
OpMode -- 此参数包含所期望的操作模式
输入输出参数
输出参数
返回值 Std_ReturnType -- E_OK:如果收发器模式更改的请求已被接受;E_NOT_OK:如果收发器模式更改的请求未被接受或任何参数超出允许范围
描述 将收发器的模式设置为 OpMode 的值。
可通过获取 CanTrcv.h

⌋ (SRS_BSW_00310, SRS_BSW_00357, SRS_BSW_00369, SRS_BSW_00371, SRS_BSW_00406, SRS_Can_01091, SRS_Can_01097, SRS_Can_01098, SRS_Can_01099, SRS_Can_01100, SRS_Can_01109, SRS_Can_01110, SRS_Can_01108)

[SWS_CanTrcv_00102]CanTrcv_SetOpMode 函数应将收发器的内部状态切换为参数 OpMode 的值,可以是 CANTRCV_TRCVMODE_NORMALCANTRCV_TRCVMODE_STANDBYCANTRCV_TRCVMODE_SLEEP。 ⌋ ()

[SWS_CanTrcv_00103] ⌈ 如果收发器处于 CANTRCV_TRCVMODE_NORMAL 模式,则 CanTrcv 模块的用户应使用 OpMode = CANTRCV_TRCVMODE_STANDBYCANTRCV_TRCVMODE_NORMAL 调用 CanTrcv_SetOpMode。 ⌋ ()

[SWS_CanTrcv_00104] ⌈ 如果收发器处于 CANTRCV_TRCVMODE_STANDBY 模式,则 CanTrcv 模块的用户应使用 OpMode = CANTRCV_TRCVMODE_SLEEPCANTRCV_TRCVMODE_STANDBY 调用 CanTrcv_SetOpMode。 ⌋ ()

[SWS_CanTrcv_00105] ⌈ 如果所请求的模式不受底层收发器硬件支持,则 CanTrcv_SetOpMode 函数应返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00186] ⌈ 如果硬件支持选择性唤醒:CanTrcv_SetOpMode API 应检查收发器状态的 POR 和 SYSERR 标志。 ⌋ ()

[SWS_CanTrcv_00187] ⌈ 如果 POR 标志已置位,则收发器应重新初始化以运行收发器的配置序列。 ⌋ ()

[SWS_CanTrcv_00188] ⌈ 如果 SYSERR 标志未置位且所请求的模式为 CANTRCV_NORMAL,则收发器应为相应的抽象 CanIf TransceiverId 调用 API CanIf_ConfirmPnAvailability()CanIf_ConfirmPnAvailability 通过 CanIf 和 CanSm 通知 CanNm 已启用选择性唤醒。 ⌋ ()

[SWS_CanTrcv_00114] ⌈ 如果与收发器无/不正确的通信,则 CanTrcv_SetOpMode 函数应将运行时错误码 CANTRCV_E_NO_TRCV_CONTROL 报告给默认错误跟踪器并返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00120] ⌈ 如果为 CanTrcv 模块启用了开发错误检测:如果使用 OpMode = CANTRCV_TRCVMODE_STANDBY 调用 CanTrcv_SetOpMode,且收发器未处于 CANTRCV_TRCVMODE_NORMALCANTRCV_TRCVMODE_STANDBY 模式,则该函数应引发开发错误 CANTRCV_E_TRCV_NOT_NORMAL,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00121] ⌈ 如果为 CanTrcv 模块启用了开发错误检测:如果使用 OpMode = CANTRCV_TRCVMODE_SLEEP 调用 CanTrcv_SetOpMode,且收发器未处于 CANTRCV_TRCVMODE_STANDBYCANTRCV_TRCVMODE_SLEEP 模式,则该函数应引发开发错误 CANTRCV_E_TRCV_NOT_STANDBY,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00122] ⌈ 如果在 CanTrcv 模块初始化之前被调用,则 CanTrcv_SetOpMode 函数应引发开发错误 CANTRCV_E_UNINIT,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00123] ⌈ 如果使用无效的收发器编号调用,则 CanTrcv_SetOpMode 函数应引发开发错误 CANTRCV_E_INVALID_TRANSCEIVER,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00087] ⌈ 如果使用无效的 OpMode 调用,则 CanTrcv_SetOpMode 函数应引发开发错误 CANTRCV_E_PARAM_TRCV_OPMODE,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

8.3.3 CanTrcv_GetOpMode

[SWS_CanTrcv_00005]

字段 内容
服务名 CanTrcv_GetOpMode
语法 Std_ReturnType CanTrcv_GetOpMode(uint8 Transceiver, CanTrcv_TrcvModeType* OpMode)
服务 ID[hex] 0x02
同步/异步 同步
可重入性 可重入
输入参数 Transceiver -- API 调用必须应用到的 CAN 收发器
输入输出参数
输出参数 OpMode -- 指向应用此 API 的总线的操作模式的指针
返回值 Std_ReturnType -- E_OK:如果检测到操作模式;E_NOT_OK:如果未检测到操作模式
描述 获取收发器的模式并将其返回到 OpMode 中。
可通过获取 CanTrcv.h

⌋ (SRS_BSW_00310, SRS_BSW_00369, SRS_BSW_00371, SRS_BSW_00377, SRS_BSW_00406, SRS_Can_01091, SRS_Can_01097, SRS_Can_01101, SRS_Can_01109, SRS_Can_01110)

[SWS_CanTrcv_00106]CanTrcv_GetOpMode 函数应在 out 参数 OpMode 中收集 CAN 收发器驱动的实际状态。 ⌋ ()

请参阅 CanTrcv_Init 函数以了解 CAN 收发器驱动初始化后到首次操作模式更改请求之前所提供的状态。

[SWS_CanTrcv_00115] ⌈ 如果与收发器无/不正确的通信,则 CanTrcv_GetOpMode 函数应将运行时错误码 CANTRCV_E_NO_TRCV_CONTROL 报告给默认错误跟踪器并返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00124] ⌈ 如果在 CanTrcv 模块初始化之前被调用,则 CanTrcv_GetOpMode 函数应引发开发错误 CANTRCV_E_UNINIT,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00129] ⌈ 如果使用无效的收发器编号调用,则 CanTrcv_GetOpMode 函数应引发开发错误 CANTRCV_E_INVALID_TRANSCEIVER,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00132] ⌈ 如果使用 OpMode = NULL 调用,则 CanTrcv_GetOpMode 函数应引发开发错误 CANTRCV_E_PARAM_POINTER,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

8.3.4 CanTrcv_GetBusWuReason

[SWS_CanTrcv_00007]

字段 内容
服务名 CanTrcv_GetBusWuReason
语法 Std_ReturnType CanTrcv_GetBusWuReason(uint8 Transceiver, CanTrcv_TrcvWakeupReasonType* reason)
服务 ID[hex] 0x03
同步/异步 同步
可重入性 可重入
输入参数 Transceiver -- API 调用必须应用到的 CAN 收发器
输入输出参数
输出参数 reason -- 指向应用此 API 的总线的唤醒原因的指针
返回值 Std_ReturnType -- E_OK:如果提供了收发器唤醒原因;E_NOT_OK:如果没有可用的唤醒原因或服务请求由于开发错误而失败
描述 获取收发器的唤醒原因并将其返回到参数 Reason 中。
可通过获取 CanTrcv.h

⌋ (SRS_BSW_00310, SRS_BSW_00369, SRS_BSW_00371, SRS_BSW_00375, SRS_BSW_00377, SRS_BSW_00406, SRS_Can_01091, SRS_Can_01095, SRS_Can_01097, SRS_Can_01103, SRS_Can_01106, SRS_Can_01109, SRS_Can_01110)

[SWS_CanTrcv_00107]CanTrcv_GetBusWuReason 函数应在参数 Reason 中收集 CAN 收发器检测到的唤醒原因。 ⌋ ()

检测和区分可能的唤醒原因的能力在很大程度上取决于 CAN 收发器硬件。

请注意,如果有多个总线可用,则每个总线可能报告不同的唤醒原因。例如,如果 ECU 具有 CAN,则可能发生由 CAN 引起的唤醒,并且传入的数据可能导致另一个 CAN 总线的内部唤醒。

[SWS_CanTrcv_00116] ⌈ 如果与收发器无/不正确的通信,则 CanTrcv_GetBusWuReason 函数应将运行时错误码 CANTRCV_E_NO_TRCV_CONTROL 报告给默认错误跟踪器并返回 E_OK。 ⌋ ()

[SWS_CanTrcv_00125] ⌈ 如果在 CanTrcv 模块初始化之前被调用,则 CanTrcv_GetBusWuReason 函数应引发开发错误 CANTRCV_E_UNINIT,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00130] ⌈ 如果使用无效的收发器编号调用,则 CanTrcv_GetBusWuReason 函数应引发开发错误 CANTRCV_E_INVALID_TRANSCEIVER,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

[SWS_CanTrcv_00133] ⌈ 如果使用 Reason = NULL 调用,则 CanTrcv_GetBusWuReason 函数应引发开发错误 CANTRCV_E_PARAM_POINTER,否则(如果禁用 DET)返回 E_NOT_OK。 ⌋ ()

8.3.5 CanTrcv_VersionInfo

[SWS_CanTrcv_00008]

字段 内容
服务名 CanTrcv_GetVersionInfo
语法 void CanTrcv_GetVersionInfo(Std_VersionInfoType* versioninfo)
服务 ID[hex] 0x04
同步/异步 同步
可重入性 可重入
输入参数
输入输出参数
输出参数 versioninfo -- 指向此模块版本信息的指针
返回值
描述 获取模块的版本并将其返回到 VersionInfo 中。
可通过获取 CanTrcv.h

⌋ (SRS_BSW_00310, SRS_BSW_00369, SRS_BSW_00371, SRS_BSW_00406, SRS_BSW_00407, SRS_BSW_00411)

8.3.6 CanTrcv_SetWakeupMode

[SWS_CanTrcv_00009]

字段 内容
服务名 CanTrcv_SetWakeupMode
语法 Std_ReturnType CanTrcv_SetWakeupMode(uint8 Transceiver, CanTrcv_TrcvWakeupModeType TrcvWakeupMode)
服务 ID[hex] 0x05
同步/异步 同步
可重入性 对不同收发器可重入
输入参数 Transceiver -- API 调用必须应用到的 CAN 收发器
TrcvWakeupMode -- 请求的收发器唤醒原因
输入输出参数
输出参数
返回值 Std_ReturnType -- E_OK:如果唤醒状态已更改为所请求的模式;E_NOT_OK:如果唤醒状态更改失败或参数超出允许范围。状态未发生变化。
描述 根据 TrcvWakeupMode 启用、禁用或清除收发器的唤醒事件。
可通过获取 CanTrcv.h

⌋ (SRS_BSW_00310, SRS_BSW_00369, SRS_BSW_00371, SRS_BSW_00406, SRS_Can_01091, SRS_Can_01097, SRS_Can_01109, SRS_Can_01110, SRS_Can_01115)

[SWS_CanTrcv_00111] ⌈ 启用:如果使用 TrcvWakupMode = CANTRCV_WUMODE_ENABLE 调用 CanTrcv_SetWakeupMode,并且 CanTrcv 模块对寻址的总线有挂起的存储唤醒事件,则 CanTrcv 模块应将其唤醒事件更新为"present"。 ⌋ ()

[SWS_CanTrcv_00093] ⌈ 禁用:如果使用 TrcvWakeupMode = CANTRCV_WUMODE_DISABLE 调用 CanTrcv_SetWakeupMode,则寻址的收发器上的唤醒事件被禁用。收发器设备和收发器驱动需要检测唤醒事件并在内部存储,以便在再次启用唤醒模式时引发唤醒事件。 ⌋ (SRS_BSW_00388...)

[SWS_CanTrcv_00094] ⌈ 清除:如果使用 TrcvWakeupMode = CANTRCV_WUMODE_CLEAR 调用 CanTrcv_SetWakeupMode,则寻址的收发器上存储的唤醒事件被清除。 ⌋ ()

[SWS_CanTrcv_00150] ⌈ 当唤醒通知被禁用时,必须使用清除唤醒事件的方式在更高层控制下清除所有存储的唤醒事件。 ⌋ ()

[SWS_CanTrcv_00095] ⌈ 实现可以启用、禁用或清除上次通信周期以来的唤醒事件。重要的是在禁用期间不要丢失唤醒事件。 ⌋ (SRS_BSW_00388...)

8.3.7 CanTrcv_GetTrcvSystemData

[SWS_CanTrcv_00213]

字段 内容
服务名 CanTrcv_GetTrcvSystemData
语法 Std_ReturnType CanTrcv_GetTrcvSystemData(uint8 Transceiver, const uint32* TrcvSysData)
服务 ID[hex] 0x09
同步/异步 同步
可重入性 不可重入
输入参数 Transceiver -- CAN 收发器 ID
输入输出参数
输出参数 TrcvSysData -- 收发器的配置/状态数据
返回值 Std_ReturnType -- E_OK:如果成功读取了收发器状态;E_NOT_OK:如果收发器状态数据不可用或发生开发错误
描述 读取收发器配置/状态数据并通过参数 TrcvSysData 返回。此 API 应仅在 CanTrcvHwPnSupport = TRUE 时存在。
可通过获取 CanTrcv.h

⌋ ()

[SWS_CanTrcv_00189]CanTrcv_GetTrcvSystemData 函数应读取 CAN 收发器的配置/状态并将读取的数据存储在 out 参数 TrcvSysData 中。如果成功,应返回 E_OK。 ⌋ ()

提示: 此 API 可通过诊断服务调用或在初始化期间调用,以确定收发器状态及其可用性。

注: 目前尚未就收发器硬件规范的参数集达成一致。因此,诊断数据现在以 uint32 形式返回(存储在收发器寄存器中)。当定义明确和标准的参数集时,可以为抽象诊断数据定义数据结构。

8.3.8 CanTrcv_ClearTrcvWufFlag

[SWS_CanTrcv_00214]

字段 内容
服务名 CanTrcv_ClearTrcvWufFlag
语法 Std_ReturnType CanTrcv_ClearTrcvWufFlag(uint8 Transceiver)
服务 ID[hex] 0x0a
同步/异步 同步
可重入性 对不同收发器可重入
输入参数 Transceiver -- CAN 收发器 ID
输入输出参数
输出参数
返回值 Std_ReturnType -- E_OK:如果 WUF 标志已清除;E_NOT_OK:如果 WUF 标志未清除或发生开发错误
描述 清除收发器硬件中的 WUF 标志。此 API 应仅在 CanTrcvHwPnSupport = TRUE 时存在。
可通过获取 CanTrcv.h

⌋ (SRS_Can_01157)

[SWS_CanTrcv_00194]CanTrcv_ClearTrcvWufFlag 函数应清除 CAN 收发器中的唤醒标志。如果成功,应返回 E_OK。 ⌋ ()

实现提示: 此 API 应由 CanSM 模块用于确保在进入低功耗模式期间不丢失帧唤醒事件。此 API 清除 WUF 标志。清除 WUF 标志后,CAN 收发器应置于 Standby 模式(CANTRCV_STANDBY)。如果启用选择性唤醒功能时发生系统错误(SYSERR,例如配置错误),则收发器将禁用该功能。收发器将在下一个 CAN 唤醒模式(WUP)上唤醒。如果发生任何其他硬件错误(例如帧检测错误),则当收发器内部的错误计数器溢出时收发器将唤醒。

[SWS_CanTrcv_00195] ⌈ CanTrcv 应通过回调通知 CanIf_ClearTrcvWufFlagIndication(使用抽象 CanIf TransceiverId 引用相应的 CAN 收发器)通知 CanIf 已清除所请求收发器的唤醒标志。 ⌋ ()

8.3.9 CanTrcv_ReadTrcvTimeoutFlag

[SWS_CanTrcv_00215]

字段 内容
服务名 CanTrcv_ReadTrcvTimeoutFlag
语法 Std_ReturnType CanTrcv_ReadTrcvTimeoutFlag(uint8 Transceiver, CanTrcv_TrcvFlagStateType* FlagState)
服务 ID[hex] 0x0b
同步/异步 同步
可重入性 不可重入
输入参数 Transceiver -- CAN 收发器 ID
输入输出参数
输出参数 FlagState -- 超时标志的状态
返回值 Std_ReturnType -- E_OK:如果成功读取了超时标志的状态;E_NOT_OK:如果无法读取超时标志的状态
描述 从收发器硬件读取超时标志的状态。此 API 应仅在 CanTrcvHwPnSupport = TRUE 时存在。
可通过获取 CanTrcv.h

⌋ ()

8.3.10 CanTrcv_ClearTrcvTimeoutFlag

[SWS_CanTrcv_00216]

字段 内容
服务名 CanTrcv_ClearTrcvTimeoutFlag
语法 Std_ReturnType CanTrcv_ClearTrcvTimeoutFlag(uint8 Transceiver)
服务 ID[hex] 0x0c
同步/异步 同步
可重入性 不可重入
输入参数 Transceiver -- CAN 收发器 ID
输入输出参数
输出参数
返回值 Std_ReturnType -- E_OK:如果成功清除了超时标志;E_NOT_OK:如果无法清除超时标志
描述 清除收发器硬件中超时标志的状态。此 API 应仅在 CanTrcvHwPnSupport = TRUE 时存在。
可通过获取 CanTrcv.h

⌋ ()

8.3.11 CanTrcv_ReadTrcvSilenceFlag

[SWS_CanTrcv_00217]

字段 内容
服务名 CanTrcv_ReadTrcvSilenceFlag
语法 Std_ReturnType CanTrcv_ReadTrcvSilenceFlag(uint8 Transceiver, CanTrcv_TrcvFlagStateType* FlagState)
服务 ID[hex] 0x0d
同步/异步 同步
可重入性 不可重入
输入参数 Transceiver -- CAN 收发器 ID
输入输出参数
输出参数 FlagState -- 静默标志的状态
返回值 Std_ReturnType -- E_OK:如果成功读取了静默标志的状态;E_NOT_OK:如果无法读取静默标志的状态
描述 从收发器硬件读取静默标志的状态。此 API 应仅在 CanTrcvHwPnSupport = TRUE 时存在。
可通过获取 CanTrcv.h

⌋ ()

8.3.12 CanTrcv_CheckWakeup

[SWS_CanTrcv_00143]

字段 内容
服务名 CanTrcv_CheckWakeup
语法 Std_ReturnType CanTrcv_CheckWakeup(uint8 Transceiver)
服务 ID[hex] 0x07
同步/异步 同步
可重入性 可重入
输入参数 Transceiver -- API 调用必须应用到的 CAN 收发器
输入输出参数
输出参数
返回值 Std_ReturnType -- E_OKAPI 调用已被接受;E_NOT_OKAPI 调用未被接受
描述 在检测到唤醒中断时由底层 CANIF 调用。
可通过获取 CanTrcv.h

⌋ ()

EcuM_EndCheckWakeup(WakeupSource)CanTrcv_CheckWakeup 异步调用以检查唤醒源。

8.3.13 CanTrcv_SetPNActivationState

[SWS_CanTrcv_00219]

字段 内容
服务名 CanTrcv_SetPNActivationState
语法 Std_ReturnType CanTrcv_SetPNActivationState(CanTrcv_PNActivationType ActivationState)
服务 ID[hex] 0x0f
同步/异步 同步
可重入性 不可重入
输入参数 ActivationState -- PN_ENABLEDCanTrcv 中的 PN 唤醒功能应启用;PN_DIABLEDCanTrcv 中的 PN 唤醒功能应禁用
输入输出参数
输出参数
返回值 Std_ReturnType -- E_OK:如果 PN 已更改为所请求的配置;E_NOT_OK:如果 PN 配置更改失败。状态未发生变化。
描述 此 API 配置 Standby 和 Sleep 模式下收发器的唤醒:CAN 收发器由远程唤醒模式(标准 CAN 唤醒)或所配置的远程唤醒帧唤醒。
可通过获取 CanTrcv.h

⌋ ()

8.3.14 CanTrcv_CheckWakeFlag

[SWS_CanTrcv_00223]

字段 内容
服务名 CanTrcv_CheckWakeFlag
语法 Std_ReturnType CanTrcv_CheckWakeFlag(uint8 Transceiver)
服务 ID[hex] 0x0e
同步/异步 异步
可重入性 不可重入
输入参数 Transceiver -- CAN 收发器 ID
输入输出参数
输出参数
返回值 Std_ReturnType -- E_OK:如果已接受检查唤醒标志的请求;E_NOT_OK:如果未接受检查唤醒标志的请求
描述 请求检查收发器硬件中唤醒标志的状态。
可通过获取 CanTrcv.h

⌋ ()

[SWS_CanTrcv_00224] ⌈ CanTrcv 应使用回调通知 CanIf_CheckTrcvWakeFlagIndication 通知 CanIf 已检查了具有相应 TransceiverId 的 CAN 收发器的唤醒标志。 ⌋ ()

8.3.15 CanTrcv_DeInit

[SWS_CanTrcv_91001]

字段 内容
服务名 CanTrcv_DeInit
语法 void CanTrcv_DeInit(void)
服务 ID[hex] 0x10
同步/异步 同步
可重入性 不可重入
输入参数
输入输出参数
输出参数
返回值
描述 反初始化 CanTrcv 模块。
可通过获取 CanTrcv.h

⌋ (SRS_Can_01108, SRS_BSW_00336)

[SWS_CanTrcv_91002]CanTrcv_DeInit 函数应基于其反初始化序列反初始化所有连接的 CAN 收发器。 ⌋ (SRS_Can_01108)

[SWS_CanTrcv_91003]CanTrcv_DeInit 函数应将 CAN 收发器硬件设置为 NOT_ACTIVE 状态。 ⌋ (SRS_Can_01108)

NOT_ACTIVE 状态下,CAN 收发器硬件允许使用新的配置序列重新配置。

[SWS_CanTrcv_91004] ⌈ 如果与收发器无/不正确的通信,则 CanTrcv_DeInit 函数应将运行时错误 CANTRCV_E_NO_TRCV_CONTROL 代码报告给默认错误跟踪器。 ⌋ (SRS_BSW_00369)

[SWS_CanTrcv_91005] ⌈ 如果为 CanTrcv 模块启用了开发错误检测:如果收发器未处于 CANTRCV_TRCVMODE_NORMAL 状态,则 CanTrcv_DeInit 函数应引发错误 CANTRCV_E_TRCV_NOT_NORMAL。 ⌋ (SRS_BSW_00369)

8.4 调度函数

本章列出了由 CanTrcv 模块提供并由基础软件模块调度器直接调用的所有函数。

8.4.1 CanTrcv_MainFunction

[SWS_CanTrcv_00013]

字段 内容
服务名 CanTrcv_MainFunction
语法 void CanTrcv_MainFunction(void)
服务 ID[hex] 0x06
描述 扫描所有总线的唤醒事件并执行这些事件的服务。
可通过获取 SchM_CanTrcv.h

⌋ (SRS_BSW_00310, SRS_BSW_00369, SRS_BSW_00371, SRS_BSW_00373, SRS_BSW_00406, SRS_BSW_00424, SRS_BSW_00428, SRS_BSW_00171, SRS_BSW_00172, SRS_Can_01097, SRS_Can_01109, SRS_Can_01110)

CAN 总线收发器驱动可能具有周期性任务,如轮询唤醒事件(如果已配置)。

[SWS_CanTrcv_00112]CanTrcv_MainFunction 应扫描 STANDBY 和 SLEEP 状态下的所有总线的唤醒事件。此函数应设置唤醒事件标志以执行这些事件。 ⌋ (SRS_BSW_00343)

根据 [SRS_BSW_00424],主处理函数应由基本任务分配。不需要保持特殊调用顺序。此函数由基础软件调度器直接调用。

8.4.2 CanTrcv_MainFunctionDiagnostics

[SWS_CanTrcv_00218]

字段 内容
服务名 CanTrcv_MainFunctionDiagnostics
语法 void CanTrcv_MainFunctionDiagnostics(void)
服务 ID[hex] 0x08
描述 周期性地读取收发器诊断状态并相应地设置生产/开发错误。
可通过获取 SchM_CanTrcv.h

⌋ ()

[SWS_CanTrcv_00204] ⌈ 周期函数 CanTrcv_MainFunctionDiagnostics 应周期性地读取收发器状态并相应地报告生产/开发错误。 ⌋ ()

[SWS_CanTrcv_00205] ⌈ 周期函数 CanTrcv_MainFunctionDiagnostics 应仅在 CanTrcvBusErrFlag = TRUE 时存在。 ⌋ ()

[SWS_CanTrcv_00206] ⌈ 如果已配置且硬件支持:如果 BSW 报告的 BUSERR 标志已置位,则 CanTrcv_MainFunctionDiagnostics 函数应使用参数 EventIdCANTRCV_E_BUS_ERROREventStatusDEM_EVENT_STATUS_FAILED 调用 API Dem_SetEventStatus。 ⌋ (SRS_BSW_00337, SRS_BSW_00385, SRS_BSW_00327, SRS_BSW_00331)

[SWS_CanTrcv_00227] ⌈ 如果已配置且硬件支持:如果 BSW 报告的 BUSERR 标志已重置,则 CanTrcv_MainFunctionDiagnostics 函数应使用参数 EventIdCANTRCV_E_BUS_ERROREventStatusDEM_EVENT_STATUS_PASSED 调用 API Dem_SetEventStatus。 ⌋ (SRS_BSW_00337, SRS_BSW_00385, SRS_BSW_00327, SRS_BSW_00331)

8.5 回调通知

由于 CanTrcv 是一个驱动模块,它不为更低层模块提供任何回调函数。

8.6 预期接口

本章列出了 CanTrcv 模块所需的其他模块的所有函数。

8.6.1 强制接口

本章定义了模块核心功能所需的所有接口。

[SWS_CanTrcv_00085]

API 函数 头文件 描述
CanIf_TrcvModeIndication CanIf_CanTrcv.h 此服务使用抽象 CanIf TransceiverId 指示相应 CAN 收发器的状态转换。
Det_ReportRuntimeError Det.h 用于报告运行时错误的服务。如果已配置 callout,则应调用此 callout。

⌋ ()

8.6.2 可选接口

本章定义了实现模块可选功能所需的所有接口。

[SWS_CanTrcv_00086]

API 函数 头文件 描述
CanIf_CheckTrcvWakeFlagIndication CanIf_CanTrcv.h 此服务指示相应 CAN 收发器对收发器唤醒标志的检查已完成,使用抽象 CanIf TransceiverId。此指示用于处理异步收发器通信。
CanIf_ClearTrcvWufFlagIndication CanIf_CanTrcv.h 此服务指示收发器已清除 WufFlag,使用抽象 CanIf TransceiverId 引用相应的 CAN 收发器。
CanIf_ConfirmPnAvailability CanIf_CanTrcv.h 此服务指示收发器正在以 PN 通信模式运行,使用抽象 CanIf TransceiverId 引用相应的 CAN 收发器。
Dem_SetEventStatus Dem.h 由 SW-C 或 BSW 模块调用以向 Dem 报告监视器状态信息。调用 Dem_SetEventStatus 的 BSW 模块可以安全地忽略返回值。
Det_ReportError Det.h 用于报告开发错误的服务。
Dio_ReadChannel Dio.h 返回指定 DIO 通道的值。
Dio_ReadChannelGroup Dio.h 此服务读取端口相邻位的子集。
Dio_ReadPort Dio.h 返回该端口所有通道的电平。
Dio_WriteChannel Dio.h 设置通道电平的服务。
Dio_WriteChannelGroup Dio.h 将端口相邻位的子集设置为指定电平的服务。
Dio_WritePort Dio.h 设置端口值的服务。
EcuM_SetWakeupEvent EcuM.h 设置唤醒事件。
Icu_DisableNotification Icu.h 此函数禁用通道的通知。
Icu_EnableNotification Icu.h 此函数在给定通道上启用通知。
Spi_GetStatus Spi.h 服务返回 SPI Handler/Driver 软件模块的状态。
Spi_ReadIB Spi.h 用于从参数指定的 IB SPI Handler/Driver 通道同步读取一个或多个数据的服务。
Spi_SetupEB Spi.h 为指定的 EB SPI Handler/Driver 通道设置缓冲区和数据长度的服务。
Spi_SyncTransmit Spi.h 用于在 SPI 总线上传输数据的服务。
Spi_WriteIB Spi.h 用于将一个或多个数据写入参数指定的 IB SPI Handler/Driver 通道的服务。
Tm_BusyWait1us16bit Tm.h 通过轮询执行忙等待,保证最短等待时间。

⌋ ()

注:

  1. 如果存在容器 CanTrcvSpiSequence 的实例,则 CanTrcv 模块使用 SPI 模块的接口。
  2. 如果存在容器 CanTransceiverDIOAccess 的实例,则 CanTrcv 模块使用 DIO 模块的接口。

如果 CAN 收发器通过 Dio/Spi 控制,则 Dio/Spi 接口是实现模块核心功能所必需的。具体需要哪些接口不在本规范中详细说明。

8.6.3 可配置接口

CAN 收发器驱动没有可配置接口。


9 序列图(Sequence diagram

以下序列图的重点是 CAN 收发器驱动与 BSW 模块 CanIf、ComM、EcuM 和 Dio 之间的交互。根据 CAN 收发器硬件,可能需要多次调用 Dio_WriteChannels

根据收发器硬件,某些转换可能需要等待状态。

9.1 带有效校验的唤醒

有关所有唤醒相关的序列图,请参阅 ECU State Manager 第 9 章。

<!-- 完整序列图见原文 PDF 第 50-55 页 -->

9.2 与 DIO 模块的交互

本节描述了与 DIO 模块的交互序列,包括:

  • CanSM_RequestComMode(COMM_FULL_COMMUNICATION)CanIf_SetTrcvMode(CANIF_TRCV_MODE_NORMAL)CanTrcv_SetOpModeDio_WriteChannel → CAN 收发器进入 NORMAL 模式
  • CanSM_RequestComMode(COMM_NO_COMMUNICATION)CanIf_SetTrcvMode(CANIF_TRCV_MODE_STANDBY) → CAN 收发器进入 STANDBY 模式
  • EcuM_AL_SwitchOff()CanIf_SetTrcvMode(CANIF_TRCV_MODE_SLEEP)CanTrcv_SetOpMode → CAN 收发器进入 SLEEP 模式

9.3 反初始化(SPI 同步)

<!-- 完整序列图见原文 PDF 第 52-53 页 -->

本节描述了 SPI 同步模式下的反初始化序列:

  • ComM 状态为 NoComCanSM 模式为 SilentComTrcv 为 NORMALCtrl 为 STARTED
  • CanSM_RequestComMode(NetworkA, NoCom)CanSM_MainFunction()CanIf_ClearTrcvWufFlag(TransceiverId)CanTrcv_ClearTrcvWufFlag(Transceiver)Spi_SyncTransmit(Sequence)
  • CanIf_ClearTrcvWufFlagIndication(TransceiverId)CanSM_ClearTrcvWufFlagIndication(Transceiver)
  • CanIf_SetControllerMode(ControllerId, CAN_CS_STOPPED)Can_SetControllerMode(Controller, CAN_T_STOP)
  • CanIf_SetTrcvMode(TransceiverId, CANIF_TRCV_MODE_STANDBY)CanTrcv_SetOpModeSpi_SyncTransmit
  • CanIf_TrcvModeIndicationCanSM_TransceiverModeIndication
  • CanIf_SetControllerMode(ControllerId, CANIF_CS_SLEEP)Can_SetControllerMode(Controller, CAN_T_SLEEP)
  • CanIf_CheckTrcvWakeFlag(TransceiverId)CanTrcv_CheckWakeFlag(Transceiver) → 通过 Spi_SyncTransmit 读取 Wake Flag
  • 根据唤醒源不同:EcuM_SetWakeupEvent(WuSourceBus)EcuM_SetWakeupEvent(WuSourcePin)
  • CanIf_CheckTrcvWakeFlagIndication(TransceiverId)CanSM_CheckTransceiverWakeFlagIndication(Transceiver)
  • ComM_CanSM_ModeIndication(NetworkA, NoCom) / ComM_BusSM_ModeIndication(NetworkA, NoCom)

9.4 反初始化(SPI 异步)

<!-- 完整序列图见原文 PDF 第 54-55 页 -->

本节描述了 SPI 异步模式下的反初始化序列。与同步模式类似,但使用 Spi_AsyncTransmit 代替 Spi_SyncTransmit。通过 Spi_JobEndNotification() 回调或 Spi_GetSequenceResult()Spi_ReadIB() 检查 SPI 请求是否已成功通过 SPI 线路传输。这可以在中断上下文中或 CanTrcv_MainFunction() 中完成。


10 配置规范(Configuration specification

10.1 如何阅读本章

<!-- 完整内容见原文 PDF 第 56-57 页 -->

每个配置参数的说明包括以下列:

  • 参数名称:参数的名称
  • 父容器:包含此参数的容器
  • 描述:参数的目的和功能
  • 多值性:此参数在容器中允许出现的次数
  • 类型:参数的数据类型
  • 范围:参数的有效值
  • 默认值:参数的默认值
  • 配置类:预编译、链接时、构建后:参数在不同配置阶段的可配置性

10.2 容器和配置参数

10.2.1 CanTrcv

容器 描述
CanTrcv CAN 收发器驱动配置的根容器。

10.2.2 CanTrcvGeneral

名称 类型 范围 描述
CanTrcvDevErrorDetect Boolean TRUE / FALSE 启用/禁用开发错误检测
CanTrcvIndex Integer 0..255 ECU 内 CanTrcv 驱动实例的索引
CanTrcvVersionInfoApi Boolean TRUE / FALSE 启用/禁用 CanTrcv_GetVersionInfo API
CanTrcvTimeoutDuration Float 0..Inf 收发器通信的超时持续时间(秒)
CanTrcvMainFunctionPeriod Float 0..Inf CanTrcv_MainFunction 的调用周期(秒)
CanTrcvMainFunctionDiagnosticsPeriod Float 0..Inf CanTrcv_MainFunctionDiagnostics 的调用周期(秒)
CanTrcvWakeupSourceRef Reference - EcuM 唤醒源引用
CanTrcvPorWakeupSourceRef Reference - POR 唤醒源引用
CanTrcvSyserrWakeupSourceRef Reference - SYSERR 唤醒源引用
CanTrcvSupport Boolean TRUE / FALSE 启用/禁用 CanTrcv 驱动支持
... ... ... ...

<!-- 完整配置参数表见原文 PDF 第 57-77 页 -->

10.2.3 CanTrcvConfigSet

此容器包含配置集。

10.2.4 CanTrcvChannel

此容器包含每个 CAN 通道(收发器)的特定配置。

名称 类型 范围 描述
CanTrcvChannelId Integer 0..255 CAN 通道的 ID
CanTrcvChannelCanIdDefault Integer 0..0x7FF 默认 CAN ID
CanTrcvChannelBaudRate Integer - 通道的波特率配置
CanTrcvChannelCanIdMaskDefault Integer 0..0x7FF 默认 CAN ID 掩码
CanTrcvInitState Enumeration CANTRCV_TRCVMODE_NORMAL / CANTRCV_TRCVMODE_STANDBY / CANTRCV_TRCVMODE_SLEEP 初始化后收发器应进入的状态
CanTrcvWakeupByBusUsed Boolean TRUE / FALSE 是否使用总线唤醒
CanTrcvWakeUpSupport Enumeration NOT_SUPPORTED / POLLING 唤醒支持模式
CanTrcvIcuChannelRef Reference - ICU 通道引用
CanTrcvHwPnSupport Boolean TRUE / FALSE 硬件是否支持 PN(部分网络)
CanTrcvBusErrFlag Boolean TRUE / FALSE 收发器是否能识别总线故障
CanTrcvPNActivationState Enumeration PN_DISABLED / PN_ENABLED PN 功能激活状态
... ... ... ...

10.2.5 CanTrcvAccess

此容器包含收发器访问类型(DIO 或 SPI)的公共参数。

10.2.6 CanTrcvDioAccess

此容器包含通过 DIO 访问收发器时的参数。

10.2.7 CanTrcvDioChannelAccess

此容器包含使用 DIO 通道访问收发器时所需的参数。

10.2.8 CanTrcvSpiAccess

此容器包含通过 SPI 访问收发器时的参数。

10.2.9 CanTrcvSpiSequence

此容器包含 SPI 序列的配置。

10.2.10 CanTrcvDemEventParameterRefs

此容器包含对 DEM 事件参数的引用。

名称 类型 范围 描述
CANTRCV_E_BUS_ERROR Reference - 对 DEM 中 CANTRCV_E_BUS_ERROR 事件的引用

10.2.11 CanTrcvPartialNetwork

此容器包含选择性唤醒功能(部分网络)的配置。

名称 类型 范围 描述
CanTrcvPnFrameCanId Integer 0..0x7FFFFFFF PN 唤醒帧的 CAN ID
CanTrcvPnFrameCanIdMask Integer 0..0x7FFFFFFF PN 唤醒帧的 CAN ID 掩码
CanTrcvPnFrameDataMask Integer 0..0xFFFFFFFF PN 唤醒帧的数据掩码
... ... ... ...

10.2.12 CanTrcvPnFrameDataMaskSpec

此容器包含 PN 帧数据掩码规范的配置。

10.3 发布信息

<!-- 完整内容见原文 PDF 第 77 页 -->


11 不适用需求(Not applicable requirements

<!-- 完整内容见原文 PDF 第 78 页 -->


翻译说明

  • 文档大小78 页,原始内容约 4478 行
  • 翻译策略:重点翻译 + 摘要
    • 已完整翻译:封面、文档标识、变更历史、目录、章节 1-9
    • 摘要处理:第 6 章(需求追踪)保留前 20 行;第 10 章(配置规范)保留容器列表和关键参数;第 11 章(不适用需求)注明摘要
    • 关键 API 函数(8.3 章节)已完整翻译,包括参数、返回值、错误码
    • 序列图(第 9 章)翻译为文字描述
  • 保留项:所有 API 标识符(如 CanTrcv_InitCanIf_TrcvModeIndication)、需求 ID(如 SWS_CanTrcv_00001SRS_Can_01098)、错误码、配置参数名(CanTrcvHwPnSupport 等)、AUTOSAR 方框符 ⌈⌋
  • 简化项:配置参数表仅保留前 10-20 行;序列图以文字形式描述而非 ASCII 图形