本文内容是查看有关15765协议的文章外加自己的理解整理出来的,感兴趣的可以浏览学习。
1 目的
为解决ISO 11898和ISO 14229协议彼此之间数据长度不统一的问题。即对I-PDU进行分段和重组,使得I-PDU长度不大于8个字节,对CAN FD而言,I-PDU长度不大于64个字节,数据转换成了能适应CAN总线规范的单一数据帧。因此,ISO 15765协议也是对CAN总线数据帧中数据段格式的描述。
ISO 14229协议—4095个字节
ISO 11898协议—8个字节
2 名词
名词 | 解释 |
---|---|
CanTp(CAN Transport Layer) | CAN传输模块 |
OBD(On-board diagnostics) | 车载诊断系统 |
UDS(Unified diagnostic services) | 统一诊断服务 |
CAN(controller area network) | CAN总线 |
CTS(continue to send) | 继续发送 |
DoCAN(diagnostic communication over CAN) | 基于CAN的诊断通信 |
SN(sequence number) | 序号 |
BS(block size) | 块大小 |
FS(flow state) | 流状态 |
payload | 有效载荷,数据包中的有效数据 |
3 原理
3.1 引用ISO 15765协议
诊断服务是基于CAN总线实现,而当诊断数据大于8字节时(CAN帧数据段8字节),无法适应CAN总线传输,因此在传输层(CANTP)引入ISO 15765协议,该协议规定了寻址格式、帧类型、流控以及数据传输的时间管理。
3.1.1 寻址格式
传输层的数据包N_PDU格式:N_AI + N_PCI + N_Data
而将N_PDU映射到CAN数据帧的不同位置,可以形成4种寻址格式,根据在数据段的占位又划分为2组(常规 扩展/混合),其区别在于数据长度不同,如下:
关于CANID占位情况:
常规寻址–11 bit
常规固定寻址–29 bit
应用于远程诊断,不常用:
扩展寻址–11 bit
混合寻址–11或29 bit
3.1.2 帧类型
重点N_PCI(唯一)可用于区分其他CAN总线抽象协议,将TP层报文分为单帧(SF)和多帧:首帧(FF)、流控帧(FC)、连续帧(CF)。CAN总线上的数据帧每帧数据段占8个字节,由于PCI的位置与构成,接收数据端可以分析出数据帧类型。
下面以常规寻址举例说明帧类型构成:
3.1.3流控
主要看流控帧FC,当接收方收到并解析FF时,会根据自身条件判断(如:接收数据缓存大小、接收数据快慢能力、当前是否可以接收数据等),向发送方回复一帧FC以达到对后续数据传输的控制。
备注:
①FC只有3个字节的控制信息,无数据字节(即剩余5个字节填无效数据)
②FS有:
③BS用来设置最大连续帧数目:(体现了接收方的接收能力)
0 -> 接收方向发送端告知:接收端后续将不会再发送流控帧响应,发送端也不需要等待FC,发送端直接发送余下的连续帧数据;
01~FF -> 接收方向发送端告知:接收端能接收的连续帧的数量,之后要等待接收端的FC,单位:数据帧。
④STmin表示发送方发送的2个CF之间需要的最小时间间隔。体现了接收方的处理能力,处理CAN接收的速度。
3.1.4网络层传输时间控制分析
三种服务原语:请求服务(request) 指示服务(indication) 确认服务(confirm)
网络层时间管理是为了保证S和R不会因为等待而永久挂起从而失去通信能力,因此设定时间参数(N_As \ N_Ar \ N_Bs \ N_Br \ N_Cs \ N_Cr),具体如下:
根据这个传输流程可以得到诊断报文的传输延迟公式:
T = N_As + N_Bs + N_Cr - Tan + (Ttan + STmin)N - STmin
3.1.5 网络层错误处理
- 数据帧格式错误识别与处理
- 超时识别与处理
- 非预期识别与处理
网络层检测到错误时:
①SF_DL错误:SF_DL = 0 / SF_DL > 7(常规寻址)
接收方网络层会忽略接收到的单帧,且接收方无indication,即接收方不会向上层上报任何内容,双方均无报错。
区别:
以发送10 01举例,正常应该发送02 10 01 ***
发送08 10 01 ***:接收方检查出错误,直接忽略这帧;
发送04 10 01 ***:接收方将数据传输到应用层,但对于10服务只能是10 01两个字节,所以会在应用层报错,给出7F响应。
②FF_DL错误
1)FF_DL>接收方缓存,那么接收方网络层应中断报文接收,接收方发送FC,其中FS = overflow,接收方无indication;
2)FF_DL < 8,网络层忽略FF,接收方无indication,且不发送FC;
③SN错误
CF N_PDU中的SN错误,报文接收应被中断,接收方网络层应指示上层
Result= N_WRONG_SN;
④N_WFTmax
是接收方最多连续发送多少个等待FC帧个数,本地变量,仅可以在多包报文发送过程中接收方网络实体中定义,系统初始化时应设置正确,使用这个变量用于避免发送方节点一直处于等待FC状态。
当连续发送的FC个数达到N_WFTmax,发送方将不认可发送过来的FC,再等待一个超时之后报错并跳出等待FC状态。
⑤ST错误
发送方接收到的STmin设置的是保留值时,CF之间的间隔将被设置为协议最大值(7F-127ms),发送方和接收方也不会向各自上层报告错误。