目录
2.3 Additional requirements for CANFD
3.2 Services provided by network layer to higher layers
4.2.5 N_ChangeParameters.request
4.3 Service data unit Specification
4.3.2 N_AI Address information
1.ISO 15765简介
ISO15765的建立是为了定义在控制器区域网络上实施的车辆诊断系统的通用要求,其由三个部分组成。
——part1:General inforamtion and use case definition
——part2:Transport protocal and network layer services
——part4:Requirement for emission-related system
其中Part4主要是和OBD相关,一般项目无OBD的则只和前两者有关,ISO15765-2主要是在传输层使用,适用于OBD和UDS两种方面的诊断,其结构如下图所示:
2.ISO11898-CAN数据链路层扩展
2.1经典CAN和CANFD的特征
ISO11898中描述了,经典CAN 最大支持的长度为8byte,CANFD的最大长度为64byte。因此,在使用 First Frame (FF),FlowContorl (FC),和Consecutive Frame(CF)的分段数据传输需要在不改变原始协议的情况下,使用可变可配置的有效载荷长度来实现,SF frame(首帧)类型也进行了调整,以支持有效的载荷长度来支持CANFD。
2.2传输层和网络层的CAN 参数
下图展示了CAN数据段的信息,其中
N_AI:Network address inforamtion
N_TA: Network target address
N_SA: Network srouce address
N_TAtype: Network Target address type
attention:
1.DLC的值结果在 CAN_DL value,代表CAN 帧数据的物理长度,在接收端,CAN_DL值由发送端的TX_DL的值来决定
2.N_NAI的mapping只是一个正常和正常固定寻址的示例
3.Format 中的bit rate switch(BRS) 定义了数据的传输速度
2.3 Additional requirements for CANFD
当使用CANFD的时候,ISO 15765能够配置为经典CAN或者CAN FD类型的帧,当在数据链路层使用CANFD类型时,需要注意下面两点能够支持:
1.CANFD中有一个BRS 位,BRS会用来确定数据是否以与仲裁阶段不同的比特率来传输,即CAN FD加速和CANFD
2.最大允许的长度位64byte
对于发送节点来说,TX_DL的值配置决定了上层边界使用有效CAN帧数据长度
——TX_DL 等于8
传输协议与ISO11898一样,可以支持CAN也可以支持CANFD
——TX_DL 大于8
只允许ISO 11898-1的CANFD使用,具体长度参考上图table
3.网络层的overview
3.1General
针对交换数据节点的未确定网络层通讯协议,ISO15765做了一个详细的定义,比如ECU到ECU,或者ECU到外部设备,如果数据发送不适用于单帧,则将会使用分割多帧的方法.
为了描述网络层的功能,有必要考虑向更高层提供的服务和网络层的内部操作。
3.2 Services provided by network layer to higher layers
服务接口定义了访问网络层提供的功能所需的一组服务,例如:发送/接收数据 ,设置协议参数等。
下列为定义的两种服务类型:
A.通信类服务:
如下所示为定义的一些服务,最大传输使能4294967295bytes。
1. N_USData.Request:该服务被用来请求发送数据,如果必要,网络层会分割这些数据。
2. N_USData_FF.indicatoin:该服务是用来分割传给上层的接收部分的首帧message的内容,即简单理解为首帧
3. N_USData.Inidaction:该服务用于向上层提供接收到的数据
4. N_USData.Confirm:该服务会confirm上层请求服务已经被实施,无论是成功还是失败。
Note:在Autosar软件中,例如ETAS或者Davinci等,其DCM模块的DCMDsd里面会有一个DcmDsdServiceRequestSupplierNotifications里面可以设置indication和confirmation。
B.协议参数的设置:
下面一些服务参数使能了协议参数的动态设置
1.N_ChangeParameter.request: 该服务用来请求具体内部的协议的动态设置参数
2.N_ChangeParameter.confirm: 该服务确认上层请求改变的具体协议已经完成(无论成功或者失败)
3.3 网络层的内部操作
网络层的内部操作提供了分割的方法,流控帧的发送,以及重新组装,主要的目的是网络层发送的数据可能符合也可能不符合单帧CAN,如果message不符合单帧CAN的传输,那么就要分割成多块,使得分割出来的每一块都要适合CAN帧。
下图展示了单帧和多帧发送的方法
如上图,流控帧用来调整发送方到接收方的网络层能力,流控帧的方案允许在诊断网关及子网关使用。
4.网络层服务
4.1general
所有的网络层服务都有相同的通用结构,为定义这些服务,三种类型的服务原始定义如下:
——Service Request Primitive: 由更高的通信层或应用程序用于传递需要传输到网络层的控制信息和数据
——Service Indication Primitive:网络层用于向上层通信层或者应用程序传递状态信息和接收到的数据
——Service confirmation primitive:网络层用于将状态信息传递给更高的通信层或者应用程序
该服务规范没有指定的应用程序编程接口,而只是指定一组独立于任何实现的service primitive
所有的网络层服务都有相同通用结构,其service primitives 可以写为以下格式:
service_name.type {
parameter A,
parameter B,
[,Parameter C,...]
}
Service_name就是服务的名字,比如N_USData,“Type”表示服务原语的类型,ParameterA .B等是传递参数
4.2具体service Primitive 的定义
4.2.1 N_USData.Request
N_USData.request {
Mtype
N_SA Network Sorce address /*源地址*/
N_TA Network Target address /*目标地址*/
N_TAtype Network target address type /*CAN FD 或者CAN*/
[N_AE] network address extension /*扩展地址*/
<MessageData>
<Length>
}
每次N_USData.Request 服务调用时, 网络层应通过发出和N_USData.confirm的服务调用向服务用户发出消息传输完成或者失败的信号。
4.2.2 N_USData.confirm
N_USdata.confirm 服务由网络层发送,服务原语确认N_USData.request 服务的完成,该服务由N_SA,N_TA中的地址信息标识符。
N_USData.Confirm {
Mtype
N_SA Network Sorce address /*源地址*/
N_TA Network Target address /*目标地址*/
N_TAtype Network target address type /*CAN FD 或者CAN*/
[N_AE] network address extension /*扩展地址*/
<N_Result> /*一个枚举类型,包含OK,timeout,OVFLW,Error等*/
}
4.2.3 N_USData_FF.Indication
N_UDData_FF.indication服务由网络层发出,服务原语向相邻的上层指示从对等的协议实体接收到的分段消息首帧的到来。即,向上层表示首帧将要到来。
N_USData_FF.indication {
Mtype
N_SA Network Sorce address /*源地址*/
N_TA Network Target address /*目标地址*/
N_TAtype Network target address type /*CAN FD 或者CAN*/
[N_AE] network address extension /*扩展地址*/
<N_Result> /*一个枚举类型,包含OK,timeout,OVFLW,Error等*/
}
在网络层调用时,N_USData_FF.indication服务后面总是应该跟一个N_USData.indication服务,表示message的接收完成或者失败。
N_USData_FF.indication 调用应该给被网络层发出,如果正确的FF消息被收到
如果网络层察觉到了首帧类型的错误,那么网络层应该忽略message的接收,N_USData_FF.indication不应该被发送到相邻的上层。
如果网络层收到的FF的数据长度超过了接收端最大的buffer,那么可以考虑为一个错误的情况,并且N_USData_FF.indication不应该被发到相邻的上层。
4.2.4 N_USData.indication
N_USData.indication由网络层发出,该服务原语表示同等协议实体下收到的<N_Result>事件和发送者的<message Data>和<length>的byte,其中还包括据N_SA,N_TA,N_TAtype等给相邻的上层。
其中<message data>和<length>只有在<N_Result>等于N_OK的情况下有效
N_USData.indication {
Mtype
N_SA Network Sorce address /*源地址*/
N_TA Network Target address /*目标地址*/
N_TAtype Network target address type /*CAN FD 或者CAN*/
[N_AE] network address extension /*扩展地址*/
<MessageData>
<Length>
<N_Result> /*一个枚举类型,包含OK,timeout,OVFLW,Error等*/
}
N_USData.indication服务调用时在成功接收到首帧或者分割过的message接收的完成(或失败)之后才开始调用
如果网络层察觉到了任何SF的类型错误,那么message会被网络层忽略,且N_USData.indication不会发给相邻的上层
4.2.5 N_ChangeParameters.request
该服务原语在本地协议实体中被用来请求改变内部参数值的变化,<Parameter_Value>被分配到<Parameter>中。
parameter的改变总是可能的,除非在接到FF(N_USData_FF.indication)且直到完成相关的信息(N_USData.indication)之外,因为连续帧的内容总是可能变化的。
N_ChangeParameter.request {
Mtype message type
N_SA Network Sorce address /*源地址*/
N_TA Network Target address /*目标地址*/
N_TAtype Network target address type /*CAN FD 或者CAN*/
[N_AE] network address extension /*扩展地址*/
<Parameter>
<Parameter_Value>
}
这是一个可选的服务由固定的参数实现替代。
4.2.6 N_ChangeParameter.confirm
服务原语confirm了N_ChangeParameter.confirm服务运用在message上的完成,且地址信息如下
N_ChangeParameter.Confirm {
Mtype message type
N_SA Network Sorce address /*源地址*/
N_TA Network Target address /*目标地址*/
N_TAtype Network target address type /*CAN FD 或者CAN*/
[N_AE] network address extension /*扩展地址*/
<Parameter>
<Result_ChangeParameter>
}
4.3 Service data unit Specification
4.3.1 Mtype,message type
Type:枚举类型
Range:诊断或者远程诊断
描述:服务在调用的时候,Mtype的参数会用来识别type和寻址信息的范围,ISO15765中定义了两个value,这样的目的是ISO 15765的用户可以通过指定其他类型和地址信息参数的组合来扩展值得范围,这些参数将与该部分中指定的网络层协议一起使用。对于每个这样的新地址信息范围,应该指定Mtype参数的新值以识别新的地址信息。
如果Mtype=Diagnostic ,那么地址信息N_AI应该由N_SA,_N_TA,N_TAType组成,例如普通的11bit标准CANID,0x7dd,0x7df,0x787等
如果Mtype=Remote Diagnostics ,那么地址信息N_AI应该由N_SA,N_TA,N——TAType,N_AE组成
例如扩展帧:0x14DAF431,0x14DAF231等29bit的扩展帧
4.3.2 N_AI Address information
4.3.2.1 N_AI description
该参数表示的是地址信息。总的来说,N_AI参数用来标识源地址N_SA和消息的发送者和接收者的目标地址N_TA,同样还包括消息(N_TAType)的通讯模式以及可选的扩展地址(N_AE)即29bit.
4.3.2.2 N_SA, network source address
Type:8 btis, 范围:0x00-0xFF
描述:N_SA的参数应该用来放入网络层发送协议实体里
4.3.2.3 N_TA Network Target Address
Type: 8bits ,范围0x00-0xFF
描述:N_TA的参数应该被放入一个或多个(取决于N_TAType:Physical或者Functional)网络层接收协议里
4.3.2.4 N_TAtype,Network target address type
type:枚举 ,范围:见下图
描述:N_TAtype是N_TA参数的扩展
——针对没有mapping在相同的N-AI上的不同message,网络层协议应该有能力实施并行发送
——对于unexpected的PDU的处理,只适用于相同的N_AI
——经典CAN帧不会导致CAN FD的消息被终止,反之亦然。
——这也预防了单帧消息中混合了CAN和CANFD的类型
4.2.5 N_AE,network address extension
Type:8bit Range:0x00-0xFF
描述:N_AE的参数是用来扩展大型网络的可用地址范围,对发生通信的本地网络以外的子网络的发送和接收网络层实体进行编码。
4.3.3 length
type:32bits , range:0x00000001-0xFFFFFFFF
描述:该参数表示发送/接收数据的长度
4.3.4 Message Data
Type:字符串 Range:不适用
描述:上层实体交换的所有数据
4.3.5 Parameter
Type:枚举 Range: STMin,BS
描述:网络层参数
4.3.6 Parameter_value
Type;8bit m Range 0x00-0xff
4.3.7 N_Result
Type:枚举
Range:N_OK,N_TIMEOUT_A,N_TIMEOUT_Bs,N_TIMEOUT_Cr,N_WRONG_SN,N_INVALID_FS,N_UNEXP_PDU,N_WFT_OVRN,N_BUFFER_OVFLW,N_ERROR
描述:这个参数包含服务执行完的相关结果参数,如果有两个或者更多的错误同时发现,网络层实体会parameter value里第一个发现的错误给上层。
——N_OK
该值表示服务执行成功,可以发送给发送和接收端的服务用户
——N_TIMEOUT_A
该值被发给协议用户当定时器N_Ar/N_As超过了N_Asmax/N_Armax时,它能够发送给发送方或者接收方的服务用户
——N_TIMEOUT_Bs
该值被发给协议用户当N_Bs定时器超过了N_BsMax时,只能将他发送给发送方的服务用户
——N_TIMEOUT_Cr
该值被发给协议用户当N_Cr定时器超过了N_CrMax时,他只能发送给接收方的服务用户
——N_WRONG_SN
当收到一个意外的sequence number值给服务用户时该值被发出,只能发给接收方的服务用户
——N_INVALID_FS
当收到具有无效的或者未知的流控状态值的流控帧时,该值会被发送给服务用户,只能将他发送给发送方的服务用户
——N_UNEXP_PDU
在收到未知的数据协议单元时,该值会被发给服务用户,只能发送给接收方的服务用户
——N_WTF_OVRN
当接收端成功发送 N_WFTmax 带有流控状态为WAIT的流控帧 N_PDU时,该值会被发送给服务用户,不能满足发送性能要求而发送流控帧的流控状态为ClearToSend的位出去,只能由接收端服务用户发送
——N_BUFFER_OVFLW
只有收到流控帧流控状态为OVFLW时候该值会被服务用户发出,他表示分段消息传输接收端的缓冲区无法存储首帧中的数据长度指定的字节数,因此分段传输的消息被种植,只能将他发送给发送方的服务用户
——N_ERROR
这是通用错误值,只有当错误被网络层发现且没有其他更合适描述错误时使用此发给服务用户,可以有发送方或者接收方发送给服务用户
4.3.8 Result_ChangeParameter
Type:枚举 Range:N_OK,N_RX_ON,N_WRONG_PARAMETER_N_WRONG_VALUE
描述:该参数包含相关服务执行结果
——N_OK
该值表示服务执行结果完成并成功,可以有发送端或者接收端给服务使用者
——N_RX_ON
该值由服务用户发出,表示因N_AI的消息正在被接收,所以没有执行,只可能由发送端发给服务用户
——N_WRONG_PARAMETER
该值由服务用户发出,表示由于未知的<Parameter>而服务没有执行,可以由发送端/接收端发给服务用户
——N_WRONG_VALUE
该值由服务用户发出,表示由于<Parameter_Value>超范围了而服务没有执行,可以由发送端/接收端发给服务用户