车载以太网之DoIP协议_第一篇

  • 1、DoIP含义
    • 1.1 DoIP使用场景
    • 1.2 DoIP在Autosar中的位置
  • 2、以太网协议
    • 2.1 物理层与数据链路层
    • 2.2 网络层与传输层
    • 2.3 DoIP数据格式
      • 2.3.1 Protocol version与Inverse protocol version
      • 2.3.2 Payload type
      • 2.3.3 Payload类型
        • 2.3.3.1 Generic acknowledge(0x0000)
        • 2.3.3.2 Vehicle Identification(0x0001至0x0004)
        • 2.3.3.3 Routing activation(0x0005 和0x0006)
        • 2.3.3.4 Alive check(0x0007和0x0008)
        • 2.3.3.5 Node Information(0x4001,0x4002,0x4003,0x4004)
  • 3、诊断发送

1、DoIP含义

DoIP(Diagnostic communication over Internet Protocol)其实就是基于以太网的通讯协议对UDS协议的数据进行传输。
其本身也是一种协议,规范于ISO13400标准。由于DoIP可以传输大量数据,以及响应速度快,且可以通过以太网进行远程诊断,因此DoIP逐步成为代替传统的CAN等总线方式,成为车载网络诊断的必然趋势。

1.1 DoIP使用场景

车辆检查与维修、车辆/ECU 软件刷写、车辆/ECU 组装线检查与维修。

1.2 DoIP在Autosar中的位置

2、以太网协议

2.1 物理层与数据链路层

ISO-13400规定,DoIP通信在物理层支持100BASE-TX (100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 两种制式。
DoIP相关设备的MAC地址也与IEEE 802.3的要求相符合。

2.2 网络层与传输层

网络层:ISO-13400规定,DoIP通信在网络层上支持IPv6和IPv4协议。对于IPv4,要支持地址解析协议(ARP ),对于IPv6要支持邻居发现协议(NDP) ,这两个协议是用于在只知道IP地址的情况下获取MAC地址的。
传输层:ISO-13400规定,DoIP通信在传输层上需要同时支持UDP协议与TCP协议,并对使用的端口号进行了定义,端口号13400。

2.3 DoIP数据格式

Protocol version [1 byte]

Inverse protocol version [1 byte]

Payload type [2 byte]

Payload length [4 byte]

负载[N byte] 根据实际的payload type,负载数据会不同

2.3.1 Protocol version与Inverse protocol version

通常Protocol version为0x02,Inverse protocol version是Protocol version的取反的值,此例0x02去反后为0xFD。
Protocol version可以为0xFF,这个值的作用是,当客户端和服务端的协议版本不匹配时设置此值可以绕过协议头版本不匹配而拒绝请求的情况。

2.3.2 Payload type

代表DoIP协议栈所能支持的功能

接收方向的payload类型

发送方向的payload类型

2.3.3 Payload类型

2.3.3.1 Generic acknowledge(0x0000)

DoIP报头否定响应报文格式。收到不合法的DoIP头部时,应当回复payload类型为0x0000的DoIP报文,并在回复的报文的payload中带上NACK代码

2.3.3.2 Vehicle Identification(0x0001至0x0004)

用于汽车标识上报或请求,只能通过UDP报文来发送这种命令,主要用于在汽车和诊断仪进入网络之后、诊断连接建立之前的车辆发现过程。
0x0001:的消息代表车辆ID请求,payload长度恒为0,当DoIP收到后需要在DoIPInitialVehicleAnnouncementTime后回复payload类型为0x0004的车辆声明消息。
0x0002:的消息代表带EID的车辆ID请求,长度应当为6,在DoIPUseMacAddressForIdentification设置为True的情况下,DoIP会将收到的6个byte的payload数据与本机MacAddress作比较,如果匹配的话会回复payload类型为0x0004的车辆声明消息。

0x0003:代表带VIN的车辆ID请求,长度应当为17,接收到的这17个byte会与Dcm_GetVin()返回的值作比较,如果匹配,那么DoIP会回复payload类型为0x0004的车辆声明消息。
0x0004:代表车辆声明消息


EID:DoIP Entity ID,如果DoIPUseMacAdressForIdentification设置为True,那么ID就是MAC地址,如果设置为false,那么就是DoIPEID。
GID代表Group ID。

2.3.3.3 Routing activation(0x0005 和0x0006)

标识的Routing activation request 和 response用于在socket建立之后,进行诊断通信的请求。
0x0005:代表路由激活请求消息,长度为7或11个byte。头两个byte代表source address,第三个byte代表激活类型,接下来的4个byte为保留位,恒为0,最后4个byte可选,为OEM指定的数据。

0x0006:代表路由激活响应消息。

2.3.3.4 Alive check(0x0007和0x0008)

用于Alive check,用于检查当前建立的诊断连接socket是否仍然在使用中,如果不再使用,则关闭socket释放资源。
0x0007:是Alive check请求消息,它不需要带payload数据,只需要设置payload类型为0x0007。当ECU发送完alive check请求后,DoIP模块应当等待DoIPAliveCheckResponseTimeout时间以等待响应,如果没有在这个时间内收到来自诊断设备的alive check响应报文,那么对应的socket connection将被重置。

0x0008:是Alive check响应消息,2个byte的数据为source address。

2.3.3.5 Node Information(0x4001,0x4002,0x4003,0x4004)

0x4001:为诊断实体状态请求,payload长度为0。
0x4002:为诊断实体状态响应。
0x4003:为诊断电源模式信息请求(diagnostic power mode information request),payload长度为0。
0x4004:为诊断电源模式信息响应(diagnostic power mode information response),有一个byte的payload,代表诊断电源模式,这个值通过调用DoIPPowerModeCallback获取。
2.3.3.5 Diagnostic Message(0x8001,0x8002,0x8003):分别代表的含义分别是诊断消息、诊断消息正响应和诊断消息负响应。

诊断报文格式
0x8001:为诊断消息,无论是请求还是响应都是使用0x8001。
0x8002:为诊断确认消息。
0x8003:为诊断否定确认消息。

这里的源地址和目标地址都是ECU的逻辑地址

3、诊断发送


请求DID F810读取

byte 8~9:源地址(ECU的逻辑地址)

byte 10~11:目的地址(ECU的逻辑地址)

byte 12~13:具体的诊断命令,SID是22,表示读取,DID是0xF810

其它车载以太网文章:车载以太网之DoIP协议_第二篇
车载以太网之SomeIP-SD协议
车载以太网之SomeIP协议

车载以太网之DoIP协议_第一篇相关推荐

  1. 架构师成长之旅_第一篇:插件与框架是什么?

    架构师成长之旅_第一篇:c++插件开发 目录 踏入工作前的准备 框架是什么? 多人开发 一.踏入工作前的准备 在即将踏入工作时,最主要的是你的代码量和你编码能力,最重要的是你的代码质量,在编码界代码质 ...

  2. 车载以太网之SomeIP协议

    一.SomeIP含义 SOME/IP ( Scalable service-Oriented MiddlewarE over IP):运行于IP之上的可伸缩的面向服务的中间件.它在系统中其实就是一个中 ...

  3. python小海龟画粗细渐变的线_Python 笔记_第一篇_童子功_8. 画图工具 (小海龟 turtle)...

    Python 笔记_第一篇_童子功_8. 画图工具 (小海龟 turtle) turtle 是一个简单的绘图工具 提供一个小海龟, 可以把它理解为一个机器人, 只能听懂有限的命令, 且绘图窗口的原点 ...

  4. ec20 以太网_整车通讯系统——车载以太网系统系列文章(第一篇)

    摘要:伴随着智能汽车.万物互联.无人驾驶技术的发展,车载通讯系统正在发生着翻天覆地的变化,伴随智能硬件和物联系统的不断扩展,汽车产品已经成为当今对物联系统最佳的试验田,以太网应用于生活领域.工业领域已 ...

  5. 车载以太网 - 初识DoIP - 01

    1.DoIP是什么? 从表达形式上 它就是UDS诊断套上车载以太网的马甲,然后实现UDS诊断的所有内容.通过下图DoIP的报文帧格式,从下面往上看,最尾部的数据我们能够很清晰的看到,User Data ...

  6. Python全栈开发记录_第一篇(循环练习及杂碎的知识点)

    Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(该篇代码行数大约:300行) 知识点1:优先级:not>and 短路原则:a ...

  7. Python笔记_第一篇_面向过程_第一部分_9.Ubuntu基础操作

    第一部分   Ubuntu简介 Ubuntu(乌班图)是一个机遇Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的"Ubuntu"一词,意思是 ...

  8. 腾讯听听智能音箱使用体验_第一篇

    在天猫精灵发布大半年之后,腾讯也加入了智能音箱市场,发布了第一款产品--腾讯听听(下面都简称"听听"啦). 按官方说法,这个产品其实在去年年中的时候就已经完成得差不多了,之后花了大 ...

  9. 图神经网络代码_第一篇:图神经网络(GNN)计算框架绪论

    写在开头: 这个专栏是为了总结我本科毕业设计中所设计的题目<基于GPU的图神经网络算法库的设计钰实现>.这半年来一直在这个方向上啃代码,读论文,真的学到了很多东西.尤其是阅读了大佬团队写的 ...

最新文章

  1. 免费云服务器无限流量,云服务器弄无限流量
  2. ASP获取地址栏URL地址方法
  3. Tomcat Connector的三种运行模式【bio、nio、apr】
  4. matlab语法——min函数
  5. python题目-回文数判断
  6. 【转】家庭影院的音频线改如何布置
  7. WordPiece、BPE详解及代码
  8. 如何关闭台式计算机,台式机如何关闭显示器
  9. 关于缩比F16模型配平结果异常的解释说明
  10. python调用python脚本
  11. java-IO流-将文件夹以树形结构打印(打印文件夹目录)问题
  12. 国内的人工智能神经网络研究院有哪些
  13. POI给WORD添加水印(亲测可用)
  14. 上台阶问题:一个人上台阶,一次可以走1、2、3步,问n个台阶有多少种走法?
  15. 领跑AIoT场景落地 OFweek智慧家庭高峰论坛圆满落幕!
  16. Note: Bimodal Content Defined Chunking for Backup Streams
  17. 软件构架的评估方法:ATAM
  18. 爬虫获取网易云音乐单曲或歌单实现音乐闹钟
  19. 求序列中第k小的数_推荐算法序列建模现状
  20. hexo博客yilia-plus主题更换Beaudar评论插件

热门文章

  1. 用Java写一个简单的回合制游戏
  2. vue项目中自己写popup弹窗功能-心得-案例
  3. oracle 本年的12个月,oracle结构一年的12个月
  4. 优雅简洁的轻论坛--flarum部署
  5. 算法刷题训练——成绩排名问题
  6. 制作YOLOv5数据集
  7. 奥鹏地大计算机在线考试答案,学习平台-奥鹏16春地大《多媒体计算机技术》在线作业一参考答案-成人高等教育_成人本科教育报名_远程网络教育学院-江苏学历网报名服务中心...
  8. APM编译记录-基于OMNIBUSF4-V3飞控板
  9. 2022年全球及中国可重复使用食品包装行业头部企业市场占有率及排名调研报告
  10. swiper 点击分页器之后不能继续轮播