汽车嵌入式开发中的ECU网关节点开发

嵌入式技术

1372人已加入

描述

汽车嵌入式开发中,开发ECU网关节点(GW:Gateway)时,难度会提升不少,这些难度中就包含对时间参数的解读问题。本文着重给大家聊一下P2Client、▲P2 = ▲P2Request + ▲P2Response、N_As时间参数。

背景介绍

假设:Tester发送功能寻址指令Request01给GW::VCU,因为VCU的GW属性,VCU需要将Request01转发,即由Flexray总线路由到Can总线,进而将Request01发送给Ecu::Xx,Request01路由示意如如下所示:

PDU

注意:诊断路由,需要通过Xx_Tp层。

VCU既然是GW,相对于ECU::Xx,就是一个Tester。

如果对各层的PDU类型不清楚,可以参考前文Autosar通信栈:I-PDU、N-PDU、L-PDU,要掰扯清楚。

P2Client、▲P2、N_As时间参数分析

1、P2Client

P2Client的时间定义如下所示:

PDU

怎么理解呢?上位机(Tester)发送一个诊断指令以后,会等待Server(可以理解为某个ECU的节点)响应该诊断请求,如果在指定的时间内(P2Client_max/P2Client*_max)没有响应,Tester认为超时,并停止刷写流程,即:刷写失败

P2Client的时间范围是多少呢?如下所示:

PDU

P2Client时间范围的表达式:P2Client_max>P2Client>P2Server_max + ▲P2max 。P2Client_max是一个性能参数,由OEM设定。

这里假设:P2Server_max = 50ms,单向路由时间10ms,P2Client_max = 150ms,则70ms < P2Client < 150ms。为什么最小时间是70ms,不是60ms?稍后解释。

2、▲P2

▲P2的时间定义如下所示:

PDU

怎么理解这个时间参数呢?诊断指令的发送依赖于ECU各个模块的处理,在诊断指令被ECU接收到发送到总线需要一定的时间,同时由于总线仲裁等原因,也会导致诊断指令发送的延阻,这些因素所造成的时间消耗就是▲P2。

我们讨论路由时间,要分两种情况分析:

发送路由

对应第一小节图中的Fr->Can路由,即▲P2request = t1 - t0

响应路由

对应第一小节图中的Can->Fr路由,即▲P2response = t3 - t2

所以,需要约束一般会规定

单向路由时间

GWTime_max,比如:GWTime_max= 10ms。所以:▲P2 = P2Server_max + ▲P2request + ▲P2response = P2Server_max + 2*GWTime_max = 50 + 2*10 = 70ms。这里的GWTime_max = ▲P2request = ▲P2response。虽然▲P2request和▲P2response会有所不同,但实际工程项目中,一般设置▲P2request = ▲P2response,即:给一个单向路由的最大时间参数GWTime_max,GWTime_max需求如下所示:

PDU

3、N_As

以Can总线为例,N_As的时间定义如下所示:

PDU

意思就是:发送端(Tester)的Xx_Tp层,从发送到驱动层应答的最大时间。该时间只是约束Xx_Tp层的计时行为,和▲P2 时间无关。因此,开发必须要先符合▲P2 时间。

多路诊断路由

我们将问题进一步拓展,如果GW节点将诊断指令路由到多个节点,如下图中的ECU::Xx01和ECU::Xx02。这里提一个问题:如果Can02不可用(比如:VCU Can02对应的Transceiver损坏或者未有连接),Can01上的刷写是否应该继续?
 

PDU

我们先看一下Autosar的答案,如下所示:
 

PDU

答案很明确:如果TPs间的路由,有一路Fail(调用发送接口返回值为E_NOT_OK),不应影响其他TPs间的路由。如果OEM约束了你的开发:要符合Autosar规范。那么PduR的路由功能应满足上述规范。



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分