autosar can协议栈 源码解读_CAN通信协议栈(三)之对ISO15765-2的理解

本文深入解析了ISO15765-2协议,包括网络层的服务原语、通信服务和协议参数配置服务,以及传输层的功能、多帧传输和流控机制。网络层提供了数据发送和接收服务,而传输层则负责帧的传输和控制。
摘要由CSDN通过智能技术生成

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

1.网络层

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

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

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

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>
                          }

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

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)传送/接收报文

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

传输的数据分为:

(1)单帧传输(SingleFrame transmission)

cc0361bfe6eb5f80ddeecf184a57a21f.png
图1 单帧发送示意

(2)多帧传输(Multiple-frametransmission)

fbf412cde74ef30832177ac4cd83bf78.png
图2 多帧发送示意

多帧包含:

(1)首帧(FirstFrame)

(2)连续帧(ConsecutiveFrame)

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

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

(1)BlockSize(BS):接收端缓冲区一次性可接收的最大字节数

(2)SeparationTime minimum(STmin):发送连续帧时,帧之间的最小时间间隔

流控机制(FlowControl)的两种模式:

(1)动态:BS和STmin会有更新

(2)静态:BS和STmin为常数

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

(1)FC.CTS:可以继续发送

(2)FC.WAIT:需要等待

(3)FC.OVFLW:首帧(FirstFrame)的字节数超过了缓冲区可存储字节大小

传输层PDU(Protocol Data Unit):

  • N_PDU格式

2c6cb49fad3022bda73a4086789feb33.png
图3 N_PDU格式

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

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

63b4361d2c05d37a34dd7611184b0c5e.png
图4 N_PCI定义

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

还有些参数含义在公众号文章中也介绍过(^.^欢迎订阅公众号:进击的程序喵),这里就不讲了,详情请戳链接:

如何读懂UDS诊断报文​mp.weixin.qq.com
9b124fc945ca496a1d1f1c2552be955a.png

3.总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值