作者:心跳包 
来源:CSDN 
原文:https://blog.csdn.net/dop102/article/details/80318141 

ISO 15765协议是一种CAN总线上的诊断协议。其中ISO 15765-1包括物理层和数据链路层,ISO 15765-2对网络层进行说明,ISO 15765-3则是规定到应用层的具体服务。

下面重点看下网络层,根据ISO 15765-2中的定义,网络层的功能是接收到应用层发送过来的消息流后,根据定义中的分包、位填充和时间控制等步骤,对消息流进行控制传输。流控制输有单帧传输、多帧传输两种类型,根据传输数据的长度进行帧传输方式的选择。

相反当接收到来自诊断仪的数据时,网络层完成的是一个组包的过程,这时需要一个可以存放接收的缓冲区。单帧的组包相对简单,而接收到多帧数据则根据接收到的首帧和连续帧的数据域提取,后按照排列顺序重新组合交给上层的应用层。

    ISO 15765网络层的功能主要有:

    (1)为上层的应用层提供接口服务

    (2)进行内部操作。为上层服务提供接口从而实现数据流;主要有为对等实体间的通信提供分段、重组和流控制这几种方法

    (3)网络层中的时间控制。

网络层原语服务分析:

N_PCI 则包含了原语帧的具体信息如:此消息帧属于何种帧类型(单帧、首帧、连续帧)、帧长度等

N_Data为该原语所包含的具体的数据。

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

1.单帧传输

当应用层的诊断服务数据可以利用单帧CAN数据传送时,可采用单帧传送方式

2.多帧传输

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

发送端和接收端通过N_PCI确认发送或者接收的帧为首帧、流控帧还是连续帧,

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

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

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

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

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

网络层时间控制分析

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

N_As:发送端将数据传送到接收端的最大时间

N_Bs:发送端在成功发送首帧后到接收到流控帧的最大时间

N_Br:接收端在接收到首帧后到发送流控制的最大时间。

N_Ar:接收端将流控制传送到发送端的最大时间。

N_Cr :接收端在发送成功流控制后到收到连续帧的最大时间

Ttan:每帧传输时间。

STmin:连续帧之间的最小发送时间间隔。

根据这个传输流程我们可以得到诊断报文的传输延迟的公式:

T=N_As+N_Bs+N_Cr-Tan+(Ttan+STmin)N-STmin

ISO 15765-2相关推荐

  1. ISO 14229、ISO 15765、ISO 11898的区别

    文章目录 前言 ISO 11898 ISO 14229 ISO 15765 ISO 26262 ISO 27145-4 前言 最近在做车载诊断相关的工作,对于ISO 14229一点都不熟悉,开发起来进 ...

  2. ASAM XCP及驱动代码、ISO 11898+CANFD,ISO 14229,ISO 15031,ISO 15765相关标准文档

    ASAM XCP及驱动代码.ISO 11898+CANFD.ISO 14229,ISO 15031,ISO 15765文档(选中对应名称,跳转至相应的文档): 一.ISO_11898 Part1_2_ ...

  3. 怎样学习ISO 14229和ISO 15765?

    一.ISO 14229 UDS协议就是ISO14229,你需要做的就是了解并牢固掌握ISO14229中的内容,但是14229里的内容实在是太多了,还没开始看就头疼了.从作者的学习经历来看,如果从头开始 ...

  4. 基于CAN总线的汽车诊断协议UDS (网络层 ISO 15765)

    上个月一个同事Z跳槽去了德赛西威,Z之前是完全不懂诊断的MCU工程师,去德赛后做诊断开发,让我感觉到,汽车嵌入式行业,CAN和诊断工程师还是比较稀缺的.之前我和Z共同负责一个项目,我负责CAN网络和诊 ...

  5. ISO 11898,14229,15765,UDS的区别?

    UDS UDS(Unified diagnostic services),统一诊断服务,与OBD最大的区别就在于"Unified"上,"统一"这个词意味着它是一 ...

  6. 【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通

                                      [图解UDS]UDS汽车诊断标准协议(ISO 14229)带你入门到精通 目录 为了便于学习ISO 14229 UDS诊断协议,提供 ...

  7. Introduction into ISO 27145 WWH-OBD

    全球统一的重型发动机的车载诊断系统(WWH-OBD) ISO/PAS 27145 is intended to become the single communication standard for ...

  8. 和tp数据库_CAN / CAN FD传输层(TP)详解

    本文分享CAN / CAN FD在TP层传输规则详解,因为是从个人角度解读协议,有不精准之处,希望指出. CAN/CAN FD总线TP层映射到OSI计算机七层模型是在第三层和第四层: 对应CAN Fr ...

  9. 谈谈汽车诊断之KWP2000/ISO14229/ISO15765/SAEJ1939

    最近在研究汽车诊断规范,其中涉及到好几个类似的国际规范,比如KWP2000.ISO-14229.ISO-15765.SAE-J1939等等.有的规范彼此之间相互引用,有的规范却又各自独立,简直就是一团 ...

  10. uds帧格式_如何看懂UDS诊断报文

    UDS介绍 UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它 ...

最新文章

  1. java递归实现数组逆序_Java实现数组全排序(递归)
  2. 为什么mysql与eclipse_为什么这个SQL在MySQL中而不是通过Eclipse执行?
  3. django 获取环境变量_Django 安装和配置环境变量
  4. 刘宇凡:自媒体不是自媒体 应是志媒体
  5. java(系统)实战1
  6. sqlserver操作geography方法
  7. word制作电子签名
  8. php git server,server.php
  9. During a meeting, there was a woman
  10. 详谈Hibernate框架关系映射!
  11. django上课笔记6-MVC,MTV架构-中间件-初识Form组件
  12. win7 操作mysql_win7系统如何设置Mysql密码保护数据库
  13. 从目标文件结构,加载、执行阶段,汇编角度来理解C程序内存分区
  14. 前端面试宝典总结(一)(搬自牛客)
  15. 高通900e驱动变9008_技术驱动的治理变得更加聪明
  16. 电脑录屏软件哪个好?快速录制高清视频的方法是什么?
  17. Iptables实现 DMZ 区域的服务器简单的发布策略
  18. 笔记本win10 64位 1050Ti显卡 安装Anaconda3.4.2.0 (python3.5版)+tensorflow gpu版
  19. js中~~和 | 的使用
  20. HIVE优化系列(1)-- 自动合并输出的小文件

热门文章

  1. adb.exe可能被其他程序关闭_苹果说关闭后台 反而会缩短电池寿命?!
  2. 利用yarn多队列实现hadoop资源隔离
  3. 研究发现,近一半生产容器存在漏洞
  4. Java基础-运行原理及变量(01)
  5. 总编下午茶:技术老男人的创业经
  6. 网站建设解决了传统的销售模式
  7. 统计SQL语句和存储过程
  8. 学习了1!+...10!
  9. java动态代理和Cglib动态代理的区别和使用
  10. 大数据与机器学习:实践方法与行业案例.1.4 本章小结