AutoSAR----通讯模块详解(学习版)

来自微信公众号:车端软件开发,大佬讲的很好,在此整理补充做个笔记

目录

通信服务组成部分

各模块详解

Com模块

Dcm模块

IpduM模块

PduR模块

总线相关的TP模块

总线相关的If模块

总线相关的Driver模块

总线相关的Trcv模块

 通信服务关键技术

分层模型机制

通信路径分配机制

基于信号的通信路径

PDU ID映射机制

消息数据提供的方式


通信服务组成部分

为了简化车内ECU的通信服务,AUTOSAR基于汽车通信协议(如CAN,LIN以及FlexRay等)定义了一个由多个模块组成的通信协议栈,如图 1.1所示。

图片

图 1.1 COM通信栈示意图

AUTOSAR(Automotive Open System Architecture)汽车开放系统架构。同时,AUTOSAR也指一个汽车联盟,发起于欧洲汽车行业,用于推广AUTOSAR架构。

  • 这个架构可以实现汽车电子的软硬件分离。用了AUTOSAR之后,你开发汽车软件就可以像在PC或者手机上开发软件一样,只开发你的软件(现在的PC软件或者手机APP开发,有几个软件开发人员关注过你的电脑或手机的硬件BOM列表吗?用的什么牌子的内存,什么硬盘,什么驱动,什么CPU。你压根也不关心吧?)。AUTOSAR架构,也想实现这种效果。

  • 降低ECU软件开发的复杂度,提高软件可重用性。使开发者避免因为采用私有的协议和解决方案导致日益增长的开发成本。

总的来讲,AUTOSAR架构的核心思想就是“统一标准、分散实现、集中配置”(来自哈工大的一篇硕士论文)。统一标准和集中配置,都是加强OEM的地位。因此AUTOSAR是一个对主机厂非常有利的开发架构,能够稀释一些强势供应商的影响力和技术掣肘。

        在通信协议栈中,位于服务层的有通信层(以下简称Com)、诊断通信层(以下简称Dcm)、路由层(以下简称PduR)、协议数据单元复用层(以下简称IpduM)以及总线相关的传输层(以下简称Tp,包括CanTp、LinTp以及FlexRayTp);位于ECU抽象层的是总线相关的接口层(以下简称If,包括CanIf、LinIf以及FlexRayIf);位于微控制器抽象层的是总线相关的驱动层(包括Can、Lin以及FlexRay)和收发器层(CanTrcv、LinTrcv以及FrTrcv)。

各模块详解

Com模块

Com模块为应用程序提供基于信号的数据服务的接口,并根据信号自身预定义的发送类型来发送报文。为了支持应用程序的复杂类型(如结构体这种数据量大又要保证整体发送原子性从而不便在一个信号封装或者拆分到多个信号中),Com模块还定义了信号组的概念。Com模块还提供了附加的服务接口可用于检测是否成功发送报文、成功接收报文以及报文是否超时等。对于多个通信通道的ECU,Com模块还提供了一个用于不同通信总线之间的信号路由即信号网关的功能。

Dcm模块

Dcm模块根据ISO 14229-1(Unified diagnostic services即UDS)实现诊断通信。诊断请求分为两块:一部分被直接送往Dcm模块(包括诊断会话的管理,读取故障码,重启ECU等);另一部分通过配置的端口转发到对应的软件组件(读,写,数据标志控制,例程执行等)

诊断通信的作用主要体现在以下几个方面:

  1. 故障检测与记录:通过诊断通信,汽车上的控制系统可以记录并处理故障信息,最终以诊断故障代码(DTC)的形式表现出来。这为维修人员提供了快速判断车辆或控制器故障及原因的可靠依据。
  2. 数据收集与分析:诊断通信能够实时收集车辆的各种运行数据,如发动机状态、排放情况等,并通过分析这些数据,帮助维修人员更准确地定位问题所在。
  3. 在线编程与测试:UDS诊断服务还包括在线编程及功能/元件测试等应用,这使得对车辆控制单元的软件更新和性能测试成为可能。

IpduM模块

        IpduM模块负责支持对PDU的多重使用。在AUTOSAR等架构中,IpduM模块通过与PduR(PDU路由器)交互,实现对PDU的复用。具体来说,IpduM模块可以根据需要,将多个不同的PDU组合成一个复用的PDU,或者将一个复用的PDU拆分成多个单独的PDU。这种复用机制可以有效地节省报文ID等资源,提高通信效率。

        在接收方,当PduR接收到一个复用的PDU时,它会将其提交给IpduM模块进行解析。IpduM模块会根据专有部分的值(多路网关)来确定PDU其余部分的语义内容,并将其拆分成原始的PDU,然后提交给相应的处理模块。这样,接收方就能够正确地解析和处理接收到的数据。

        在发送方,当需要发送数据时,Com(通信模块)会将数据封装成一个或多个PDU,并提交给PduR。PduR会根据需要,将这些PDU提交给IpduM模块进行复用处理。IpduM模块会将这些PDU组合成一个复用的PDU,然后返回给PduR。PduR再将复用的PDU转发到对应的目的地。这样,发送方就能够高效地将数据发送给接收方。

PDU(Protocol Data Unit)是协议数据单元,它是计算机网络中进行数据交换的基本单位。在分层通信协议中,每层的协议数据单元都有特定的格式,由该层协议规定。PDU包含了协议头部和数据部分,协议头部用于指示数据如何被解释和路由,而数据部分则包含了实际要传输的信息。PDU的作用主要体现在为不同层之间的通信提供了一个标准化的数据格式,使得数据能够在不同层之间正确、高效地传输。

PduR模块

PduR模块主要提供两方面的服务。第一个方面是承上启下衔接上层和下层:发送时派发从高层模块的PDU到低层模块;接收时派发从底层模块如If或者TP接收的PDU给高层模块(COM,PduR)。第二个方面是通信网络中的网关功能。其中网关功能有两种:从一个接口层到另外一个相同或者不同总线类型的接口层;从一个TP到另外一个相同或者不同总线类型的TP层。其中路由协议是基于一个静态的路由表和PDU ID的概念。

总线相关的TP模块

        TP模块的核心功能是大协议数据单元的拆包和组包,TP模块负责将大协议数据单元(PDU)拆分成多个小的帧进行传输,以及在接收端将这些小的帧重新组合成原始的PDU。这是为了确保数据能够在不同的总线系统上有效、可靠地传输。

        在AUTOSAR中,主要是为了支持DCM的诊断数据处理,为其提供了在不同总线系统上传输大数据的能力,同时TP是总线相关的。CanTp符合ISO标准15765-5,管理发送方的数据打包和接收方的数据解包。LinTp负责在发送节点将大数据分割成Lin帧,在接收节点将Lin帧组合还原。FlexRayTp负责在发送节点将大数据分割成FlexRay帧,在接收节点将FlexRay帧组合还原。TP模块都要对数据流控制以及诸如报文丢失、重发和顺序错误之类的错误检测负责。

  • CanTp:符合ISO标准15765-5,用于CAN总线系统。它管理发送方的数据打包和接收方的数据解包,确保数据在CAN总线上能够正确、高效地传输。
  • LinTp:用于LIN总线系统。在发送节点,它将大数据分割成适合LIN总线传输的帧;在接收节点,它将接收到的LIN帧组合还原成原始的数据。
  • FlexRayTp:用于FlexRay总线系统。与LinTp类似,它负责在发送节点将大数据分割成FlexRay帧,并在接收节点将这些帧组合还原。

总线相关的If模块

If模块使用驱动层的基于帧的服务,向上提供PDU的发送和接收服务。同时,If模块通过PDU和硬件缓冲区的映射提供硬件缓冲区的复用功能。每类If模块可以处理同一种总线的不同类型的通信控制器驱动模块。如果一个ECU支持CAN和FlexRay总线,最多会使用两类If模块,分别支持对CAN和Fr的抽象管理。当然,If模块也会提供对多种不同收发器驱动模块的支持,这和对多种驱动模块的支持类似。

  1. If模块的核心功能:使用驱动层提供的基于帧的服务,进一步向上层提供PDU(协议数据单元)的发送和接收服务。这意味着If模块是连接驱动层和应用层之间的桥梁,它使得上层应用能够无需关心底层硬件细节,直接进行PDU的发送和接收。
  2. If层与TP层的关系
    • 数据传递:TP层负责大数据包的拆分和组合,以适应总线传输。而If模块则负责将TP层处理后的PDU发送到总线,或者从总线接收PDU并传递给TP层进行进一步处理。因此,If层和TP层在数据传递上形成了紧密的合作关系。
    • 协议抽象:TP层关注的是数据的拆分和组合,而If层关注的是与底层硬件的交互。这种分工使得If层可以为TP层提供一个抽象的接口,使得TP层无需关心底层硬件的具体实现细节。
  3. If层与驱动层关系
    • 依赖关系:If模块使用驱动层提供的基于帧的服务。这意味着If层依赖于驱动层来实现与底层硬件的通信。驱动层为If层提供了访问和控制硬件的必要功能。
    • 抽象管理:If层通过对驱动层的抽象管理,使得上层应用能够以一种统一的方式与不同的硬件进行通信。这降低了上层应用的开发复杂度,提高了系统的可移植性和可扩展性。

总线相关的Driver模块

驱动模块(Can、Lin以及Fr)提供了对应接口层的基础,通过简化通信控制器的帧的发送和接收行为向上层提供服务。驱动模块被设计为处理同一种总线类型的一类通信控制器。因此,如果一个ECU包含两种类型的CAN控制器,就需要两个CAN Driver模块。

总线相关的Trcv模块

Trcv模块即收发器层(CanTrcv、LinTrcv以及FrTrcv)提供了对应接口层的基础,负责控制外部收发器的运行状态,包括唤醒和休眠功能。收发器层被设计为处理同一种总线类型的一类外部收发器。因此,如果一个ECU包含两种类型的外部CAN收发器,就需要两个CANTrcv模块。

 通信服务关键技术

分层模型机制

        AUTOSAR通信协议栈参考了OSI的7层模型的概念。如图 2.1所示,分层模型中下层(第N-1层)向上层(第N层)提供服务;只有同层之间才会进行数据单元(简称SDU)交互。但是AUTOSAR通信协议栈和OSI分层模型的主要区别是在OSI 7层模型中,每一层的PDU的协议控制部分即图 2.1中的的协议控制信息(简称PCI)动态添加,而AUTOSAR通信协议栈中的协议控制部分通过静态配置实现。

PDU的协议控制部分PCI(Protocol Control Information)是控制协议操作的信息。在计算机网络体系结构的各个层次中,每个报文都分为两个部分:一是数据部分,即SDU(服务数据单元);二是控制信息部分,即PCI。这两部分共同组成PDU(协议数据单元)。PCI的主要作用是确保数据在通信过程中能够被正确、高效地处理和传输。

动态添加PCI能带来更好的灵活性和适应性的原因主要有以下几点:

  1. 环境适应性:动态添加允许协议栈根据当前的网络环境和通信条件实时调整PCI的内容和格式。例如,在网络拥堵时,可以通过动态调整PCI中的优先级或重传机制来优化数据传输。
  2. 需求适应性:不同的应用或通信需求可能对PCI有不同的要求。动态添加能够根据具体需求灵活配置PCI,以满足各种复杂的通信场景。
  3. 优化性能:通过动态调整PCI,可以实现更高效的资源利用、更低的延迟和更高的吞吐量,从而提升整体通信性能。

相比之下,静态添加PCI则更注重安全性和稳定性:

  1. 简化实现:静态配置简化了协议栈的设计和实现过程,降低了系统的复杂性和出错的可能性。
  2. 预测性:由于PCI的内容和格式在设计阶段就已经确定,因此系统行为更具预测性,有助于减少运行时的不确定性。
  3. 安全性:静态配置可以减少因动态调整而引入的安全风险,例如防止恶意攻击者通过篡改PCI来干扰通信过程。

图片

图 2.1 PDU、SDU以及PCI在分层模型中的使用

通信路径分配机制

基于信号的通信路径如图 2.2所示,发送路径由Com模块启动,经过PduR进行路由,派发到对应总线的接口模块,最后由对应的总线驱动模块把信号发送到总线上;接收路径反之。

图片

基于信号的通信路径

Dcm的诊断信息通信路径如图 2.3所示。发送路径由Dcm模块启动,经过PduR进行路由,派发到对应总线的TP模块,经过Tp的拆包功能经对应总线的接口层发送到驱动模块,最后由对应的总线驱动模块把信号发送到总线上;接收路径反之。

图片

图 2.3 Dcm诊断信息通信路径示意图

PDU的网关路径如图 2.4所示。第一种网关路径是不同总线的接口层之间的,先由驱动接收到帧,经接口层提交给PduR模块,然后PduR模块根据之前配置的网关路径转发给另一种总线的接口层,接口层提交给目标总线的驱动层,最后由驱动层把PDU发布到总线上。另外一种网关路径是不同总线的TP层之间的,和第一种相比是在路径中增加了TP节点,同时也多了拆包组包的消耗。

图片

图 2.4 PDU的网关路径示意图

PDU广播路径如图 2.5所示。多播路径由Com模块启动,根据PduR对这个PDU的配置,使用多条路径进行路由,之后派发到对应总线的接口模块,最后由对应的总线驱动模块把信号发送到总线上,从而达到多播效果。

图片

图 2.5 PDU多播路径示意图

PDU ID映射机制

        在每一层,PDU都有一个全局的识别号(简称全局ID)和一个本地的识别号(简称本地ID)。其中全局ID由ECU配置(简称EcuC)全局分配,一条通信路径上的PDU 的全局ID相同。为了方便本层管理PDU,会使用本地ID连续的机制,为每个PDU分配一个本地ID。

        通信协议栈中上层在使用下层服务时,先根据PDU在自己层的本地ID,查找到这个PDU的全局ID,然后根据这个全局ID,查找这个PDU在下层对应的本地ID,最后根据得到的本地ID使用下层服务。

        通信协议栈的下层在使用上层服务时,先根据PDU在自己层的本地ID,查找到这个PDU的全局ID,然后根据这个全局ID,查找这个PDU在上层对应的本地ID,最后根据得到的本地ID回调上层。

消息数据提供的方式

        为了兼容不同的总线通信,AUTOSAR支持两种数据提供方式。如图 2.6所示,一种是直接的数据提供方式,主要用于CAN通信,调用传输函数时附上要发送的数据;另一种是基于触发的数据提供方式,用于Lin或者Fr通信,在传输时先缓冲要发送的数据,然后根据底层机制如Lin或Fr的静态的周期性的调度表来触发缓冲的数据的传输。

图片

图 2.6 两种数据提供方式的对比示意图

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值