AutoSAR通信概述-通信服务架构

一、BSW基础软件层概述

BSW基础软件有IO功能、通信诊断功能、存储功能、看门狗功能、其他驱动功能,OS服务。

MCAL层 :MCU驱动、看门狗驱动、存储驱动、通信驱动、IO驱动

ECU抽象层 :其他板载设备抽象、看门狗硬件抽象、存储硬件抽象、通信硬件抽象、IO硬件抽象

服务层 :OS服务、BswM、EcuM、看门狗服务、存储服务、通信和诊断服务

BSW基础软件层结构见下图:

二、通信服务架构

通信服务MCAL层包含了收发器驱动和总线控制器驱动,MCAL向上提供驱动接口供总线接口层(CanIf、LinIf、EthIf)调用。

总线接口层也就是通信硬件抽象层,主要任务包括向上层模块提供与硬件无关的统一接口,屏蔽下层控制器收发器实现细节。这就是AutoSAR软件分层的最大好处,上层通信诊断服务并不知道下层是LIN总线的数据还是CAN总线的数据,就是通过通信硬件抽象层进行了隔离,所以当CAN总线、LIN总线驱动需要变化的时候,上层的代码都是不需要变的。

通信软件模块传递:SWC->RTE->COM->PDUR->Bus Interface

诊断软件模块传递:SWC->RTE->DCM->PDUR-> Bus Tp ->Bus Interface

Note:通信报文分为业务报文和诊断报文,诊断服务依赖于诊断报文

Bus Tp层:Tp(Transport Layer)是通信传输层,主要是为诊断使用的。

PduR层:Pdu Router也就是Pdu路由层,所有的通信收发都会到这一层进行PDU路由。AutoSAR中包含了Can、Lin、Eth等通信,每个通信报文都可以描述成一个PDU(protocal data unit)协议数据单元,通过PduR这一层统一管理每个Pdu收发去处。如果是通信报文,会将报文路由到COM;如果是诊断报文,会把报文路由到DCM,可以把PDU理解为一帧报文。

IPDU Mux:IPDU多路复用功能,指的是使用同一个I-PDU的同一种PCI,其SDU有多个不同的布局。

COM:通信报文会到这里。从PDUR接收上来的I-PDU到这里会转成具体信号数据给到应用层使用,应用层通过RTE传下来的信号首先到这里转成I-PDU(一帧报文)发到PduR。应用层无需关注收发数据是通过什么总线传输的,这些收发的数据通过DBC文件或者ARXML文件事先定义好。COM主要起到信号接口(将一帧报文里面的所有信号拿出来给应用层)和网关作用。

DCM:诊断报文会到这里,根据诊断要求做具体诊断服务。

三、通信服务传输数据流

这个图把AutoSAR的通信服务很细致的面描述出来了。包括Eth、FlexRay、CAN、LIN 4种总线通信协议栈。

L-PDU:Data Link Layer PDU(数据链路层PDU)

N-PDU:Network Layer PDU网络层(也就是传输TP层)PDU,一般诊断报文会走TP层,通信报文直接从IF层转到PduR层,当诊断是多帧传输的时候,一个I-PDU就会被分段成多个N-PDU、通信报文一个I-PDU就是一个N-PDU

I-PDU:Interaction Layer PDU交互层PDU,PDUR路由转发I-PDU。

三种PDU代表在通信协议栈不同分层的协议数据单元,例如,I-PDU就包含了数据buffer指针、数据长度、和I-PDU ID,本质就是一个结构体

通信报文发送流程:

Step1:应用层模块通过RTE调用COM模块Com_SendSignal请求发送信号

Step2:COM写信号进PDUR

Step3:PDU被事先定义好的PDU路由表(PUDR层定义),发送到指定目的层(根据PDU ID来查找PDU的路由表),比如CAN总线的PDU就会路由到CanIf层,Lin的PDU就会路由到LinIf层

Step4:Interface层根据不同的通道,把报文写入到不同队列中

Step5:Driver根据报文优先级发送报文

注意:这里涉及到PDU的buffer缓存问题,一般情况下上层(COM)到If层都不会有PDU拷贝过程,直接把Buffer缓存指针进行传递。到了驱动层可能会拷贝进入驱动buffer进行发送。这样可以提高传输效率,节省RAM资源。

通信报文接收流程:

Step1:驱动通过轮询或者中断接收报文

Step2:驱动调用IF层的RxIndication将数据传递给Interface层(传指针)

Step3:Interface调用PduR层的RxIndication将数据传递给PduR层

Step4:PduR根据PDU ID找到路由表,路由到指定上层,通信报文一般都路由到COM层

Step5:进入COM层之后,根据SWCs的情况,要么直接通过RTE把信号给到SWCs(需定义信号的回调函数),要么缓存到自己的Buffer

注意:这里也涉及到PDU的Buffer缓存问题,一般情况从驱动上来也不会有Buffer拷贝,只有到COM层才会有自己的Buffer(拷贝),这样可以提高传输效率,节省RAM资源。

相关推荐
AI服务老曹4 分钟前
架构实战:如何构建支持X86/ARM及异构GPU/NPU的跨平台企业级AI视频管理系统?
arm开发·人工智能·架构
万岳科技系统开发5 分钟前
小程序直播架构调整指南:H5嵌套模式的优化与替代方案
小程序·架构
迷藏49420 分钟前
# 发散创新:用Locust实现高并发场景下的精准压力测试与性能调优实战在现代微服务架构中,**接口稳定性与响应速度**已成为衡量
java·python·微服务·架构·压力测试
147API22 分钟前
Claude 工具调用场景梳理:从 MCP 到企业落地链路
人工智能·架构·api·claude
MaxCode-124 分钟前
Chapter 9:企业实战案例与架构沉淀
人工智能·spring·架构
舒一笑25 分钟前
我筛了 30+ 个高质量技术/商业网站,真正值得架构师长期看的只有这 10 个
架构
ai产品老杨26 分钟前
【架构深研】如何构建兼容X86/ARM与异构算力的AI视频中台?基于GB28181与边缘计算的源码交付实践
arm开发·人工智能·架构
jiangbo_dev1 小时前
.NET 微服务监控避坑指南:告别盲翻日志,10 分钟搞定 OpenTelemetry 全链路追踪
架构
米高梅狮子1 小时前
07.基于LNMP架构部署blog应用和DaemonSet、Job
架构
毛骗导演1 小时前
Cladue Code 源码解析-键盘事件与 Vim 模式:parse-keypress 解析状态机
前端·架构