UDS诊断服务中网络层对应用层数据的封装(15765.2)

来源:互联网 发布:豆豆软件 编辑:程序博客网 时间:2024/05/01 05:34

在UDS诊断服务中:

发送方:

应用层在写好诊断服务后,需要调用网络层接口对诊断服务的内容进行封装,封装后的内容再进一步由数据链路层进行封装,最后才能通过CAN将数据发送出去。

接收方:

接收到的CAN报文,将先后通过数据链路层和网络层对报文的封装形式,来对报文进行解析,最终提取到和应用相关的信息。

本文描述网络层对应用层诊断服务内容的封装形式。


1、单帧诊断服务

顾名思义,该类诊断服务通过一帧CAN报文即可完成诊断服务。

在网络层中,也可以对此类报文称为SF(Single Frame)。

SF第一字节的高4位为0,低4位为数据长度,其余字节为服务数据内容,没用到的数据可以按FF填充。诊断服务中,10  31等服务都属于SF,举例如下:

10 03 请求进入诊断会话模式:

02 10 03 FF FF FF FF FF

31 01 启动例程控制服务(这里02 02是检查预编程条件)

04 31 01 02 02 FF FF FF

2、多帧传输服务

当诊断数据长度超过7个字节时,就必须使用多帧传输,这里有如下三个概念:
FF(First Frame)多帧传输的第一帧,其第一字节的高4位为1,低四位+第二字节为数据长度,其余字节为服务数据内容,没用到的数据可以按FF填充。

CF(Consecutive Frame)多帧传输的连续帧,其第一字节最高四位为2,低4位为帧序号编号(0-F)。第一个连续帧的帧序号为1,之后的连续帧序号逐一增加,当序列号大于F时,重新从0开始。其余字节为服务数据内容,没用到的数据可以按FF填充。

FC(Flow Control)多帧传输的流控制帧,其第一字节高四位为3,低四位为FS流控制状态

                                                          FS

                数值描述                 0表示允许发送方继续发送连续帧1表示发送方需等待下一条流控制帧[1],该流控制帧称为等待流控制帧2表示报文长度超出接收方的网络层缓存大小,此流控制帧将迫使发送方中断多帧报文的发送,并且发送方网络层使用N_USData.con向应用层报告N_Result = N_Buffer_Overflow。FS = Overflow的流控制帧接收方只能在接收到第一帧后发送。

第二和第三字节分别为BS和ST

                                                                            BS

数值描述0表示允许发送方连续发送连续帧,而不需要等待接收方发出的流控制帧1~255表示允许发送方连续发送连续帧的数目,发送完成相应数目的连续帧后,发送方必须等待接收方发出的流控制帧                                                                             ST

数值描述0~127两个连续帧之间的最小间隔时间,0~127ms241~249100~900us250~255保留

其余字节为服务数据内容,没用到的数据可以按FF填充。

实际应用中,像一些数据传输功能都是多帧传输,举例如下:

10 0B 34 00 44 00 00 20                               FF

30 00 00 FF FF FF FF FF                             FC

21 00 00 00 00 18 FF FF                              CF

其中,FF定义的数据长度为00B为11,FC表示允许发送方继续发送连续帧,CF为连续帧的第一帧和最后一帧。


以上也是对15765.2网络层本质的描述。





阅读全文
1 0