您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
基于AUTOSAR的一帧CAN报文的收发流程
 
作者:一片绿叶
   次浏览      
 2024-8-28
 
编辑推荐:

本文主要介绍了CAN自下而上以及以上而下在AUTOSAR架构下的通信流程。希望对你的学习有帮助。
本文来自于微信公众号谦益行,由火龙果软件Linda编辑,推荐。

1 概述

介绍总线通讯的文章有很多了,各种平台,CSDN\知乎、电子发烧友等。扪心自问,你真的懂了吗?还是和大多数人一样,浅尝辄止,仅仅了解了一些分层的概念,就停滞不前了?认识事物的逻辑可不是这样的。

AUTOSAR实际上是一套很固化的东西。我们要想在实际工程项目中用得好,还是要在根上去研究透;本文介绍下一帧CAN报文的数据,主要介绍CAN自下而上以及以上而下在AUTOSAR架构下的通信流程。

首先介绍下信号数据流:

从上层到总线

不清楚可以看下图,可以先熟悉下大体经过的层级;

Autosar CAN 总线信号的数据流传递

然后呢,还要再熟悉下,流程中会经过的模块,再不清楚,可以看下图:

这里注意,一般应用报文是不会经过CanTp层的, 只有诊断报文会经过CanTp层进行传输;应用报文直接从CanIf 到PduR层。

2. 接收

2.1 各模块参与过程

Can接收功能需要使用到通知(Indication)服务,在Autosar架构中,由(Bsw调度周期性的Can_MainFunction_Read)。

现项目是Can_17_McmCan_IsrReceiveHandler放在Can中断中,会根据Rx的缓冲区类型来选择处理函数,但是不管什么类型的缓冲区,最终都会调用Can_17_McmCan_lRxExtractData将数据从缓冲区中读出来。

然后将消息对象信息分配给RxMailBoxInfo【RxMailBoxInfo中包括CanId,对应的Hoh,和ControllerId】,Rx Pdu信息分配给RxPduInfo【RxPduInfo中包括 指向Ddu数据的指针*SduDataPtr,Sdu长度】。

最后调用CanIf_RxIndication通知CanIf向上传输,调用关系如下图:

数据流

BSW调度器周期性调用CAN Driver模块的Can_MainFunction_Read函数;

CAN Driver模块的Can_MainFunction_Read函数将访问CanController(硬件)的寄存器—仲裁寄存器,数据寄存器和数据长度寄存器(保证读取数据的有效性),并读取这些寄存器的数据;

数据读取结束后,这时继续调用CAN Interface模块的CanIf_RxIndication函数,这样数据从CAN Driver模块传给了上一层的CAN Interface模块;

CAN Interface模块再调用PduR模块的PduR_RxIndication函数,将数据传到PduR模块;

PduR模块路由到Com模块,调用Com_RxIndication函数,将数据传到Com模块,Com模块将会把数据存入其缓存,供应用层软件读取使用。

2.2 接收报文在com层的处理

接收报文在com层,将i-pdu拆解成signal,具体如下:

Step 1 :由PduR调用Com_RxIndication向上通知Com层接收Pdu.

在Com_RxIndication中:

1、调用Com_ResetUpdateDMTime,为基于I-Pdu的监控重置接收截止时间监控定时器(DM){有ub的signal/signal group且ub不为1的除外};

2、调用Com_RxPduHandle;

3、如果ComIPduSignalProcessing配置为immediate,则调用Com_IndicationProcess立即处理pdu接收,带有ub的signal/signalgroup检查ub是否为1,不带ub的signal/signalgroup直接继续处理,调用Com_SignalRxIndication / Com_SignalGroupRxIndication;

4、signal处理 :Com_SignalRxIndication中,对信号类型为COM_UINT8_N和COM_UINT8_DYN另外处理,不为此类型的调用Com_RxSignalHandle ;

①、字节序转换:Com_RxSignalUnPack;

②、信号值有效判断 :若使能了信号无效通知,则调用ComInvalidNotification函数,若没有使能,则调用Com_RxSignalReplaceHanlde将信号值替换成原始值;

③、过滤条件判断;若全通过,则第6步。

5、signalgroup处理 :

①、signalgroup信号值有效判断,若无效则调用通知函数;

②、过滤条件判断;若全通过,则第6步。

6、调用ComNotification函数,此通知函数为Rte_COMCbk_signal/signalgroup_name,调用Com_ReceiveSignal/signalgroup,将数据通过Rte向上传输。

3. 发送

3.1 在com层的处理

对于发送报文在com层,将signal封装成i-pdu调用Pdur_ComTransmit向下传输,其中对于周期发送的CAN报文,在com层都做了哪些处理呢?

首先在SWC_EcuMon,通过周期调用的发送处理函数中,调用Rte_Read_xx将Signal数据从xx中读出。

然后需要过E2E(信号组中带有checksum和alive counter)的信号组调用对应的E2E_xx_signalgroupname处理函数。

最后调用Rte_Write_com_(signalgroupname)将读出的数据和E2E中的counter、checksum值通过Rte传入com层(调用Com_SendSignal/group)。

Step 1:

上层的SWC通过Rte调用对应的Signal/Signal Group接口(Com_SendSignal/group)。在Com_SendSignal中:

信号发送模式处理 Com_TxSignalTMHandle;

更新发送信号的buffer,检查信号value是否更新。

第2步信号值更新后,将Tx Signal 打包到Tx buffer(字节序转换和符号扩展在这一步中)。set update bits,以及添加信号的发送属性以及选择报文的发送模式。

在第3步时已将更新signal value到Com_TxIPduRuntimeBuff [COM_TXIPDUBUFF_SIZE]缓冲区中。

Step 2 :周期调用的Com_MainFunctionTx。

DMCnt计数(超限监控),超时后调用Com_TxDMTimeOutNotification;

报文的发送模式确认(TMS);

调用Com_MainFunction_SendPdu,发送pdu;

在Com_MainFunction_SendPdu中:

在调用PduR_ComTransmit之前可以配置ComIPduCallout,在Callout中实现一些特殊功能;

Com_TxIPduRunTimeState[txIpduId].Transmiting = TRUE; // 在调用PduR_Transmit之前设置发送标志,避免在设置发送标志之前出现TxConfirmation;

调用PduR_ComTransmit;

第2步返回E_OK后调用Com_ClearTxIPduUpdates清除该pdu所有信号和信号组的UB位。

PduR_ComTransmit --> CanIf_Transmit --> CanWrite。

4 小结

涉及一帧can通讯的内容还有很多。但是多说无益,希望大家可以结合自身项目,使用Debug工具,对于一帧信号的传输进行逐步的调试,这样,慢慢的,就可以逐步掌握数据流。

有人问,学这个干嘛?当然是调查问题用的, 比如你遇到一个问题。明明对方或者模拟工具发出来一帧数据报文,但是ECU就是没能收到。该怎么办?最好的方法当然就是逐步来进行调试,以定位到问题的根因。

 
   
次浏览       
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
C++高级编程 12-25 [线上]
白盒测试技术与工具实践 12-24[线上]
LLM大模型应用与项目构建 12-26[特惠]
需求分析最佳实践与沙盘演练 1-6[线上]
SysML建模专家 1-16[北京]
UAF架构体系与实践 1-22[北京]
 
 
最新文章
中央计算的软件定义汽车架构设计方案解析
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
智能汽车车用基础软件的内核和中间件
最新课程
Auto SAR原理与实践
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发(域控模式)
人工智能助力汽车行业升级
基于UML和EA进行系统分析设计
SysML和EA进行系统设计建模
更多...   
成功案例
奇瑞商用车 购买建模工具EA完全版
航空发动机研究院 购买建模工具EA完全版
联创汽车 购买建模工具EA完全版
江淮汽车 购买建模工具EA
更多...