AUTOSAR图解==>AUTOSAR_SWS_BusMirroring

AUTOSAR 总线镜像模块详解

AUTOSAR Bus Mirroring 模块架构与功能分析

目录

  1. 引言
  2. 模块架构
    1. 总体架构
    2. 功能组件
    3. 层次关系
  3. 过滤器管理
    1. 过滤器类型
    2. 过滤器操作接口
    3. 过滤器配置
  4. 状态管理
    1. 状态转换流程
    2. 源总线状态
    3. 目标总线状态
  5. 协议数据结构
    1. 镜像协议帧
    2. 状态协议帧
    3. 特定总线数据结构
  6. API接口
    1. 功能分类
    2. 主要接口
    3. 回调函数
  7. 总结

1. 引言

AUTOSAR Bus Mirroring(总线镜像)模块是AUTOSAR经典平台中的一个基础软件模块,其主要功能是将内部总线的流量和状态复制到外部总线,使得连接到外部总线的测试设备能够监控内部总线以进行调试。

总线镜像功能可通过诊断命令来配置,确保只有通过安全检查的测试设备才能启用镜像功能。该模块支持多种源总线类型(CAN、LIN、FlexRay)和目标总线类型(CAN、FlexRay、IP、自定义设备驱动CDD)。

在这里插入图片描述

图1.1 AUTOSAR Bus Mirroring 模块架构

上图展示了AUTOSAR Bus Mirroring模块的整体架构,包括模块内部组件、源总线接入方式以及目标总线输出方式。模块通过初始化、过滤、状态管理和数据处理等功能实现总线数据的镜像转发。


2. 模块架构

2.1 总体架构

AUTOSAR Bus Mirroring模块采用分层设计,主要包括以下核心组件:

  • 初始化模块:负责模块的初始化和去初始化
  • 源总线接入:负责从不同类型源总线获取帧数据
  • 目标总线处理:负责创建、队列管理和传输目标帧
  • 过滤器管理:负责过滤和选择需要镜像的特定总线帧
  • 状态管理:负责控制镜像功能的启动、停止和切换

这些组件共同协作,实现从源总线到目标总线的数据镜像功能。

2.2 功能组件

  1. 源总线接入组件

    • CAN接入:获取CAN总线帧并应用过滤规则
    • LIN接入:获取LIN总线帧并应用过滤规则
    • FlexRay接入:获取FlexRay总线帧并应用过滤规则
  2. 目标总线处理组件

    • 目标帧创建:根据源总线帧创建适合目标总线的帧格式
    • 帧队列管理:管理待发送帧的队列
    • 帧传输:将帧发送到目标总线
  3. 模块管理组件

    • 初始化:通过Mirror_InitMirror_DeInit函数管理模块生命周期
    • 过滤器管理:控制哪些帧需要被镜像
    • 状态管理:控制镜像功能的状态切换

2.3 层次关系

Bus Mirroring模块在AUTOSAR架构中处于基础软件层,与通信栈和诊断模块有紧密的交互关系:

  • 与CAN、LIN、FlexRay等底层驱动模块交互,获取源总线数据
  • 与上层诊断模块交互,接收并处理镜像配置命令
  • 与目标总线驱动交互,发送镜像数据

通过这种层次化设计,模块可以灵活适应不同的源总线和目标总线组合。


3. 过滤器管理

3.1 过滤器类型

Bus Mirroring模块支持多种过滤器类型,用于选择性地镜像特定的总线帧。根据不同总线类型,提供了不同的过滤器实现:

在这里插入图片描述

图3.1 Bus Mirroring 过滤器管理结构

  1. CAN过滤器

    • 范围过滤器:基于CAN ID范围过滤,包含LowerCanIdUpperCanId
    • 掩码过滤器:基于掩码和值过滤,使用CanIdMaskCanIdValue
  2. LIN过滤器

    • 范围过滤器:基于LIN ID范围过滤,包含LowerLinIdUpperLinId
    • 掩码过滤器:基于掩码和值过滤,使用LinIdMaskLinIdValue
  3. FlexRay过滤器

    • 基于FrameIdChannel(A、B或两者)过滤FlexRay帧

3.2 过滤器操作接口

模块提供了一组API用于管理过滤器:

  • Mirror_GetStaticFilterState:获取静态过滤器状态
  • Mirror_SetStaticFilterState:设置静态过滤器状态
  • Mirror_AddCanRangeFilter:添加CAN范围过滤器
  • Mirror_AddCanMaskFilter:添加CAN掩码过滤器
  • Mirror_AddLinRangeFilter:添加LIN范围过滤器
  • Mirror_AddLinMaskFilter:添加LIN掩码过滤器
  • Mirror_AddFlexRayFilter:添加FlexRay过滤器
  • Mirror_RemoveFilter:移除特定过滤器

这些API允许在运行时动态添加和移除过滤器,提供了灵活的帧选择机制。

3.3 过滤器配置

过滤器可以通过两种方式配置:

  1. 静态配置:通过配置容器预定义过滤器

    • MirrorSourceCanFilterRange
    • MirrorSourceCanFilterMask
    • MirrorSourceLinFilterRange
    • MirrorSourceLinFilterMask
    • MirrorSourceFlexRayFilter
  2. 动态配置:通过API在运行时添加过滤器

    • 可以根据诊断请求动态添加或移除过滤器
    • 每个过滤器创建后会返回一个过滤器ID,用于后续管理

过滤器的使用极大地提高了带宽利用效率,只镜像必要的帧数据。


4. 状态管理

4.1 状态转换流程

Bus Mirroring模块具有完整的状态管理机制,控制模块的生命周期和工作状态:

在这里插入图片描述

图4.1 Bus Mirroring 模块状态转换图

模块的主要状态包括:

  1. 未初始化状态:模块尚未初始化
  2. 已初始化状态:模块已初始化,但可能处于离线或在线状态
    • 离线状态:镜像功能未激活
    • 在线状态:镜像功能已激活,可以进行源总线和目标总线操作

状态转换通过以下API触发:

  • Mirror_Init():将模块从未初始化状态转为已初始化状态
  • Mirror_DeInit():将模块从已初始化状态转为未初始化状态
  • Mirror_Offline():将模块从在线状态切换到离线状态

4.2 源总线状态

源总线具有自己的状态管理机制:

  1. 源总线停止状态:源总线未被监控
  2. 源总线启动状态:源总线被激活并开始监控
    • CAN源启动:监控CAN总线数据
    • LIN源启动:监控LIN总线数据
    • FlexRay源启动:监控FlexRay总线数据

源总线状态通过以下API管理:

  • Mirror_IsSourceNetworkStarted():检查源总线是否已启动
  • Mirror_StartSourceNetwork():启动指定源总线
  • Mirror_StopSourceNetwork():停止指定源总线

Bus Mirroring模块支持同时启动多个源总线,每个源总线可以独立控制。

4.3 目标总线状态

目标总线状态表示当前激活的镜像目标:

  1. 无目标总线:未设置目标总线
  2. CAN目标:将数据镜像到CAN总线
  3. FlexRay目标:将数据镜像到FlexRay总线
  4. IP目标:将数据镜像到IP网络
  5. CDD目标:将数据镜像到自定义设备驱动

目标总线状态通过以下API管理:

  • Mirror_GetDestNetwork():获取当前目标总线
  • Mirror_SwitchDestNetwork():切换到指定目标总线

在任一时刻,只能有一个活跃的目标总线。


5. 协议数据结构

5.1 镜像协议帧

镜像协议帧用于将源总线数据传输到目标总线(主要用于FlexRay、IP和CDD目标总线):

在这里插入图片描述

图5.1 Bus Mirroring 协议数据结构

镜像协议帧由两部分组成:

  1. 协议头部

    • ProtocolVersion:协议版本号
    • SequenceNumber:序列号
    • HeaderTimestamp:头部时间戳
    • DataLength:数据长度
  2. 数据部分

    • Timestamp:数据项时间戳
    • 标志位字段
      • NetworkStateAvailable:网络状态是否可用
      • FrameIDAvailable:帧ID是否可用
      • PayloadAvailable:负载是否可用
    • NetworkType:网络类型(CAN、LIN、FlexRay)
    • NetworkID:网络ID
    • NetworkState:网络状态(依赖网络类型)
    • FrameID:帧ID(依赖网络类型)
    • PayloadLength:负载长度
    • Payload:实际负载数据

5.2 状态协议帧

状态协议帧用于CAN目标总线,针对CAN总线带宽限制进行了优化:

  1. 状态协议头部

    • ProtocolVersion:协议版本号
  2. 状态数据项

    • 标志位字段
      • NetworkStateAvailable:网络状态是否可用
      • FrameIDAvailable:帧ID是否可用
    • NetworkType:网络类型
    • NetworkID:网络ID
    • NetworkState:网络状态
    • FrameID:帧ID

相比镜像协议帧,状态协议帧更简洁,占用更少带宽。

5.3 特定总线数据结构

不同总线类型的数据结构有所不同:

  1. CAN网络状态

    • BusOff:总线关闭标志
    • Warning:警告标志
    • Passive:被动标志
  2. LIN网络状态

    • SleepPending:睡眠挂起标志
    • Error:错误标志
  3. FlexRay网络状态

    • ChannelA_Sync:通道A同步状态
    • ChannelB_Sync:通道B同步状态
    • ChannelA_Running:通道A运行状态
    • ChannelB_Running:通道B运行状态
  4. 帧ID结构

    • CAN帧ID:包含扩展ID标志和ID值
    • LIN帧ID:8位ID值
    • FlexRay帧ID:包含通道、循环计数器和帧ID

这些数据结构设计确保了协议的灵活性和扩展性。


6. API接口

6.1 功能分类

Bus Mirroring模块提供了一组结构良好的API,按功能可分为以下几类:

在这里插入图片描述

图6.1 Bus Mirroring API结构

  1. 通用功能

    • 初始化函数
    • 版本信息函数
  2. 过滤器处理

    • 过滤器管理函数
  3. 状态处理

    • 状态管理函数
  4. 支持功能

    • 辅助函数
  5. 回调通知

    • 回调函数
  6. 调度函数

    • 周期执行函数

6.2 主要接口

  1. 初始化接口

    • Mirror_Init(config):初始化模块
    • Mirror_DeInit():去初始化模块
    • Mirror_GetVersionInfo(versioninfo):获取版本信息
  2. 状态管理接口

    • Mirror_IsMirrorActive():检查镜像功能是否激活
    • Mirror_Offline():关闭镜像功能
    • Mirror_GetDestNetwork():获取当前目标网络
    • Mirror_SwitchDestNetwork(network):切换目标网络
    • Mirror_IsSourceNetworkStarted(network):检查源网络是否已启动
    • Mirror_StartSourceNetwork(network):启动源网络
    • Mirror_StopSourceNetwork(network):停止源网络
  3. 过滤器接口

    • Mirror_GetStaticFilterState(network, filterId):获取静态过滤器状态
    • Mirror_SetStaticFilterState(network, filterId, state):设置静态过滤器状态
    • Mirror_AddCanRangeFilter(network, lower, upper):添加CAN范围过滤器
    • Mirror_AddCanMaskFilter(network, mask, value):添加CAN掩码过滤器
    • Mirror_AddLinRangeFilter(network, lower, upper):添加LIN范围过滤器
    • Mirror_AddLinMaskFilter(network, mask, value):添加LIN掩码过滤器
    • Mirror_AddFlexRayFilter(network, frameid, channel):添加FlexRay过滤器
    • Mirror_RemoveFilter(filterId):移除过滤器
  4. 辅助接口

    • Mirror_GetNetworkType(network):获取网络类型
    • Mirror_GetNetworkId(type, handle):获取网络ID
    • Mirror_GetNetworkHandle(id):获取网络句柄

6.3 回调函数

模块使用回调函数从底层驱动接收帧数据:

  1. 帧接收回调

    • Mirror_ReportCanFrame(network, canid, data, dlc):报告CAN帧
    • Mirror_ReportLinFrame(network, linid, data, dlc):报告LIN帧
    • Mirror_ReportFlexRayFrame(network, frameid, channel, cc, data, len):报告FlexRay帧
    • Mirror_ReportFlexRayChannelStatus(network, channel, status):报告FlexRay通道状态
  2. 传输回调

    • Mirror_TxConfirmation(pduId):传输确认回调
    • Mirror_TriggerTransmit(pduId, data):触发传输回调
  3. 调度函数

    • Mirror_MainFunction():主功能周期执行

这些回调函数构成了模块与底层驱动之间的接口。


7. 总结

AUTOSAR Bus Mirroring模块是一个强大的诊断工具,通过将内部总线流量和状态镜像到外部总线,为开发人员提供了对汽车网络系统进行调试和监控的能力。

主要优势

  1. 灵活性

    • 支持多种源总线类型(CAN、LIN、FlexRay)
    • 支持多种目标总线类型(CAN、FlexRay、IP、CDD)
    • 可同时监控多个源总线
  2. 效率

    • 提供多种过滤器机制,优化带宽使用
    • 针对不同目标总线优化协议格式
    • 支持动态配置过滤器
  3. 安全性

    • 通过诊断命令启用,确保安全访问
    • 完善的状态管理机制
    • 错误处理和分类机制
  4. 完整的API

    • 结构良好的功能分组
    • 丰富的控制接口
    • 回调函数支持

Bus Mirroring模块作为AUTOSAR经典平台的一部分,展示了AUTOSAR架构的灵活性和可扩展性,为汽车电子系统开发提供了强大的支持工具。通过该模块,开发人员可以更有效地对复杂的总线系统进行调试和诊断,提高开发效率和系统质量。

### 关于 BusMirror 的概念及其相关 IT 工具或软件 BusMirror 是一种用于汽车电子控制系统中的通信监控和数据镜像的技术。其主要功能是从一个网络(如 CAN 总线)捕获数据并将其复制到另一个网络或存储介质中,从而实现数据同步、诊断以及测试的目的[^3]。 #### 技术背景 在现代车辆中,多个 ECU(Electronic Control Unit)通过各种总线协议(如 CAN、LIN 和 FlexRay)相互通信。为了提高系统的可靠性和可维护性,开发者通常需要实时监测这些通信数据流。此时,BusMirror 类似的工具就显得尤为重要。这类工具有助于捕捉特定 ID 的消息,并将它们转发至其他目标设备或者记录下来供后续分析使用。 #### 实现方式 以下是基于 Python 编写的简单示例代码片段来展示如何创建一个基本的 BusMirror 功能: ```python class BusMirroringModule: def __init__(self, filter_id=None): self.filter_id = filter_id def initialize(self): print("Initializing the bus mirroring module...") def set_filter_condition(self, frame_id): self.filter_id = frame_id print(f"Filter condition set to capture frames with ID {frame_id}.") def mirror_can_frames(self, received_frame_ids): mirrored_frames = [] for fid in received_frame_ids: if fid == self.filter_id: mirrored_frames.append(fid) print(f"Frame with ID {fid} has been mirrored.") return mirrored_frames if __name__ == "__main__": bmm = BusMirroringModule() bmm.initialize() bmm.set_filter_condition(0x123) captured_frames = [0x123, 0x456, 0x789] result = bmm.mirror_can_frames(captured_frames) ``` 上述代码展示了 `BusMirroringModule` 类的功能逻辑,其中包括初始化模块、设定过滤条件以及执行帧镜像操作的过程。 #### 商业化解决方案 对于工业级需求而言,可以考虑采用成熟的商业产品和服务,例如 EB tresos 提供的一系列针对汽车行业定制化的基础软件开发环境和支持服务。EB tresos 不仅能够满足 ISO 26262 安全标准的要求,还提供了丰富的 API 接口便于扩展自定义功能[^2]。 另外,在更广泛的领域内也有许多类似的开源项目可供选择,比如 SocketCAN 驱动程序配合 Linux 系统下的用户空间应用程序即可轻松搭建起一套完整的车载网络仿真平台[^5]。 #### 结论 综上所述,无论是自行研发还是选用第三方成熟方案,“BusMirror”这一理念都已在众多实际应用场景得到了验证和发展。随着未来智能化交通体系构建进程不断推进,相信围绕此类核心技术还会涌现出更多创新成果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值