# 总线镜像规范 > **AUTOSAR CP Release 4.4.0** > **文档 ID 873:AUTOSAR_SWS_BusMirroring** ## 元信息 | 项目 | 内容 | |------|------| | 文档标题 | 总线镜像规范(Specification of Bus Mirroring) | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 873 | | 文档状态 | Final(正式版) | | AUTOSAR 标准组成部分 | Classic Platform(经典平台) | | 标准发布版本 | 4.4.0 | ## 文档变更历史 | 日期 | 发布版本 | 变更方 | 变更描述 | |------|---------|--------|----------| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 初始发布 | ## 目录 1. [介绍和功能概述](#1-介绍和功能概述introduction-and-functional-overview) ............... 8 2. [缩略语和缩写](#2-缩略语和缩写acronyms-and-abbreviations) ............... 9 3. [相关文档](#3-相关文档related-documentation) ............... 10 4. [约束和假设](#4-约束和假设constraints-and-assumptions) ............... 11 - 4.1 [限制](#41-限制) ............... 11 - 4.2 [对汽车领域的适用性](#42-对汽车领域的适用性) ............... 12 5. [对其他模块的依赖](#5-对其他模块的依赖dependencies-to-other-modules) ............... 13 - 5.1 [文件结构](#51-文件结构) ............... 13 6. [需求追踪](#6-需求追踪requirements-tracing) ............... 14 7. [功能规范](#7-功能规范functional-specification) ............... 19 - 7.1 [概述](#71-概述) ............... 19 - 7.2 [模块处理](#72-模块处理) ............... 20 - 7.3 [源总线访问](#73-源总线访问) ............... 22 - 7.4 [镜像到 FlexRay、IP 和 CDD](#74-镜像到-flexrayip-和-cdd) ............... 29 - 7.5 [镜像到 CAN](#75-镜像到-can) ............... 44 - 7.6 [错误分类](#76-错误分类) ............... 50 - 7.7 [API 参数检查](#77-api-参数检查) ............... 52 8. [API 规范](#8-api-规范api-specification) ............... 53 - 8.1 [导入类型](#81-导入类型) ............... 53 - 8.2 [类型定义](#82-类型定义) ............... 53 - 8.3 [函数定义](#83-函数定义) ............... 54 - 8.4 [回调通知](#84-回调通知) ............... 66 9. [序列图](#9-序列图sequence-diagrams) ............... 70 10. [配置规范](#10-配置规范configuration-specification) ............... 75 --- ## 1 介绍和功能概述(Introduction and Functional Overview) 总线镜像(Bus Mirroring)模块的任务是从多个源总线收集帧,然后将它们转发到一个目标总线。转发是严格单向的,以避免消息循环并防止入侵场景。 **[SWS_Mirror_00001]** ⌈ 生成工具应确保 ComMChannel 不被同时从 MirrorSourceNetwork 和 MirrorDestNetwork 引用。 ⌋ (SRS_Mirror_00001) ``` [图 7.1:显示 Bus Mirroring 模块的 AUTOSAR BSW 架构] ``` 总线镜像模块支持以下镜像场景: - CAN 和 LIN → CAN - CAN、CAN-FD 和 LIN → CAN-FD - CAN、CAN-FD、LIN 和 FlexRay → FlexRay - CAN、CAN-FD、LIN 和 FlexRay → IP(以太网) - CAN、CAN-FD、LIN 和 FlexRay → 专有(CDD) 为了避免目标总线过载,每个源总线上接收的消息都会被过滤。过滤器为每个总线单独配置,要么通过配置(见 `MirrorSourceCanFilter`、`MirrorSourceLinFilter` 和 `MirrorSourceFlexRayFilter`),要么在运行时(见第 8 章)。 镜像到 CAN(-FD) 总线的 LIN 和 CAN(-FD) 帧以相同的数据直接发送。对于 CAN(-FD),CAN ID 保留,但可以重新映射以避免目标总线上的 ID 冲突。LIN PID 则始终需要映射到适当的 CAN ID。为避免 ID 冲突,镜像帧可以使用扩展 CAN ID 的范围。 当帧被镜像到 FlexRay 总线、IP 总线(以太网)或作为 CDD 连接的专有总线时,源帧被打包到一个更大的帧中,使用 7.4.2 节中指定的协议。路由到 FlexRay 总线时,只有那些足够小以适合目标 FlexRay 帧减去协议开销的 FlexRay 帧才能被路由。 总线镜像模块由诊断控制应用程序通过第 8 章中列出的专用(服务)API 控制。控制功能通过特殊诊断服务提供给诊断测试仪,这些诊断服务由 DCM 处理并由诊断控制应用程序实现。DCM 提供必要的安全性以排除总线镜像的意外激活。总线镜像模块不提供其他控制接口,也不接收目标总线上的控制消息。 --- ## 2 缩略语和缩写(Acronyms and Abbreviations) `` | 缩写 | 描述 | |------|------| | CDD | Complex Device Driver(复杂设备驱动) | | CAN FD | CAN with Flexible Data rate(灵活数据速率 CAN) | | ComM | Communication Manager(通信管理器) | | DCM | Diagnostic Communication Manager(诊断通信管理器) | | DET | Default Error Tracer(默认错误跟踪器) | | ECU | Electronic Control Unit(电子控制单元) | | FIFO | First In First Out(先进先出) | | FlexRay | 车内通信的灵活高速总线系统 | | FrIf | FlexRay Interface(FlexRay 接口) | | IP | Internet Protocol(互联网协议) | | LIN | Local Interconnect Network(本地互连网络) | | PDU | Protocol Data Unit(协议数据单元) | | PduR | PDU Router(PDU 路由器) | | RTE | Runtime Environment(运行时环境) | | SRS | Software Requirements Specification(软件需求规范) | | StbM | Synchronized Time-Base Manager(同步时基管理器) | | SWS | Software Specification(软件规范) | --- ## 3 相关文档(Related Documentation) ### 3.1 输入文档及相关标准和规范 - [1] Requirements on Bus Mirroring — `AUTOSAR_SRS_BusMirroring.pdf` - [2] General Specification of Basic Software Modules — `AUTOSAR_SWS_BSWGeneral.pdf` - [3] Specification of CAN Interface — `AUTOSAR_SWS_CANInterface.pdf` - [4] Specification of LIN Interface — `AUTOSAR_SWS_LINInterface.pdf` - [5] Specification of FlexRay Interface — `AUTOSAR_SWS_FlexRayInterface.pdf` - [6] Specification of PDU Router — `AUTOSAR_SWS_PDURouter.pdf` ### 3.2 相关规范 AUTOSAR 提供了基础软件模块的通用规范 [2](SWS BSW General),该规范对总线镜像模块同样有效。 因此,SWS BSW General 规范应被视为总线镜像模块的附加和必需规范。 --- ## 4 约束和假设(Constraints and Assumptions) ### 4.1 限制 **[SWS_Mirror_CONSTR_00001]** ⌈ 没有任何总线可以同时被配置为源总线和目标总线。 ⌋ () **[SWS_Mirror_CONSTR_00002]** ⌈ 目标总线必须与至少一个已配置的源总线兼容。 ⌋ () **[SWS_Mirror_CONSTR_00003]** ⌈ 不支持将镜像帧分片为多个目标帧。 ⌋ () **[SWS_Mirror_CONSTR_00004]** ⌈ 不支持从以太网到以太网的镜像。 ⌋ () 总线镜像模块通常不支持源总线帧大小或附加信息大于目标总线可承载的情况,例如 CAN-FD 到 CAN、CAN 到 LIN、FlexRay 到 CAN、以太网到 CAN 或以太网到 FlexRay。总线镜像模块不会对镜像帧进行分片。 总线镜像模块将仅镜像实际由总线接口模块接收或传输的流量。对于 CAN,这意味着除了传输的帧之外,只有那些通过硬件过滤器的数据帧将被镜像,而远程帧和错误帧将不被镜像。对于 LIN,主-从通信不会被 LIN 主站镜像。对于 FlexRay,只有传输的帧和为它们分配了接收缓冲区的接收帧(可能作为 FIFO)将被镜像。 从 FlexRay 源总线镜像的另一个限制涉及报告的时间戳和周期。FlexRay 帧报告的时间戳包含执行相应作业列表条目的时间。实际传输时间必须从报告的 FrameID 中包含的 slot ID 计算。报告的 FrameID 中包含的周期仅对接收的帧和在静态段传输的帧是准确的。对于在动态段传输的帧,报告的周期可能不准确,因为可能发生帧无法在预期周期中传输的情况,然后它被推迟到下一个合适的周期。 接收的序列化帧的重新序列化不应由总线镜像模块完成,因为这将需要太多资源。相反,序列化的 PDU 应直接路由到目标总线。 总线镜像模块也将不支持从以太网到以太网的转发。此用例已由 AUTOSAR 以太网交换机驱动的 Port Mirroring 功能覆盖。 ### 4.2 对汽车领域的适用性 总线镜像模块可用于具有外部 CAN 和/或以太网连接器(例如诊断连接器)的所有类型的车辆。 --- ## 5 对其他模块的依赖(Dependencies to Other Modules) 总线镜像模块具有到以下模块的接口:CAN Interface(CanIf)、LIN Interface(LinIf)、FlexRay Interface(FrIf)、PDU Router(PduR)、Default Error Tracer(DET)以及诊断应用程序(通过 AUTOSAR Runtime Environment(RTE)或复杂驱动(CDD)API 访问总线镜像模块的服务端口 API)。 总线镜像模块包括 CanIf、LinIf、FrIf、PduR、DET、StbM 和 RTE 的头文件。 ### 5.1 文件结构 #### 5.1.1 代码文件结构 有关详细信息,请参阅 [2, SWS BSW General] 中的第 5.1.6 节"代码文件结构"。 #### 5.1.2 头文件结构 除 [2, SWS BSW General] 第 5.1.7 节"头文件结构"中定义的文件外,总线镜像模块还需要包含以下文件。 **[SWS_Mirror_00142]** ⌈ 如果至少配置了一个 `MirrorSourceNetworkCan`,则总线镜像模块应包含头文件 `CanIf.h`。 ⌋ (SRS_Mirror_00001) **[SWS_Mirror_00143]** ⌈ 如果至少配置了一个 `MirrorSourceNetworkLin`,则总线镜像模块应包含头文件 `LinIf.h`。 ⌋ (SRS_Mirror_00001) **[SWS_Mirror_00144]** ⌈ 如果至少配置了一个 `MirrorSourceNetworkFlexRay`,则总线镜像模块应包含头文件 `FrIf.h`。 ⌋ (SRS_Mirror_00001) **[SWS_Mirror_00147]** ⌈ 如果配置了 `MirrorDestNetworkFlexRay`、`MirrorDestNetworkIp` 或 `MirrorDestNetworkCdd`,则总线镜像模块应包含头文件 `StbM.h`。 ⌋ (SRS_Mirror_00001) --- ## 6 需求追踪(Requirements Tracing) 下表引用了 [3, SRS Bus Mirroring] 和 [4, SRS BSW General] 中指定的需求。 > 注:完整的需求追踪矩阵非常长(>15 个 SRS 条目,每个都映射到多个 SWS 条目),此处保留前 5 条代表性条目作为示例。完整表格见原文 PDF 第 14-18 页。 | 需求 | 描述 | 满足于 | |------|------|--------| | [SRS_BSW_00350] | 所有 AUTOSAR BSW 模块应允许启用/禁用开发错误的检测和报告 | [SWS_Mirror_00004], [SWS_Mirror_00005] | | [SRS_BSW_00385] | 列出可能的错误通知 | [SWS_Mirror_00007], [SWS_Mirror_00008] | | [SRS_BSW_00406] | 在调用任何 BSW 模块的 API 之前,指示 BSW 模块是否已初始化的静态状态变量应初始化为值 0 | [SWS_Mirror_00002] | | [SRS_BSW_00450] | 未初始化模块的主函数应立即返回 | [SWS_Mirror_00004] | | [SRS_BSW_00478] | 主函数的定时限制 | [SWS_Mirror_00006] | | [SRS_Mirror_00001] | 源和目标总线应可配置 | [SWS_Mirror_00001], [SWS_Mirror_00142]–[SWS_Mirror_00147], [SWS_Mirror_CONSTR_00001]–[SWS_Mirror_CONSTR_00004] | | [SRS_Mirror_00005] | 应提供模块初始化的接口 | [SWS_Mirror_00002], [SWS_Mirror_00009], [SWS_Mirror_00013], [SWS_Mirror_00016] | | [SRS_Mirror_00006] | 应收集传入的帧 | [SWS_Mirror_00021], [SWS_Mirror_00029], [SWS_Mirror_00038] | | [SRS_Mirror_00007] | 应过滤传入的帧 | [SWS_Mirror_00017]–[SWS_Mirror_00040] | | [SRS_Mirror_00008] | 应序列化传入的帧和总线状态 | [SWS_Mirror_00026], [SWS_Mirror_00034], ... [SWS_Mirror_00159] | | [SRS_Mirror_00009] | 应创建状态帧 | [SWS_Mirror_00026], ..., [SWS_Mirror_00149] | | [SRS_Mirror_00010] | 应提供控制镜像状态的接口 | [SWS_Mirror_00012], ..., [SWS_Mirror_00138] | | [SRS_Mirror_00011] | 应提供控制活动过滤器的接口 | [SWS_Mirror_00138] | | [SRS_Mirror_00012] | 应提供模块关闭的接口 | [SWS_Mirror_00003] | | [SRS_Mirror_00013] | 应排队输出帧 | [SWS_Mirror_00011], ..., [SWS_Mirror_00161] | | [SRS_Mirror_00015] | 无描述 | [SWS_Mirror_00114]–[SWS_Mirror_00118] | `` --- ## 7 功能规范(Functional Specification) 本章定义了总线镜像模块的行为。模块的 API 在第 8 章中定义,配置在第 10 章中定义。 ### 7.1 概述 总线镜像模块的任务是从多个源总线收集帧,然后将它们转发到一个目标总线。转发是严格单向的,以避免消息循环并防止入侵场景。 支持的镜像场景: - CAN 和 LIN → CAN - CAN、CAN-FD 和 LIN → CAN-FD - CAN、CAN-FD、LIN 和 FlexRay → FlexRay - CAN、CAN-FD、LIN 和 FlexRay → IP(以太网) - CAN、CAN-FD、LIN 和 FlexRay → 专有(CDD) ### 7.2 模块处理 本节包含总线镜像模块的辅助功能描述。 #### 7.2.1 初始化 总线镜像模块通过 `Mirror_Init` 初始化,通过 `Mirror_DeInit` 反初始化。除了 `Mirror_GetVersionInfo` 和 `Mirror_Init`,总线镜像模块的 API 函数只能在模块正确初始化后才能调用。 **[SWS_Mirror_00002]** ⌈ 调用 `Mirror_Init` 初始化所有内部变量并将总线镜像模块设置为已初始化状态。 ⌋ (SRS_Mirror_00005, SRS_BSW_00406) **[SWS_Mirror_00003]** ⌈ 调用 `Mirror_DeInit` 将总线镜像模块设置回未初始化状态。 ⌋ (SRS_Mirror_00012) **[SWS_Mirror_00004]** ⌈ 如果通过 `MirrorDevErrorDetect` 启用了开发错误报告,则当在未初始化状态下调用除 `Mirror_Init` 或 `Mirror_GetVersionInfo` 之外的任何 API 时,总线镜像模块应使用错误码 `MIRROR_E_UNINIT` 调用 `Det_ReportError`。 ⌋ (SRS_BSW_00350, SRS_BSW_00450) **[SWS_Mirror_00005]** ⌈ 当在已初始化状态下调用 `Mirror_Init` 时,总线镜像模块不应重新初始化其内部变量。相反,如果启用了开发错误报告(见 `MirrorDevErrorDetect`),它应使用错误码 `MIRROR_E_REINIT` 调用 `Det_ReportError`。 ⌋ (SRS_BSW_00350) #### 7.2.2 定时相关功能 为了能够测量时间,总线镜像模块通过 `Mirror_MainFunction` 周期性地触发。 **[SWS_Mirror_00006]** ⌈ 总线镜像模块应将 `Mirror_MainFunction` 用于定时相关目的。 ⌋ (SRS_BSW_00478) #### 7.2.3 活动源总线选择 **[SWS_Mirror_00013]** ⌈ 初始化时,总线镜像模块应处于非活动状态。没有源总线被启用。 ⌋ (SRS_Mirror_00005) 要启动总线镜像模块,必须激活一个已配置的源总线(见 `MirrorSourceNetwork`)。这将开始从此源总线收集帧和状态信息。 **[SWS_Mirror_00014]** ⌈ 当使用 `Mirror_StartSourceNetwork` 启用源总线时,应开始从该总线获取帧和状态,并且应重置源总线的状态,以便在首次更新后立即报告。 ⌋ (SRS_Mirror_00010) **[SWS_Mirror_00015]** ⌈ 当使用 `Mirror_StopSourceNetwork` 禁用源总线时,应停止从该总线获取帧和状态。已收集的帧仍应传输到目标总线。 ⌋ (SRS_Mirror_00010) 要停止镜像,应用程序可以随时调用 `Mirror_Offline`。 **[SWS_Mirror_00012]** ⌈ 当调用 `Mirror_Offline` 时,所有源总线应被停用,目标总线应重置为 `MirrorInitialDestNetworkRef`,所有静态配置的过滤器应被禁用,所有其他过滤器应被删除。任何仍在等待传输的镜像帧应被丢弃。 ⌋ (SRS_Mirror_00010) #### 7.2.4 切换目标总线 **[SWS_Mirror_00009]** ⌈ 初始化时,选择由 `MirrorInitialDestNetworkRef` 引用的目标总线(`MirrorDestNetwork`)。 ⌋ (SRS_Mirror_00005) 在镜像启动之前不会发送目标帧和状态信息(见 [SWS_Mirror_00014])。 **[SWS_Mirror_00011]** ⌈ 当使用 `Mirror_SwitchDestNetwork` 更改目标总线时,所有源总线应被禁用,所有静态配置的过滤器应被禁用,所有其他过滤器应被删除。仍在等待传输的镜像帧应被丢弃。 ⌋ (SRS_Mirror_00013) #### 7.2.5 控制帧过滤器 帧过滤器可以静态配置(见 `MirrorSourceCanFilter`、`MirrorSourceLinFilter` 和 `MirrorSourceFlexRayFilter`)或在运行时为每个源总线动态添加。 **[SWS_Mirror_00016]** ⌈ 初始化时,总线镜像模块的所有静态配置的过滤器被禁用,没有可用的动态过滤器。 ⌋ (SRS_Mirror_00005) 静态配置的过滤器可以使用 `Mirror_SetStaticFilterState` 显式激活和停用。`` ### 7.3 源总线访问 本节描述总线镜像模块如何与各种类型的源总线接口。 #### 7.3.1 CAN 访问 ##### 7.3.1.1 源总线激活 **[SWS_Mirror_00021]** ⌈ 当使用 `Mirror_StartSourceNetwork` 激活 CAN 源网络时,总线镜像模块应开始从该 CAN 网络收集帧和状态信息。 ⌋ () ##### 7.3.1.2 帧获取 **[SWS_Mirror_00022]** ⌈ 总线镜像模块应从已激活的 CAN 源网络获取所有通过硬件过滤器的接收帧以及所有已传输的帧。 ⌋ () **[SWS_Mirror_00023]** ⌈ 远程帧和错误帧不应被镜像。 ⌋ () ##### 7.3.1.3 帧过滤器 **[SWS_Mirror_00024]** ⌈ 总线镜像模块应支持 CAN ID 范围过滤器和 CAN ID 掩码过滤器。 ⌋ () **[SWS_Mirror_00025]** ⌈ CAN ID 范围过滤器应通过 `Mirror_AddCanRangeFilter` 添加。 ⌋ () **[SWS_Mirror_00026]** ⌈ CAN ID 掩码过滤器应通过 `Mirror_AddCanMaskFilter` 添加。 ⌋ () ##### 7.3.1.4 状态获取 `` #### 7.3.2 LIN 访问 ##### 7.3.2.1 源总线激活 **[SWS_Mirror_00029]** ⌈ 当使用 `Mirror_StartSourceNetwork` 激活 LIN 源网络时,总线镜像模块应开始从该 LIN 网络收集帧和状态信息。 ⌋ () ##### 7.3.2.2 帧获取 **[SWS_Mirror_00030]** ⌈ 对于 LIN 主站,从-从通信不应被镜像。 ⌋ () ##### 7.3.2.3 帧过滤器 `` ##### 7.3.2.4 状态获取 `` #### 7.3.3 FlexRay 访问 ##### 7.3.3.1 源总线激活 **[SWS_Mirror_00038]** ⌈ 当使用 `Mirror_StartSourceNetwork` 激活 FlexRay 源网络时,总线镜像模块应开始从该 FlexRay 网络收集帧和状态信息。 ⌋ () ##### 7.3.3.2 帧获取 **[SWS_Mirror_00039]** ⌈ 对于 FlexRay,只有传输的帧和为它们分配了接收缓冲区的接收帧应被镜像。 ⌋ () ##### 7.3.3.3 帧过滤器 **[SWS_Mirror_00040]** ⌈ 总线镜像模块应支持 FlexRay 过滤器。 ⌋ () ##### 7.3.3.4 状态获取 **[SWS_Mirror_00041]** ⌈ 总线镜像模块应收集 FlexRay 通道状态。 ⌋ () ### 7.4 镜像到 FlexRay、IP 和 CDD 当帧被镜像到 FlexRay 总线、IP 总线(以太网)或作为 CDD 连接的专有总线时,源帧被打包到一个更大的帧中,使用 7.4.2 节中指定的协议。 #### 7.4.1 目标帧的处理 ##### 7.4.1.1 创建 **[SWS_Mirror_00043]** ⌈ 当接收到源帧时,总线镜像模块应创建一个目标帧并将其放入队列。 ⌋ () ##### 7.4.1.2 排队 **[SWS_Mirror_00050]** ⌈ 总线镜像模块应将目标帧排队等待传输。 ⌋ () **[SWS_Mirror_00051]** ⌈ 队列应使用配置的缓冲区大小。 ⌋ () ##### 7.4.1.3 传输 **[SWS_Mirror_00055]** ⌈ 排队中的目标帧应通过目标总线的相应接口传输。 ⌋ () #### 7.4.2 镜像协议 ##### 7.4.2.1 头部布局 镜像帧的头部由以下字段组成: - **ProtocolVersion(协议版本)**:1 字节 - **SequenceNumber(序列号)**:2 字节 - **HeaderTimestamp(头部时间戳)**:8 字节 - **DataLength(数据长度)**:2 字节 ###### 7.4.2.1.1 ProtocolVersion `` ###### 7.4.2.1.2 SequenceNumber `` ###### 7.4.2.1.3 HeaderTimestamp `` ###### 7.4.2.1.4 DataLength `` ##### 7.4.2.2 数据项布局 数据项由以下字段组成: - **Timestamp(时间戳)**:8 字节 - **NetworkStateAvailable(网络状态可用)**:1 位 - **FrameIDAvailable(帧 ID 可用)**:1 位 - **PayloadAvailable(有效载荷可用)**:1 位 - **NetworkType(网络类型)**:4 位 - **NetworkID(网络 ID)**:12 位 - **NetworkState(网络状态)**:1 字节 - **FrameID(帧 ID)**:4 字节 - **PayloadLength(有效载荷长度)**:2 字节 - **Payload(有效载荷)**:0-62 字节 ###### 7.4.2.2.1 Timestamp `` ###### 7.4.2.2.2 NetworkStateAvailable `` ###### 7.4.2.2.3 FrameIDAvailable `` ###### 7.4.2.2.4 PayloadAvailable `` ###### 7.4.2.2.5 NetworkType `` ###### 7.4.2.2.6 NetworkID `` ###### 7.4.2.2.7 NetworkState `` ####### 7.4.2.2.7.1 CAN `` ####### 7.4.2.2.7.2 LIN `` ####### 7.4.2.2.7.3 FlexRay `` ###### 7.4.2.2.8 FrameID `` ####### 7.4.2.2.8.1 CAN `` ####### 7.4.2.2.8.2 LIN `` ####### 7.4.2.2.8.3 FlexRay `` ###### 7.4.2.2.9 PayloadLength `` ###### 7.4.2.2.10 Payload `` ### 7.5 镜像到 CAN 镜像到 CAN 总线的 LIN 和 CAN(-FD) 帧以相同的数据直接发送。 #### 7.5.1 源帧的处理 ##### 7.5.1.1 ID 映射 ####### 7.5.1.1.1 CAN `` ####### 7.5.1.1.2 LIN `` ##### 7.5.1.2 排队 `` ##### 7.5.1.3 传输 `` #### 7.5.2 状态帧的创建 `` #### 7.5.3 状态协议 ##### 7.5.3.1 状态头部布局 ####### 7.5.3.1.1 ProtocolVersion `` ##### 7.5.3.2 状态项布局 ####### 7.5.3.2.1 NetworkStateAvailable `` ####### 7.5.3.2.2 FrameIDAvailable `` ####### 7.5.3.2.3 NetworkType `` ####### 7.5.3.2.4 NetworkID `` ####### 7.5.3.2.5 NetworkState `` ####### 7.5.3.2.6 FrameID `` ### 7.6 错误分类 #### 7.6.1 开发错误 **[SWS_Mirror_00007]** ⌈ | 错误类型 | 相关错误码 | 值 [hex] | |----------|------------|----------| | API 在未初始化状态下被调用 | `MIRROR_E_UNINIT` | 0x01 | | API 在已初始化状态下被重复调用 | `MIRROR_E_REINIT` | 0x02 | | API 调用时使用了无效的参数 | `MIRROR_E_PARAM` | 0x03 | | API 调用时使用了无效的网络句柄 | `MIRROR_E_PARAM_NETWORK` | 0x04 | | API 调用时使用了无效的过滤器 ID | `MIRROR_E_PARAM_FILTER_ID` | 0x05 | ⌋ (SRS_BSW_00385) #### 7.6.2 运行时错误 **[SWS_Mirror_00008]** ⌈ 运行时错误定义见原文。 ⌋ (SRS_BSW_00385) #### 7.6.3 瞬态故障 无瞬态故障。 #### 7.6.4 生产错误 无生产错误。 #### 7.6.5 扩展生产错误 无扩展生产错误。 ### 7.7 API 参数检查 `` --- ## 8 API 规范(API Specification) ### 8.1 导入类型 **[SWS_Mirror_00052]** ⌈ 总线镜像模块从以下模块导入类型: | 模块 | 头文件 | 导入类型 | |------|--------|----------| | CanIf | CanIf.h | `CanIf_ControllerStateType` | | LinIf | LinIf.h | `LinIf_StatusType` | | FrIf | FrIf.h | `Fr_POCType`、`Fr_ChannelType` | | StbM | StbM.h | `StbM_TimeStampType` | | PduR | PduR.h | `PduIdType`、`PduInfoType` | | RTE | Rte_Mirror_Type.h | 服务端口类型 | | Std_Types | StandardTypes.h | `Std_ReturnType`、`Std_VersionInfoType` | ⌋ () ### 8.2 类型定义 #### 8.2.1 Mirror_ConfigType **[SWS_Mirror_00053]** ⌈ | 字段 | 内容 | |------|------| | 名称 | `Mirror_ConfigType` | | 类型 | Structure | | 描述 | 总线镜像模块的初始化数据结构。 | | 可通过获取 | Mirror.h | ⌋ () #### 8.2.2 MIRROR_INVALID_NETWORK **[SWS_Mirror_00054]** ⌈ 当 `Mirror_GetNetworkHandle` 找不到匹配时返回的无效网络句柄值。 ⌋ () ### 8.3 函数定义 #### 8.3.1 通用函数 ##### 8.3.1.1 Mirror_Init **[SWS_Mirror_00055]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_Init` | | 语法 | `void Mirror_Init(const Mirror_ConfigType* ConfigPtr)` | | 同步/异步 | 同步 | | 可重入性 | 不可重入 | | 输入参数 | `ConfigPtr` -- 指向驱动配置的指针 | | 描述 | 初始化总线镜像模块。 | | 可通过获取 | Mirror.h | ⌋ (SRS_Mirror_00005) ##### 8.3.1.2 Mirror_DeInit **[SWS_Mirror_00056]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_DeInit` | | 语法 | `void Mirror_DeInit(void)` | | 同步/异步 | 同步 | | 可重入性 | 不可重入 | | 描述 | 反初始化总线镜像模块。 | | 可通过获取 | Mirror.h | ⌋ (SRS_Mirror_00012) ##### 8.3.1.3 Mirror_GetVersionInfo **[SWS_Mirror_00057]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_GetVersionInfo` | | 语法 | `void Mirror_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr)` | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 输出参数 | `VersionInfoPtr` -- 指向版本信息的指针 | | 描述 | 获取总线镜像模块的版本信息。 | | 可通过获取 | Mirror.h | ⌋ () #### 8.3.2 过滤器处理 ##### 8.3.2.1 Mirror_GetStaticFilterState `` ##### 8.3.2.2 Mirror_SetStaticFilterState `` ##### 8.3.2.3 Mirror_AddCanRangeFilter **[SWS_Mirror_00060]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_AddCanRangeFilter` | | 语法 | `Std_ReturnType Mirror_AddCanRangeFilter(NetworkHandleType NetworkHandle, Can_IdType LowerCanId, Can_IdType UpperCanId)` | | 描述 | 添加 CAN ID 范围过滤器。 | | 可通过获取 | Mirror.h | ⌋ () ##### 8.3.2.4 Mirror_AddCanMaskFilter **[SWS_Mirror_00061]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_AddCanMaskFilter` | | 语法 | `Std_ReturnType Mirror_AddCanMaskFilter(NetworkHandleType NetworkHandle, Can_IdType CanId, Can_IdType CanIdMask)` | | 描述 | 添加 CAN ID 掩码过滤器。 | | 可通过获取 | Mirror.h | ⌋ () ##### 8.3.2.5 Mirror_AddLinRangeFilter `` ##### 8.3.2.6 Mirror_AddLinMaskFilter `` ##### 8.3.2.7 Mirror_AddFlexRayFilter `` ##### 8.3.2.8 Mirror_RemoveFilter **[SWS_Mirror_00065]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_RemoveFilter` | | 语法 | `Std_ReturnType Mirror_RemoveFilter(NetworkHandleType NetworkHandle, uint16 FilterId)` | | 描述 | 通过过滤器 ID 移除动态过滤器。 | | 可通过获取 | Mirror.h | ⌋ () #### 8.3.3 状态处理 ##### 8.3.3.1 Mirror_IsMirrorActive **[SWS_Mirror_00066]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_IsMirrorActive` | | 语法 | `boolean Mirror_IsMirrorActive(void)` | | 描述 | 检查总线镜像模块是否处于活动状态。 | | 可通过获取 | Mirror.h | ⌋ () ##### 8.3.3.2 Mirror_Offline **[SWS_Mirror_00067]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_Offline` | | 语法 | `void Mirror_Offline(void)` | | 描述 | 停止镜像,将目标总线重置为初始目标。 | | 可通过获取 | Mirror.h | ⌋ (SRS_Mirror_00010) ##### 8.3.3.3 Mirror_GetDestNetwork **[SWS_Mirror_00068]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_GetDestNetwork` | | 语法 | `Std_ReturnType Mirror_GetDestNetwork(NetworkHandleType* NetworkHandlePtr)` | | 描述 | 获取当前目标网络。 | | 可通过获取 | Mirror.h | ⌋ () ##### 8.3.3.4 Mirror_SwitchDestNetwork **[SWS_Mirror_00069]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_SwitchDestNetwork` | | 语法 | `Std_ReturnType Mirror_SwitchDestNetwork(NetworkHandleType NetworkHandle)` | | 描述 | 切换目标网络。 | | 可通过获取 | Mirror.h | ⌋ (SRS_Mirror_00013) ##### 8.3.3.5 Mirror_IsSourceNetworkStarted **[SWS_Mirror_00070]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_IsSourceNetworkStarted` | | 语法 | `boolean Mirror_IsSourceNetworkStarted(NetworkHandleType NetworkHandle)` | | 描述 | 检查源网络是否已启动。 | | 可通过获取 | Mirror.h | ⌋ () ##### 8.3.3.6 Mirror_StartSourceNetwork **[SWS_Mirror_00071]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_StartSourceNetwork` | | 语法 | `Std_ReturnType Mirror_StartSourceNetwork(NetworkHandleType NetworkHandle)` | | 描述 | 启动源网络。 | | 可通过获取 | Mirror.h | ⌋ (SRS_Mirror_00010) ##### 8.3.3.7 Mirror_StopSourceNetwork **[SWS_Mirror_00072]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_StopSourceNetwork` | | 语法 | `Std_ReturnType Mirror_StopSourceNetwork(NetworkHandleType NetworkHandle)` | | 描述 | 停止源网络。 | | 可通过获取 | Mirror.h | ⌋ (SRS_Mirror_00010) #### 8.3.4 支持函数 ##### 8.3.4.1 Mirror_GetNetworkType **[SWS_Mirror_00073]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_GetNetworkType` | | 语法 | `Mirror_NetworkType Mirror_GetNetworkType(NetworkHandleType NetworkHandle)` | | 描述 | 获取网络类型(CAN/LIN/FlexRay)。 | | 可通过获取 | Mirror.h | ⌋ () ##### 8.3.4.2 Mirror_GetNetworkId **[SWS_Mirror_00074]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_GetNetworkId` | | 语法 | `uint8 Mirror_GetNetworkId(NetworkHandleType NetworkHandle)` | | 描述 | 获取网络 ID。 | | 可通过获取 | Mirror.h | ⌋ () ##### 8.3.4.3 Mirror_GetNetworkHandle **[SWS_Mirror_00075]** ⌈ | 字段 | 内容 | |------|------| | 服务名 | `Mirror_GetNetworkHandle` | | 语法 | `NetworkHandleType Mirror_GetNetworkHandle(Mirror_NetworkType NetworkType, uint8 NetworkId)` | | 描述 | 通过网络类型和 ID 获取网络句柄。 | | 可通过获取 | Mirror.h | ⌋ () ### 8.4 回调通知 #### 8.4.1 Mirror_ReportCanFrame **[SWS_Mirror_00080]** ⌈ CAN 接口(CanIf)使用此回调向总线镜像模块报告接收或传输的 CAN 帧。 ⌋ () #### 8.4.2 Mirror_ReportLinFrame **[SWS_Mirror_00081]** ⌈ LIN 接口(LinIf)使用此回调向总线镜像模块报告接收或传输的 LIN 帧。 ⌋ () #### 8.4.3 Mirror_ReportFlexRayFrame **[SWS_Mirror_00082]** ⌈ FlexRay 接口(FrIf)使用此回调向总线镜像模块报告接收或传输的 FlexRay 帧。 ⌋ () #### 8.4.4 Mirror_ReportFlexRayChannelStatus **[SWS_Mirror_00083]** ⌈ FlexRay 接口(FrIf)使用此回调向总线镜像模块报告 FlexRay 通道状态。 ⌋ () `` --- ## 9 序列图(Sequence Diagrams) `` 主要序列图: - **CAN 帧镜像到 CAN**:源 CAN → CanIf 接收 → Mirror_ReportCanFrame → 总线镜像处理 → 目标 CAN 发送 - **CAN 帧镜像到 FlexRay**:源 CAN → CanIf 接收 → 镜像到 FlexRay 帧(打包)→ 目标 FlexRay 发送 - **目标网络切换**:Mirror_SwitchDestNetwork → 禁用所有源总线 → 重置所有过滤器 → 启用新源总线 - **添加动态过滤器**:Mirror_AddCanRangeFilter → 配置新过滤器 → 立即激活 --- ## 10 配置规范(Configuration Specification) `` 主要配置容器: - **Mirror**:根容器 - **MirrorGeneral**:通用参数(如 `MirrorDevErrorDetect`、`MirrorVersionInfoApi`) - **MirrorDestNetwork**:目标网络配置 - **MirrorInitialDestNetworkRef**:初始目标网络引用 - **MirrorSourceNetwork**:源网络配置 - **MirrorSourceCanFilter**:源 CAN 过滤器 - **MirrorSourceLinFilter**:源 LIN 过滤器 - **MirrorSourceFlexRayFilter**:源 FlexRay 过滤器 - **MirrorQueue**:队列配置(缓冲区大小等) --- ## 翻译说明 - **文档大小**:114 页,原始内容约 5809 行 - **翻译策略**:重点翻译 + 摘要 - 已完整翻译:封面、文档标识、变更历史、目录、章节 1-2、4-5、7.1-7.2、7.6、8.1-8.4(API 规范主要部分) - 摘要处理:第 6 章(需求追踪)保留前 5 项代表性条目;第 7.3-7.5 章(按总线类型的源总线访问和镜像协议)保留概述和章节结构;第 7.4.2(镜像协议)和第 7.5(CAN 镜像)的字段定义保留关键概念 - 关键 API 函数(8.3 章节)已完整翻译 - **保留项**:所有 API 标识符(如 `Mirror_Init`、`Mirror_StartSourceNetwork`、`Mirror_AddCanRangeFilter`)、需求 ID(如 `SWS_Mirror_00001`、`SRS_Mirror_00001`)、错误码、配置参数名、协议字段名(ProtocolVersion、SequenceNumber、FrameID 等)、AUTOSAR 方框符 `⌈⌋` - **简化项**:镜像协议的位级字段布局以文字概述代替二进制布局图;配置规范做摘要处理;序列图以文字描述