• 424查看
  • 0回复

[底层软件] 工程问题——节点的Can报文路由

[复制链接]


该用户从未签到

发表于 21-1-2024 11:13:49 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


01

工程背景

由于产量极低的域控制器项目的dbc频繁变更,部分bsw配置漏配,导致项目的子节点诊断报文转发出现问题。所以就顺手梳理一下子节点(雷达)的报文路由吧。

简单介绍下子节点的诊断报文路由,如下图:

工程问题——节点的Can报文路由w1.jpg

02

AutoSar报文收/发过程介绍

在AUTOSAR架构中,CAN(Controller Area Network)通信涉及以下几个层级的组件:

1

COM (Communication)

COM是AUTOSAR通信栈的一部分,它负责定义和实现不同ECU之间的通信接口和协议。COM层包括了服务层(Service Layer)、接口层(Interface Layer)和传输层(Transmission Layer)。

2

PDUR (Protocol Data Unit Router)

PDUR是COM栈中的一个模块,它负责处理协议数据单元(PDU)。PDUR的主要任务是将应用层的数据映射到具体的网络协议帧(如CAN报文)中,并确保数据的正确路由。它根据配置的PDU映射表,将上层应用数据分解或组合成适合特定网络传输的格式。

3

CANIF (CAN Interface)

CANIF是COM与CAN驱动器之间的接口层。它提供了与CAN控制器硬件交互的功能,包括发送请求、接收指示、错误通知以及启动/停止CAN控制器等操作。CANIF接收到PDUR封装好的CAN报文后,将其转换为物理层可以理解的信号,并通过CAN驱动器发送出去。

4

CANDRIVE (CAN Driver)

CANDRIVE是最低级别的软件组件,它直接与CAN硬件控制器交互。CANDRIVE负责控制CAN控制器的操作,如设置波特率、滤波器、错误处理等。它将CANIF提供的报文数据转换为实际的电信号并通过CAN收发器发送到总线上,同时接收总线上的电信号并解码为报文数据返回给CANIF。

总的来说,从应用层发出的信号经过以下过程:

    应用层软件调用COM服务接口发送数据。

    COM服务层将数据传递给接口层,接口层的PDUR模块根据PDU映射规则对数据进行封装和路由。

    PDUR将封装好的CAN报文传递给CANIF。

    CANIF将报文转换为硬件控制器可以理解的格式,并通过CANDRIVE发送到CAN总线上。

接收过程则是这个流程的逆向操作:

    CANDRIVE从CAN总线上接收电信号并解码为报文数据。

    报文数据传递给CANIF。

    CANIF根据配置识别报文并将其传递给PDUR。

    PDUR根据PDU映射规则解析报文数据并将其传递给COM接口层。

    接口层将数据传递给相应应用层的服务接口,完成数据的接收和处理。
具体对应autosar的标准接口:

工程问题——节点的Can报文路由w2.jpg

03

路由的相关配置

如何将接受到的子节点报文转发到整车的总线上去呢?

1

CAN配置

首先需要在CAN模块中配置mailbox;

工程问题——节点的Can报文路由w3.jpg

PDU的相关配置;

工程问题——节点的Can报文路由w4.jpg

2

CanIf配置

在Canif层中,如框中所示,需要将Hrh配置中引入的mailbox配置为Canif的来源,通过PDUR转入到相应的pdu中去;

工程问题——节点的Can报文路由w5.jpg

3

Pdur配置

在PDUR层中区配置rounter路由,配置SrcPdu和DestPdu

工程问题——节点的Can报文路由w6.jpg

可以看到我们配置了2个DestPdu,这边除了转发数据外,主节点本身也会存储一下从节点的诊断报文做一些校验的工作。

4

应用层/Com层

最后到Com层,如果我们需要处理接收的报文,可以在com层配置引入PDUR转好的PDU;

工程问题——节点的Can报文路由w7.jpg

处理具体的报文数据的话,可以在Callout货Notification中配置相应的回调函数即可。

如果是需要将子节点的报文转发到整车总线上,那么直接在Canif的TxPdu做配置即可;

工程问题——节点的Can报文路由w8.jpg

04

调试验证

整个的接收过程:

工程问题——节点的Can报文路由w9.jpg

可以参考第二章节的图,调用过程肯定是一致的。

转发的过程:

可以看到Canif调用了PDUR中的PduR_GF_DDIf_FIFO_Transmit_Func()完成报文的转发。

工程问题——节点的Can报文路由w10.jpg

工程问题——节点的Can报文路由w11.jpg

附部分CanIF相关接口的结构体变量,感兴趣的小伙伴可以自己调试看看

工程问题——节点的Can报文路由w12.jpg

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 1-2-2025 12:57 , Processed in 0.269964 second(s), 32 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.