CAN总线网络层与传输层的理解(五)

ISO15765-2中定义了网络层和传输层的内容,下面就对这两部分分别进行介绍。

一、网络层

所有网络层的服务都有统一的结构,为了定义服务,有三种服务原语

  • 服务请求原语:服务用户向服务提供方请求服务
  • 服务指示原语:服务提供方向服务用户通知网络层内部事件或对同级协议层实体服务用户的服务请求
  • 服务确认原语:服务提供方向服务用户通知请求服务的结果

所有的网络层服务也有统一的格式,如下:

service_name.type {
                  parameter A,
                  parameter B,
                  [,parameter C,...]
                  }

网络层提供了两种服务

通信服务

1. 数据发送请求

N_USData.request {
                 Mtype
                 N_SA
                 N_TA
                 N_TAtype
                 [N_AE]
                 <MessageData>
                 <Length>
                 }

2. 请求服务确认

N_USData.confirm {
                 Mtype
                 N_SA
                 N_TA
                 N_TAtype
                 [N_AE]
                 <N_Result>
                 }

3. 首帧指示服务

N_USData_FF.indication {
                       Mtype
                       N_SA
                       N_TA
                       N_TAtype
                       [N_AE]
                       <Length>
                       }

用于把接收到的分段报文的首帧发送给上层,如果首帧发现任何错误,那么整个报文都将被忽略;如果数据长度(FF_DL)大于接收方可用的缓冲区,也会被认为是一个错误。

4. 数据指示服务

N_USData.indication {
                    Mtype
                    N_SA
                    N_TA
                    N_TAtype
                    [N_AE]
                    <MessageData>
                    <Length>
                    <N_Result>
                    }

用于给上层提供接收到的数据。

协议参数配置服务

1. 参数配置请求服务

N_ChangeParameter.request {
                          Mtype
                          N_SA
                          N_TA
                          N_TAtype
                          [N_AE]
                          <Parameter>
                          <Parameter_Value>
                          }

用于对特定内部参数的动态配置请求。

2. 参数配置确认服务

N_ChangeParameter.confirm {
                          Mtype
                          N_SA
                          N_TA
                          N_TAtype
                          [N_AE]
                          <Parameter>
                          <Result_ChangeParameter>
                          }

用于向上层确认修改特定协议的请求已经完成(成功与否)。

3. Service Data Unit(SDU):

Mtype —— 报文类型,有两种:

  • (1)Diagnostics型,N_AI(Address Information)包含N_SA,N_TA,和N_TAtype
  • (2)Remote Diagnostics型,N_AI(Address Information)包含N_SA,N_TA,N_TAtype和N_AE

N_AI —— Address Information

(1)N_SA,network source address,长度8位

(2)N_TA,network target address,长度8位

(3)N_TAtype,network target address type,枚举类型

物理寻址:一对一通信,支持网络层所有类型的报文

功能寻址:一对多通信,只支持单帧传输(广播)

(4)N_AE,network address extension,长度8位

<Length> —— 数据长度,长度32位

<MessageData> —— 传输的数据

<Parameter> —— BlockSize,SeparationTime minimum(详情见传输层)

<Parameter_Value> —— BlockSize,SeparationTime minimum的值,长度8位

<N_Result> —— 服务执行结果,枚举类型

(1)N_OK:服务执行成功

(2)N_TIMEOUT_A:超过时间N_Asmax/N_Armax

(3)N_TIMEOUT_Bs:超过时间N_Bsmax

(4)N_TIMEOUT_Cr:超过时间N_Crmax

(5)N_WRONG_SN:接收到非预期序列号(PCI.SN)

(6)N_INVALID_FS:流控帧接收到无效的状态

(7)N_UNEXP_PDU:接收到非预期的PDU

(8)N_WFT_OVRN:接收方在流控帧中发出等待状态

(9)N_BUFFER_OVFLW:接收方在流控帧中发出溢出状态

(10)N_ERROR:网络层发现除上述错误之外的错误

<Result_ChangeParameter> —— 修改参数配置结果,枚举类型

(1)N_OK:服务执行成功

(2)N_RX_ON:服务没有执行

(3)N_WRONG_PARAMETER:参数没有定义

(4)N_WRONG_VALUE:参数值超出范围

二、传输层

2.1 传输层的功能:

(1)传送/接收报文

(2)报告传送/接收报文的结果

2.2 传输的数据分为:

2.2.1 单帧传输(SingleFrame transmission)

2.2.2 多帧传输(Multiple-frametransmission)

2.2.2.1 多帧包含:

① 首帧(First Frame)

② 连续帧(Consecutive Frame)

接收端通过流控机制(FlowControl)防止传输过程中帧丢失,在缓冲区已满时,接收端发送流控帧(FlowControl Frame)通知发送端暂时先不要发报文。

2.2.2.1.1  流控帧(FlowControl Frame)包含以下两个内容:

  • (1)BlockSize(BS):接收端缓冲区一次性可接收的最大字节数
  • (2)SeparationTime minimum(STmin):发送连续帧时,帧之间的最小时间间隔

2.2.2.1.2 流控机制(Flow Control)的两种模式:

  • (1)动态:BS和STmin会有更新
  • (2)静态:BS和STmin为常数

2.2.2.1.3 接收段缓冲区存储以下状态来控制连续帧(Consecutive Frame)的发送:

  • (1)FC.CTS:可以继续发送
  • (2)FC.WAIT:需要等待
  • (3)FC.OVFLW:首帧(FirstFrame)的字节数超过了缓冲区可存储字节大小

2.2.2.2 传输层PDU(Protocol Data Unit):
 

N_PDU格式

(1)N_AI:Address Information,参见本章小节(网络层)内容

(2)N_PCI:Protocol Control Information,定义了发送的N_PDU是哪一种帧

(3)N_Data:需要发送的数据

三、总结

本文参考的标准是ISO15765-2:2016(E),与旧版相比又有所扩充,并且把协议分成了网络层和传输层两部分。网络层提供了交换报文的地址信息,决定帧的接收端和发送端;传输层则主要在于帧的传输机制及多帧的拆分,协议后面还讲了四类帧的错误处理机制,这里没有讲,感兴趣的可以自行研究一下。以上均是笔者自己的理解,如有错误欢迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章