前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CAN通信协议栈(三)之对ISO15765-2的理解

CAN通信协议栈(三)之对ISO15765-2的理解

作者头像
xbai921031
发布2022-05-25 14:58:16
1.4K0
发布2022-05-25 14:58:16
举报
文章被收录于专栏:汽车软件工程师

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

1 网络层

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

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

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

代码语言:javascript
复制
service_name.type {
                  parameter A,
                  parameter B,
                  [,parameter C,...]
                  }

网络层提供了两种服务

  • 通信服务

(1)数据发送请求

代码语言:javascript
复制
N_USData.request {
                 Mtype
                 N_SA
                 N_TA
                 N_TAtype
                 [N_AE]
                 <MessageData>
                 <Length>
                 }

(2)请求服务确认

代码语言:javascript
复制
N_USData.confirm {
                 Mtype
                 N_SA
                 N_TA
                 N_TAtype
                 [N_AE]
                 <N_Result>
                 }

(3)首帧指示服务

代码语言:javascript
复制
N_USData_FF.indication {
                       Mtype
                       N_SA
                       N_TA
                       N_TAtype
                       [N_AE]
                       <Length>
                       }

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

(4)数据指示服务

代码语言:javascript
复制
N_USData.indication {
                    Mtype
                    N_SA
                    N_TA
                    N_TAtype
                    [N_AE]
                    <MessageData>
                    <Length>
                    <N_Result>
                    }

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

  • 协议参数配置服务

(1)参数配置请求服务

代码语言:javascript
复制
N_ChangeParameter.request {
                          Mtype
                          N_SA
                          N_TA
                          N_TAtype
                          [N_AE]
                          <Parameter>
                          <Parameter_Value>
                          }

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

(2)参数配置确认服务

代码语言:javascript
复制
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)

图1 单帧发送示意

(2)多帧传输(Multiple-frame transmission)

图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格式

图3 N_PDU格式

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

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

图4 N_PCI定义

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

还有些参数含义在之前文章中也介绍过,这里就不讲了,详情请戳链接

如何读懂UDS诊断报文

3

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击的程序喵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档