目 录CONTENT

文章目录

AUTOSAR - CANTP - 学习一 :理论基础

moke
2024-07-26 / 0 评论 / 0 点赞 / 100 阅读 / 0 字

1、概述

        TP位于硬件抽象层的上层,在AUTOSAR的结构里面位置如下

CanTp的协议着重需要查阅的ISO规范文档如下

《ISO 15765[1].2(2004)道路车辆——控制局域网络诊断——第2部分:网络层服务.pdf》

        目前笔者使用的TP来讲CanTp与J1939TP居多一些,CanTp:ISO诊断(DCM),标准CAN总线上的大型PDU传输,J1939Tp: J1939诊断,大型PDU传输J1939驱动的CAN总线。

         CanTp位于CanIf与PDUR之间,主要目的是对大于8字节的CAN I-PDU,大于64字节的CANFD I-PDU进行分段与重组。位置如下图。

        CAN接口(Canlf)提供了平等的机制来访问CAN总线通道,而不管它的位置(uC内部/外部)。从CAN控制器的位置(片上/板上)提取ECU硬件布局和CAN驱动程序的数量。由于CanTp只处理传输协议帧(即SF, FF, CF和FC pdu),根据N-PDU ID, CAN接口必须将I-PDU转发给CanTp或PduR。

根据AUTOSAR的基本软件架构,CanTp提供以下服务:

传输方向的数据分割;

接收方向的数据重组;

数据流控制;

检测分段会话中的错误。

传输取消

接收取消

2、名词缩写

2.1、前缀含义

前缀符号缩写

前缀

描述

I-

关联AUTOSAR COM交互层

L-

关联CanIf,相当于逻辑链路层,上层是数据链路层下层为介质访问控制,介质其实就是硬件抽象

N-

关联CanTp,可以认为是网络层,个人理解N代表多个

2.2、协议数据缩写

        关联CanTp的缩写词, PDU是“协议数据单元”的缩写。PDU包含SDU和PCI。在传输端,PDU从上层传递到下层,下层将这个PDU解释为它的SDU。        

缩写词

描述

CAN L-SDU

属于CanIf模块,与N-PDU类似

CAN LSduId

CanIf内独一无二的ID,用于引用L-SDU的路由属性,因此为了通过API与CanIf交互,上层可以引用CAN L-SDU的结构体以此进行数据传递

CAN N-PDU

这是CANTP的PDU。它包含唯一标识符、数据长度和数据(协议控制信息加上整个N-SDU或其中的一部分)。

CAN N-SDU

这是CANTP的SDU。在AUTOSAR体系结构中,它是来自PDU路由器的一组数据。

CAN N-SDU Info Structure

这是一个CANTP内部常量结构,包含特定的CAN传输层信息,用于处理相关CAN N-SDU的发送、接收、分段和重组。

I-PDU

这是AUTOSAR COM模块的PDU

PDU

在分层系统中,它指的是在给定层的协议中指定的数据单元。它包含该层(SDU)的用户数据以及可能的协议控制信息。X层的PDU为其下层X-1层的SDU,即(X)-PDU =(x-1)-SDU)。

PduInfoType

该类型是指用于存储处理PDU(或SDU)收发基本信息的结构,即指向其在RAM中的有效载荷的指针及其长度(以字节为单位)。

SDU

在分层系统中,这是指由给定层的服务用户发送的一组数据,并将其传输给对等服务用户,同时保持语义不变。

3、帧类别

 参考《ISO 15765[1].2(2004)道路车辆——控制局域网络诊断——第2部分:网络层服务.pdf》

         CanTp模块会对消息分段成四种类型的帧。分别是单帧(Single Frame,SF),首帧(FirstFrame,FF) ,连续帧(Consecutive Frame,CF),流控帧(Flow Control Frame,FC),区分4种帧的关键信息在于N_PCI字节的N_PCItype中,如上图。N_PCI对应有三个字节 N_PCItype仅仅占用第一个字节的高4bit。

3.1、单帧 SF NPCItype = 0

        对于未分段的数据(一个CAN报文能发送完成) CanTp提供了协议的优化实现,将数据长度嵌入在PCI字节中,单帧一般是传输不分段数据和用于建立数据传输请求。SF-DL是单帧的数据场长度。在CAN 2.0通常寻址时,长度值小于7字节。如下 02中的0表示单帧2表示后面跟了两个字节

3.2、首帧 FF NPCItype = 1

    首帧用于传递不能单帧传输数据的第一帧数据,接收方接收到首帧后,应返回流控帧告知接收能力,同时做好接收多帧的准备。FF_DL是首帧的数据场长度。在CAN2.0中长度值多达4095字节。

10 10 里面的 1表示首帧 010表示传输数据长度16字节

3.3、连续帧 CF NPCItype = 2

        连续帧应该在首帧之后发送,接收字节一旦收到连续帧,应将全部数据组装完成,SN是连续的序号,范围是0-15,也就是0x00-0x0F。

 当大于2F时候会怎样呢?如下图所示

3.4、流控帧 FC NPCItype = 3

        流控帧的作用是调节连续帧的发送速率,流控帧应包含帧的控制信息:FS,BS,STmin。在收到首帧后就应返回流控帧,告知发送方当前接收状态以及接收能力。其中,BS(Block Size):发送的数据量。STmin(SeparationTime minimum):多帧间的最小间隔时间。FS(Flow Status):流状态。

BS:Block Size 发送的数据量,例如此处为0x0A,后面也就只能再最大发10个连续帧。假设此处BS为0表示可以一直发连续帧的。

STmin:多帧的最小时间间隔

FS:Flow Status 流状态

FS有三种状态

CTS:Continue To Send 继续发送状态

WAIT:等待

OVFLW:溢出

5、N_AI

N_AI参数用于标识消息发送者和接收者的源地址(N_SA)、目标地址(N_TA),以及消息的通信模型(N_TAtype)和可选的地址扩展名(N_AE)。

4、注意事项

当发送多个Segmented的时候,中间是有流控帧出现的,如下结构

 假设单独的block时候,与3.3章节一样了,中间一直是连续帧,直到数据传递结束。

5、CanTp的时间参数

时间参数总图示如下

5.1、传输层时间参数

传输层

BS

Block Size ECU发送流控帧后,Tester被允许发送连续帧最大帧数据,为0可以一直发。

STmin

ECU发送流控帧后,连续帧之间的最大时间间隔

5.2、网络层时间参数

以下时间参数一旦超过就会传输中断!!!

网络层

N_As

S均代表发送方,例如loader烧录的上位机

发送方从请求发送到发送完成的时间间隔,超过这个时间发送中断,一般为70ms。

举例上位机发03 22 F1 84

ECU响应10 01 62 F1 84 这段时间

N_Bs

首帧发送成功的时间节点到流控帧接收成功的时间节点,也就是说从数据确认发送到收到流控帧的最大时间间隔,一般为150ms

N_Cs

接收到流控帧到发送连续帧的最大时间间隔,此处注意不是STmin的含义,一般为50ms

N_Ar

R代表接收方,例如loader烧录的ECU下位机

传输流控帧到发送方的时间,一般为70ms

N_Br

接收到首帧到发送流控帧的时间,一般为50ms

N_Cr

接受方成功发送流控帧到接收到连续帧的时间,一般为150ms

5.3、会话层时间参数

会话层

S3_Tester

发送方维持非默认会话的最大时间

S3_Sever

接收方未接受到任何诊断报文维持在非默认会话下的时间

5.4、应用层时间参数

应用层

P2_Client

发送方发送完请求消息后等待服务器响应超时的时间

P2*_Client

发送方收到否定响应码为0x78的否定响应后等待接受方发送响应的增强型超时时间设置。

P2_Sever

接收方收到请求后发出响应的实际时间

P2*_Sever

接收方发送0x78否定响应到发出否定响应的实际时间。(此处很少用)

P3_ClientPyh

发送方在收到物理寻址(phy)的肯定响应下允许发送下一条物理寻址请求的最小时间间隔

P3_ClientFun

发送方在收到物理寻址(phy)的肯定响应下允许发送下一条功能寻址(fun)的最小时间间隔

博主关闭了所有页面的评论