|
汽车零部件采购、销售通信录 填写你的培训需求,我们帮你找 招募汽车专业培训老师
在介绍CanTp模块前,我们需要先介绍一下ISO 15765协议,因为ISO 515765-2网络服务层就是CanTp模块的理论基础。
简介
ISO 15765 适用于 ISO 11898 制定的同一个车辆诊断控制区域网络(CAN)。它主要用于诊断系统,ISO 15765 已经开发出来符合要求的一个网络层协议。ISO 15765 是基于互连的开放系统(OSI,由ISO/IEC7498体系结构标准定义的网络互连的7层框架)。
在ISO 7498定义的一些缩略词同样适用于15765,以下列出一些协议中需要使用的。
BS
|
Block Size,数据块大小
|
CF
|
Consecutive Frame,连续帧
|
FC
|
Flow Control,流控制
|
FF
|
First Frame,首帧
|
FF_DL
|
First Frame Length,首帧数据长度
|
FS
|
Flow Status,流状态
|
N_Ar
|
网络层时间参数:Ar
|
N_As
|
网络层时间参数:As
|
N_Br
|
网络层时间参数:Br
|
N_Bs
|
网络层时间参数:Bs
|
N_Cr
|
网络层时间参数:Cr
|
N_Cs
|
网络层时间参数:Cs
|
SF
|
Single Frame,单帧
|
SF_DL
|
Single Frame Data Length,单帧数据长度
|
SN
|
Sequence Number,顺序号
|
STmin
|
Seperation Time Min,间隔最短时长
|
N_PCI
|
Network Protocol Control Information, 网络协议控制信息
|
N_Data
|
网络数据
|
N_PDU
|
网络协议数据单元
|
N_SDU
|
网络服务数据单元
|
N_AI
|
地址信息
|
MType
|
信息类型
|
N_AE
|
网络地址扩展
|
N_SA
|
Network Source Address, 网络源地址
|
N_TA
|
Network Target Address,网络目标地址
|
N_TAtype
|
网络目标地址类型
|
网络层协议
协议数据单元(N_PDU)使数据在两个或多个对等网络节点之间传递。所有的 N_PDUs 包含了 3 个域: 地址信息N_AI、协议控制信息和数据域。
地址信息
网络层数据交互有三种地址格式的支持:标准,扩展和混合。不同的地址格式需要CAN帧中使用数据域中不同的数据长度来包含地址信息。因此,单个CAN帧的数据域中所能传输的数据长度取决于选取的地址信息格式。N_TAtype表示网络目标地址类型,它是对N_TA 参数的扩展,代表通信模式,总共有两种:1 对 1 的通信,称为物理地址,网络层所有类型的信息都支持;1 对多的通信称为功能地址,仅仅对单帧的通信支持。Mtype用来定义在服务调用中地址信息参数的类型和范围,在ISO 15765定义了两个值:诊断和远程诊断。前者的地址信息需要包括N_SA_N_TA和N_TAtype,而后者的地址信息不仅需要包括N_SA_N_TA和N_TAtype,还需要包括N_AE。
标准地址信息
对于N_SA,N_TA,_N_TAtype和Mtype的组合而言,分配一个唯一的(unique)的CAN Id就可表示。N_PCI和N_Data放在CAN的数据域。
标准地址(标准帧)下N_PDU参数映射到CAN帧
标准固定地址(Normal fixed addressing)
标准固定地址是标准地址的子格式,也就是进一步定义了如何将地址信息映射到Can Id。在标准地址信息中,N_AI和CAN Id的联系是没有定义的。对于标准固定地址信息而言,只允许使用29位的CAN id(扩展帧)。
物理寻址下N_PDU映射到CAN 帧(Normalfixed addressing)
功能寻址下N_PDU映射到CAN 帧(Normalfixed addressing)
扩展地址(Extended addressing)
对于N_SA, N_TAtype和Mtype的组合而言,分配一个唯一的(unique)的CAN Id,而N_TA放在CAN 数据域的第一个字节,N_PCI和N_DATA放在剩下的字节。
混合地址
混合地址是将 Mtype 设置为远程诊断的地址格式。
29位CanId的混合地址—物理寻址
29位CanId的混合地址—功能寻址
11位CanId的混合地址
单帧发送
通过唯一的N_PDU发送最多6个(扩展或混合地址)或者7个(标准地址)字节。
注意:在单帧中,如果网络层接收到一个 SF_DL=0或者大于7 (标准地址)的消息,网络层应当忽略接收 SF N_PDU。
多帧发送
多帧发送需要用到流控机制。流控机制允许接收方告诉发送方接收方的能力。接收方的能力包括两个方面:块大小(BS)和帧间隔(STmin)。块大小表示在授权继续发送其余的 N_PDU 之前,接收方允许发送方最大的 N_PDU 个数。帧间隔发送方在发送两个连续帧间隔等待的最短时间。
流控机制
在首帧中定义了需要发送的数据长度,假如接收方收到的发送方的FF_DL超过了自身的能力,那么就需要将发送的FC中的FS(流控状态,FlowStatus)置为Overflow。假如FF_DL小于8(标准地址),那么接收方需要忽略(ignore)本次接收,而且也不会发送流控帧。发送方会接收到流控帧,流控帧中的FS的参数指示发送网络实体是否继续信息的发送。
FS值的定义
假如发送方接收到了一个无效的FS(reserved value)值,那么发送方需要放弃发送并且通知上层模块。在流控帧中还有一个BS值,它存储了每一块中 CF N_PDU 的绝对个数。
BS值的定义
流控帧中的STmin参数值指定了连续帧协议数据单元发送的最小时间间隔。
STmin值的定义如果发送方接收到的STmin 参数值为保留值,发送网络实体则使 用最长的 STmin 值,即(7F -127ms),而不使用从接收网络实体接收到的值。在连续帧中需要发送SN,SN需要从0开始增长到达15后再次从0开始。多帧发送的首帧其实SN就被设置位了0,只是没有被显示定义,所以在首帧后第一个连续帧的SN是1。对于接收方而言,假如接收到一个错误的SN,那么就需要丢弃(abort)接收到的数据,并上报给上层。在多帧传输中如果接收到了一个非期望的报文,又该如何处理呢?这个取决于通信的两个节点通信模式(半双工或者全双工)。半双工表示两个节点之间点对点通信在同一个时刻只能是一个方向。全双工表示两个节点之间点对点通信在同一个时刻支持双向的通信。通常而言这个非期望的报文需要被丢弃,除非它是一个单帧报文或者物理寻址的首帧报文。下面列出了不同的网络层内部状态(NML status,network layer internal status)接收到不通类型的非期望的N_PDU的动作。
定时参数
定时超时(Timeout)值是一个较大的值用来确保系统可以克服性能定义中绝对不会遇见的通信情景(如高负载),因此正常情况下,通信间的超时不应大于极限值的50%。
超时处理机制如下。
CanTp配置
在CAN协议栈中,CanTp处于CanIf和PduR之间,它主要的作用是提供带有流控的分包、发送以及接收端的组包。当上层的消息不能以一帧CAN报文发出时,它可以把消息分割成一些部分,让这些分割后的部分可以以一帧CAN报文发送出去。因此它向上提供接口给PduR使用,向下调用CanIf的接口。同时,需要注意的是CanTp不提供缓存功能,因此CanTp调用PduR_CanTpCopyTxData() or PduR_CanTpCopyRxData()函数来获取上层模块的缓存。上层模块需要锁住(lock)这块内存不被污染直到PduR_CanTpTxConfirmation()or PduR_CanTpRxIndication()被调用。
发送多包
这个调用时序忽略接收和处理流控帧,只为了说明CanTp和上层的接口调用。
1:PduR调用CanTp_Transmit函数请求发送50个字节的数据;2:CanTp调用PduR_CanTpCopyTxData函数请求PduR的数据,然后发送首帧;3:CanTp通过连续帧发送剩余的数据;4:CanTp调用PduR_CanTpTxConfirmation函数通知PduR发送完成。
接收多包
这个调用时序忽略发送流控帧,只为了说明CanTp和上层的接口调用。在这个调用时序中需要接收的数据是49个字节,而上层的缓存只有25个字节,具体调用如下。
1:CanIf调用CanTp_RxIndication函数告诉CanTp有新的数据来了, 然后CanTp通过PduR_CanTpStartOfReception函数告知PduR并且锁定一块缓存;2:PduR通过PduR_CanTpStartOfReception函数告知CanTp可用的缓存大小为25个字节,CanTp开始发送继续发送的流控帧;3 :CanTp将接收的数据传给PduR并且监控缓存的剩余空间,当接收完第二个连续帧后,缓存空间不够接收下一块数据了;4:CanTp通过调用PduR_CanTpCopyRxData得知剩余为0,然后再次发送一个等待流控帧;5:当缓存足够容纳下一个块时,CanTp将会发送继续发送的流控帧;6:在接收完两帧连续帧后,缓存再次不够了,此时CanTp将需要再次发送一个等待流控帧;7:当缓存可用时,CanTp继续接收;8:接收完成后调用PduR_CanTpRxIndication通知PduR。
配置
CanTpMainFunctionPeriod:CanTp主函数的运行周期;
CanTpChannelMode:CanTp通道的工作模式:全双工/半双工。
作为从节点,需要配置两个接收的Sdu(物理寻址/功能寻址)和一个发送的Sdu(回复,response)。
CanTpRxNSdu
CanTpBs:Bs的大小;
CanTpNar:N_Ar超时时间,单位秒;
CanTpNbr:系统性能要求,即在接收到FF、CF或者发送完FC后,开始请求发送FC的时间间隔;
CanTpNcr:N_Cr超时时间,单位秒;
CanTpRxAddressingFormat:接收地址类型
1 CANTP_EXTENDED:扩展地址类型;
2 CANTP_MIXED:混合11位地址类型;
3:CANTP_MIXED29BIT:混合29位地址类型;
4:CANTP_NORMALFIXED:标准固定类型;
5:CANTP_STANDARD:标准地址类型。
CanTpRxPaddingActivation:接收到的报文是否进行padding.
CanTpRxTaType:RxN-SDU的通信类型,功能请求(Functional request type)/物理请求(Functional request type)
CanTpSTmin:STmin的值,单位秒;
CanTpRxNSduRef:引用定义的向上传递给PduR的Pdu。
CanTpRxNPduRef:引用定义的接收到来自CanIf模块的Pdu。
物理寻址的选项和功能寻址类似,不再赘述。
CanTpTxNSdu
CanTpNas:N_As超时时间。
CanTpNbs:N_Bs超时时间。
CanTpNcs:系统性能要求,表示在连续帧发送过程中应用层请求发送连续帧的超时时间
CanTpTc:是否支持传输取消.
CanTpTxAddressingFormat:发送地址类型,选项和接收类似.
CanTpTxPaddingActivation:发送报文是否使能填充(padding).
CanTpTxTaType:TxNsdu的通讯类型,物理/功能..
CanTpTxNSduRef:引用PduR发送给CanTp的Pdu。
CanTpRxFcNPdu:引用物理寻址中CanIf传给CanTp的Pdu。
CanTpTxNPduRef:引用物理寻址中CanTp发送给CanIf的Pdu.
CanTpGeneral
CanTp_ChangeParameterRequest:CanTp_ChangeParameterRequest函数是否可用。
CanTpPaddingByte:CanTp填充的字节内容。 |
|