P1 batch translation: 94 PDFs (Communication + Diagnostics + SystemServices + MCAL)
This commit is contained in:
@@ -0,0 +1,951 @@
|
||||
# CAN 传输层规范
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
> **文档 ID 014:AUTOSAR_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 仅检查过小的 DLC(CanTp220);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. [介绍和功能概述](#1-介绍和功能概述introduction-and-functional-overview) ............... 8
|
||||
2. [缩略语和缩写](#2-缩略语和缩写acronyms-and-abbreviations) ........... 11
|
||||
3. [相关文档](#3-相关文档related-documentation) ............... 14
|
||||
- 3.1 [输入文档](#31-输入文档) ............... 14
|
||||
- 3.2 [相关标准和规范](#32-相关标准和规范) ............... 15
|
||||
- 3.3 [相关规范](#33-相关规范) ............... 15
|
||||
4. [约束和假设](#4-约束和假设constraints-and-assumptions) ............... 16
|
||||
- 4.1 [限制](#41-限制) ............... 16
|
||||
- 4.2 [在汽车领域的适用性](#42-在汽车领域的适用性) ............... 16
|
||||
5. [对其他模块的依赖](#5-对其他模块的依赖dependencies-on-other-modules) ............... 17
|
||||
- 5.1 [AUTOSAR 架构基本概念](#51-autosar-架构基本概念) ............... 17
|
||||
- 5.2 [文件结构](#52-文件结构) ............... 19
|
||||
6. [需求追踪](#6-需求追踪requirements-traceability) ............... 21
|
||||
7. [功能规范](#7-功能规范functional-specification) ............... 23
|
||||
- 7.1 [提供给上层的服务](#71-提供给上层的服务) ............... 23
|
||||
- 7.2 [提供给下层的服务](#72-提供给下层的服务) ............... 26
|
||||
- 7.3 [内部行为](#73-内部行为) ............... 27
|
||||
- 7.4 [错误分类](#74-错误分类) ............... 44
|
||||
- 7.5 [错误检测](#75-错误检测) ............... 47
|
||||
- 7.6 [错误通知](#76-错误通知) ............... 47
|
||||
8. [API 规范](#8-api-规范api-specification) ............... 48
|
||||
- 8.1 [导入类型](#81-导入类型) ............... 48
|
||||
- 8.2 [类型定义](#82-类型定义) ............... 48
|
||||
- 8.3 [函数定义](#83-函数定义) ............... 49
|
||||
- 8.4 [回调通知](#84-回调通知) ............... 57
|
||||
- 8.5 [预期接口](#85-预期接口) ............... 58
|
||||
9. [序列图](#9-序列图sequence-diagrams) ............... 60
|
||||
- 9.1 [SF N-SDU 已接收且无缓冲区可用](#91-sf-n-sdu-已接收且无缓冲区可用) ............... 60
|
||||
- 9.2 [SF N-PDU 成功接收](#92-sf-n-pdu-成功接收) ............... 62
|
||||
- 9.3 [SF N-SDU 的发送请求](#93-sf-n-sdu-的发送请求) ............... 63
|
||||
- 9.4 [较大 N-SDU 的发送请求](#94-较大-n-sdu-的发送请求) ............... 66
|
||||
- 9.5 [较大 N-SDU 的接收](#95-较大-n-sdu-的接收) ............... 69
|
||||
10. [配置规范](#10-配置规范configuration-specification) ............... 72
|
||||
- 10.1 [如何阅读本章](#101-如何阅读本章) ............... 72
|
||||
- 10.2 [容器和配置参数](#102-容器和配置参数) ............... 73
|
||||
- 10.3 [发布信息](#103-发布信息) ............... 90
|
||||
11. [不适用需求](#11-不适用需求not-applicable-requirements) ............... 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 Interface(CanIf)提供相同的机制来访问 CAN 总线通道,而不考虑其位置(µC 内部/外部)。从 CAN 控制器的位置(片上/板上),它提取了 ECU 硬件布局和 CAN 驱动数量。因为 CanTp 只处理传输协议帧(即 SF、FF、CF 和 FC PDU),所以根据 N-PDU ID,CAN 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 |
|
||||
+------------------------------------------------------------------+
|
||||
|
||||
图 1:AUTOSAR 通信栈
|
||||
```
|
||||
|
||||
根据 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 Code(CAN 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_TAtype(physical/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 rate(CAN 灵活数据速率) |
|
||||
| CAN_DL | CAN frame data length(CAN 帧数据长度) |
|
||||
| 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 LSduId(CAN L-PDU ID)。 ⌋ ()
|
||||
|
||||
**[SWS_CanTp_00277]** ⌈ 对于 CAN 2.0 和 CAN FD 共存的情况:使用 `CanTpTc` 取消接收时,CAN FD 帧的 FF 不应映射到与 CAN 2.0 帧相同的 CAN LSduId(CAN 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 Router(PduR)**:上层。通过 `PduR_CanTpTransmit()`、`PduR_CanTpTxConfirmation()`、`PduR_CanTpRxIndication()` 等 API 进行通信。
|
||||
- **CAN Interface(CanIf)**:下层。通过 `CanIf_Transmit()` 发送 N-PDU,通过 `CanIf_RxIndication()` 接收 N-PDU。
|
||||
- **Default Error Tracer(DET)**:开发错误跟踪。
|
||||
- **Diagnostic Event Manager(DEM)**:生产错误报告。
|
||||
- **Function Inhibition Manager(FIM)**:可选的依赖项。
|
||||
|
||||
#### 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 长度小于等于 7(CAN 2.0)或 62(CAN FD),则应使用单帧(SF)进行传输。 ⌋ ()
|
||||
|
||||
**[SWS_CanTp_00005]** ⌈ 如果 N-SDU 长度大于 7(CAN 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. 发送 CF(BlockSize 块)
|
||||
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_CanTpTxConfirmationType`、`PduR_CanTpRxIndicationType` |
|
||||
| CanIf | CanIf.h | `CanIf_TransmitType`、`CanIf_RxIndicationType` |
|
||||
| Std_Types | StandardTypes.h | `Std_ReturnType`、`Std_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<br>`PduInfoPtr` -- 包含长度和数据指针的 PDU 信息结构 |
|
||||
| 输入输出参数 | 无 |
|
||||
| 输出参数 | 无 |
|
||||
| 返回值 | `E_OK` -- 请求已被接受<br>`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` -- 取消请求已被接受<br>`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` -- 取消请求已被接受<br>`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<br>`Parameter` -- 要更改的参数(STmin、BS)<br>`Value` -- 参数的新值 |
|
||||
| 返回值 | `E_OK` -- 参数已更改<br>`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<br>`Parameter` -- 要读取的参数 |
|
||||
| 输出参数 | `Value` -- 参数的当前值 |
|
||||
| 返回值 | `E_OK` -- 读取成功<br>`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<br>`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<br>`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_NOBUFFER` → `RX_SF_WAIT_BUFFER` → `RX_SF_BUFFER_AVAILABLE` → `RX_SF_TXCONF`
|
||||
|
||||
### 9.2 SF N-PDU 成功接收
|
||||
|
||||
**假设:** 接收方上层已提供缓冲区。
|
||||
**序列:** SF 接收 → 通知上层。
|
||||
**转换:** `IDLE` → `RX_SF` → `IDLE`
|
||||
|
||||
### 9.3 SF N-SDU 的发送请求
|
||||
|
||||
**假设:** 待发送 N-SDU 长度小于等于 7(CAN 2.0)或 62(CAN FD)。
|
||||
**序列:** 发送请求 → 发送 SF → 等待确认 → 通知上层。
|
||||
**转换:** `IDLE` → `TX_SF` → `IDLE`
|
||||
|
||||
### 9.4 较大 N-SDU 的发送请求
|
||||
|
||||
**假设:** 待发送 N-SDU 长度大于 7(CAN 2.0)或 62(CAN FD)。
|
||||
**序列:** 发送请求 → 发送 FF → 等待 FC → 发送 CF(按 BlockSize 块)→ 等待 STmin → 通知上层。
|
||||
**转换:** `IDLE` → `TX_FF_WAIT_FC` → `TX_CF` → `IDLE`
|
||||
|
||||
### 9.5 较大 N-SDU 的接收
|
||||
|
||||
**假设:** 接收方上层已提供缓冲区。
|
||||
**序列:** 接收 FF → 发送 FC → 接收 CF(按 BlockSize 块)→ 等待 CF 超时 → 通知上层。
|
||||
**转换:** `IDLE` → `RX_FF_SEND_FC` → `RX_CF` → `IDLE`
|
||||
|
||||
---
|
||||
|
||||
## 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_Transmit`、`PduR_CanTpRxIndication`)、需求 ID(如 `SWS_CanTp_00001`、`SRS_Can_01042`)、错误码、配置参数名、`TPParameterType`、AUTOSAR 方框符 `⌈⌋`
|
||||
- **简化项**:序列图以文字形式描述而非 ASCII 图形;配置参数表保留前 5-10 行
|
||||
Reference in New Issue
Block a user