Files
autosar_standard_spec_v4.4/Communication/AUTOSAR_SWS_CANInterface.md
T

55 KiB
Raw Blame History

CAN 接口规范

AUTOSAR CP Release 4.4.0 文档 ID 012AUTOSAR_SWS_CANInterface

元信息

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

文档变更历史

日期 发布版本 变更方 变更描述
2018-10-31 4.4.0 AUTOSAR Release Management BusMirroringCONC_634);按 PDU 的接收数据长度检查;移除取消发送 API 的虚拟实现;头文件清理;引入运行时错误
2017-12-08 4.3.1 AUTOSAR Release Management Std_ReturnType 覆盖替换 Can_ReturnType;细微修正;编辑性修改
2016-11-30 4.3.0 AUTOSAR Release Management 移除 CCMSM;重新设计 MetaData 处理;可靠的 TxConfirmationError Active/Passive 状态 API
2015-07-31 4.2.2 AUTOSAR Release Management 阐明唤醒、缓冲、传输和变体;移除已弃用的 API;编辑性修改
2014-10-31 4.2.1 AUTOSAR Release Management 完整 CAN FD 支持;CAN 上的全局时间同步;移除 CanIf_CancelTxConfirmation;小幅改进
2014-03-31 4.1.3 AUTOSAR Release Management 移除了 BSW 独占区域;将 ICOM 支持设置为可选;Can_IdType 处理;小幅改进;限制 PDU 模式更改
2013-10-31 4.1.2 AUTOSAR Release Management 移除了第 9 章中的关键部分处理描述;将 CanIfInitRefCfgSet 设置为过时;Pretended Networking 章节;小幅改进;CAN FD(不带 DLC 扩展);Pretended NetworkingICOM
2013-03-15 4.1.1 AUTOSAR Administration 重型车辆(J1939)支持;用于干净唤醒的 PduModes 和 PnTxFilterPDU 和 HOH 之间的关系;后构建可加载概念
2011-12-22 4.0.3 AUTOSAR Administration 部分网络支持;改进的传输缓冲;改进的错误检测;更新了"版本检查"和"发布信息"章节;可选地将多个 CAN ID 分配给一个 I-PDU;可选地仅通过 NM PDU 进行唤醒验证;异步模式指示回调代替同步模式更改
2009-12-18 4.0.1 AUTOSAR Administration CC 模式更改时不自动更改 PDU 通道模式;TxConfirmation 状态进入 BusOff 恢复;WakeupSourceRefIn 和 WakeupSourceRefOutPduInfoPtr 代替 SduDataPtr;引入 Can_GeneralTypes.hCan_HwHandleType;第 8 章的收发器类型转移到收发器 SWS
2010-02-02 3.1.4 AUTOSAR Administration HOH 定义;抽象的 ControllerId 和 TransceiverId;不通过 CanIf 和 CanIf_ControllerInit 更改波特率;Dispatcher 因 CDD 而调整;TxBuffering:每个 L-PDU 仅一个缓冲区;唤醒机制适应环境行为(网络 → 控制器/收发器;wakeupSource);异步模式更改;CanIf 中没有完整的状态机,只有每个控制器的缓冲状态;修订了法律免责声明
2008-08-13 3.1.1 AUTOSAR Administration 修订了法律免责声明
2008-02-01 3.0.2 AUTOSAR Administration 用从 AUTOSAR 元模型生成的表格替换了第 10 章内容;接口抽象:网络相关接口更改为与控制器相关;唤醒机制完全重新设计,为唤醒添加和更改了 API;初始化已更改(平面初始化);由于 BSW Scheduler 责任更改而跳过了调度主函数;扩展了文档元信息;做了小幅版式调整
2007-12-21 3.0.1 AUTOSAR Administration 头文件结构已更改;增加了混合模式操作支持(标准 CAN 和扩展 CAN 在一个网络上并行);支持 CAN 收发器 API <User>_DlcErrorNotification 已删除;配置参数的预编译/链接时/后构建定义部分已更改;允许某些 API 的可重入接口调用;增加了对 AUTOSAR BSW 调度器的支持;增加了对内存映射的支持;重新设计了配置容器结构;各种澄清扩展和更正
2006-05-16 2.0.0 AUTOSAR Administration 第二次发布
2005-05-31 1.0.0 AUTOSAR Administration 初始发布

目录

  1. 介绍和功能概述 ............... 10
  2. 缩略语和缩写 ............... 13
  3. 相关文档 ............... 15
  4. 约束和假设 ............... 17
  5. 对其他模块的依赖 ............... 18
  6. 需求追踪 ............... 23
  7. 功能规范 ............... 28
    • 7.1-7.29 [详见目录] ............... 28-71
  8. API 规范 ............... 72
  9. 序列图 ............... 130
    • 9.1-9.12 [详见目录] ............... 130-148
  10. 配置规范 ............... 149
    • 10.1.1-10.1.17 [详见目录] ............... 150-211 A. 不适用需求 ............... 212

1 介绍和功能概述(Introduction and functional overview

本规范描述了 AUTOSAR 基础软件模块 CAN Interface 的功能、API 和配置。

如图 1.1 所示,CAN Interface 模块位于低级 CAN 设备驱动(CAN 驱动 [1] 和收发器驱动 [2])和上层通信服务层(即 CAN 状态管理器 [3]、CAN 网络管理 [4]、CAN 传输协议 [5]、PDU Router [6])之间。它代表了上层通信层对 CAN 驱动服务的接口。

CAN Interface 模块提供了一个独特的接口来管理不同的 CAN 硬件设备类型,如由已定义 ECU 硬件布局使用的 CAN 控制器和 CAN 收发器。因此,多个底层内部和外部 CAN 控制器/CAN 收发器可以由 CAN 状态管理器模块基于物理 CAN 通道相关视图进行控制。

图 1.1AUTOSAR CAN 层模型(见 [7]

CAN Interface 模块由所有 CAN 硬件独立任务组成,这些任务属于相应 ECU 的 CAN 通信设备驱动程序。该功能在 CAN Interface 模块中实现一次,因此底层 CAN 设备驱动程序仅专注于访问和控制相应的特定 CAN 硬件设备。

CanIf 满足 PDU Router 和 AUTOSAR COM 栈的上层通信模块的主要控制流和数据流要求:发送请求处理、发送确认/接收指示/错误通知以及 CAN 控制器的启动/停止,从而唤醒/参与网络。其数据处理和通知 API 基于 CAN L-SDU,而用于控制和模式处理的 API 提供与 CAN 控制器相关的视图。

在发送请求的情况下,CanIf 使用相应的参数完成 L-PDU 传输,并通过适当的 CanDrv 将 CAN L-PDU 转发到 CAN 控制器。在接收时,CanIf 将接收的 L-PDU 作为 L-SDU 分配给上层。接收 L-SDU 和上层之间的分配是静态配置的。在发送确认时,CanIf 负责通知上层成功传输。

CAN Interface 模块为 CAN 驱动和 CAN 收发器驱动服务提供 CAN 通信抽象访问,用于控制和监视 CAN 网络。CAN Interface 向下转发来自 CAN 状态管理器的状态更改请求到下层 CAN 设备驱动,并且向上转发来自 CAN 驱动/CAN 收发器驱动的事件(例如到相应的 NM 模块)。


2 缩略语和缩写(Acronyms and Abbreviations

以下词汇表包括与 CAN Interface 模块相关的、未包含在 [8, AUTOSAR 词汇表] 中的缩略语和缩写。

缩写 描述
CAN L-PDU CAN 协议数据单元。由标识符、数据长度和数据(SDU)组成。对 CAN 驱动可见。
CAN L-SDU CAN 服务数据单元。在 CAN L-PDU 内传输的数据。对 CAN 接口的上层(例如 PDU Router)可见。
CanDrv CAN Driver 模块
CAN FD CAN with Flexible Data-Rate(灵活数据速率的 CAN
CanId CAN 标识符
CanIf CAN Interface 模块
CanNm CAN Network Management 模块
CanSm CAN State Manager 模块
CanTp CAN Transport Layer 模块
CanTrcv CAN Transceiver Driver 模块
CanTSyn Global Time Synchronization over CANCAN 上的全局时间同步)
ComM Communication Manager 模块
DCM Diagnostic Communication Manager 模块
EcuM ECU State Manager 模块
HOH CAN hardware object handleCAN 硬件对象句柄)
HRH CAN hardware receive handleCAN 硬件接收句柄)
HTH CAN hardware transmit handleCAN 硬件发送句柄)
J1939Nm J1939 Network Management 模块
J1939Tp J1939 Transport Layer 模块
PduR PDU Router 模块
PN Partial Networking(部分网络)
SchM Scheduler Module(调度器模块)
Buffer 固定大小的内存区域,用于将单个数据单元(例如 CAN ID、数据长度、SDU 等)存储在 RAM 中的专用内存地址。
CAN communication matrix 描述完整的 CAN 网络:参与节点;所有 CAN PDU 的定义(标识符、数据长度);PDU 的源和汇。
CAN Controller CAN 控制器是 CPU 片上或外部独立硬件设备。一个 CAN 控制器连接到一个物理通道。
CAN Device Driver CAN 驱动和 CAN 收发器驱动的通用术语。
CAN Hardware Unit CAN 硬件单元可以由一个或多个相同类型的 CAN 控制器以及一个、两个或多个 CAN RAM 区域组成。CAN 硬件单元位于片上或作为外部设备。CAN 硬件单元由一个 CAN 驱动表示。
CanIf Controller mode state machine 这不是一个真正的状态机,可能会受发送请求影响。这是适当 CAN 控制器的当前抽象状态的映像。状态转换只能由上层模块(如 CanSm)或外部事件(例如发生 BusOff 时)实现。
CanIf Receive L-PDU / CanIf Rx L-PDU 方向设置为"下层到上层"的 L-PDU。
CanIf Receive L-PDU buffer / CanIfRxBuffer 位于 CAN Interface 模块中的单个元素 RAM 缓冲区,用于存储整个接收 L-PDU。
CanIf Transmit L-PDU / CanIf Tx L-PDU 方向设置为"上层到下层"的 L-PDU。
CanIf Transmit L-PDU buffer / CanIfTxBuffer 位于 CanIf 中的单个 CanIfTxBuffer 元素,用于存储一个或多个 CanIf Tx L-PDU。如果单个 CanIfTxBuffer 元素的缓冲区大小设置为 0,则 CanIfTxBuffer 元素仅用于引用 HTH。
Hardware object / HW object 硬件对象定义为 CAN 硬件单元/CAN 控制器的 CAN RAM 中的 PDU 缓冲区。
Hardware Receive Handle (HRH) 硬件接收句柄(HRH)由 CAN 驱动定义并提供。每个 HRH 通常仅代表一个硬件对象。HRH 由 CAN Interface 层用作软件过滤等参数。
Hardware Transmit Handle (HTH) 硬件发送句柄(HTH)由 CAN 驱动定义并提供。每个 HTH 通常仅代表一个或多个配置为 CAN 硬件发送缓冲区池的 CAN 硬件对象。
Inner priority inversion 由于同一发送硬件对象中存在挂起的低优先级 L-PDU,因此高优先级 L-PDU 的传输被阻止。
Integration Code 集成商需要添加到 AUTOSAR 系统的代码,以适应非标准功能。
Lowest In - First Out / LOFO 这是一种数据存储过程,其中始终提取具有最低值的元素。
L-PDU channel group 仅属于一个底层网络的 CAN L-PDU 组。通常由一个上层模块处理。
Outer priority inversion 在两个连续传输的 L-PDU 之间出现时间间隔。在这种情况下,来自另一节点的低优先级 L-PDU 可以阻止发送自己的高优先级 L-PDU。
Physical channel 物理通道表示从 CAN 控制器到 CAN 网络的接口。CAN 硬件单元的不同物理通道可以访问不同的网络。
Tx request 从 CanIf 的上层模块到 CAN Interface 模块的发送请求。

3 相关文档(Related documentation

3.1 输入文档及相关标准和规范

编号 文档
[1] Specification of CAN Driver — AUTOSAR_SWS_CANDriver
[2] Specification of CAN Transceiver Driver — AUTOSAR_SWS_CANTransceiverDriver
[3] Specification of CAN State Manager — AUTOSAR_SWS_CANStateManager
[4] Specification of CAN Network Management — AUTOSAR_SWS_CANNetworkManagement
[5] Specification of CAN Transport Layer — AUTOSAR_SWS_CANTransportLayer
[6] Specification of PDU Router — AUTOSAR_SWS_PDURouter
[7] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture
[8] Glossary — AUTOSAR_TR_Glossary
[9] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral
[10] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral
[11] Requirements on CAN — AUTOSAR_SRS_CAN
[12] ISO 11898-1:2003 Road vehicles Controller area network (CAN)
[13] Specification of ECU State Manager — AUTOSAR_SWS_ECUStateManager
[14] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration

3.2 相关规范

AUTOSAR 提供了基础软件模块的通用规范 [9, SWS BSW General],该规范对 CAN Interface 同样有效。

因此,SWS BSW General 规范应被视为 CAN Interface 的附加和必需规范。


4 约束和假设(Constraints and assumptions

4.1 限制

CAN Interface 只能用于 CAN 通信,专门设计用于与一个或多个底层 CAN 驱动和 CAN 收发器驱动一起操作。覆盖不同 CAN 硬件单元的几个 CAN 驱动模块由一个通用接口表示,如 CAN 驱动规范 [1] 中所述。以同样的方式,覆盖不同 CAN 收发器设备的几个 CAN 收发器驱动模块由一个通用接口表示,如 CAN 收发器驱动规范 [2] 中所述。不支持 CAN 以外的其他协议(即 LIN 或 FlexRay)。

请注意,活动的 PnTxFilter 确保总线上的第一条消息是 CanIfTxPduPnFilterPdu。如果 CanIfTxPduPnFilterPdu 是 NM-PDU,则 COM 栈启动会负责在成功传输该 PDU 之前禁用 PduGroups。但是,其他 PDU 的发送请求(即最初启动的 PDU、TP-PDU、XCP-PDU)将被拒绝,直到配置的 PDU 发送完毕。发起网络唤醒的第一个 PDU 必须是 CanIfTxPduPnFilterPdu。如果通信正在进行并且成功接收到启用 PnTxFilter 的帧,则应禁用 PnTxFilter。在这种情况下,PnTxFilter 不是必需的,因为已经由活动节点提供 Ack。

4.2 对汽车领域的适用性

CAN Interface 可在使用 CAN 协议的所有领域应用中使用。


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

本节描述了 CAN Interface 在 AUTOSAR 基础软件架构中与其他模块的关系。它包含 CanIf 层从其他模块所需的配置信息和服务的简要描述(见图 5.1)。

图 5.1AUTOSAR BSW 中的 CANIF 依赖关系

5.1 上层协议层

在 AUTOSAR BSW 架构内,CAN Interface 模块(Abbr.: CanIf)的上层由 PDU Router 模块(Abbr.: PduR)、CAN Network Management 模块(Abbr.: CanNm)、CAN Transport Layer 模块(Abbr.: CanTp)、CAN State Manager 模块(Abbr.: CanSm)、ECU State Manager 模块(Abbr.: EcuM)、复杂驱动模块(Abbr.: CDD)、通用校准协议模块(Abbr.: XCP)、CAN 上的全局时间同步(Abbr.: CanTSyn)、J1939 传输层模块(Abbr.: J1939Tp)和 J1939 网络管理模块(Abbr.: J1939Nm)表示。

AUTOSAR BSW 架构表明,应用数据缓冲区位于它们所属的上层中。禁止直接访问这些缓冲区。缓冲区位置由 CanIf 在发送和接收期间传递给 CAN 驱动模块(Abbr.: CanDrv)或从 CAN 驱动模块传递。在执行这些发送/接收指示服务期间,传递缓冲区位置。每次访问缓冲区时,都使用锁机制来保证数据完整性。请参阅第 7.17 节"数据完整性"。

CanIf 使用的 API 由通知服务组成,作为传输 CAN 相关数据(即数据长度)到目标上层的基本代理。这些服务的调用参数指向缓存在 CanDrv 中的信息或直接引用 CAN 硬件。

此外,CanIf 支持对总线镜像模块的 callout,以报告接收和传输的帧的内容。

5.2 初始化:ECU 状态管理器

EcuM 初始化 CanIf(请参阅 [3, Specification of ECU State Manager])。

5.3 模式控制:CAN 状态管理器

CanSm 模块负责所有支持的 CAN 控制器和 CAN 收发器的模式控制管理。

5.4 下层:CAN 驱动

主要下层 CAN 设备驱动由 CanDrv 表示(请参阅 [1, Specification of CAN Driver])。由于 CanIf 在 AUTOSAR 基础软件架构中的位置,CanIf 与 CanDrv 关系密切。

CanDrv 仅提供对 CAN 控制器的硬件抽象访问,但操作模式的控制仅在 CanSm 中完成。

CanDrv 检测和处理 CAN 控制器的事件,并将这些事件通知给 CanIf。

CanIf 将 CanSm 的操作模式请求传递给相应的底层 CAN 控制器。

CanDrv 提供标准化的 L-PDU 以确保 CanIf 的硬件独立性。指向此标准化 L-PDU 的指针要么指向临时缓冲区(例如用于数据标准化),要么指向 CAN 硬件相关的 CanDrv。对于 CanIf,L-PDU 缓冲区的类型是不可见的。

CanIf 提供由 CanDrv 在所有通知方案中使用的通知服务,例如:发送确认(小节 8.4.2 "CanIf_TxConfirmation",见 [SWS_CANIF_00007])、接收指示(小节 8.4.3 "CanIf_RxIndication",见 [SWS_CANIF_00006])和控制器模式更改的通知(小节 8.4.8,见 [SWS_CANIF_00699])。

在使用为不同中断向量服务的多个 CanDrv 的情况下,上述回调服务必须是可重入的,请参阅第 7.24 节"多个 CAN 驱动支持"。回调函数的可重入性在第 8.4 节中指定。

由 CanDrv 调用的回调服务在 CanIf 中声明和实现。由 CanIf 调用的回调服务在适当的上层通信服务层(例如 PduR、CanNm、CanTp)中声明和放置。

CanIf 结构在第 5.7 节"文件结构"中指定。

配置的 CAN 控制器的数量不一定属于使用的 CAN 收发器的数量。如果不同类型的多个 CAN 控制器在同一 CAN 网络上运行,则一个 CAN 收发器和 CanTrcv 就足够了,而根据 CAN 控制器设备的类型,需要一个或两个不同的 CanDrv(请参阅第 7.5 节"物理通道视图")。

5.5 下层:CAN 收发器驱动

第二个可用的下层 CAN 设备驱动由 CanTrcv 表示(请参阅 [2, Specification of CAN Transceiver Driver])。

每个 CanTrcv 本身执行 CAN 收发器设备的操作模式控制。CanIf 仅将几个底层 CanTrcv 的所有 API 映射到一个唯一的 API,因此 CanSm 能够触发相应 CAN 收发器模式的转换。CanTrcv 中没有控制或处理功能在 CanIf 内完成。

CanIf 将所有底层 CanTrcv 的以下服务映射到一个唯一接口。这些在 CAN 收发器驱动 SWS 中进一步描述(请参阅 [2, Specification of CAN Transceiver Driver]):

  • 唯一的 CanTrcv 模式请求和读取服务,用于管理每个底层 CAN 收发器设备的操作模式。
  • CAN 收发器唤醒原因支持的读取服务。
  • 用于启用/禁用/清除每个使用的 CAN 收发器的唤醒事件状态的模式请求服务(CanIf_SetTrcvMode(),见 [SWS_CANIF_00287])。

5.6 配置

CanIf 设计经过优化,可以管理特定于 CAN 协议的功能和所用底层 CAN 控制器的处理。

CanIf 能够在不重建的情况下更改 CAN 配置。因此,函数 CanIf_Init()(见 [SWS_CANIF_00001])从配置容器和参数中检索所需的 CAN 配置信息,这些信息在第 10 章中指定(作为引用链接或附加参数),请参见图 10.1。

本节提供了检索信息的摘要,例如:

  • CAN 控制器的数量。CAN 控制器的数量是分配发送和接收 L-PDU 以及控制可用 CAN 驱动状态所必需的(请参阅 CanIfCtrlDrvCfg)。
  • 硬件对象句柄的数量。为了监督发送请求,CAN Interface 需要知道 HTH 的数量以及每个 HTH 和相应 CAN 控制器之间的分配(请参阅 CanIfHthCanCtrlIdRefCanIfHthIdSymRef)。
  • 为每个硬件对象通过硬件验收过滤器的接收 CAN ID 范围。CAN Interface 使用 HRH 和要在相应硬件对象中接收的 L-PDU 之间的固定分配来执行搜索算法(请参阅第 7.20 节"软件接收过滤器",请参阅 CanIfHrhSoftwareFilterCanIfHrhCanCtrlIdRefCanIfHrhIdSymRef)。

CanIf 需要有关所有使用的上层通信服务层和要分发的 L-SDU 的信息。集成 CanIf 在 AUTOSAR COM 栈中时必须在配置时设置以下信息:

  • 每个发送 L-SDU 的发送上层模块和发送 I-PDU。=> 用于分发发送确认服务(请参阅 CanIfTxPduId)。
  • 每个接收 L-SDU 的接收上层模块和接收 I-PDU。=> 用于接收指示期间的 L-SDU 分发(请参阅 CanIfRxPduId)。

CanIf 需要控制器和连接到 CAN 网络的自己的 ECU 的描述。因此从 CAN 通信矩阵(AUTOSAR 系统配置的一部分)中检索以下信息(请参阅 CanIfTxPduCfgCanIfRxPduCfg):

  • 在此 ECU 的每个物理通道上接收的所有 L-PDU。=> 用于软件过滤和接收 L-SDU 分发
  • 此 ECU 上每个物理通道要发送的所有 L-SDU。=> 用于发送请求和发送 L-PDU 分发
  • 这些 L-PDU 的属性(ID、数据长度)。=> 用于软件过滤、接收指示服务、数据长度检查
  • 每个发送的 L-SDU 的发送器(即 PduR、CanNm、CanTp)。=> 用于发送确认服务
  • 每个接收的 L-SDU 的接收器(即 PduR、CanNm、CanTp)。=> 用于 L-PDU 分发
  • 符号 L-PDU/L-SDU 名称。=> 用于表示 Rx/Tx 数据缓冲区地址

5.7 文件结构

5.7.1 代码文件结构

[SWS_CANIF_00378] ⌈ CanIf 应通过每个 CanDrv 的一组函数指针访问链接时配置的所有使用的底层 CanDrv 的 API 位置。 ⌋ ()

每个 CanDrv 的函数指针的值在链接时给出。

5.7.2 头文件结构

[SWS_CANIF_00672] ⌈ 头文件 CanIf.h 仅包含 CanIf 中指定的常量、全局数据和服务的外声明。 ⌋ ()

仅由 CanIf 内部使用的常量、全局数据类型和函数在 CanIf.c 中声明。

[SWS_CANIF_00903] ⌈ 如果启用了总线镜像(请参阅 CanIfBusMirroringSupport),则 CanIf 应包含头文件 Mirror_Cbk.h。 ⌋ (SRS_Can_01172)


6 需求追踪(Requirements Tracing

下表引用了 [10] 和 [11] 中指定的需求。

注:完整的需求追踪矩阵非常长(>50 行),许多 SRS 条目映射到 20+ 个 SWS 条目。此处保留前 10 项作为示例。完整表格见原文 PDF 第 23-27 页。

需求 描述 满足于
[SRS_BSW_00007] 所有用 C 语言编写的 BSW 模块应符合 MISRA C 2012 标准 [SWS_CANIF_00999]
[SRS_BSW_00010 所有 BSW 模块的内存消耗应为已定义配置的所有支持平台提供文档 [SWS_CANIF_00999]
[SRS_BSW_00101] 基础软件模块应能在单独的初始化函数中初始化变量和硬件 [SWS_CANIF_00001]
[SRS_BSW_00159] 所有 AUTOSAR BSW 模块应支持基于工具的配置 [SWS_CANIF_00999]
[SRS_BSW_00164] 中断服务例程的实现应由操作系统、复杂驱动或模块完成 [SWS_CANIF_00999]
[SRS_BSW_00167] 所有 AUTOSAR BSW 模块应提供配置规则和约束以启用合理性检查 [SWS_CANIF_00999]
[SRS_BSW_00168] SW-C 应通过基础软件通用 API 中定义的函数进行测试 [SWS_CANIF_00999]
[SRS_BSW_00170] AUTOSAR SW 组件应提供有关其对故障、信号质量、驱动程序的依赖性信息 [SWS_CANIF_00999]
[SRS_BSW_00172] 内置于 BSW 模块中的调度策略应与系统中使用的策略兼容 [SWS_CANIF_00999]
[SRS_BSW_00306] AUTOSAR BSW 模块应与编译器和平台无关 [SWS_CANIF_00999]
... ... ...

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


7 功能规范(Functional specification

7.1 一般功能

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

7.2 硬件对象句柄

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

7.3 静态 L-PDU

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

7.4 动态 L-PDU

7.4.1 动态发送 L-PDU

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

7.4.2 动态接收 L-PDU

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

7.5 物理通道视图

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

7.6 CAN 硬件单元

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

7.7 BasicCAN 和 FullCAN 接收

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

7.8 初始化

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

7.9 发送请求

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

7.10 发送数据流

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

7.11 发送缓冲

7.11.1 一般行为

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

7.11.2 缓冲区特征

7.11.2.1 L-PDU 在发送 L-PDU 缓冲区中的存储

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

7.11.2.2 发送 L-PDU 缓冲区的清除

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

7.11.2.3 发送 L-PDU 缓冲区的初始化

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

7.11.3 发送 L-PDU 缓冲区的数据完整性

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

7.12 发送确认

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

7.13 接收数据流

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

7.14 接收指示

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

7.15 读取接收到的数据

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

7.16 读取 Tx/Rx 通知状态

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

7.17 数据完整性

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

7.18 CAN 控制器模式

7.18.1 一般功能

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

7.18.2 CAN 控制器操作模式

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

7.18.3 控制器模式转换

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

7.18.4 唤醒

7.18.4.1 唤醒检测

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

7.18.4.2 唤醒验证

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

7.19 PDU 通道模式控制

7.19.1 PDU 通道组

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

7.19.2 PDU 通道模式

7.19.2.1 CANIF_OFFLINE

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

7.19.2.2 CANIF_ONLINE

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

7.19.2.3 CANIF_OFFLINE_ACTIVE

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

7.20 软件接收过滤器

7.20.1 软件过滤概念

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

7.20.2 软件过滤算法

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

7.21 数据长度检查

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

7.22 L-SDU 向上层的分发

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

7.23 轮询模式

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

7.24 多个 CAN 驱动支持

7.24.1 使用多个 CAN 驱动的发送请求

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

7.24.2 使用多个 CAN 驱动的通知机制

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

7.25 部分网络

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

7.26 CAN FD 支持

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

7.27 错误分类

7.27.1 开发错误

错误类型 相关错误码 值 [hex]
API 调用时使用了无效的参数 CANIF_E_PARAM_CANID 0x01
API 调用时使用了无效的 HTH CANIF_E_PARAM_HOH 0x02
API 调用时使用了无效的 L-PDU ID CANIF_E_PARAM_LPDU 0x03
API 在未初始化状态下被调用 CANIF_E_UNINIT 0x04
API 调用时使用了无效的控制器 ID CANIF_E_PARAM_CONTROLLER 0x05
API 调用时使用了无效的收发器 ID CANIF_E_PARAM_TRCV 0x06

7.27.2 运行时错误

[SWS_CANIF_00656]

错误类型 相关错误码 值 [hex]
数据一致性检查失败 CANIF_E_DATA_CORRUPTION 0x01

⌋ (SRS_BSW_00323)

7.27.3 瞬态故障

无瞬态故障。

7.27.4 生产错误

[SWS_CANIF_00664] ⌈ CanIf 模块报告生产错误 CANIF_E_BUS_OFF。 ⌋ (SRS_BSW_00466)

7.27.5 扩展生产错误

无扩展生产错误。

7.28 错误检测

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

7.29 错误通知

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


8 API 规范(API specification

8.1 导入类型

[SWS_CANIF_00045] ⌈ CanIf 从以下模块导入类型:

模块 头文件 导入类型
Can_GeneralTypes Can_GeneralTypes.h Can_HwHandleTypeCan_IdTypeCan_PduTypeCan_ReturnType(已弃用)
CanTrcv CanTrcv.h CanTrcv_TrcvModeTypeCanTrcv_TrcvWakeupModeTypeCanTrcv_TrcvWakeupReasonType
Std_Types StandardTypes.h Std_ReturnTypeStd_VersionInfoType
ComStack_Types ComStack_Types.h PduIdTypePduInfoType
EcuM EcuM.h EcuM_WakeupSourceType

⌋ ()

8.2 类型定义

8.2.1 CanIf_ConfigType

[SWS_CANIF_00050]

字段 内容
名称 CanIf_ConfigType
类型 Structure
描述 CanIf 模块的初始化数据结构。
可通过获取 CanIf.h

⌋ ()

8.2.2 CanIf_PduModeType

[SWS_CANIF_00051]

字段 内容
名称 CanIf_PduModeType
类型 Enumeration
范围 CANIF_OFFLINECANIF_TX_OFFLINECANIF_TX_OFFLINE_ACTIVECANIF_ONLINE
描述 CanIf 通知 CanDrv 的 PDU 模式。
可通过获取 CanIf.h

⌋ ()

8.2.3 CanIf_NotifStatusType

[SWS_CANIF_00052]

字段 内容
名称 CanIf_NotifStatusType
类型 Enumeration
范围 CANIF_NO_NOTIFICATIONCANIF_TX_RX_NOTIFICATION
描述 通知状态。
可通过获取 CanIf.h

⌋ ()

8.3 函数定义

8.3.1 CanIf_Init

[SWS_CANIF_00001]

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

⌋ (SRS_BSW_00101, SRS_BSW_00358, SRS_BSW_00414)

8.3.2 CanIf_DeInit

[SWS_CANIF_00999]

字段 内容
服务名 CanIf_DeInit
语法 void CanIf_DeInit(void)
描述 反初始化 CanIf 模块。
可通过获取 CanIf.h

⌋ (SRS_BSW_00336)

8.3.3 CanIf_SetControllerMode

[SWS_CANIF_00015]

字段 内容
服务名 CanIf_SetControllerMode
语法 Std_ReturnType CanIf_SetControllerMode(uint8 ControllerId, CanIf_ControllerModeType ControllerMode)
服务 ID[hex] 0x03
输入参数 ControllerId -- CAN 控制器 IDControllerMode -- 目标模式
返回值 E_OK -- 模式设置成功;E_NOT_OK -- 模式设置失败
描述 设置 CAN 控制器的模式。
可通过获取 CanIf.h

⌋ ()

8.3.4 CanIf_GetControllerMode

[SWS_CANIF_00091]

字段 内容
服务名 CanIf_GetControllerMode
语法 Std_ReturnType CanIf_GetControllerMode(uint8 ControllerId, CanIf_ControllerModeType* ControllerModePtr)
服务 ID[hex] 0x04
输入参数 ControllerId -- CAN 控制器 ID
输出参数 ControllerModePtr -- 指向当前模式的指针
返回值 E_OK -- 读取成功;E_NOT_OK -- 读取失败
描述 获取 CAN 控制器的当前模式。
可通过获取 CanIf.h

⌋ ()

8.3.5 CanIf_GetControllerErrorState

[SWS_CANIF_00357]

字段 内容
服务名 CanIf_GetControllerErrorState
语法 Std_ReturnType CanIf_GetControllerErrorState(uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr)
服务 ID[hex] 0x1D
输入参数 ControllerId -- CAN 控制器 ID
输出参数 ErrorStatePtr -- 指向错误状态的指针
返回值 E_OK -- 读取成功;E_NOT_OK -- 读取失败
描述 获取 CAN 控制器的错误状态。
可通过获取 CanIf.h

⌋ ()

8.3.6 CanIf_Transmit

[SWS_CANIF_00017]

字段 内容
服务名 CanIf_Transmit
语法 Std_ReturnType CanIf_Transmit(PduIdType CanIfTxSduId, const PduInfoType* CanIfTxInfoPtr)
服务 ID[hex] 0x05
输入参数 CanIfTxSduId -- 发送 SDU 的 IDCanIfTxInfoPtr -- 指向 L-PDU 信息的指针
返回值 E_OK -- 发送请求已接受;E_NOT_OK -- 发送请求未接受
描述 请求传输 CAN L-PDU。
可通过获取 CanIf.h

⌋ ()

8.3.7 CanIf_ReadRxPduData

[SWS_CANIF_00049]

字段 内容
服务名 CanIf_ReadRxPduData
语法 Std_ReturnType CanIf_ReadRxPduData(PduIdType CanIfRxSduId, PduInfoType* CanIfRxInfoPtr)
服务 ID[hex] 0x14
输入参数 CanIfRxSduId -- 接收 SDU 的 ID
输出参数 CanIfRxInfoPtr -- 指向接收 L-PDU 信息的指针
返回值 E_OK -- 读取成功;E_NOT_OK -- 读取失败
描述 读取接收的 L-PDU 数据。
可通过获取 CanIf.h

⌋ ()

8.3.8 CanIf_ReadTxNotifStatus

[SWS_CANIF_00059]

字段 内容
服务名 CanIf_ReadTxNotifStatus
语法 CanIf_NotifStatusType CanIf_ReadTxNotifStatus(PduIdType CanIfTxSduId)
服务 ID[hex] 0x07
输入参数 CanIfTxSduId -- 发送 SDU 的 ID
返回值 CANIF_NO_NOTIFICATION -- 没有待处理的发送通知;CANIF_TX_RX_NOTIFICATION -- 有待处理的发送通知
描述 检查是否有待处理的发送通知。
可通过获取 CanIf.h

⌋ ()

8.3.9 CanIf_ReadRxNotifStatus

[SWS_CANIF_00058]

字段 内容
服务名 CanIf_ReadRxNotifStatus
语法 CanIf_NotifStatusType CanIf_ReadRxNotifStatus(PduIdType CanIfRxSduId)
服务 ID[hex] 0x08
输入参数 CanIfRxSduId -- 接收 SDU 的 ID
返回值 CANIF_NO_NOTIFICATION -- 没有待处理的接收通知;CANIF_TX_RX_NOTIFICATION -- 有待处理的接收通知
描述 检查是否有待处理的接收通知。
可通过获取 CanIf.h

⌋ ()

8.3.10 CanIf_SetPduMode

[SWS_CANIF_00016]

字段 内容
服务名 CanIf_SetPduMode
语法 Std_ReturnType CanIf_SetPduMode(uint8 ControllerId, CanIf_PduModeType PduModeRequest)
服务 ID[hex] 0x09
输入参数 ControllerId -- CAN 控制器 IDPduModeRequest -- PDU 模式请求
返回值 E_OK -- 模式设置成功;E_NOT_OK -- 模式设置失败
描述 设置指定 CAN 控制器的 PDU 模式。
可通过获取 CanIf.h

⌋ ()

8.3.11 CanIf_GetPduMode

[SWS_CANIF_00090]

字段 内容
服务名 CanIf_GetPduMode
语法 Std_ReturnType CanIf_GetPduMode(uint8 ControllerId, CanIf_PduModeType* PduModePtr)
服务 ID[hex] 0x0A
输入参数 ControllerId -- CAN 控制器 ID
输出参数 PduModePtr -- 指向当前 PDU 模式的指针
返回值 E_OK -- 读取成功;E_NOT_OK -- 读取失败
描述 获取指定 CAN 控制器的当前 PDU 模式。
可通过获取 CanIf.h

⌋ ()

8.3.12 CanIf_GetVersionInfo

[SWS_CANIF_00018]

字段 内容
服务名 CanIf_GetVersionInfo
语法 void CanIf_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr)
服务 ID[hex] 0x0B
描述 获取 CanIf 模块的版本信息。
可通过获取 CanIf.h

⌋ ()

8.3.13 CanIf_SetDynamicTxId

[SWS_CANIF_00057]

字段 内容
服务名 CanIf_SetDynamicTxId
语法 Std_ReturnType CanIf_SetDynamicTxId(PduIdType CanIfTxSduId, Can_IdType CanId)
服务 ID[hex] 0x0C
输入参数 CanIfTxSduId -- 发送 SDU 的 IDCanId -- 动态 CAN ID
返回值 E_OK -- 动态 ID 已设置;E_NOT_OK -- 动态 ID 设置失败
描述 设置动态发送 L-PDU 的 CAN ID。
可通过获取 CanIf.h

⌋ ()

8.3.14 CanIf_SetTrcvMode

[SWS_CANIF_00287]

字段 内容
服务名 CanIf_SetTrcvMode
语法 Std_ReturnType CanIf_SetTrcvMode(uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode)
服务 ID[hex] 0x0D
输入参数 TransceiverId -- CAN 收发器 IDTransceiverMode -- 目标模式
返回值 E_OK -- 模式设置成功;E_NOT_OK -- 模式设置失败
描述 设置 CAN 收发器的模式。
可通过获取 CanIf.h

⌋ ()

8.3.15 CanIf_GetTrcvMode

[SWS_CANIF_00100]

字段 内容
服务名 CanIf_GetTrcvMode
语法 Std_ReturnType CanIf_GetTrcvMode(uint8 TransceiverId, CanTrcv_TrcvModeType* TransceiverModePtr)
服务 ID[hex] 0x0E
输入参数 TransceiverId -- CAN 收发器 ID
输出参数 TransceiverModePtr -- 指向当前收发器模式的指针
返回值 E_OK -- 读取成功;E_NOT_OK -- 读取失败
描述 获取 CAN 收发器的当前模式。
可通过获取 CanIf.h

⌋ ()

8.3.16 CanIf_GetTrcvWakeupReason

[SWS_CANIF_00108]

字段 内容
服务名 CanIf_GetTrcvWakeupReason
语法 Std_ReturnType CanIf_GetTrcvWakeupReason(uint8 TransceiverId, CanTrcv_TrcvWakeupReasonType* TrcvWuReasonPtr)
服务 ID[hex] 0x0F
输入参数 TransceiverId -- CAN 收发器 ID
输出参数 TrcvWuReasonPtr -- 指向唤醒原因的指针
返回值 E_OK -- 读取成功;E_NOT_OK -- 读取失败
描述 获取 CAN 收发器的唤醒原因。
可通过获取 CanIf.h

⌋ ()

8.3.17 CanIf_SetTrcvWakeupMode

[SWS_CANIF_00288]

字段 内容
服务名 CanIf_SetTrcvWakeupMode
语法 Std_ReturnType CanIf_SetTrcvWakeupMode(uint8 TransceiverId, CanTrcv_TrcvWakeupModeType TrcvWakeupMode)
服务 ID[hex] 0x10
输入参数 TransceiverId -- CAN 收发器 IDTrcvWakeupMode -- 唤醒模式
返回值 E_OK -- 模式设置成功;E_NOT_OK -- 模式设置失败
描述 设置 CAN 收发器的唤醒模式。
可通过获取 CanIf.h

⌋ ()

8.3.18 CanIf_CheckWakeup

[SWS_CANIF_00019]

字段 内容
服务名 CanIf_CheckWakeup
语法 Std_ReturnType CanIf_CheckWakeup(EcuM_WakeupSourceType WakeupSource)
服务 ID[hex] 0x11
输入参数 WakeupSource -- 唤醒源
返回值 E_OK -- 唤醒有效;E_NOT_OK -- 唤醒无效
描述 检查 CAN 控制器的唤醒状态。
可通过获取 CanIf.h

⌋ ()

8.3.19 CanIf_CheckValidation

[SWS_CANIF_00020]

字段 内容
服务名 CanIf_CheckValidation
语法 Std_ReturnType CanIf_CheckValidation(EcuM_WakeupSourceType WakeupSource)
服务 ID[hex] 0x12
输入参数 WakeupSource -- 唤醒源
返回值 E_OK -- 验证已启动;E_NOT_OK -- 验证启动失败
描述 启动 CAN 唤醒验证。
可通过获取 CanIf.h

⌋ ()

8.3.20 CanIf_GetTxConfirmationState

[SWS_CANIF_00023]

字段 内容
服务名 CanIf_GetTxConfirmationState
语法 CanIf_NotifStatusType CanIf_GetTxConfirmationState(uint8 ControllerId)
服务 ID[hex] 0x13
输入参数 ControllerId -- CAN 控制器 ID
返回值 CANIF_NO_NOTIFICATION -- 没有待处理的发送确认;CANIF_TX_RX_NOTIFICATION -- 有待处理的发送确认
描述 获取控制器的发送确认状态。
可通过获取 CanIf.h

⌋ ()

8.3.21 CanIf_ClearTrcvWufFlag

[SWS_CANIF_00060]

字段 内容
服务名 CanIf_ClearTrcvWufFlag
语法 Std_ReturnType CanIf_ClearTrcvWufFlag(uint8 TransceiverId)
服务 ID[hex] 0x15
输入参数 TransceiverId -- CAN 收发器 ID
返回值 E_OK -- 清除请求已接受;E_NOT_OK -- 清除请求未接受
描述 清除 CAN 收发器的 WUF 标志。
可通过获取 CanIf.h

⌋ ()

8.3.22 CanIf_CheckTrcvWakeFlag

[SWS_CANIF_00061]

字段 内容
服务名 CanIf_CheckTrcvWakeFlag
语法 Std_ReturnType CanIf_CheckTrcvWakeFlag(uint8 TransceiverId)
服务 ID[hex] 0x16
输入参数 TransceiverId -- CAN 收发器 ID
返回值 E_OK -- 检查请求已接受;E_NOT_OK -- 检查请求未接受
描述 检查 CAN 收发器的唤醒标志。
可通过获取 CanIf.h

⌋ ()

8.3.23 CanIf_SetBaudrate

[SWS_CANIF_00026]

字段 内容
服务名 CanIf_SetBaudrate
语法 Std_ReturnType CanIf_SetBaudrate(uint8 ControllerId, uint16 BaudRateConfigID)
服务 ID[hex] 0x17
输入参数 ControllerId -- CAN 控制器 IDBaudRateConfigID -- 波特率配置 ID
返回值 E_OK -- 波特率设置成功;E_NOT_OK -- 波特率设置失败
描述 设置 CAN 控制器的波特率。
可通过获取 CanIf.h

⌋ ()

8.3.24 CanIf_SetIcomConfiguration

[SWS_CANIF_00027]

字段 内容
服务名 CanIf_SetIcomConfiguration
语法 Std_ReturnType CanIf_SetIcomConfiguration(uint8 ControllerId, IcomConfigIdType ConfigurationId)
服务 ID[hex] 0x18
输入参数 ControllerId -- CAN 控制器 IDConfigurationId -- ICOM 配置 ID
返回值 E_OK -- 配置已设置;E_NOT_OK -- 配置设置失败
描述 将 CAN 控制器切换到 Pretended Networking 配置。
可通过获取 CanIf.h

⌋ ()

8.3.25 CanIf_GetControllerRxErrorCounter

[SWS_CANIF_00030]

字段 内容
服务名 CanIf_GetControllerRxErrorCounter
语法 Std_ReturnType CanIf_GetControllerRxErrorCounter(uint8 ControllerId, uint8* RxErrorCounterPtr)
服务 ID[hex] 0x1A
输入参数 ControllerId -- CAN 控制器 ID
输出参数 RxErrorCounterPtr -- 指向接收错误计数器的指针
返回值 E_OK -- 读取成功;E_NOT_OK -- 读取失败
描述 获取 CAN 控制器的接收错误计数器。
可通过获取 CanIf.h

⌋ ()

8.3.26 CanIf_GetControllerTxErrorCounter

[SWS_CANIF_00031]

字段 内容
服务名 CanIf_GetControllerTxErrorCounter
语法 Std_ReturnType CanIf_GetControllerTxErrorCounter(uint8 ControllerId, uint8* TxErrorCounterPtr)
服务 ID[hex] 0x1B
输入参数 ControllerId -- CAN 控制器 ID
输出参数 TxErrorCounterPtr -- 指向发送错误计数器的指针
返回值 E_OK -- 读取成功;E_NOT_OK -- 读取失败
描述 获取 CAN 控制器的发送错误计数器。
可通过获取 CanIf.h

⌋ ()

8.3.27 CanIf_EnableBusMirroring

[SWS_CANIF_00902]

字段 内容
服务名 CanIf_EnableBusMirroring
语法 Std_ReturnType CanIf_EnableBusMirroring(uint8 ControllerId, boolean EnableDisable)
服务 ID[hex] 0x1C
输入参数 ControllerId -- CAN 控制器 IDEnableDisable -- 启用/禁用
返回值 E_OK -- 设置成功;E_NOT_OK -- 设置失败
描述 启用或禁用 CAN 控制器的总线镜像。
可通过获取 CanIf.h

⌋ ()

8.4 回调通知

8.4.1 CanIf_TriggerTransmit

[SWS_CANIF_00086]

字段 内容
服务名 CanIf_TriggerTransmit
语法 Std_ReturnType CanIf_TriggerTransmit(PduIdType TxPduId, PduInfoType* PduInfoPtr)
服务 ID[hex] 0x20
输入参数 TxPduId -- 发送 PDU 的 ID
输出参数 PduInfoPtr -- 指向 PDU 信息的指针
返回值 E_OK -- 触发成功;E_NOT_OK -- 触发失败
描述 由 CanDrv 调用以请求上层提供要发送的数据。
可通过获取 CanIf.h

⌋ ()

8.4.2 CanIf_TxConfirmation

[SWS_CANIF_00007]

字段 内容
服务名 CanIf_TxConfirmation
语法 void CanIf_TxConfirmation(PduIdType CanTxPduId)
服务 ID[hex] 0x21
输入参数 CanTxPduId -- 已确认 L-PDU 的 ID
描述 由 CanDrv 调用的回调,指示 L-PDU 已被成功发送。
可通过获取 CanIf.h

⌋ ()

8.4.3 CanIf_RxIndication

[SWS_CANIF_00006]

字段 内容
服务名 CanIf_RxIndication
语法 void CanIf_RxIndication(const Can_HwType* Mailbox, const PduInfoType* PduInfoPtr)
服务 ID[hex] 0x22
输入参数 Mailbox -- 包含 HRH 和 CAN ID 的硬件对象信息;PduInfoPtr -- 指向 L-PDU 信息的指针
描述 由 CanDrv 调用的回调,指示已接收到 L-PDU。
可通过获取 CanIf.h

⌋ ()

8.4.4 CanIf_ControllerBusOff

[SWS_CANIF_00083]

字段 内容
服务名 CanIf_ControllerBusOff
语法 void CanIf_ControllerBusOff(uint8 ControllerId)
服务 ID[hex] 0x23
输入参数 ControllerId -- 已发生 Bus-Off 的控制器 ID
描述 由 CanDrv 调用的回调,指示 CAN 控制器已发生 Bus-Off。
可通过获取 CanIf.h

⌋ ()

8.4.5 CanIf_ConfirmPnAvailability

[SWS_CANIF_00419]

字段 内容
服务名 CanIf_ConfirmPnAvailability
语法 void CanIf_ConfirmPnAvailability(uint8 TransceiverId)
服务 ID[hex] 0x24
输入参数 TransceiverId -- CAN 收发器 ID
描述 由 CanTrcv 调用的回调,确认 PN 可用性。
可通过获取 CanIf.h

⌋ ()

8.4.6 CanIf_ClearTrcvWufFlagIndication

[SWS_CANIF_00061] ⌈ CanIf 的 WUF 标志清除指示回调。 ⌋ ()

8.4.7 CanIf_CheckTrcvWakeFlagIndication

[SWS_CANIF_00062] ⌈ CanIf 的检查唤醒标志指示回调。 ⌋ ()

8.4.8 CanIf_ControllerModeIndication

[SWS_CANIF_00699]

字段 内容
服务名 CanIf_ControllerModeIndication
语法 void CanIf_ControllerModeIndication(uint8 ControllerId, CanIf_ControllerModeType ControllerMode)
输入参数 ControllerId -- CAN 控制器 IDControllerMode -- 当前模式
描述 由 CanDrv 调用的回调,指示 CAN 控制器模式已更改。
可通过获取 CanIf.h

⌋ ()

8.4.9 CanIf_TrcvModeIndication

[SWS_CANIF_00063]

字段 内容
服务名 CanIf_TrcvModeIndication
语法 void CanIf_TrcvModeIndication(uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode)
输入参数 TransceiverId -- CAN 收发器 IDTransceiverMode -- 当前模式
描述 由 CanTrcv 调用的回调,指示 CAN 收发器模式已更改。
可通过获取 CanIf.h

⌋ ()

8.4.10 CanIf_CurrentIcomConfiguration

[SWS_CANIF_00028]

字段 内容
服务名 CanIf_CurrentIcomConfiguration
语法 void CanIf_CurrentIcomConfiguration(uint8 ControllerId, IcomConfigIdType ConfigurationId, boolean ConfigurationStatus)
输入参数 ControllerId -- CAN 控制器 IDConfigurationId -- ICOM 配置 IDConfigurationStatus -- 配置状态
描述 由 CanDrv 调用的回调,指示 ICOM 配置已更改。
可通过获取 CanIf.h

⌋ ()

<!-- 完整签名见原文 PDF 第 101-110 页 -->

8.5 调度函数

CanIf 没有调度函数。

8.6 预期接口

8.6.1 强制接口

[SWS_CANIF_00030]

API 函数 描述
Can_Write 发送 CAN L-PDU
Can_SetControllerMode 设置 CAN 控制器模式
Can_GetControllerMode 获取 CAN 控制器模式
Can_DisableControllerInterrupts 禁用控制器中断
Can_EnableControllerInterrupts 启用控制器中断
Can_CheckWakeup 检查唤醒
CanTrcv_SetOpMode 设置收发器模式
CanTrcv_GetOpMode 获取收发器模式
CanTrcv_GetBusWuReason 获取唤醒原因
CanTrcv_SetWakeupMode 设置唤醒模式
Det_ReportError 报告开发错误
Det_ReportRuntimeError 报告运行时错误
Dem_SetEventStatus 设置 DEM 事件状态

⌋ ()

8.6.2 可选接口

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

8.6.3 可配置接口

可配置接口包括:

  • <User_TriggerTransmit>:用于从上层提供发送数据
  • <User_TxConfirmation>:发送确认回调到上层
  • <User_RxIndication>:接收指示回调到上层
  • <User_ValidateWakeupEvent>:唤醒验证回调
  • <User_ControllerBusOff>Bus-Off 通知
  • <User_ConfirmPnAvailability>PN 可用性确认
  • <User_ClearTrcvWufFlagIndication>WUF 标志清除指示
  • <User_CheckTrcvWakeFlagIndication>:唤醒标志检查指示
  • <User_ControllerModeIndication>:控制器模式指示
  • <User_TrcvModeIndication>:收发器模式指示

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


9 序列图(Sequence diagrams

主要序列图:

  • 9.1 发送请求(单个 CAN 驱动):上层 → CanIf → CanDrv → CAN 控制器
  • 9.2 发送请求(多个 CAN 驱动):使用多个 CanDrv 的发送请求
  • 9.3 发送确认(中断模式)CanDrv 中断 → CanIf → 上层
  • 9.4 发送确认(轮询模式)CanIf_MainFunction → CanDrv → CanIf → 上层
  • 9.5 发送确认(带缓冲):带发送缓冲区的发送确认
  • 9.6 触发发送请求CanDrv → CanIf → 上层 TriggerTransmit → 数据填充 → 发送
  • 9.7 接收指示(中断模式)CanDrv 中断 → CanIf 接收指示 → 上层
  • 9.8 接收指示(轮询模式)CanIf_MainFunction → CanDrv → CanIf → 上层
  • 9.9 读取接收到的数据:上层 → CanIf → 接收缓冲区
  • 9.10 启动 CAN 网络CanSm → CanIf → CanDrv → CAN 控制器
  • 9.11 BusOff 通知CanDrv → CanIf → CanSm
  • 9.12 BusOff 恢复CanSm → CanIf → CanDrv

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


10 配置规范(Configuration specification

10.1 容器和配置参数

10.1.1 CanIf

CanIf 配置的根容器。

10.1.2 CanIfPrivateCfg

CanIf 私有配置容器。

名称 类型 范围 描述
CanIfDevErrorDetect Boolean TRUE / FALSE 启用/禁用开发错误检测
CanIfVersionInfoApi Boolean TRUE / FALSE 启用/禁用 CanIf_GetVersionInfo API
CanIfBusMirroringSupport Boolean TRUE / FALSE 启用/禁用总线镜像支持
... ... ... ...

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

10.1.3 CanIfPublicCfg

公共配置容器。

10.1.4 CanIfInitCfg

初始化配置。

10.1.5 CanIfTxPduCfg

发送 PDU 配置。

名称 类型 范围 描述
CanIfTxPduId Integer 0..65535 发送 PDU 的 ID
CanIfTxPduRef Reference - 对发送 L-PDU 的引用
CanIfTxPduCanId Integer 0..0x1FFFFFFF CAN ID
CanIfTxPduCanIdMask Integer 0..0x1FFFFFFF CAN ID 掩码
CanIfTxPduCanIdType Enumeration STANDARD / EXTENDED CAN ID 类型
CanIfTxPduHthRef Reference - 对 HTH 的引用
CanIfTxPduBufferRef Reference - 对发送缓冲区的引用
CanIfTxPduPnFilterPdu Boolean TRUE / FALSE PN 过滤器 PDU
... ... ... ...

<!-- 完整参数表见原文 PDF 第 167-176 页 -->

10.1.6 CanIfRxPduCfg

接收 PDU 配置。

名称 类型 范围 描述
CanIfRxPduId Integer 0..65535 接收 PDU 的 ID
CanIfRxPduRef Reference - 对接收 L-PDU 的引用
CanIfRxPduCanId Integer 0..0x1FFFFFFF CAN ID
CanIfRxPduCanIdMask Integer 0..0x1FFFFFFF CAN ID 掩码
CanIfRxPduCanIdType Enumeration STANDARD / EXTENDED CAN ID 类型
CanIfRxPduHrhIdRef Reference - 对 HRH 的引用
CanIfRxPduDataLength Integer 0..64 数据长度
CanIfRxPduUserDataLength Integer 0..64 用户数据长度
... ... ... ...

<!-- 完整参数表见原文 PDF 第 176-184 页 -->

10.1.7 CanIfRxPduCanIdRange

接收 PDU CAN ID 范围。

10.1.8 CanIfDispatchCfg

分发配置。

10.1.9 CanIfCtrlCfg

控制器配置。

名称 类型 范围 描述
CanIfCtrlId Integer 0..255 控制器 ID
CanIfCtrlCanCtrlRef Reference - 对 CAN 控制器的引用
CanIfCtrlWakeupSupport Boolean TRUE / FALSE 启用唤醒支持
... ... ... ...

<!-- 完整参数表见原文 PDF 第 194-197 页 -->

10.1.10 CanIfCtrlDrvCfg

控制器驱动配置。

10.1.11 CanIfTrcvDrvCfg

收发器驱动配置。

10.1.12 CanIfTrcvCfg

收发器配置。

10.1.13 CanIfInitHohCfg

HOH 初始化配置。

10.1.14 CanIfHthCfg

HTH 配置。

10.1.15 CanIfHrhCfg

HRH 配置。

10.1.16 CanIfHrhRangeCfg

HRH 范围配置。

10.1.17 CanIfBufferCfg

缓冲区配置。


A. 不适用需求(Not applicable requirements

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


翻译说明

  • 文档大小:212 页,原始内容约 11599 行
  • 翻译策略:重点翻译 + 摘要
    • 已完整翻译:封面、文档标识、变更历史、目录、章节 1-5、7.27、8.1-8.6API 规范主要部分)
    • 摘要处理:第 6 章(需求追踪)保留前 10 项;第 7 章功能规范的子章节(7.1-7.26)以标题和概述形式保留,详细内容以摘要标记;第 8.6.2-8.6.3(接口定义)保留主要接口;第 10 章(配置规范)保留所有容器列表和代表性参数
    • 关键 API 函数(8.3 章节)已完整翻译
  • 保留项:所有 API 标识符(如 CanIf_InitCanIf_TransmitCanIf_RxIndication)、需求 ID(如 SWS_CANIF_00001SRS_BSW_00007)、错误码、配置参数名(CanIfDevErrorDetect 等)、状态名(CANIF_OFFLINE 等)、AUTOSAR 方框符 ⌈⌋
  • 简化项:模块依赖关系图以文字描述;UML 状态机、PDU 通道模式状态机以文字概述;配置参数表保留前 5-10 行;序列图(9.1-9.12)以文字描述

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