• 常用的缩略词


ISO15765网络层服务

  • 协议功能

  a)发送/接收最多4095个字节的数据信息;

  b)报告发送/接收完成状态。

网络层内部传输服务,CAN总线上的数据帧没帧只能传输8个字节,ISO 为了适应CAN总线上的数据传输,根据诊断报文数据长度的不同规定了单帧传输和多帧传输两种方式。

1.单帧传输

当应用层的诊断服务数据可以利用单帧CAN数据传送时,可采用单帧传送方式(正常地址,数据长度下小于等于7,扩展帧情况下,数据长度小于等于6)

2.多帧传输

多帧传送方式中,网络层根据需要,将诊断数据进行拆分成一个首帧和多个连续帧。首帧(扩展及混合地址-5字节,正常地址-6字节)包括了分段数据的总长度信息以及一些数据帧;每个连续帧的第一个字节包含拆分的顺序编号,后面的七个字节用于存放诊断数据。接收端在接收到连续帧后根据接收数据帧的编号重组服务数据。

对于CAN诊断来说,我们完全可以通过识别每条CAN帧数据域的首个字节来确定它属于四种类型中的哪类。

N_PCI是TP层最为核心的信息,是TP层区别于其他CAN总线抽象协议的、最为显著的特征。

发送端和接收端通过N_PCI(协议控制信息)确认发送或者接收的帧为首帧、流控帧还是连续帧,如表3,表4.

接收端通过对接收到数据帧的第一个字节进行分析就可以得出所接收到的数据帧为何种数据帧,以及所要接收的数据长度

接收的数据第一个字节的高四位为0则表示所接收的数据帧为单帧,再通过读取低四位以确定单帧数据中的有效字节长度

单帧N_PCI参数定义如下表。

接收的数据的第一个字节为高四位为1则表示所接收的数据帧为多帧的首帧。再读取第四位和第二个字节后确认所需要接收的字节数后,根据接收的能力和双方通信的速率发送流控帧,然后等待多帧连续的到来。

接收的数据第一个字节的高四位为2则表示所接收的数据帧为多帧连续帧。然后在对SN连续帧编号之后的数据放入接收缓冲区

CFN PDU中参数SN用以说明连续帧的顺序

对于所有拆分信息,SN开始于0。FF应当分配值0,它不是明确地包含在NPCI域中,但应当按拆分信息顺序号为0。

第一个流控帧编号(SN)后的连续帧设置为1;

在同一个拆分信息上,每一个新增的连续帧编号(SN)增1;

连续帧编号(SN)的值不受流控帧的影响;

当连续帧编号(SN)到达值15时,它在下一个连续帧中重置为0;

顺序编号如下表10所示表11所示SN值。

接收的数据第一个字节的高四位为3,则表示接收的数据帧为流控帧。低四位的FS表示所发送端所需要进行的动作,BS为能够发送连续帧的数据,STmin为每两帧的时间间隔。

网络层时间管理是为了保证发送端和接收端不会因为等待而永久挂起,从而失去通信能力,因此每次通话的过程中设置了超时的时间参数

  • 举例:
单帧 02 10 02 55 55 55 55 55 0表示单帧,2表示长度,10 02表示数据,其他为位填充  
首帧 10 14 2E F1 90 01 02 03 1表示首帧,0+14表示数据长度(20),后面的为数据  
连续帧

21 02 03 04 05 06 07 08

22 09 0A 0B 0C 0D 0E 0F

2表示连续帧,1,2,3…F,0,1,2…  
流控帧 30 02 20 55 55 55 55 55

3表示流控帧,0表示继续发送,02一次允许发送的连续帧个数,

20表示两个连续帧之间的时间间隔为20ms

红色部分为0表示可以无限发送,流控帧只有3个字节,无数据。

根据这个传输流程我们可以得到诊断报文的传输延迟的公式:T=N_As+N_Bs+N_Cr-Tan+(Ttan+STmin)N-STmin

   2019-12-24      11:47:48     Written by 大崔

ISO15765的更多相关文章

  1. ISO 14229 简介 转载

    作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍 ...

  2. ISO14229系列之一:简介

    作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍 ...

  3. SAE J2534 Pass-Thru API

    Connects to the OBDII J1962 DLC and supports the following protocols. 1 CAN2 Single Wire2 J1850PWM+ ...

  4. 汽车总线obd模拟器,obd仿真器,ecu模拟器,obd开发测试工具,可以模拟ecu中的obd协议 MRD-5050

    汽车总线OBD模拟器MRD-5050型号是在车辆越来越趋于网络化的趋势下研发的,是汽车产品开发.调试.生产必备的工具,能为为开发人员节省大量的时间.当前车辆上的总线设备越来越多,有的高端车上甚至多到有 ...

  5. 【转载】 ISO14229系列之一:简介

    转载链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍和总结,既是对自己学习的 ...

  6. CAN学习方法(知乎)

    作者:心机之花链接:https://www.zhihu.com/question/26776219/answer/244433861来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  7. 让Drewtech的J2534 ToolBox 软件支持任何J2534的设备

    更改windows注册表中的FunctionLibrary和ConfigApplication,将DLL和exe路径替换原来的,其他不要动. 或者 create second key in regis ...

  8. SAE J2534介绍

    概要 J2534是一种针对与射频相关的ECU进行闪存编程的概念,而不用考虑ECU使用的通信协议.其目的是所有类型的ECU都应当只需一个工具(硬件设备),通常被称为通过式设备.J2534设备和ECU之间 ...

  9. 嵌入:CAN

    说下我的学习过程.刚到公司的时候我根本不知道什么是CAN,甚至连以太网和串口通讯都不懂.领导把USBCAN分析仪拿给我,把铜线短接上,用软件在CAN1窗口点下发送,CAN2窗口马上接收到了发送出来的数 ...

随机推荐

  1. 【IntelliJ IDEA】从资源文件读取出来就中文乱码的解决方法

    在application.properties资源文件中设置两个自定义的属性以及属性值: com.sxd.name = "德玛西亚" com.sxd.want = "王者 ...

  2. 20-Perl 正则表达式

    1.Perl 正则表达式正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等.Pe ...

  3. javascript——创建对象的方式

    对象:在JavaScript中,对象是拥有属性和方法的数据. JavaScript自定义对象方式有以下7种:直接创建方式.对象初始化器方式.构造函数方法.prototype原型方式.混合的构造函数/原 ...

  4. 爬虫中什么是requests

    print(response.text) #响应的信息 print(response.headers) #获取响应头 print(response.status_code) #响应状态码 print( ...

  5. ES6基础之——get 与 set

    class Chef{ constructor(food){ this.food = food; thid.dish = []; } //getter get menu(){ return this. ...

  6. JavaScript函数式编程——柯里化

    柯里化原理 如何实现柯里化 柯里化的应用 一.柯里化原理 柯里化:在数学和计算机科学中,柯里化是一种使用多个参数的一个函数转换成一系列使用一个参数的函数的技术. 前端使用柯里化的用途主要就应该是简化代 ...

  7. prototype,__proto__,constructor理解

    prototype: 任何函数(箭头函数除外)都具有一个 prototype属性,该属性是一个对象.一般情况下只有声明function的变量才会有(自动生成)prototype这个属性,而functi ...

  8. linux下共享热点抓包

    Linux有一个抓包工具叫tcpdump,这个命令还是挺强大的.简单列举一下它的参数 # tcpdump -h tcpdump version 4.9.2 libpcap version 1.8.1 ...

  9. Google 开源的 Python 命令行库:初探 fire

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  10. python将list元素转为数字

    mask_x = ['11', '12', 13'] 方法1:for循环遍历 mask_x = [int(x) for x in mask_x] 方法2:map迭代 mask_x = list(map ...