UDS协议的实现遵从OSI七层模型,下面是这七层模型中使用的协议。从这个表可以看出,15765-2是在网络层,这个是没有问题的,15765-3在会话层,14229-1是在应用层。

上图是Autosar中DCM模块在OSI七层模型中的划分方式,在实际应用中,我们还要根据can通信的15765和14229协议进行分层

一、ISO 15765-2
ISO 15765-2作为网络层的传输协议,最主要的功能是定义了报文分段和重组的机制。也就是我们说的拆包和组包。每一帧UDS报文包含了地址信息,数据长度,数据内容等。地址信息会在底层拆掉,数据长度是由Autosar架构中的Cantp层根据15765协议拆掉,剩下的具体的数据内容传给应用层。反之组包亦然。
1.拆包组包
那么为了实现这种拆包组包的形式,15765协议把Can报文分为以下几种帧类型:

当数据长度小于8字节,一帧单帧就可以解决了,当数据长度比较大时,就需要拆包进行多帧传输数据。

当发生比较长的报文的时候,将报文拆分成首帧+连续帧。首先发生放发一帧首帧,接收方收到后会回复一帧流控帧(告诉发送方自己的接收能力以及操作指示),发送方收到流控帧继续发送的指示后,将剩余的数据以连续帧的形式发送,然后依次往复,直到所有数据传输完毕。
2.网络层超时机制
ISO 15765-2除了定义了报文分段和重组的机制外,还定义了网络层的超时机制。

-
N_As: 表示CAN数据帧从请求数据链路层发送至接收到对应的ACK的最大时间间隔;
-
N_Bs: 表示发送方数据链路层接受到流控帧的最大时间间隔;
-
N_Ar: 表示接收方从请求数据链路层发送流控帧至接收到对应的ACK的最大时间间隔;
-
N_Br: 表示接收方请求数据链路层发送流控帧的内在最大时间间隔 (N_Br + N_Ar)<(0.9倍N_Bstimeout);
-
N_Cs: 表示发送方请求数据链路层发送流控帧的内在最大时间间隔 (N_Cs + N_As)<(0.9倍N_Cr timeout);
-
N_Cr: 表示接收方接收到流控帧的最大等待时间间隔;
二、ISO 15765-3
1.应用层超时参数
默认会话的应用层定时参数:

另外还有两个是非默认会话时的定时参数:

2.超时机制描述
1)默认会话期间的物理通信

- 客户端诊断应用层通过发送N_USData.req 到网络层开始发送请求信息。网络层传递该请求信息至服务器。该请求信息要么以单诊的形式或多帧的形式。
- 在多帧信息情况下,请求开始于网络层发送的NUSDataFF.ind通知服务器。
- 请求信息的完成通过客户机NUSData.con指示。当接收到NUSData.con 时,客户端使用默认重载
- 值为P2Client,启动P2Client定时器,该定时器的值应当考虑到车载网络设计上(通信网关总线带宽,等)所有的误差。为了简单化,该图假定客户机和服务器在一条总线上。
- 服务器通过NUSData.ind指示请求信息的完成。
- 服务器在接收到NUSData.ind指示时,要求在P2Server 时间内开始回复信息。也就是说,在多
- 帧回复信息条件下,首帧必须在P2Server 时间内发送,对于单帧回复信息,该单帧必须P2Server 时间内回复。
- 服务器在给定的P2Server 时间内无法提供请求的信息时,它可以通过发送应答码为 0x78 的否定
- 应答信息请求扩展的定时窗。客户端接收到否定应答信息时,客户端网络层产生一个N_USData.ind。接收到应答码为 0x78的否定应答信息,客户端重置它的P2Client定时器,但使用的是扩展的重载的P2*Client定时值。
- 服务器在发送否定应答信息NUSData.con之后,要求在给定的扩展的P2*Server时间内应答信息。如果在给定的扩展的P2Server 时间内仍无法提供请求的信息,服务器则继续发送应答码为0x78的否定应。客户端使用的是扩展的重载的P2*Client,定时值重置它的P2Client 定时器。为了简单起见,图中只显示了一个应答码为 0x78 的否定应答信息。
- 一旦服务器可以提供请求的信息(肯定的否定的应答,而不是应答码0x78的应答),它就启动最后结果的应答信息。
- 在多帧应答信息情况下,客户机通过网络层N_USDataFF.ind指示首帧的接收。当接收到首帧时客
- 户机停止P2Client定时器。
- 如果完整的信息接收到,或者在接收过程中出现了错误,网络层最后都产生一个NUSData.ind。
- 单帧响应信息,通过单个的NUSData.ind指示单帧的接收。当接收该单帧指示时,客户端停止P2Client定时器。
2)非默认会话期间的物理通信

- 客户端诊断应用层通过发送N_USData.req至网络层,传递诊断会话控制(0x10)请求信息。网络层
- 传递该请求信息至服务器。
- 请求信息是单帧信息。它的完成通过客户端N_USData.con指示。客户端产生的N_USData.con不会促使S3Client定时器开启(会话定时器)。这与使用功能地址不同,使用功能地址会周期性发送(0x3E)信息保持诊断会话一直处于激活状态。
- 服务器通过N_USData.ind指示请求信息的完成。
- 图上给出,假定客户机需要服务器一个应答。服务器应当发送诊断会话控制(0x10)的肯定应答信息。
- 服务器通过 N_USData.con 指示应答信息发送的完成。然后服务器开启S3Server 定时器,只要它不超时,它就一直处于非默认状态。客户机通过NUSData.ind指示诊断会话控制(0x10)的接收。这将促使S3Client 的开启。客户机负责保证S3Server定时器在它超时之前复位,以保证服务器处于非默认
- 会话状态。
- 客户机任何时候发送一条请求信息至服务器(包括(0x3E)信息),它都会停止S3Client 。
- 接收到请求信息的单帧或首帧,服务器都停止S3Server定时器。服务器通过N_USData.ind 标识请求信息的完成。
- 客户机通过N_USData.ind指示应信息的完成,这促使客户机开启S3Client服务器通N_USData.con 指示应答信息的完成,这促使服务器开启S3Server。还有一种客户机不需要应答的情况,客户机接收到网络层N_USData.con确认标识请求信息发送完时,开启S3Client,服务器完成请S3Server求的动作时,开启S3Server,为简单起见,图中显示的是需要应答的情况。
- 如果客户机在S3Client超时之前,没有发送任何诊断请求信息,这促使客户机在S3Client超时时,发送一条物理地址(0x3E)请求信息。
- 服务器通过NUSData.ind指示(0x3E)请求信息的接收。这促使服务器停止S3Server定时器。客户机通过N_USData.ind指示(0x3E)应信息的完成,这促使客户机开启S3Client,服务器通过
- N_USData.con指示(0x3E)应信息的完成,这促使服务器开启S3Server。还有一种客户机不需要
- 应答的情况,客户机接收到网络层N_USData.con(0x3E)标识请求信息发送完时,开启S3Client,服务器完成请求的动作时,开启S3Server,为简单起见,图中显示的是需要应答的情况。
3343

被折叠的 条评论
为什么被折叠?



