文章目录
1. 范围
ISO 15765-2 规定了一种网络协议,以满足ISO 11898中规定的基于CAN的车辆网络系统的要求。ISO 15765-2 是根据 ISO 14229-1和ISO 15031-5中建立的诊断服务来进行定义的,但不限于与它们一起使用,并且还与车载网络需要的大多数其他通信兼容。
2. 引用标准
- ISO 11898-1, Road vehicles — Controller area network (CAN) — Part 1: Data link layer and physical signalling
- ISO/IEC 7498 (all parts), Information technology — Open Systems Interconnection — Basic Reference Model
3. 术语、定义和缩略语
BS | Block Size | 块大小 |
CF | Consecutive Frame | 连续帧 |
confirm | confirmation service primitive | 确认服务原语 |
ECU | Electronic Control Unit | 电子控制单元 |
FC | Flow Control | 流控 |
FF | First Frame | 首帧、第一帧 |
FF_DL | First Frame Data Length | 单帧数据长度 |
FS | Flow Status | 流状态 |
indication | indication service primitive | 指示服务原语 |
Mtype | Message type | 报文类型 |
N_AE | Network Address Extension | 网络地址扩展 |
N_AI | Network Address Information | 网络地址信息 |
N_Ar | Network layer timing parameter Ar | 网络层定时参数Ar |
N_As | Network layer timing parameter As | 网络层定时参数As |
N_Br | Network layer timing parameter Br | 网络层定时参数Br |
N_Bs | Network layer timing parameter Bs | 网络层定时参数Bs |
N_ChangeParameter | Network layer ChangeParameter service name | 网络层改变参数服务名 |
N_Cr | Network layer timing parameter Cr | 网络层定时参数Cr |
N_Cs | Network layer timing parameter Cs | 网络层定时参数 |
N_Data | Network Data | 网络数据 |
N_PCI | Network Protocol Control Information | 网络协议控制信息 |
N_PCItype | Network Protocol Control Information type | 网络协议控制信息类型 |
N_PDU | Network Protocol Data Unit | 网络协议数据单元 |
N_SA | Network Source Address | 网络源地址 |
N_SDU | Network Service Data Unit | 网络服务数据单元 |
N_TA | Network Target Address | 网络目标地址 |
N_TAtype | Network Target Address type | 网络目标地址类型 |
N_USData | Network layer Unacknowledged Segmented Data transfer service name | 网络层未确认分段数据服务名 |
NWL | NetWork Layer | 网络层 |
request | request service primitive | 请求服务原语 |
r | receiver | 接收方 |
s | sender | 发送方 |
SF | Single Frame | 单帧 |
SF_DL | Single Frame Data Length | 单帧数据长度 |
SN | Sequence Number | 序列号 |
STmin | Separation Time min | 最小间隔时间 |
4. 网络层概述
4.1 概要
本节描述网络层的总体功能。ISO 15765-2 为网络节点之间(例如,ECU与ECU之间, 外部测试设备和ECU之间)的数据交换指定了一个未经确认的网络层通信协议。如果要传输的数据不适合单个CAN帧,那么网络层将提供一种分段方法。为了描述网络层的功能,必须考虑网络层向更高层提供的服务和与内部操作。
4.2 网络层向更高层提供的服务
服务接口定义了一组服务,这些服务用于访问网络层提供的功能,例如,数据的传输/接收以及协议参数设置,已定义了两种类型的服务:
a) 通信服务
以下定义的服务,它们允许传输最多4095字节的数据。
- N_USData.request
此服务用于请求传输数据。如有必要,网络层对数据进行分段。 - N_USData_FF.indication
此服务用于通知上层,分段报文开始接收。 - N_USData.indication
该服务用于向更高层提供接收到的数据。 - N_USData.confirm
此服务向更高层确认,其所请求的服务已被执行。
b) 协议参数设置服务
以下定义的服务允许协议参数的动态设置。
- N_ChangeParameter.request
此服务用于请求动态设置特定的内部参数。 - N_ChangeParameter.confirm
此服务向上层确认,特定协议的更改请求已被执行。
4.3 网络层的内部操作
网络层的内部操作提供了分段、带流量控制的传输和重组的方法。网络层的主要目的是传输可能适合或不适合单个CAN帧的报文。不适合单个CAN帧的报文被分割成多个部分,每个部分都可以在一个CAN帧中传输。
流量控制用来使发送方适应接收方的网络层接收能力。这种流量控制方案允许使用诊断网关和子网。
ISO 15765规定了三种不同的寻址格式 : 常规、扩展和混合。
5. 网络层服务
5.1 概要
所有网络层服务都具有相同的通用结构。定义这些服务需要指定三种类型的服务原语。
- 请求服务原语:由更高的通信层或应用程序使用,用于传递需要传输到网络层的控制信息和数据。
- 指示服务原语:由网络层使用,用来向上层通信层或应用程序传递状态信息和接收到的数据。
- 确认服务原语:由网络层使用,用于向更高的通信层或应用程序传递状态信息。
服务规范不指定具体的应用程序编程接口,而只指定一组独立于任何实现的服务原语。
所有的网络层服务都具有相同的通用格式。服务原语写成如下的形式:
service_name.type (
parameter A,
parameter B,
parameter C,
...
)
其中, “service_name”是服务的名称,例如N_USData,“type”表示服务原语的类型(比如request,indication,confirm),“parameter A, parameter B, parameter C,…”是服务原语传递的N_SDU值列表。
服务原语定义了服务用户(如诊断应用程序)如何与服务提供者(如网络层)协作。本国际标准规定了下列服务原语:
服务用户就是服务使用者
- service_name.request: 服务用户向服务提供者请求服务。
- service_name.indication:服务提供者通知服务用户网络层的一个内部事件或对等协议层实体服务用户的服务请求。
- service_name.confirm:服务提供者将服务用户先前的服务请求的结果通知给服务用户。
5.2 网络层服务原语规范
5.2.1 N_USData.request
N_USData.request服务由上层发出,用于请求将<Length>字节的<MessageData>从发送方传输到由N_SA、N_TA、N_TAtype和N_AE中的地址信息标识的接收方对等体实体(参见5.3参数定义)。
每当N_USData.request服务被调用时,网络层应通过发出N_USData.confirm服务调用通知服务用户报文传输的结果(成功或失败)
N_USData.request (
Mtype
N_SA
N_TA
N_TAtype
N_AE(可选)
<MessageData>
<Length>
)
5.2.2 N_USData.confirm
N_USData.confirm服务由网络层发出,用于确认由N_SA、N_TA、N_TAtype和N_AE中的地址信息标识的N_USData.request服务的完成情况。参数<N_Result>提供了服务请求的状态(参见5.3中的参数定义)
N_USData.confirm (
Mtype
N_SA
N_TA
N_TAtype
N_AE(可选)
<N_Result>
)
5.2.3 N_USData_FF.indication
N_USData_FF.indication服务由网络层发出,用于指示相邻上层:从对等协议实体接收的分段报文的第一帧(FF)已到达,对等协议实体由N_SA、N_TA、N_TAtype和N_AE中的地址信息标识(参数定义见5.3)。此指示应在接收分段报文的第一帧(FF)时发生。
N_USData_FF.indication (
Mtype
N_SA
N_TA
N_TAtype
N_AE(可选)
<Length>
)
N_USData_FF.indication服务后面应该总是跟一个来自网络层的N_USData.indication服务调用,指示报文接收的完成情况(成功或失败)。
只有在正确接收到第一帧(FF)报文时,网络层才会发出N_USData_FF.indication指示服务调用。
如果网络层检测到首帧(FF)中任何类型的错误,那么该报文应被网络层忽略,并且不应向上层发出N_USData_FF.indication服务调用。
如果网络层接收到的第一帧(FF)的数据长度值(FF_DL)大于接收方可用的缓冲区大小,则认为这是一个错误条件,不应向上层发出N_USData_FF.indication服务调用。
5.2.4 N_USData.indication
N_USData.indication服务由网络层发出,用于指示<N_Result> 事件,并且将从对等体协议实体(由N_SA、N_TA、N_TAtype和N_AE地址信息标识)接收到的有<Length>字节的<MessageData> 发送到相邻上层(参数定义见5.3)。
当<N_Result>值为N_OK时,<Length>及<MessageData>参数信息才有效。
N_USData.indication (
Mtype
N_SA
N_TA
N_TAtype
N_AE(可选)
<MessageData>
<Length>
<N_Result>
)
N_USData.indication服务由网络层发出, 用于指示分段报文接收完成,或在接收到单帧(SF)报文后发出。
如果网络层检测到单帧(SF)中任何类型的错误,那么该报文应被网络层忽略,并且不应向上层发出N_USData.indication服务调用。
5.2.5 N_ChangeParameters.request
该服务原语用于请求更改本地协议实体上的内部参数值。<Parameter_Value> 被赋值给<Parameter>(参见5.3中的参数定义)。
除了从接收到首帧开始直到相应报文接收结束这段时间之外,参数总是可以修改的。
N_ChangeParameter.request (
Mtype
N_SA
N_TA
N_TAtype
N_AE(可选)
<Parameter>
<Parameter_Value>
)
这是一个可选的服务,可以通过固定参数值的实现来替换。
5.2.6 N_ChangeParameter.confirm
该服务原语用于确认N_ChangeParameters.request服务的完成。
N_ChangeParameter.confirm (
Mtype
N_SA
N_TA
N_TAtype
N_AE(可选)
<Parameter>
<Result_ChangeParameter>
)
5.3 网络层服务数据单元规范
参数 | 类型 | 范围 | 描述 |
---|---|---|---|
Mtype | 枚举类型 | diagnostics、remote diagnostics | 如果Mtype = diagnostics,则地址信息N_AI由参数N_SA、N_TA和N_TAtype组成。如果Mtype = remote diagnostics,则地址信息N_AI由参数N_SA、N_TA、N_TAtype和N_AE组成。 |
N_SA | 1字节无符号整数 | 0x00-0xFF | N_SA代表了发送方网络层实体 |
N_TA | 1字节无符号整数 | 0x00-0xFF | N_TA代表了接收方网络层实体 |
N_TAtype | 枚举 | physical、functional | 参数N_TAtype是N_TA参数的扩展。用于指定两种通信模型:1对1通信,称为物理寻址;1对n通信,称为功能寻址。所有类型的网络层报文都应支持物理寻址。功能寻址应只支持单帧(SF)通信 |
N_AE | 1字节无符号整数 | 0x00-0xFF | N_AE参数用于扩展大型网络的可用地址范围。如果Mtype设置为remote diagnostics,N_AE将作为寻址信息的一部分 |
<Length> | 12比特 | 1-4095 | 该参数包含要发送/接收的数据长度 |
<MessageData> | 字符串 | N/A | 该参数包含上层实体交换的所有数据 |
<Parameter> | 枚举类型 | STmin, BS | 该参数标识网络层的一个参数 |
<Parameter_Value> | 1字节无符号整数 | 0-255 | 赋给参数< parameter >的值 |
<N_Result> | 枚举类型 | 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 | 此参数包含与服务执行结果相关的状态。如果同时发现两个或两个以上的错误,则网络层实体应使用在该列表中最先发现的参数值向更高层进行错误指示 |
<Result_ChangeParameter> | 枚举类型 | N_OK, N_RX_ON, N_WRONG_PARAMETER, N_WRONG_VALUE | 此参数包含与服务执行结果相关的状态 |
- N_OK: 此值表示服务执行已成功完成。它可以发给发送方和接收方的服务用户。
- N_TIMEOUT_A :当定时器N_Ar/N_As超过其超时值N_Asmax/N_Armax时,N_TIMEOUT_A被发送给服务用户。它可以发给发送方和接收方的服务用户。
- N_TIMEOUT_Bs :当定时器N_Bs超过其超时值N_Bsmax时,N_TIMEOUT_Bs被发送给服务用户。它只能发给发送方的服务用户。
- N_TIMEOUT_Cr :当定时器N_Cr超过其超时值N_Crmax时,该值被发送给服务用户。它只能发送给接收方的服务用户。
- N_WRONG_SN :此值在接收到意外序列号(PCI.SN)时发送给服务用户。它只能发送给接收端的服务用户。
- N_INVALID_FS :当在流量控制(FC) N_PDU中接收到无效或未知的FlowStatus值时,该值被发送给服务用户。它只能发送给发送方的服务用户。
- N_UNEXP_PDU:此值在接收到意外的协议数据单元时发送给服务用户。它只能发送给接收端的服务用户。
- N_WFT_OVRN:当接收到的流控WAIT帧超过N_WFTmax时,向服务用户发出此值。
- N_BUFFER_OVFLW:在收到FlowStatus = OVFLW的流控(FC) N_PDU时,该值被发送给服务用户。它表示分段报文传输过程中,接收端缓冲器无法存储首帧中(FF_DL)参数指定的字节数据,因此分段报文的传输被中止。它只能发送给发送方的服务用户。
- N_ERROR :这是一般的错误值。当网络层检测到错误并且没有其他参数值可以用来更好地描述该错误时,该错误值将被发送给服务用户。它可以发送给发送方和接收方的服务用户。
- N_RX_ON :该值被发送给服务用户用来指示:由于正在接收报文,服务不能执行。它只能发送给接收端的服务用户。
- N_WRONG_PARAMETER :此值被发送给服务用户用来指示:由于未定义的,进而服务不能执行; 它可以发送给接收方和发送方的服务用户。
- N_WRONG_VALUE:此值被发送给服务用户用来指示:由于<Parameter_Value>超出范围,进而服务不能执行; 它可以发送给接收方和发送方的服务用户。
6. 网络层协议
6.1 协议功能
网络层协议执行以下功能:
a) 发送或接收最多4095数据字节的报文。
b) 报告发送或接收的完成情况(成功或失败)。
6.2 单帧传输
在扩展或混合寻址的情况下,通过SF N_PDU(见6.4节)最多传输或接收6字节数据的报文;在正常寻址的情况下,通过SF N_PDU最多传输或接收7字节数据的报文。
6.3 多帧传输
较长报文的传输是通过将报文分段成多个N_PDU来完成。较长报文的接收是通过接收多个N_PDU和重组来执行的。较长报文的长度信息包含在FF N_PDU中。所有CF N_PDU都由发送方编号,以帮助接收方以相同的顺序进行重组。
在扩展或混合寻址的情况下,超过6个数据字节的报文被分为:首帧(含5个数据字节)与一个或多个连续帧(每个连续帧含6个数据字节,)。
在常规寻址的情况下,超过7个数据字节的报文被分为:首帧(含6个数据字节)与一个或多个连续帧(每个连续帧含7个数据字节)。
接收方可以通过使用FC N_PDU的流量控制机制来调整传输吞吐量以适应其自身的能力。
BlockSize (BS) : 接收方允许发送方发送的连续帧的最大数量。
SeparationTimeMin (STmin) : 发送方在两个连续帧传输之间等待的最小时间间隔。
除最后一个块外,所有块都将由BS数量的连续帧组成,最后一个块将包含剩余的连续帧,数量小于或等于BS。通过流控帧接收方可以延迟发送方的的传输或在发送方传输的字节数超过接收方缓冲区中可存储的字节数时拒绝接收分段报文。
FC.CTS : 授权发送方继续发送。
FC.WAIT: 请求发送方继续等待。
FC.OVFLW: 缓冲区溢出。表明分段报文的首帧中指定的字节数超过了接收实体的缓冲区中可以存储的字节数。
6.4 网络层协议数据单元
6.4.1 协议数据单元类型
不同节点的网络层对等协议实体之间的通信是通过交换N_PDU来完成的。
ISO 15765-2这一部分规定了四种不同类型的网络层协议数据单元 : 单帧(SF N_PDU)、第一帧(FF N_PDU)、连续帧(CF N_PDU)和流控制(FC N_PDU),它们用于在对等网络层实体之间建立通信路径、交换通信参数、传输用户数据和释放通信资源。
6.4.2 SF N_PDU
SF N_PDU由单帧协议控制信息(SF N_PCI)标识。SF N_PDU由发送网络实体发出,可以被一个或多个接收网络实体接收。发送它是为了将可以通过单个服务请求传输的服务数据单元传输到数据链路层,并传输未分段的报文。
6.4.3 FF N_PDU
FF N_PDU由第一帧协议控制信息(FF N_PCI)标识。在分段报文传输期间,FF N_PDU由发送网络实体发出,由唯一的接收网络实体接收。它标识由网络发送实体发送、接收网络实体接收的分段报文的第一个N_PDU。接收网络层实体在收到FF N_PDU后开始重组分段报文。
6.4.4 CF N_PDU
CF N_PDU由连续帧协议控制信息(CF N_PCI)标识。发送实体在FF N_PDU之后发送的所有N_PDU都编码为CF N_PDUs。接收实体在接收到最后一个CF N_PDU后,将重组后的报文传递给网络接收实体的服务用户。在分段报文传输期间,CF N_PDU由发送网络实体发出,由唯一的接收网络实体接收。
6.4.5 FC N_PDU
FC N_PDU由流控协议控制信息(FC N_PCI)标识。FC N_PDU指示发送网络实体开始、停止或恢复CF N_PDUs的传输。接收网络层实体在正确接收到一个FF N_PDU后,或者正确接收到连续帧块的最后一个CF N_PDU后,将其发送给发送网络层实体。FC N_PDU还可以通知发送网络实体,在分段报文传输过程中暂停CF N_PDU的传输,或者如果发送实体发送的FF N_PDU中的长度信息(FF_DL)超过接收实体的缓冲区大小,则终止分段报文的传输。
6.4.6 协议数据单元字段描述
所有N_PDU都由三个字段组成,如下表所示。
地址信息 | 协议控制信息 | 数据字段 |
---|---|---|
N_AI | N_PCI | N_Data |
N_AI:N_AI用于识别网络层的通信对等实体。在N_SDU中接收到的N_AI信息(N_SA、N_TA、N_TAtype、N_AE(可选))应被复制并被包含在N_PDU中。如果N_SDU接收到的报文数据(<MessageData>和 <Length>)太长以至于网络层需要进行分段才能传输完整的报文,则需要复制N_AI,并将其包含在每个传输的N_PDU中。该字段包含标识交换的报文类型的地址信息,以及进行数据交换的接收方和发送方。地址信息由报文地址组成。
N_PCI : 该字段标识交换的N_PDU的类型。它还用于在通信网络层实体之间交换其他控制参数。
N_PCI的所有参数的详细规范参见6.5节。
N_Data :N_PDU中的N_Data用于发送在N_USData.request服务调用中 参数中接收到的服务用户数据。如果需要, 被分割成更小的部分,每个部分在通过网络传输之前都适合N_PDU数据字段。N_Data的大小取决于N_PDU类型和选择的地址格式。
6.5 协议控制信息规范
6.5.1 N_PCI
每个N_PDU由一个N_PCI标识,见下表。
6.5.2 SF N_PCI参数定义
单帧的数据长度 (SF_DL)用于在SF N_PDU中指定服务用户数据字节数。SF_DL值定义如下表。
SF_DL值(十六进制) | 描述 |
---|---|
0 | 保留 |
1-6 | SF_DL编码在N_PCI第一个字节的低四位。SF_DL的值将赋给服务参数<Length> |
7 | SF_DL = 7只允许在常规寻址下使用 |
8-F | 此值范围无效 |
如果网络层收到一个SF_DL等于0的SF N_PDU,或在常规寻址下网络层收到SF_DL大于7的SF N_PDU,或扩展寻址或混合寻址下网络层接收到SF_DL大于6的SF N_PDU,则网络层忽略收到的这些SF N_PDU。
6.5.3 FF N_PCI参数定义
FF_DL参数用于FF N_PDU中指定服务用户数据字节数。FF_DL值定义如下表。
FF_DL值(十六进制) | 描述 |
---|---|
0-6 | 不合理,因为单帧就可传输 |
7 | FF_DL = 7只允许在扩展或混合寻址使用 |
8-FFF | 该值将赋给服务参数<Length> 。支持的最大分段报文的数据字节长度等于4095 |
如果网络层接收到一个FF_DL大于接收方可用缓冲区大小的FF N_PDU,则认为这是一个错误条件。网络层中止接收报文,发送一个参数为FlowStatus = Overflow的FC N_PDU。
如果网络层接收到FF_DL小于8的FF N_PDU(在常规正常寻址时)或小于7的FF N_PDU(在扩展寻址或混合寻址时),则网络层忽略接收到的FF N_PDU,不发送FC N_PDU。
6.5.4 CF PCI 参数定义
SN参数用于指定连续帧的顺序。所有分段报文的SN都以0开头。FF在N_PCI字段中不包含显式的SN,但隐士地将FF的SN赋值为0。紧挨着FF的第一个CF的SN设置为1。在分段报文传输过程中,每传输一个新的CF, SN加1。SN值不受FC帧的影响。当SN值达到15时,下一条CF中的SN将置0。SN值定义见下表。
N_PDU | FF | CF | CF | CF | CF | CF | CF | CF |
---|---|---|---|---|---|---|---|---|
SN值 | 0 | 1 | … | E | F | 0 | 1 | … |
SN值(十六进制) | 描述 |
---|---|
0-F | SN的取值范围为0 ~ 15,SN编码在CF N_PCI第一个字节的低四位 |
如果收到序列号错误的CF N_PDU报文,则网络层中止接收报文并调用N_USData.indication服务(参数 <N_Result> = N_WRONG_SN)指示上层。
6.5.5 FC P_PCI参数定义
FS值定义如下表。
FS值(十六进制) | 描述 |
---|---|
0 | ContinueToSend (CTS) :该值表示接收方已准备好接收最多BS数量的连续帧,它将导致发送方继续发送连续帧 |
1 | Wait (WT) : 该值将导致发送方继续等待一个新的FC N_PDU,并重新启动其N_Bs定时器 |
2 | Overflow (OVFLW) :该值将导致发送方中止分段报文的传输,并产生一个N_USData.confirm服务调用(参数<N_Result>=N_BUFFER_OVFLW。这个FS参数值只允许接收方在接收到在FF N_PDU之后传输,并且只在FF_DL超过接收实体的缓冲区大小的情况下使用 |
3-F | 保留 |
如果收到带有无效(保留)FS参数值的FC N_PDU报文,则网络层需要终止报文传输,并且网络层产生N_USData.confirm服务调用(参数<N_Result> = N_INVALID_FS )通知向相邻上层。
BS值定义如下表。
BS值(十六进制) | 描述 |
---|---|
00 | BS参数值为0表示在分段报文的传输过程中不再发送FC帧。接收方告诉发送方网络层实体应发送所有剩余的连续帧 |
01-FF | 这个范围的BS参数值表示发送方可以发送给接收方的连续帧的最大数量 |
STmin参数由接收实体指定,在分段报文传输期间由发送网络实体保存。STmin参数值指定连续帧传输之间允许的最小时间间隔。STmin参数定义如下表。
STmin值(十六进制) | 描述 |
---|---|
00-7F | 0ms-127ms,STmin在00- 7F范围内的单位是绝对毫秒(ms) |
80-F0 | 保留 |
F1-F9 | STmin在F1- F9范围内的单位是100微秒(µs),其中参数值F1表示100µs,参数值F9表示900µs |
FA-FF | 保留 |
STmin的测量在连续帧(CF)传输完成后开始,并在请求传输下一个CF时结束。如果接收到保留的ST值的FC N_PDU报文,则发送网络实体应使用7F(127ms)。
6.6 FC.WAIT帧传输的最大数量(N_WFTmax)
N_WFTmax的目的是避免在出现故障时,通信发送方节点持续等待。该参数是通信对等实体的本地参数,不传输,因此不属于FC N_PDU的一部分。N_WFTmax参数表示接收端每次可以发送多少个FS值为1的FC N_PDU。N_WFTmax参数上限由用户在系统生成时自定义。N_WFTmax参数只能在接收报文的网络实体上使用。如果N_WFTmax参数值设置为零,则FS值1的FC N_PDU不被该网络实体使用。
6.7 网络层定时
6.7.1 定时参数
网络层定时参数值见下表。根据数据链路层服务定义了网络层定时参数值及其对应的起始和结束位置。性能要求值是每个通信对等点必须满足的。某个应用程序可能在表中定义的范围内定义特定的性能要求。
定时参数 | 描述 | 数据链路层服务(Start) | 数据链路层服务(End) | Timeout(ms) | 性能要求(ms) |
---|---|---|---|---|---|
N_As | 发送端CAN帧(任意N_PDU)的传输时间 | L_Data.request | L_Data.confirm | 1 000 | N/A |
N_Ar | 接收端CAN帧(任意N_PDU)的传输时间 | L_Data.request | L_Data.confirm | 1 000 | N/A |
N_Bs | 从FF N_PDU或CF N_PDU发送完毕开始直到下一个FC N_PDU接收完毕的时间 | L_Data.confirm (FF), L_Data.confirm (CF), L_Data.indication (FC) | L_Data.indication (FC) | 1000 | N/A |
N_Br | 从FF N_PDU或CF N_PDU接收完毕开始直到下一个FC N_PDU开始发送的时间 | L_Data.indication (FF), L_Data.confirm (FC) | L_Data.request (FC) | N/A | (N_Br + N_Ar) < (0.9 * N_Bs timeout) |
N_Cs | 从接收完FC N_PDU或发送完CF N_PDU开始直到下一个CF N_PDU开始发送的时间 | L_Data.indication (FC), L_Data.confirm (CF) | L_Data.request (CF) | N/A | (N_Cs + N_As) < (0.9 *N_Cr timeout) |
N_Cr | 从发送完FC N_PDU或接收完CF N_PDU开始直到下一个连续帧N_PDU接收完毕的时间 | L_Data.confirm (FC), L_Data.indication (CF) | L_Data.indication (CF) | 1000 | N/A |
6.7.2 网络层超时
下表定义了网络层超时类别、超时的原因和超时后网络层采取的行动。
Timeout | Cause | Action |
---|---|---|
N_As | 发送端未及时发送FF N_PDU或CF N_PDU | 中止报文传输并发出N_USData.confirm服务调用(<N_Result> = N_TIMEOUT_A) |
N_Ar | 接收端未及时发送FC N_PDU | 中止报文接收并发出N_USData.indication服务调用(<N_Result> = N_TIMEOUT_A) |
N_Bs | 发送端未收到FC N_PDU(由于丢失或覆盖)或接收端未收到之前的FF N_PDU或CF N_PDU(由于丢失或覆盖) | 中止报文传输并发出N_USData.confirm服务调用(<N_Result> = N_TIMEOUT_Bs) |
N_Cr | 接收端未收到 FC N_PDU(由于丢失或覆盖)或发送端未收到先前的FC N_PDU(由于丢失或覆盖) | 中止报文接收并发出N_USData.indication服务调用(<N_Result> = N_TIMEOUT_Cr) |
超时值(Timeout)被定义为高于性能要求的值,以确保系统正常工作,并克服绝对无法满足性能要求的通信条件(例如高总线负载)。指定的超时值应被视为任何给定实现的下限。实际超时不应低于指定的超时值+50%。
6.7.3 意外到达的N_PDU
一个意外的N_PDU被定义为一个节点收到了超出预期顺序的N_PDU,它可能是ISO 15765-2本部分定义的N_PDU (SF N_PDU, FF N_PDU, CF N_PDU或FC N_PDU),或者它可能是一个未知的N_PDU,无法通过本文档给出的定义进行解释。
根据网络层的设计,支持全双工或半双工通信,为此对“意外”的解释不同 : a)对于半双工,两个节点之间的点对点通信一次只能在一个方向上进行 ; b)使用全双工,两个节点之间的点对点通信可以同时在两个方向上进行。
除了网络层的设计决策外,还必须考虑这样一种可能性,即接收到的未预期的N_PDU中包含了具有相同地址信息(N_AI)。
一般来说,除了SF N_PDU和物理寻址的FF N_PDU外,任何节点的意外N_PDU都应该被忽略;功能寻址的第一帧将被忽略。当指定的动作是忽略意外的N_PDU时,这意味着网络层不通知上层。
考虑到实际的网络层内部状态(NWL状态)和支持半双工或全双工通信的设计决策,下表定义了接收到意外的N_PDU时网络层的行为。
6.7.4 等待帧错误处理
当接收端连续发送了N_WFTmax数量的FC N_PDU(其中FS的值为1)并且在此之后不能满足传输一个FC N_PDU(其中FS的值为0)要求时,接收端应中止报文接收,并发出一个N_USData.indication服务调用(<N_Result> =N_WFT_OVRN)给更高层。发送方应中止报文接收,并发出N_USData.confirm服务调用,其参数<N_Result> 设置为N_TIMEOUT_Bs(由于接收端缺少FC N_PDU,发送端发生N_Bs超时)。
6.8 报文交错
网络层协议应能够对未映射到同一N_AI上的不同消息进行并行传输。这对于确保接收端能够以一致的方式重组接收到的网络协议数据单元是必要的。例如,该方案支持网关操作,该操作需要在不同的子网中同时处理不同的报文传输。
7. 数据链路层用法
7.1 数据链路层接口服务
7.1.1 L_Data.request
该服务原语请求传输<Data>,该<Data>应映射到通过<Identifier>选择的数据链路协议数据单元的特定属性中。<Identifier>应提供用于传输<Data>的特定寻址格式的参考:
L_Data.request (
<Identifier>
<DLC>
<Data>
)
7.1.2 L_Data.confirm
该服务原语确认特定<Identifier>的L_Data.request服务的完成。为特定的<标识符>请求服务。参数<TransferStatus>提供了服务请求的状态:
L_Data.confirm (
<Identifier>
<TransferStatus>
)
7.1.3 L_Data.indication
该服务原语向相邻的上层指示数据链路层事件,并传递由<Identifier>标识的< Data >:
L_Data.indication (
<Identifier>
<DLC>
<Data>
)
7.2 数据链路层服务参数
以下数据链路层服务参数在ISO 11898-1中定义 :
<Identifier> : CAN标识符
<DLC> : 数据长度码
<Data> : CAN帧数据
<TransferStatus> : 传输状态
7.3 N_PDU字段的映射
7.3.1 寻址格式
网络层数据的交换由三种寻址格式支持:普通寻址、扩展寻址和混合寻址。每种寻址格式需要不同数量的CAN帧数据字节来封装与要交换的数据相关联的寻址信息。因此,在单个CAN帧内传输的数据字节数取决于所选择的寻址格式的类型。7.3.2节至7.3.5节基于ISO 11898-1中定义的数据链路层服务和服务参数,指定了每种寻址格式的映射机制。
7.3.2 常规寻址
对于N_SA、N_TA、N_TAtype和Mtype的每一个组合,都分配一个唯一的CAN标识符。N_PCI和N_Data放在CAN帧数据字段中。见下表19。
7.3.2 常规固定寻址
常规固定寻址是常规寻址的一个子格式,其中地址信息N_AI到CAN标识符的映射被进一步定义。如上所述,在常规寻址的一般情况下,N_AI和CAN标识符之间的对应关系是开放的。对于常规固定寻址,只允许使用29位CAN标识符。表20和表21定义了地址信息N_AI到CAN标识符的映射,这取决于目标地址类型N_TAtype。N_PCI和N_Data放在CAN帧数据字段中。
7.3.4 扩展寻址
对于N_SA、N_TAtype和Mtype的每一个组合,都分配一个唯一的CAN标识符。N_TA位于CAN帧数据字段的第一个数据字节。N_PCI和N_Data放在CAN帧数据字段的剩余字节中。
7.3.5 混合寻址
混合寻址是当Mtype设置为远程诊断(remote diagnostics)时使用的寻址格式。根据目标地址类型N_TAtype,表23和表24定义了地址信息N_AI到29位CAN标识符的映射方案和第一个CAN帧数据字节的映射。N_PCI和N_Data放在CAN帧数据字段的剩余字节中。
表25定义了地址信息N_AI到11位CAN标识符的映射方案。对于N_SA、N_TA和N_TAtype的每一个组合,都分配一个唯一的CAN标识符。N_AE放在CAN帧数据字段的第一个数据字节中。N_PCI和N_Data放在CAN帧数据字段的剩余字节中。
7.4 CAN帧的数据长度码DLC
7.4.1 DLC参数
DLC参数指定在CAN帧中传输的数据字节数。除了网络层协议数据单元的大小所隐含的要求外,ISO 15765-2 这一部分没有规定任何有关CAN帧中数据字段长度的要求。实现本文档中定义的网络层的应用程序可以将所有CAN帧填充到它们的完整长度(见7.4.2)或将DLC优化到网络层协议数据单元的适用长度(见7.4.3)。
7.4.2 CAN数据填充
DLC总是设置为8。如果要传输的N_PDU小于8字节,则发送方必须将DLC设置为最大值8(填充未使用的数据字节)。特别是对于SF、FC帧或分段报文最后的CF,这种情况可能会发生。CAN帧的DLC参数由发送方设置,接收方读取,以确定由网络层处理的每个CAN帧的数据字节数。DLC参数不能用于确定报文长度,报文长度将从N_PCI中提取。
7.4.3 CAN帧数据优化
DLC并不总是需要8个。如果要传输的N_PDU小于8字节,则发送方可以通过缩短CAN帧数据来优化CAN总线负载,使其只包含N_PDU占用的字节数(不填充未使用的数据字节)。CAN帧数据优化只能用于SF、FC帧或分段报文最后的CF。
7.4.4 DLC错误处理
根据N_PCI值,网络层可以计算接收到的can帧中can DLC参数的最小期望值。接收到的DLC值小于期望值的CAN帧(对于填充CAN帧的应用程序小于8,或者小于优化实现的网络协议数据单元的大小所暗示的值)将被网络层忽略,而不做任何进一步的操作。