从代码角度看CAN网络层协议 ISO 15765-2

Posted 蚂蚁小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从代码角度看CAN网络层协议 ISO 15765-2相关的知识,希望对你有一定的参考价值。

相关文章

从代码角度看CAN网络层协议 ISO 15765-2 (二)


前言

  • 测试软硬件环境:
    CANoe 11 SP2
    Win10 X64
    ISO 15765-2 -2016

  • 由于不同类型的总线运载数据的能力不同,比如CAN总线协议(包括CAN-FD)最多携带64个字节有效数据;Flexray 总线协议单帧做多携带254个字节有效数据;车载以太网???
    而应用层ISO-14229规范定义单个功能请求传输可以大于4095个字节。所以来自应用层的数据在经过传输层,怎么将这些数据分解成多帧,以适应不同总线类型协议,这便是传输层协议要做的事。
    比如ISO 15765-2 规范了CAN 总线类型TP层的传输协议, 而ISO-10681-2则定义了Flexray 总线协议的传输层规范,今天我们要说的是ISO 15765-2

  • 下图是数据传输的七层结构,ISO 15765-2所在的层级如下图


文章目录


网络层协议数据报文的格式组成


ISO 15765-2 的前面的章节是一些服务原语,理解起来晦涩,从第九章节开始是协议数据单元的格式

N_PDU 的解释:

  • N 是NetWork的缩写,即网络层的意思。
  • PDU:Protocal data unit 即协议数据单元

这种命名方式是标准的惯例,比如 ISO-14229 是 应用层(application),所以也会用A_PDU 表示


Address information(N_AI)

地址信息可以参考下图:


Protocal control information (N_PCI) 协议控制信息

在TP层 ,收到的PDU根据 N_PCI信息 判断PDU类型
如下图,这张图应该是ISO-15765的核心了,当应用层数据多时,TP层会把长报文进行分段传输,根据分段的类型分为4种类型:首帧,流控帧,连续帧,最后帧。


下图的信息比较丰富,标准CAN 的 N_PCI的高4位决定 PDU的类型。后面会逐一讨论

SF 单帧

如上面的Table 9图,单帧根据CAN DL 的长度不同,N_PCI占用的字节数不同,
CAN_DL ≤ 8 (标准CAN):高4位表示 N_PCIType ,低4位表示数据长度,可以最多携带 CAN_DL - 1个数据
CAN_DL > 8 (CAN-FD):第一个字节都表示 N_PCIType ,第二个字节表示数据长度,可以最多携带 CAN_DL - 2个数据


FF 首帧

如上面的Table 9图,首帧根据CAN DL 的长度不同,N_PCI占用的字节数不同,
CAN_DL ≤ 4095 : 需要2个字节表示N_PCI
CAN_DL > 4095 : 需要6个字节表示N_PCI


CF 连续帧

如上面的Table 9图,高4位表示N_PCIType ,低4位表示序列号

  • 序列号从0开始增加(第一个0在首帧里面)
  • 紧接着流控帧的第一帧连续帧,序列号应该是1
  • 序列号增加到15的时候,下一帧序列号是0



FC 流控帧

FlowControl用来调整发送端到接收端网络层的能力。这种流量控制方案允许使用诊断网关和子网

如上面的Table 9图,
第一个字节高4位表示N_PCIType ,低4位表示流控状态 FS ,表示接收方的状态,是否允许继续发送
第二个字节Block Size (BS) 表示 接收方允许发送方在等待授权之前发送的n_pdu的最大数量,以继续发送以下的n_pdu
第三个字节SeparationTime minimum (STmin)表示 发送端在两个CF n_pdu发送之间等待的最小时间。

FS 流控状态

FS是0,表示接收方一切正常,发送方可以继续发送连续帧
FS是1,表示接收方有点吃不消,发送方等一会(一个N_BS timer时间)再发送连续帧
FS是2,表示接收方缓存炸了,发送方你要终止发送

Block Size (BS)

告知发送方可以连续发送多少帧连续帧,一般情况设置为0,表示你发送方有多少数据,我接收方照单全收
如果接收方接受能力不足,可以设置BS为具体值。


STmin 连续帧传输时间间隔

告知发送方 连续帧传输时间间隔 设置为STmin


网络层定时参数(NetWork layer timing)

N_As超时:发送方没有及时发送N_PDU。
N_Ar超时:接收方没有及时发送N_PDU。
N_Bs超时:发送方没有接收到流控帧。
N_Cr超时:接收方没有收到连续帧。
N_Br超时:接收方没有发出流控帧。
N_Cs:即STmin,发送两个连续帧需要等待的最短时间。

总结

本章博客

  • 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
  • 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

以上是关于从代码角度看CAN网络层协议 ISO 15765-2的主要内容,如果未能解决你的问题,请参考以下文章

UDS诊断网络层ISO15765-2(CAN)

网络层协议数据单元-N_PDU(地址格式)

请问汽车can总线分析工具怎么用?

如何看懂UDS诊断报文

关于ISO 15765-2的解读

如何看懂UDS诊断报文