22 KiB
SWS_E2ELibrary — SW-C 端到端通信保护库规范
| 文档元信息 | 值 |
|---|---|
| 文档标题 | Specification of SW-C End-to-End Communication Protection Library(SW-C 端到端通信保护库规范) |
| 文档所有者 | AUTOSAR |
| 文档责任方 | AUTOSAR |
| 文档标识号 | 428 |
| 文档状态 | Final(最终版) |
| 所属 AUTOSAR 标准 | Classic Platform(经典平台) |
| 所属标准发布版本 | 4.4.0 |
| 发布版本 | AUTOSAR CP Release 4.4.0 |
文档变更历史
| 日期 | 发布版本 | 变更人 | 变更说明 |
|---|---|---|---|
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 在附录 A 中添加关于失败模式和检测能力假设的说明;修复 P04、P05 和 P06 的 E2E 头长度定义不一致问题;澄清 E2E_P01ConfigType 中的参数 CounterOffset 和 CRCOffset |
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 更新到 SRS E2E 的可追溯性;修复 profile 1 和 2 的 E2E_PxxCheckStatusType 枚举字面值;更正 E2E_SM_checkinit 例程中的步骤名 E2E_SMClearProfileStatus 为 E2E_SMClearStatus;在配置和例程参数中进行了各种澄清,主要针对 profile 2 和 7 |
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 添加新的 Profiles 7、11 和 22;修复 profile 1 和 2 在 init 函数中的初始化问题,现在正确将 WaitForFirstData 设置为 TRUE;更正/统一 profiles 4、5 和 6 配置数据中计数器状态变量初始化和位/字节转换;移除 8.3.7 章节中被标记为过时的基本协议函数 |
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 引入新的 E2E 状态机 profile 状态 E2E_P_NONEWDATA;调整图、API 表和映射函数;解决状态机确定性启动问题;更新图 7-7,在 ReceivedCounter 超出范围时添加行为;为重复规范 SWS_E2E_00324(profile 4 规范)分配新的规范 ID SWS_E2E_00478;修复图 7-6"在 Data ID 和 Data 上计算 CRC",该问题已在 R4.1.2 中修复但错误地从 R4.1.1 开始包含 |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 引入 E2E profiles 4、5、6;引入 E2E 状态机;为 profiles 1、2 引入 init 函数和状态映射函数;通过几个新图概述包装器 |
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 编辑性修改 |
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 更正 E2E 变体 1C;各种次要更正;编辑性修改 |
| 2013-03-15 | 4.1.1 | AUTOSAR Release Management | 完全支持在信号组级别的 E2E 保护;移除对 Rte_IsUpdated 的依赖;更改有关最大数据长度的建议;在冗余包装器中添加初始化函数;更正代码示例;根据新的 SWS_BSWGeneral 重新设计;新的需求索引方案;扩展 E2E Profile 1 以支持 12 位 Data ID(变体 1C);与 ISO 26262 对齐(术语、通信故障);质量改进(由于文档审查);澄清 E2E 参数配置 |
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 移除 E2E Profile 3(不向后兼容);E2E 保护包装器 API 中的几个错误修复(不向后兼容);修改 E2E 保护包装器 API 的返回值(不向后兼容);为 E2E 保护包装器添加 init API;E2E 保护包装器代码示例中的几个错误修复和修改;配置扩展,使发送方和接收方更加独立;修复 profile 1 交替模式 CRC 计算中的错误;E2E Profile 1 中关于 CRC 的澄清;几个次要错误修复;文本描述中的几个优化;带需求可追溯性的新模板 |
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 更正包装器配置;更正包装器使用示例的代码 |
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 初始发布 |
目录
- 引言与功能概述
- 缩略语与缩写
- 相关文档
- 约束与假设
- 与其他模块的依赖关系
- 需求可追溯性
- 功能规范
- API 规范
- 调用 E2E 库的时序图
- 配置规范
- 附录 A:E2E 库使用的安全手册
- 附录 B:E2E 库使用的应用提示
1 引言与功能概述
AUTOSAR 库例程是 AUTOSAR 架构中系统服务的一部分,下图展示了 AUTOSAR 库在分层架构中的位置。
┌─────────────────────────────┐
A │ Application Layer │
U ├─────────────────────────────┤
T │ Runtime Environment (RTE) │
O ├─────────────────────────────┤
S │ Basic Software │
A │ │
R ├─────────────────────────────┤
│ ECU Hardware │
L └─────────────────────────────┘
I
B
图:分层架构
本规范规定了 AUTOSAR 库的功能、API 和配置,该库用于保护 SW-C 之间的安全相关通信(端到端保护库,简写为 E2E 库)。
E2E 库提供检测安全相关 SW-C 之间(安全相关)通信中错误的功能。保护是通过保护 SW-C 之间交换的安全相关数据元素来实现的,并且保护/检查信号的责任在于直接调用 E2E 库的 SW-C(应用程序)。该库应在 SW-C 间通信使用的任何通信堆栈上工作,目前包括 FlexRay、CAN 和 LIN。将来,当添加更多通信堆栈时,可能需要添加更多 E2E profile。
E2E 库不依赖于 RTE,也不通过 RTE 调用。E2E 库保护的范围从"信号组级"(sender-receiver 通信中的数据元素集合)到"数据元素级"(单个数据元素)。
E2E 库提供以下保护机制(具体取决于 profile):
- CRC(循环冗余校验)
- 计数器(Counter)
- Data ID(数据标识)
- 接收方超时监控
- 用于检测重复、丢失、重新排序、插入、延迟和不当数据元素
2 缩略语与缩写
| 缩写 | 描述 |
|---|---|
| AUTOSAR | AUTomotive Open System ARchitecture(汽车开放系统架构) |
| COM | Communication(通信服务模块) |
| CRC | Cyclic Redundancy Check(循环冗余校验) |
| DET | Default Error Tracer(默认错误追踪器) |
| E2E | End to End(端到端) |
| E2E SM | E2E State Machine(E2E 状态机) |
| ECU | Electronic Control Unit(电子控制单元) |
| I-PDU | Interaction Layer Protocol Data Unit(交互层协议数据单元) |
| PDU | Protocol Data Unit(协议数据单元) |
| RTE | Runtime Environment(运行时环境) |
| SW-C | Software Component(软件组件) |
| Pxx | E2E Profile xx(xx 是 1、2、4、5、6、7、11、22 等) |
| Data ID | 数据标识符 |
| Counter | 计数器(消息序列号) |
| Length | 长度(数据字节数) |
3 相关文档
3.1 输入文档
- [1] AUTOSAR Layered Software Architecture, AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
- [2] AUTOSAR General Requirements on Basic Software Modules, AUTOSAR_SRS_BSWGeneral.pdf
- [3] AUTOSAR General Specification for Basic Software Modules, AUTOSAR_SWS_BSWGeneral.pdf
- [4] AUTOSAR Specification of RTE, AUTOSAR_SWS_RTE.pdf
- [5] AUTOSAR Specification of ECU Configuration, AUTOSAR_TPS_ECUConfiguration.pdf
- [6] AUTOSAR Specification of Communication Stack, AUTOSAR_SWS_COM.pdf
- [7] AUTOSAR Specification of CRC Routines, AUTOSAR_SWS_CRCLibrary.pdf
- [8] AUTOSAR Specification of PDU Router, AUTOSAR_SWS_PduR.pdf
- [9] AUTOSAR Requirements on Libraries, AUTOSAR_SRS_Libraries.pdf
- [10] AUTOSAR Specification of Standard Types, AUTOSAR_SWS_StandardTypes.pdf
- [11] AUTOSAR Specification of Platform Types, AUTOSAR_SWS_PlatformTypes.pdf
- [12] AUTOSAR Requirements on SW-C End-to-End Communication Protection, AUTOSAR_SRS_E2E.pdf
- [13] ISO 26262:2011, Road vehicles – Functional safety
3.2 相关标准与规范
- [14] ISO/IEC 9899:1990 Programming Language – C
4 约束与假设
4.1 局限性
4.1.1 在数据元素级调用库时的限制
在数据元素级调用 E2E 库时存在一些限制,需要 RTE 在 SW-C 内支持适当的访问机制以将数据元素打包到 I-PDU。
4.2 对汽车领域的适用性
无限制。
4.3 有关功能安全性的背景信息
4.3.1 功能安全与通信
E2E 通信保护支持在 SW-C 之间提供安全通信,符合 ISO 26262 标准。E2E 库本身不实施安全机制;它提供检测、信号和控制机制以由调用方实施。
4.3.2 E2E 通信中的故障源
在 SW-C 通信中,可能发生以下故障:
- 重复(Repetition):相同消息被接收多次
- 丢失(Loss):消息丢失
- 重新排序(Re-ordering):消息顺序错误
- 插入(Insertion):插入了新消息
- 不当数据元素(Inadequate data element):数据被修改
- 延迟(Delay):消息延迟到达
- 寻址错误(Addressing errors):消息被路由到错误的接收方
4.3.3 通信故障
通信故障可以根据 ISO 26262 进行分类:
- 遗漏(Omission)
- 重复
- 重新排序
- 损坏(Corruption)
- 不当的时序
- 不一致的插入
E2E 库检测这些故障。
4.4 E2E 库的实现
E2E 库必须以避免全局变量使用的方式实现(库应该是可重入的)。所有状态必须由调用方管理。
5 与其他模块的依赖关系
5.1 所需文件结构
[SWS_E2E_00050] ⌈ E2E 模块应提供以下文件:
- C 文件
E2E_<name>.c用于实现库。所有 C 文件应以E2E_为前缀。 - 头文件
E2E.h提供所有公共函数原型和类型。 ⌋()
5.2 对 CRC 库的依赖
E2E 库依赖于 CRC 库(参见 [7])来计算 CRC 校验和。
[SWS_E2E_00051] ⌈ E2E 库应使用 CRC 库。 ⌋()
6 需求可追溯性
E2E 库与多个 BSW 通用需求和库特定需求(SRS_E2E)相关联。详细的可追溯性表见原文 PDF 第 20-33 页。
7 功能规范
7.1 错误分类
[SWS_E2E_00010] ⌈ E2E 库定义了以下错误分类:
E2E_E_OK:无错误E2E_E_INPUTERR_NULL:输入参数之一为 NULL 指针E2E_E_INPUTERR_WRONG:输入参数之一具有无效值E2E_E_INTERR:内部错误E2E_E_WRONGSTATE:库处于错误状态E2E_E_BUFFER_FAIL:临时缓冲区太小
⌋()
[SWS_E2E_00011] ⌈ E2E 库应定义 E2E_PxxCheckStatusType 枚举来表示检查状态。 ⌋()
[SWS_E2E_00012] ⌈ E2E 库应定义 E2E_PxxStatusType 枚举来表示 profile 状态。 ⌋()
E2E 库提供以下主要功能类别:
- E2E 配置类型(E2E_P01ConfigType、E2E_P02ConfigType 等)
- E2E 保护例程(E2E_P01Protect、E2E_P02Protect 等)
- E2E 检查例程(E2E_P01Check、E2E_P02Check 等)
- E2E 状态机例程(E2E_SM_xxx)
- E2E 保护包装器(用于信号组级保护)
8 API 规范
8.1 导入类型
| 头文件 | 导入类型 |
|---|---|
| Std_Types.h | Std_VersionInfoType, uint8, uint16, uint32 |
| PlatformTypes.h | uint8, uint16, uint32 |
| Crc.h | Crc_CalculateCRC8, Crc_CalculateCRC16, Crc_CalculateCRC32, Crc_CalculateCRC64 |
8.2 类型定义
E2E 库定义了多个复杂类型,每个 profile 一组类型。
8.2.1 E2E Profile 1 类型
[SWS_E2E_00070] ⌈ E2E_P01ConfigType 结构定义:
typedef struct {
uint16 DataLength; // 数据长度(字节)
uint8 DataID; // 数据标识符
uint8 DataIDNibbleOffset; // Data ID 半字节偏移
uint8 CounterOffset; // 计数器在数据中的偏移(位)
uint8 CRCOffset; // CRC 在数据中的偏移(位)
uint8 RepeatedDataID; // 重复 Data ID 标志
uint8 AlternatingDataID; // 交替 Data ID 标志
} E2E_P01ConfigType;
⌋()
[SWS_E2E_00071] ⌈ E2E_P01ProtectStateType 结构定义:
typedef struct {
uint8 Counter; // 当前计数器值
} E2E_P01ProtectStateType;
⌋()
[SWS_E2E_00072] ⌈ E2E_P01CheckStateType 结构定义:
typedef struct {
uint8 Counter; // 上次接收的计数器
uint8 Status; // profile 状态
boolean NewDataAvailable; // 新数据可用标志
} E2E_P01CheckStateType;
⌋()
摘要标记:E2E 库定义了 8 个 profile(1、2、4、5、6、7、11、22),每个 profile 都有一组类型定义和例程。由于文档体量较大(205 页),此处仅翻译 Profile 1 的关键类型。完整定义见原文 PDF。
8.2.9 E2E 状态机类型
[SWS_E2E_00197] ⌈ E2E_SMConfigType 结构定义:
typedef struct {
uint8 Size; // 配置中的 profile 数
E2E_PConfigType* Config; // profile 配置数组
} E2E_SMConfigType;
⌋()
[SWS_E2E_00198] ⌈ E2E_SMStateType 结构定义:
typedef struct {
E2E_PStateType* State; // profile 状态数组
} E2E_SMStateType;
⌋()
8.3 例程定义
摘要标记:E2E 库定义了大量例程。对于每个 profile,存在保护例程(
E2E_PxxProtect)、检查例程(E2E_PxxCheck)和 init 例程(E2E_PxxInit)。此处翻译关键例程。完整表见原文 PDF。
8.3.1 E2E Profile 1 例程
[SWS_E2E_00075] ⌈ E2E_P01Protect 函数签名:
Std_ReturnType E2E_P01Protect(
const E2E_P01ConfigType* Config,
E2E_P01ProtectStateType* State,
const uint8* Data
);
参数:
Config:profile 配置State:profile 状态Data:要保护的数据
返回值: E2E_E_OK(成功)或错误代码
描述: 此例程执行 E2E Profile 1 保护。它计算 CRC,将 CRC 和计数器添加到数据中。 ⌋()
[SWS_E2E_00076] ⌈ E2E_P01Check 函数签名:
Std_ReturnType E2E_P01Check(
const E2E_P01ConfigType* Config,
E2E_P01CheckStateType* State,
const uint8* Data
);
参数:
Config:profile 配置State:profile 状态Data:要检查的数据
返回值: E2E_E_OK(成功)或错误代码
描述: 此例程执行 E2E Profile 1 检查。它验证 CRC、计数器、Data ID 和其他参数。如果检查通过,则更新 State->Status 以指示新数据是否可用。 ⌋()
8.3.9 E2E 状态机例程
[SWS_E2E_00203] ⌈ E2E_SMInit 函数签名:
Std_ReturnType E2E_SMInit(
E2E_SMStateType* StateBuffer,
const E2E_SMConfigType* ConfigBuffer
);
描述: 初始化 E2E 状态机。 ⌋()
[SWS_E2E_00204] ⌈ E2E_SMCheckInit 函数签名:
Std_ReturnType E2E_SMCheckInit(
const E2E_SMConfigType* ConfigBuffer
);
描述: 检查 E2E 状态机配置的有效性。 ⌋()
[SWS_E2E_00205] ⌈ E2E_SMCheck 函数签名:
Std_ReturnType E2E_SMCheck(
E2E_SMStateType* StateBuffer,
const E2E_SMConfigType* ConfigBuffer,
const uint8* Data
);
描述: 在接收方调用此例程以检查所有配置 profile 的新数据。 ⌋()
[SWS_E2E_00206] ⌈ E2E_SMSend 函数签名:
Std_ReturnType E2E_SMSend(
E2E_SMStateType* StateBuffer,
const E2E_SMConfigType* ConfigBuffer,
uint8* Data
);
描述: 在发送方调用此例程以保护所有配置 profile 的数据。 ⌋()
[SWS_E2E_00207] ⌈ E2E_SMGetCurrentStatus 函数签名:
Std_ReturnType E2E_SMGetCurrentStatus(
const E2E_SMStateType* StateBuffer,
const E2E_SMConfigType* ConfigBuffer,
E2E_SMStatusType* Status
);
描述: 返回 E2E 状态机的当前状态。 ⌋()
[SWS_E2E_00208] ⌈ E2E_SMClearStatus 函数签名:
Std_ReturnType E2E_SMClearStatus(
E2E_SMStateType* StateBuffer,
const E2E_SMConfigType* ConfigBuffer
);
描述: 清除 E2E 状态机的状态。 ⌋()
8.3.10 辅助函数
[SWS_E2E_00027] ⌈ E2E_GetVersionInfo 函数签名:
void E2E_GetVersionInfo(
Std_VersionInfoType* Versioninfo
);
描述: 返回 E2E 库的版本信息。 ⌋()
8.4 回调通知
无。
8.5 调度函数
无。
8.6 预期接口
无。
8.6.1 强制接口
无。
9 调用 E2E 库的时序图
9.1 发送方
9.1.1 数据元素的发送方
Application --> E2E_PxxProtect() --> 修改后的数据 --> RTE --> COM --> Bus
描述:
- 应用程序准备要发送的数据。
- 应用程序调用 E2E_PxxProtect(),传递数据和配置。
- E2E_PxxProtect() 在数据中嵌入 CRC、Counter 和 Data ID。
- 修改后的数据通过 RTE 发送到 COM。
- COM 将数据发送到总线。
9.1.2 信号组级的发送方
Application --> E2E_SMSend() --> 修改后的数据 --> RTE --> COM --> Bus
9.2 接收方
9.2.1 数据元素级的接收方
Bus --> COM --> RTE --> E2E_PxxCheck() --> 应用程序
描述:
- COM 从总线接收数据。
- RTE 将数据传递到 E2E_PxxCheck()。
- E2E_PxxCheck() 验证 CRC、Counter、Data ID。
- 验证结果存储在 State 中。
- 应用程序读取验证结果以确定数据是否可信。
9.2.2 信号组级的接收方
Bus --> COM --> RTE --> E2E_SMCheck() --> 应用程序
10 配置规范
10.1 发布信息
[SWS_E2E_00028] ⌈ E2E 库应提供版本信息。 ⌋()
11 附录 A:E2E 库使用的安全手册
11.1 E2E profiles 及其标准变体
E2E 库提供以下 profiles:
- Profile 1(P01):使用 CRC8、Counter 和 Data ID
- Profile 2(P02):使用 CRC8、Counter、Data ID 和 Length
- Profile 4(P04):使用 CRC32、Counter 和 Data ID
- Profile 5(P05):使用 CRC16、Counter 和 Data ID
- Profile 6(P06):使用 CRC16、Counter 和 Data ID
- Profile 7(P07):使用 CRC64、Counter 和 Data ID
- Profile 11(P11):使用 CRC8、双 Counter 和 Data ID
- Profile 22(P22):使用 CRC8、Counter、Data ID 和 Length(增强版)
11.2 E2E 错误处理
E2E 库检测以下错误:
- 重复(RepeatedData)
- 丢失(MissingData)
- 重新排序(ReorderedData)
- 插入(InsertedData)
- 错误的数据(WrongData)
- 超时(Timeout)
- 新数据(NewData)
- 无新数据(NonewData)
- 同步(Sync)
- 数据 ID 错误(WrongDataID)
11.3 数据、通讯总线的最大长度
最大数据长度取决于所选的 CRC 算法和 profile。
11.4 E2E 库的使用方法论
E2E 库的使用方法论包括以下步骤:
- 选择适当的 E2E profile
- 配置 profile 参数
- 在发送方调用保护例程
- 在接收方调用检查例程
- 根据检查状态决定是否使用数据
11.5 Data ID 的配置约束
11.5.1 Data ID
Data ID 是每个 I-PDU 的唯一标识符,必须在发送方和接收方之间匹配。
11.5.2 E2E Profile 1 的双 Data ID 配置
E2E Profile 1 支持双 Data ID 配置,其中 Data ID 在 I-PDU 中出现两次以增加可靠性。
11.5.3 E2E Profile 1 的交替 Data ID 配置
E2E Profile 1 支持交替 Data ID 配置,其中 Data ID 的高 4 位是 Data ID,低 4 位是计数器的最低有效位。
11.5.4 E2E Profile 1 的半字节配置
E2E Profile 1 支持半字节 Data ID 配置。
11.6 构建自定义 E2E 协议
可以使用 E2E 库原语构建自定义 E2E 协议。
11.7 I-PDU 布局
11.7.1 信号与字节边界的对齐
信号应对齐到字节边界。
11.7.2 未使用的位
未使用的位应填充零。
11.7.3 字节顺序(Endianness)
E2E 库使用大端字节顺序。
11.7.4 位顺序
E2E 库使用大端位顺序。
11.8 SW-C 级保护的 RTE 配置约束
11.8.1 SW-C 级保护的通信模型
SW-C 级保护使用 sender-receiver 通信模型。
11.8.2 SW-C 级保护的多重性
SW-C 级保护支持 1:1 和 1:n 通信。
11.8.3 显式访问
显式访问模式用于 SW-C 级保护。
11.9 COM 功能的限制
E2E 库的使用对 COM 功能有一些限制,例如不直接支持某些 COM 信号类型。
11.10 E2E 保护概念实现示例
11.10.1 基本原则
- 在数据元素级(每个数据元素):在 SW-C 内的发送方和接收方调用 E2E 例程
- 在信号组级(整个 I-PDU):通过包装器自动调用 E2E 例程
11.10.2 接收方确定通信通道完整性
接收方通过检查 profile 状态来确定通信通道的完整性。
12 附录 B:E2E 库使用的应用提示
12.1 E2E 保护包装器
E2E 保护包装器是一种便捷机制,允许 SW-C 在不显式调用 E2E 例程的情况下使用 E2E 保护。包装器在 RTE 中自动调用 E2E 例程。
包装器的工作流程:
发送方:
- SW-C 调用 RTE 写入 API。
- RTE 触发 E2E 保护包装器。
- 包装器调用 E2E_PxxProtect()。
- 修改后的数据被发送到 COM。
接收方:
- COM 接收新数据。
- RTE 触发 E2E 保护包装器。
- 包装器调用 E2E_PxxCheck()。
- 验证结果存储在 profile 状态中。
- SW-C 读取状态以确定数据是否可信。
翻译说明
- 本文档为 AUTOSAR CP Release 4.4.0 的 E2E 库软件规范(SWS)。
- 所有 API 标识符(如
E2E_P01Protect、E2E_P02Check、E2E_SMInit等)保留英文原名。 - 数据类型(
uint8、uint16、uint32、Std_ReturnType、boolean)保留英文原名。 - 需求 ID(如
SWS_E2E_00010)保留原样。 - 章节中包含的所有 C 代码片段按原文翻译并保留格式。
- AUTOSAR 方框符
⌈⌋已保留。 - 文档涵盖 8 个 E2E profiles(1、2、4、5、6、7、11、22)的详细规范,每个 profile 都有完整的类型定义、保护例程、检查例程和状态映射。
- 由于文档体量较大(205 页),此处仅翻译关键定义、关键 API 签名和 E2E 保护概念的核心内容。完整类型定义、所有 profile 详细信息、所有时序图、所有安全考虑事项和所有配置参数见原文 PDF。
- 附录 A(安全手册)描述了 E2E 库在功能安全通信中的使用方法,包括 profiles 概述、错误处理、配置约束和实现示例。
- 附录 B(应用提示)描述了 E2E 保护包装器的使用方法。