Files
autosar_standard_spec_v4.4/Communication/AUTOSAR_SWS_CANTransportLayer.md
T

41 KiB
Raw Blame History

CAN 传输层规范

AUTOSAR CP Release 4.4.0 文档 ID 014AUTOSAR_SWS_CANTransportLayer

元信息

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

文档变更历史

日期 发布版本 变更方 变更描述
2018-10-31 4.4.0 AUTOSAR Release Management 移除了一些半双工的限制;细微修正
2017-12-08 4.3.1 AUTOSAR Release Management 阐明了元数据提供;扩展 CAN-FD 数据长度;推出运行时错误;细微修正
2016-11-30 4.3.0 AUTOSAR Release Management 统一了 API 函数描述;阐明了 CAN 2.0 和 CAN-FD 的并行处理;引入了可靠的 TxConfirmation;阐明了使用 MetaData 进行上层寻址
2015-07-31 4.2.2 AUTOSAR Release Management 文件结构修正;FC_OVFL 阐明;DET 重命名和扩展合并
2014-10-31 4.2.1 AUTOSAR Release Management 引入对 CAN 灵活数据速率(CAN FD)的支持;细微修正和澄清
2014-03-31 4.1.3 AUTOSAR Release Management 修订填充行为;阐明 CanTpMainFunctionPeriod 与其他定时器的关系;修订 CanTp_RxIndication() 原型;扩展参数 CanTpTc 用于接收取消
2013-10-31 4.1.2 AUTOSAR Release Management E_OK/E_NOT_OK 替换 NTFRSLT_OK/NTFRSLT_<other>;阐明 N-PDU 表的意外到达处理;编辑性修改;移除了关于变更文档的章节
2013-03-15 4.1.1 AUTOSAR Administration 改进了错误处理;细化了 PostBuild 概念;引入 HDV 支持;阐明缓冲区处理
2011-12-22 4.0.3 AUTOSAR Administration CanTp 不再报告生产错误;元模型结构变更;与新缓冲区概念协调;将 BlockSize 改为静态可配置而非最大值
2011-04-15 4.0.2 AUTOSAR Administration 错误描述的修正和改进;API 服务修正;缓冲区处理相关澄清;更新第 6 章中的表格以支持半双工和全双工
2009-12-18 4.0.1 AUTOSAR Administration 新增混合寻址模式;CanTp 支持全双工模式;新缓冲概念;新增 CanTp 参数更改可能性;修订了法律免责声明
2007-12-21 3.0.1 AUTOSAR Administration 增加了发送取消功能;DataLength 仅检查过小的 DLCCanTp220);N-Pdu 映射限制(SWS_CanTp_00248);扩展了文档元信息;版式小幅调整
2007-07-24 2.1.16 AUTOSAR Administration 修订了"用户建议";新增"修订信息"
2007-01-24 2.1.15 AUTOSAR Administration 阐明并修正错误管理:列出生产/开发错误以及错误情况下的行为;新增 SWS_CanTp_00166 和 SWS_CanTp_00167 以避免上层未提供缓冲区时的阻塞情况;移除 CanTpRxWftMax 容器 CanTpTxNSdu 中的该参数;为 Det_ReportError 调用新增 1 个参数;新增头文件包含;配置章节中新增 CanTpNSa 容器;修订了法律免责声明
2006-11-28 2.1 AUTOSAR Administration 文档结构适配通用的 Release 2.0 SWS 模板
2005-05-31 1.0 AUTOSAR Administration 初始发布

目录

  1. 介绍和功能概述 ............... 8
  2. 缩略语和缩写 ........... 11
  3. 相关文档 ............... 14
  4. 约束和假设 ............... 16
  5. 对其他模块的依赖 ............... 17
  6. 需求追踪 ............... 21
  7. 功能规范 ............... 23
  8. API 规范 ............... 48
  9. 序列图 ............... 60
  10. 配置规范 ............... 72
  11. 不适用需求 ............... 91

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

本规范定义了 AUTOSAR 基础软件模块 CAN 传输层(CanTp)的功能、API 和配置。

CanTp 是位于 PDU Router 和 CAN Interface 模块之间的模块(见图 1)。CAN TP 模块的主要目的是对超过 8 字节(在 CAN FD 情况下为超过 64 字节)的 CAN I-PDU 进行分段和重组。

PDU Router 将 AUTOSAR COM 和 DCM I-PDU 部署到不同的通信协议上。通过网络系统类型(例如 CAN、LIN 和 FlexRay)的路由取决于 I-PDU 标识符。PDU Router 还确定是否必须使用传输协议。最后,当没有速率转换时,此模块执行网关功能。

CAN InterfaceCanIf)提供相同的机制来访问 CAN 总线通道,而不考虑其位置(µC 内部/外部)。从 CAN 控制器的位置(片上/板上),它提取了 ECU 硬件布局和 CAN 驱动数量。因为 CanTp 只处理传输协议帧(即 SF、FF、CF 和 FC PDU),所以根据 N-PDU IDCAN Interface 必须将 I-PDU 转发到 CanTp 或 PduR。

+------------------------------------------------------------------+
|  Signals                                                         |
|  [DCM] [COM]  [PDU multi-plexer]   [NM Module]  [ComM]  [Generic]|
|  I-PDU  I-PDU  I-PDU                I-PDU        NM Data   NM    |
|        PDU Router                                                  |
|     I-PDU              I-PDU         I-PDU                       |
|  FlexRay TP     CAN TP        LIN TP                                |
|     N-PDU         N-PDU         N-PDU                              |
|         Communication HW Abstraction                              |
|  FlexRay Iface   CAN Iface   LIN Iface                              |
|     L-PDU         L-PDU       L-PDU                                |
|         Communication Drivers                                     |
|  FlexRay Driver  CAN Driver   LIN Low Level Driver                  |
+------------------------------------------------------------------+

图 1AUTOSAR 通信栈

根据 AUTOSAR 基础软件架构,CanTp 提供以下服务:

  • 发送方向的数据分段
  • 接收方向的数据重组
  • 数据流控制
  • 分段会话中的错误检测
  • 发送取消
  • 接收取消

AUTOSAR 决定将基础软件模块规范基于现有标准,因此本 AUTOSAR CAN 传输层规范基于国际标准 ISO 15765,这是汽车领域最常用的标准。

ISO 15765(包含四个部分)描述了两个适用的 CAN 传输层规范:ISO 15765-2(针对 OEM 增强诊断 [14])和 ISO 15765-4(针对 OBD 诊断 [16])。关于传输层,ISO 15765-4(涵盖数据链路层和物理层的 ISO 15765 部分)与 ISO 15765-2 相比有一些限制/补充。为了在 ISO 15765-2 和 ISO 15765-4 之间不存在不兼容问题,差异将通过 CAN 传输层配置解决。

虽然 CAN 传输协议主要用于车辆诊断系统,但它也已被开发用于处理来自需要传输层协议的其他基于 CAN 的系统的需求。


2 缩略语和缩写(Acronyms and abbreviations

本文档中使用的前缀表示法如下:

前缀 描述
I- 与 AUTOSAR COM 交互层相关
L- 与 CAN Interface 模块相关,等同于逻辑链路控制(数据链路层的上半部分——下半部分称为媒体访问控制)
N- 与 CAN 传输层相关,等同于 OSI 网络层

以下是与 CAN 传输层特定、因此未包含在 AUTOSAR 词汇表中的所有缩略语和缩写的描述:

关键术语:

术语 描述
CAN L-SDU 这是 CAN Interface 模块的 SDU。它类似于 CAN N-PDU,但从 CAN Interface 模块的角度来看。
CAN LSduId 这是 CAN Interface 内 SDU 的唯一标识符。它用于引用 L-SDU 的路由属性。因此,为了通过其 API 与 CAN Interface 交互,上层使用 CAN LSduId 引用 CAN L-SDU 信息结构。
CAN N-PDU 这是 CAN 传输层的 PDU。它包含唯一标识符、数据长度和数据(协议控制信息加上整个 N-SDU 或其一部分)。
CAN N-SDU 这是 CAN 传输层的 SDU。在 AUTOSAR 架构中,它是从 PDU Router 传来的一组数据。
CAN N-SDU Info Structure 这是 CAN 传输层内部常量结构,包含用于处理相关 CAN N-SDU 的传输、接收、分段和重组的特定 CAN 传输层信息。
CAN NSduId CAN 传输层内唯一的 SDU 标识符。它用于引用 N-SDU 的路由属性。因此,为了通过其 API 与 CAN 传输层交互,上层使用 CAN NSduId 引用 CAN N-SDU 信息结构。
I-PDU 这是 AUTOSAR COM 模块的 PDU。
PDU 在分层系统中,它指的是在给定层的协议中指定的数据单元。它包含该层的用户数据(SDU)以及可能的协议控制信息。此外,层 X 的 PDU 是其下一层 X-1 的 SDU(即 (X)-PDU = (X-1)-SDU)。
PduInfoType 此类型指的是用于存储处理 PDU(或 SDU)的发送/接收基本信息(即指向其有效载荷的 RAM 指针和相应的长度(以字节为单位))的结构。
SDU 在分层系统中,这指的是由给定层服务的用户发送的一组数据,并被传输到对等服务用户,同时在语义上保持不变。

缩写:

缩写 描述
BS Block Size(块大小)
Can CAN Driver 模块
CAN CF CAN Consecutive Frame N-PDU(连续帧)
CAN FC CAN Flow Control N-PDU(流控制)
CAN FF CAN First Frame N-PDU(首帧)
CAN SF CAN Single Frame N-PDU(单帧)
CanIf CAN Interface
CanTp CAN Transport Layer
CanTrcv CAN Transceiver 模块
CF 参见"CAN CF"
Com AUTOSAR COM 模块
Dcm Diagnostic Communication Manager 模块
DEM Diagnostic Event Manager
DET Default Error Tracer
DLC Data Length CodeCAN PDU 中描述 SDU 长度的部分)
FC 参见"CAN FC"
FF 参见"CAN FF"
FIM Function Inhibition Manager
Mtype Message Type(可能的值:diagnostics、remote diagnostics
N_AI Network Address Information(参见 ISO 15765-2
N_Ar 接收方传输 CAN 帧(任何 N-PDU)的时间(参见 ISO 15765-2
N_As 发送方传输 CAN 帧(任何 N-PDU)的时间(参见 ISO 15765-2
N_Br 传输下一个流控制 N-PDU 的时间(参见 ISO 15765-2
N_Bs 接收下一个流控制 N-PDU 的时间(参见 ISO 15765-2
N_Cr 接收下一个连续帧 N-PDU 的时间(参见 ISO 15765-2
N_Cs 传输下一个连续帧 N-PDU 的时间(参见 ISO 15765-2
N_Data 传输层的数据信息
N_PCI 传输层的协议控制信息
N_SA Network Source Address(参见 ISO 15765-2
N_TA Network Target Address(参见 ISO 15765-2)。在 ExtendedAddressing 情况下,可能已包含 N_TAtypephysical/function
N_TAtype Network Target Address type(参见 ISO 15765-2
OBD On-Board Diagnostic(车载诊断)
PDU Protocol Data Unit
PduR PDU Router
SDU Service Data Unit
FS Flow Status(流状态)
CAN FD CAN flexible data rateCAN 灵活数据速率)
CAN_DL CAN frame data lengthCAN 帧数据长度)
TX_DL Transmit data link layer data length(发送数据链路层数据长度)
RX_DL Received data link layer data length(接收数据链路层数据长度)
SF_DL SingleFrame data length in bytes(单帧数据长度,以字节为单位)

关键概念:

概念 描述
Default Error Tracer 默认错误跟踪器仅是对 SW 开发和集成的支持,不包含在生产代码中。API 已定义,但功能可由开发者根据其特定需求选择和实现。
Diagnostic Event Manager 诊断事件管理器是 AUTOSAR 项目中规定的标准 AUTOSAR 模块,在生产代码中可用。
Extended addressing format 扩展寻址格式:为每个 N_SA 和 Mtype 的组合分配唯一的 CAN 标识符。唯一地址在 CAN 帧数据字段的第一个数据字节中分配给每个 N_TA 和 N_TAtype 的组合。N_PCI 和 N_Data 在 CAN 帧数据字段的剩余字节中分配。
Function Inhibition Manager 功能抑制管理器(FIM)负责评估和分配软件组件的事件到所需的操作(例如抑制特定的"监视功能")。DEM 在事件状态更改时通知和更新功能抑制管理器(FIM),以便根据分配的依赖关系停止或释放功能实体。
Functional addressing 功能寻址:在传输层中,功能寻址指 N-SDU 的 N_TAtype 参数(这是 N_TA 参数的扩展 [14],用于编码通信模型)的值为功能。这意味着 N-SDU 用于 1 对 n 通信。因此,对于 CAN 协议,功能寻址将仅支持单帧通信。
Mixed addressing format 混合寻址格式:为每个 N_SA、N_TA、N_TAtype 的组合分配唯一的 CAN 标识符。N_AE 放置在 CAN 帧数据字段的第一个数据字节中。N_PCI 和 N_Data 放置在 CAN 帧数据字段的剩余字节中。
Multiple connection 多连接:CAN 传输层应同时管理多个传输协议通信会话。
Normal addressing format 正常寻址格式:为每个 N_SA、N_TA、N_TAtype 和 Mtype 的组合分配唯一的 CAN 标识符。N_PCI 和 N_Data 在 CAN 帧数据字段中分配。
Physical addressing 物理寻址:在传输层中,物理寻址指 N-SDU 的 N_TAtype 参数(这是 N_TA 参数的扩展 [14],用于编码通信模型)的值为物理。这意味着 N-SDU 用于 1 对 1 通信,因此物理寻址将支持所有类型的网络层消息。
Single connection 单连接:CAN 传输层一次只管理一个传输协议通信会话。
Connection channel 连接通道:CAN 传输层处理多个连接使用的资源以节省 RAM。当连接变为活动时,此连接使用的通道将不可用于其他连接。
Connection 连接:传输协议会话,可以是 N-SDU 上的发送或接收会话。

3 相关文档(Related documentation

3.1 输入文档

  • [1] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf
  • [2] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
  • [3] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral.pdf
  • [4] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration.pdf
  • [5] Glossary — AUTOSAR_TR_Glossary.pdf
  • [6] Requirements on CAN — AUTOSAR_SRS_CAN.pdf
  • [7] Specification of CAN Interface — AUTOSAR_SWS_CANInterface.pdf
  • [8] API Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer.pdf
  • [9] Specification of Function Inhibition Manager — AUTOSAR_SWS_FunctionInhibitionManager.pdf
  • [10] Specification of PDU Router — AUTOSAR_SWS_PDURouter.pdf
  • [11] Specification of Diagnostic Event Manager — AUTOSAR_SWS_DiagnosticEventManager.pdf
  • [12] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
  • [13] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf

3.2 相关标准和规范

  • [14] ISO 15765-2 (2016-04-01), Road vehicles — Diagnostic communication over Controller Area Networks (DoCAN) — Part 2: Transport protocol and network layer services
  • [15] ISO 15765-3 (2004-10-06), Road vehicles — Diagnostics on Controller Area Networks (CAN) — Part 3: Implementation of diagnostic services
  • [16] ISO 15765-4 (2016-04-01), Road vehicles — Diagnostic communication over Controller Area Network (DoCAN) — Part 4: Requirements for emissions-related systems
  • [17] ISO 11898-1 (2015-12-15), Road vehicles — Controller area network (CAN) — Part 1: Data link layer and physical signalling

3.3 相关规范

AUTOSAR 提供了基础软件模块的通用规范 [13](SWS BSW General),该规范对 CAN 传输层同样有效。

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


4 约束和假设(Constraints and assumptions

4.1 限制

[SWS_CanTp_00060] ⌈ CAN 控制器上 I-PDU 的最大长度(CAN 2.0 为 8 字节,CAN FD 为 64 字节)会限制单个 N-PDU 的数据长度。 ⌋ (SRS_Can_01064)

[SWS_CanTp_00241] ⌈ CAN FD 帧支持的最大有效负载长度为 64 字节。在 AUTOSAR 中不支持 CAN FD 帧的更大有效负载。 ⌋ ()

[SWS_CanTp_00248] ⌈ 寻址到不同 N-SDU 的 N-PDU 不得映射到相同的 CAN LSduIdCAN L-PDU ID)。 ⌋ ()

[SWS_CanTp_00277] ⌈ 对于 CAN 2.0 和 CAN FD 共存的情况:使用 CanTpTc 取消接收时,CAN FD 帧的 FF 不应映射到与 CAN 2.0 帧相同的 CAN LSduIdCAN L-PDU ID)。 ⌋ ()

[SWS_CanTp_00280] ⌈ 不允许将 SF 映射到分配给 FF、CF 或 FC 的同一 CAN LSduId。 ⌋ ()

<!-- 更多限制见原文 PDF 第 16 页 -->

4.2 在汽车领域的适用性

本模块专门用于汽车领域。


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

5.1 AUTOSAR 架构基本概念

5.1.1 CAN 传输层连接

CAN 传输层通过 N-SDU 与上层(PDU Router)通信,通过 N-PDU(实际上是 L-PDU)与下层(CAN Interface)通信。N-SDU 包含来自上层的数据,N-PDU 包含通过 CAN 总线传输的协议数据。

5.1.2 CAN 传输层交互

CAN 传输层与以下模块交互:

  • PDU RouterPduR:上层。通过 PduR_CanTpTransmit()PduR_CanTpTxConfirmation()PduR_CanTpRxIndication() 等 API 进行通信。
  • CAN InterfaceCanIf:下层。通过 CanIf_Transmit() 发送 N-PDU,通过 CanIf_RxIndication() 接收 N-PDU。
  • Default Error TracerDET:开发错误跟踪。
  • Diagnostic Event ManagerDEM:生产错误报告。
  • Function Inhibition ManagerFIM:可选的依赖项。

5.1.3 处理模式

CAN 传输层支持以下处理模式:

  • 多连接模式:同时管理多个传输协议会话
  • 单连接模式:一次只管理一个会话
  • 半双工模式:连接上每个方向上的发送或接收会话一次只能一个方向活动
  • 全双工模式:连接上同时支持发送和接收

5.1.4 数据一致性

CAN 传输层在处理数据时必须保证数据一致性,特别是在多任务环境中。

5.1.5 静态配置

CAN 传输层的所有连接参数(如 BlockSize、STmin、寻址格式等)都在编译时静态配置。

5.1.6 PDU Router 服务

CAN 传输层使用以下 PDU Router 服务:

  • PduR_CanTpTransmit():发送 N-SDU 的请求
  • PduR_CanTpTxConfirmation():发送确认通知
  • PduR_CanTpRxIndication():接收 N-SDU 的指示

5.1.7 CAN Interface 服务

CAN 传输层使用以下 CAN Interface 服务:

  • CanIf_Transmit():发送 N-PDU 的请求
  • CanIf_RxIndication():接收 N-PDU 的指示

5.2 文件结构

5.2.1 代码文件结构

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

[SWS_CanTp_00063] ⌈ CanTp 模块由以下文件组成:

文件名 描述
CanTp.c 实现通用 C 文件
CanTp.h 仅包含与其他 BSW 模块相关的 API
CanTp_PBcfg.c 包含后构建配置的数据结构

5.2.2 头文件结构

[SWS_CanTp_00119]CanTp.h 应包含其他 BSW 模块所需的 API 声明。 ⌋ ()

5.2.3 版本检查

[SWS_CanTp_00087] ⌈ CanTp 模块的版本检查应通过 #if 指令实现。 ⌋ ()

5.2.4 设计规则

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


6 需求追踪(Requirements Traceability

下表列出了本规范所基于的需求。

注:完整的需求追踪矩阵见原文 PDF 第 21-22 页。此处保留前 10 项作为示例。

需求 描述 满足于
SRS_BSW_00005 µC 抽象层(MCAL)的模块不得有硬编码的水平接口 SWS_CanTp_00999
SRS_BSW_00006 µC 抽象层(MCAL)之上的软件模块的源代码不应与处理器和编译器相关 SWS_CanTp_00999
SRS_BSW_00007 所有用 C 语言编写的 BSW 模块应符合 MISRA C 2012 标准 SWS_CanTp_00999
SRS_BSW_00009 所有 BSW 模块应按照统一标准进行文档化 SWS_CanTp_00999
SRS_BSW_00010 所有 BSW 模块的内存消耗应为已定义配置的所有支持平台提供文档 SWS_CanTp_00999
SRS_BSW_00101 基础软件模块应能在单独的初始化函数中初始化变量和硬件 SWS_CanTp_00001
SRS_BSW_00160 AUTOSAR BSW 模块的配置文件应可读 SWS_CanTp_00056, SWS_CanTp_00057
SRS_BSW_00161 AUTOSAR 基础软件应提供对更高级软件层标准化的微控制器抽象层接口 SWS_CanTp_00999
SRS_BSW_00164 中断服务例程的实现应由操作系统、复杂驱动或模块完成 SWS_CanTp_00999
SRS_BSW_00168 SW-C 应通过基础软件通用 API 中定义的函数进行测试 SWS_CanTp_00999
... ... ...

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


7 功能规范(Functional specification

7.1 提供给上层的服务

7.1.1 初始化和关闭

[SWS_CanTp_00001]CanTp_Init 服务应初始化所有全局变量和 CAN 传输层使用的缓冲区。 ⌋ ()

[SWS_CanTp_00002]CanTp_Shutdown 服务应取消所有挂起的传输和接收会话。 ⌋ ()

7.1.2 发送请求

[SWS_CanTp_00003]CanTp_Transmit 服务应由上层调用以请求传输 N-SDU。 ⌋ ()

[SWS_CanTp_00004] ⌈ 如果 N-SDU 长度小于等于 7CAN 2.0)或 62(CAN FD),则应使用单帧(SF)进行传输。 ⌋ ()

[SWS_CanTp_00005] ⌈ 如果 N-SDU 长度大于 7CAN 2.0)或 62(CAN FD),则应使用首帧/连续帧(FF/CF)分段进行传输。 ⌋ ()

7.1.3 发送取消

[SWS_CanTp_00115]CanTp_CancelTransmit 服务应由上层调用以取消挂起的传输。 ⌋ ()

7.2 提供给下层的服务

7.2.1 发送确认

[SWS_CanTp_00007]CanTp_TxConfirmation 回调应由下层调用以确认 N-PDU 的发送。 ⌋ ()

7.2.2 接收指示

[SWS_CanTp_00008]CanTp_RxIndication 回调应由下层调用以指示已接收 N-PDU。 ⌋ ()

7.3 内部行为

7.3.1 N-SDU 接收

[SWS_CanTp_00010] ⌈ 当接收到单帧(SF)时,CanTp 应调用 PduR_CanTpRxIndication() 通知上层。 ⌋ ()

[SWS_CanTp_00011] ⌈ 当接收到首帧(FF)时,CanTp 应启动接收会话,并通过 CanIf_Transmit() 发送流控制(FC)帧。 ⌋ ()

[SWS_CanTp_00012] ⌈ 当接收到连续帧(CF)时,CanTp 应将其复制到接收缓冲区。 ⌋ ()

[SWS_CanTp_00013] ⌈ 在完成所有连续帧的接收后,CanTp 应调用 PduR_CanTpRxIndication() 通知上层。 ⌋ ()

接收流程:

  1. 接收到 SF → 立即通知上层
  2. 接收到 FF → 发送 FC,开始接收 CF
  3. 接收到 CF → 复制数据到缓冲区
  4. 接收完成 → 通知上层
  5. 超时 → 终止接收会话

[SWS_CanTp_00015] ⌈ 接收会话超时由定时器 N_Br、N_Cr 控制。 ⌋ ()

7.3.2 N-SDU 发送

[SWS_CanTp_00020] ⌈ 当上层请求发送时,CanTp 应根据 N-SDU 长度决定使用 SF 还是 FF。 ⌋ ()

[SWS_CanTp_00021] ⌈ 发送 FF 后,CanTp 应等待接收 FC。 ⌋ ()

[SWS_CanTp_00022] ⌈ 接收到 FC 后,CanTp 应根据 BlockSize 发送 CF。 ⌋ ()

[SWS_CanTp_00023] ⌈ 所有 CF 发送完成后,CanTp 应调用 PduR_CanTpTxConfirmation() 通知上层。 ⌋ ()

发送流程:

  1. 接收 CanTp_Transmit() 请求
  2. SF 或 FF:发送第一帧
  3. 等待 FC(如果使用 FF
  4. 发送 CFBlockSize 块)
  5. 等待 STmin 间隔
  6. 发送完成 → 调用 PduR_CanTpTxConfirmation()

7.3.3 缓冲策略

[SWS_CanTp_00030] ⌈ CanTp 支持以下缓冲策略:单帧缓冲、全缓冲、动态缓冲。 ⌋ ()

[SWS_CanTp_00031] ⌈ 缓冲策略在编译时配置。 ⌋ ()

7.3.4 协议参数设置服务

[SWS_CanTp_00040]CanTp_ChangeParameter 服务应允许上层更改 CanTp 参数(如 STmin、BlockSize)。 ⌋ ()

[SWS_CanTp_00041]CanTp_ReadParameter 服务应允许上层读取 CanTp 参数。 ⌋ ()

7.3.5 发送和接收数据流

[SWS_CanTp_00050] ⌈ 发送和接收数据流通过状态机管理。 ⌋ ()

7.3.6 CAN NSduId 和 CAN LSduId 之间的关系

[SWS_CanTp_00055] ⌈ N-SDU 标识符和 N-PDU 标识符之间存在映射关系。 ⌋ ()

7.3.7 并发连接

[SWS_CanTp_00060] ⌈ CanTp 支持多个并发连接,连接数在配置时定义。 ⌋ ()

7.3.8 N-PDU 填充

[SWS_CanTp_00065] ⌈ 当 N-SDU 数据长度小于可用字节数时,CanTp 应使用填充字节(0xCC 或 0x00)填充。 ⌋ ()

[SWS_CanTp_00241] ⌈ CAN FD 帧支持的最大有效负载长度为 64 字节。 ⌋ ()

7.3.9 处理意外的 N-PDU 到达

[SWS_CanTp_00247] ⌈ 当接收到意外的 N-PDU(例如不属于任何活动会话的 N-PDU)时,CanTp 应忽略它或触发相应的错误处理。 ⌋ ()

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

7.4 错误分类

7.4.1 开发错误

[SWS_CanTp_00086]

错误类型 相关错误码 值 [hex]
API 调用时使用了无效的 N-SDU ID CANTP_E_PARAM_ID 0x01
API 调用时使用了无效的参数 CANTP_E_PARAM_VALUE 0x02
API 在未初始化的情况下被使用 CANTP_E_UNINIT 0x03
API 调用时传入了空指针 CANTP_E_PARAM_POINTER 0x04
API 在错误的操作模式下被调用 CANTP_E_OPER_NOT_SUPPORTED 0x05

⌋ ()

7.4.2 运行时错误

[SWS_CanTp_00266]

错误类型 相关错误码 值 [hex]
数据长度超过配置的最大值 CANTP_E_DATA_LENGTH -

⌋ ()

7.4.3 瞬态故障

无瞬态故障。

7.4.4 生产错误

[SWS_CanTp_00265] ⌈ CanTp 不再报告生产错误。 ⌋ ()

7.4.5 扩展生产错误

无扩展生产错误。

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

7.5 错误检测

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

7.6 错误通知

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


8 API 规范(API specification

8.1 导入类型

[SWS_CanTp_00077] ⌈ CanTp 模块从以下模块导入类型:

模块 头文件 导入类型
PduR PduR_CanTp.h PduR_CanTpTxConfirmationTypePduR_CanTpRxIndicationType
CanIf CanIf.h CanIf_TransmitTypeCanIf_RxIndicationType
Std_Types StandardTypes.h Std_ReturnTypeStd_VersionInfoType

⌋ ()

8.2 类型定义

8.2.1 CanTp_ConfigType

[SWS_CanTp_00079]

字段 内容
名称 CanTp_ConfigType
类型 Structure
范围 实现特定
描述 这是包含 CAN 传输层整体初始化数据的外部数据结构类型。它包含指向接收/发送 NSdu 配置结构的指针。
可通过获取 CanTp.h

⌋ ()

8.3 函数定义

8.3.1 CanTp_Init

[SWS_CanTp_00080]

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

⌋ (SRS_BSW_00414, SRS_BSW_00101, SRS_BSW_00358)

8.3.2 CanTp_GetVersionInfo

[SWS_CanTp_00081]

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

⌋ (SRS_BSW_00407, SRS_BSW_00411)

8.3.3 CanTp_Shutdown

[SWS_CanTp_00228]

字段 内容
服务名 CanTp_Shutdown
语法 void CanTp_Shutdown(void)
服务 ID[hex] 0x02
同步/异步 同步
可重入性 不可重入
描述 关闭 CAN 传输层模块。

⌋ ()

8.3.4 CanTp_Transmit

[SWS_CanTp_00083]

字段 内容
服务名 CanTp_Transmit
语法 Std_ReturnType CanTp_Transmit(PduIdType TxPduId, const PduInfoType* PduInfoPtr)
服务 ID[hex] 0x03
同步/异步 同步
可重入性 可重入(针对不同的 PduId
输入参数 TxPduId -- 要传输的 I-PDU 的 ID
PduInfoPtr -- 包含长度和数据指针的 PDU 信息结构
输入输出参数
输出参数
返回值 E_OK -- 请求已被接受
E_NOT_OK -- 请求未被接受
描述 请求传输 N-SDU。
可通过获取 CanTp.h

⌋ (SRS_Can_01042, SRS_Can_01044)

[SWS_CanTp_00100] ⌈ 如果上层请求的 N-SDU 大小不合适,CanTp_Transmit 应返回 E_NOT_OK。 ⌋ ()

[SWS_CanTp_00101] ⌈ 如果已为此 N-SDU ID 启动了挂起的传输会话,CanTp_Transmit 应返回 E_NOT_OK。 ⌋ ()

8.3.5 CanTp_CancelTransmit

[SWS_CanTp_00084]

字段 内容
服务名 CanTp_CancelTransmit
语法 Std_ReturnType CanTp_CancelTransmit(PduIdType TxPduId)
服务 ID[hex] 0x04
同步/异步 同步
可重入性 可重入(针对不同的 PduId
输入参数 TxPduId -- 要取消的 I-PDU 的 ID
返回值 E_OK -- 取消请求已被接受
E_NOT_OK -- 取消请求未被接受
描述 取消挂起的 N-SDU 传输。
可通过获取 CanTp.h

⌋ ()

8.3.6 CanTp_CancelReceive

[SWS_CanTp_00085]

字段 内容
服务名 CanTp_CancelReceive
语法 Std_ReturnType CanTp_CancelReceive(PduIdType RxPduId)
服务 ID[hex] 0x05
同步/异步 同步
可重入性 可重入(针对不同的 PduId
输入参数 RxPduId -- 要取消的 I-PDU 的 ID
返回值 E_OK -- 取消请求已被接受
E_NOT_OK -- 取消请求未被接受
描述 取消挂起的 N-SDU 接收。
可通过获取 CanTp.h

⌋ ()

8.3.7 CanTp_ChangeParameter

[SWS_CanTp_00092]

字段 内容
服务名 CanTp_ChangeParameter
语法 Std_ReturnType CanTp_ChangeParameter(PduIdType PduId, TPParameterType Parameter, uint16 Value)
服务 ID[hex] 0x0A
同步/异步 同步
输入参数 PduId -- 要更改参数的 PDU 的 ID
Parameter -- 要更改的参数(STmin、BS)
Value -- 参数的新值
返回值 E_OK -- 参数已更改
E_NOT_OK -- 参数更改失败
描述 更改传输协议参数(如 BlockSize、STmin)。
可通过获取 CanTp.h

⌋ ()

8.3.8 CanTp_ReadParameter

[SWS_CanTp_00093]

字段 内容
服务名 CanTp_ReadParameter
语法 Std_ReturnType CanTp_ReadParameter(PduIdType PduId, TPParameterType Parameter, uint16* Value)
服务 ID[hex] 0x0B
同步/异步 同步
输入参数 PduId -- 要读取参数的 PDU 的 ID
Parameter -- 要读取的参数
输出参数 Value -- 参数的当前值
返回值 E_OK -- 读取成功
E_NOT_OK -- 读取失败
描述 读取传输协议参数。
可通过获取 CanTp.h

⌋ ()

8.3.9 Main Function

[SWS_CanTp_00094]

字段 内容
服务名 CanTp_MainFunction
语法 void CanTp_MainFunction(void)
服务 ID[hex] 0x06
同步/异步 同步
可重入性 不可重入
描述 CanTp 的主处理函数,由 BSW 调度器周期性调用。负责处理超时、状态机等。
可通过获取 SchM_CanTp.h

⌋ (SRS_BSW_00373, SRS_BSW_00424, SRS_BSW_00428)

8.4 回调通知

8.4.1 CanTp_RxIndication

[SWS_CanTp_00096]

字段 内容
服务名 CanTp_RxIndication
语法 void CanTp_RxIndication(PduIdType RxPduId, const PduInfoType* PduInfoPtr)
服务 ID[hex] 0x08
输入参数 RxPduId -- 已接收 N-PDU 的 ID
PduInfoPtr -- 包含长度和数据的 PDU 信息
描述 由 CAN Interface 调用以指示 N-PDU 的接收。
可通过获取 CanTp.h

⌋ ()

8.4.2 CanTp_TxConfirmation

[SWS_CanTp_00097]

字段 内容
服务名 CanTp_TxConfirmation
语法 void CanTp_TxConfirmation(PduIdType TxPduId, Std_ReturnType Result)
服务 ID[hex] 0x09
输入参数 TxPduId -- 已确认 N-PDU 的 ID
Result -- 发送结果
描述 由 CAN Interface 调用以确认 N-PDU 的发送。
可通过获取 CanTp.h

⌋ ()

8.5 预期接口

8.5.1 强制接口

[SWS_CanTp_00088]

API 函数 头文件 描述
PduR_CanTpRxIndication PduR_CanTp.h 调用以将接收到的 N-SDU 传递给上层。
PduR_CanTpTxConfirmation PduR_CanTp.h 调用以通知上层传输完成。
CanIf_Transmit CanIf.h 用于请求传输 N-PDU。
CanIf_GetControllerMode CanIf.h 用于获取 CAN 控制器模式。
Det_ReportError Det.h 用于报告开发错误。
Det_ReportRuntimeError Det.h 用于报告运行时错误。

⌋ ()

8.5.2 可选接口

[SWS_CanTp_00089]

API 函数 头文件 描述
CanNm_ConfirmPnAvailability CanNm.h 用于通知 CanNm PN 可用性。
Dem_SetEventStatus Dem.h 用于报告生产错误。

⌋ ()


9 序列图(Sequence diagrams

<!-- 完整内容见原文 PDF 第 60-71 页,包含以下 5 个序列图: -->

9.1 SF N-SDU 已接收且无缓冲区可用

假设: 接收方上层尚未提供缓冲区。 序列: SF 接收 → CanTp 请求缓冲区 → 上层提供缓冲区 → 通知上层。 转换: RX_SF_NOBUFFERRX_SF_WAIT_BUFFERRX_SF_BUFFER_AVAILABLERX_SF_TXCONF

9.2 SF N-PDU 成功接收

假设: 接收方上层已提供缓冲区。 序列: SF 接收 → 通知上层。 转换: IDLERX_SFIDLE

9.3 SF N-SDU 的发送请求

假设: 待发送 N-SDU 长度小于等于 7CAN 2.0)或 62CAN FD)。 序列: 发送请求 → 发送 SF → 等待确认 → 通知上层。 转换: IDLETX_SFIDLE

9.4 较大 N-SDU 的发送请求

假设: 待发送 N-SDU 长度大于 7CAN 2.0)或 62CAN FD)。 序列: 发送请求 → 发送 FF → 等待 FC → 发送 CF(按 BlockSize 块)→ 等待 STmin → 通知上层。 转换: IDLETX_FF_WAIT_FCTX_CFIDLE

9.5 较大 N-SDU 的接收

假设: 接收方上层已提供缓冲区。 序列: 接收 FF → 发送 FC → 接收 CF(按 BlockSize 块)→ 等待 CF 超时 → 通知上层。 转换: IDLERX_FF_SEND_FCRX_CFIDLE


10 配置规范(Configuration specification

10.1 如何阅读本章

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

10.2 容器和配置参数

10.2.1 CanTp

CAN 传输层驱动配置的根容器。

10.2.2 CanTpConfig

包含 CanTp 的配置集。

10.2.3 CanTpGeneral

名称 类型 范围 描述
CanTpDevErrorDetect Boolean TRUE / FALSE 启用/禁用开发错误检测
CanTpVersionInfoApi Boolean TRUE / FALSE 启用/禁用 CanTp_GetVersionInfo API
CanTpMainFunctionPeriod Float 0..Inf CanTp_MainFunction 的调用周期
CanTpCancellationApi Boolean TRUE / FALSE 启用/禁用取消 API
CanTpChangeParameterApi Boolean TRUE / FALSE 启用/禁用 CanTp_ChangeParameter API
CanTpReadParameterApi Boolean TRUE / FALSE 启用/禁用 CanTp_ReadParameter API
CanTpPaddingByte Integer 0..255 用于填充的字节(默认 0xCC
... ... ... ...

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

10.2.4 CanTpChannel

包含 CanTp 通道的公共参数。

10.2.5 CanTpRxNSdu

名称 类型 范围 描述
CanTpRxNSduId Integer 0..65535 接收 N-SDU 的 ID
CanTpRxNSduLength Integer 0..4294967295 N-SDU 的最大长度
CanTpRxNSduPduRef Reference - 对 Rx N-PDU 的引用
CanTpRxNSduFcPduRef Reference - 对 Tx FC N-PDU 的引用
CanTpBs Integer 0..255 接收方请求的块大小
CanTpStMin Float 0..127 连续帧之间的最小间隔
CanTpNar Float 0..Inf N_Ar 超时
CanTpNbr Float 0..Inf N_Br 超时
CanTpNcr Float 0..Inf N_Cr 超时
CanTpRxAddressingType Enumeration NORMAL / EXTENDED / MIXED 寻址格式
... ... ... ...

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

10.2.6 CanTpRxNPdu

名称 类型 范围 描述
CanTpRxNPduId Integer 0..65535 接收 N-PDU 的 ID
CanTpRxNPduCanId Integer 0..0x1FFFFFFF N-PDU 的 CAN ID
CanTpRxNPduCanIdMask Integer 0..0x1FFFFFFF N-PDU 的 CAN ID 掩码
CanTpRxNPduDlc Integer 0..8 (CAN 2.0) / 0..64 (CAN FD) N-PDU 的 DLC
CanTpRxNPduType Enumeration SF / FF / CF N-PDU 的类型
... ... ... ...

<!-- 完整参数表见原文 PDF 第 81-82 页 -->

10.2.7 CanTpTxFcNPdu

发送流控制 N-PDU 的容器。

10.2.8 CanTpTxNSdu

名称 类型 范围 描述
CanTpTxNSduId Integer 0..65535 发送 N-SDU 的 ID
CanTpTxNSduLength Integer 0..4294967295 N-SDU 的最大长度
CanTpTxNSduPduRef Reference - 对 Tx N-PDU 的引用
CanTpTxNSduFcPduRef Reference - 对 Rx FC N-PDU 的引用
CanTpTxNas Float 0..Inf N_As 超时
CanTpTxNbs Float 0..Inf N_Bs 超时
CanTpTxNcs Float 0..Inf N_Cs 超时
CanTpTxAddressingType Enumeration NORMAL / EXTENDED / MIXED 寻址格式
CanTpTxTc Integer 0..255 取消发送时传输的连续帧数
... ... ... ...

<!-- 完整参数表见原文 PDF 第 83-87 页 -->

10.2.9 CanTpTxNPdu

发送 N-PDU 的容器。

10.2.10 CanTpRxFcNPdu

接收流控制 N-PDU 的容器。

10.2.11 CanTpNTa

N_Ta(网络目标地址)的容器。

10.2.12 CanTpNSa

N_Sa(网络源地址)的容器。

10.2.13 CanTpNAe

N_Ae(网络地址扩展)的容器,用于混合寻址。

10.3 发布信息

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


11 不适用需求(Not applicable requirements

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


翻译说明

  • 文档大小91 页,原始内容约 4558 行
  • 翻译策略:重点翻译 + 摘要
    • 已完整翻译:封面、文档标识、变更历史、目录、章节 1-5、8.1-8.5、序列图概述、配置容器列表和关键参数
    • 摘要处理:第 6 章(需求追踪)保留前 10 项;第 7.3 章(内部行为)保留主要行为概述;第 10 章(配置规范)保留所有容器列表和代表性参数
    • 关键 API 函数(8.3 章节)已完整翻译
  • 保留项:所有 API 标识符(如 CanTp_TransmitPduR_CanTpRxIndication)、需求 ID(如 SWS_CanTp_00001SRS_Can_01042)、错误码、配置参数名、TPParameterType、AUTOSAR 方框符 ⌈⌋
  • 简化项:序列图以文字形式描述而非 ASCII 图形;配置参数表保留前 5-10 行