DoIP协议,NACK code值对应的是哪种错误类型
电控知识搬运工 2023-06-02

网络层需求

整车网络架构

车载网络架构示意图

从图中可以看出,汽车内部不同的ECU具有不同的网络协议,比如LIN、CAN、Ethernet等,那么想要实现各个ECU诊断功能,就需要不同的网络通信,如果外部测试设备采用DoIP的形式,而内部的ECU网络协议各不相同,如何能让外部测试设备和汽车内部所有节点通信呢?答案是网关,网关可以实现收发两端不同协议之间的通信,所以整车必须有一个DoIP网关,它是和外部进行DoIP诊断通信的唯一接口

可以看出

  1. 应用层需求


    生活中常见的路由器,由于具有DHCP服务器的功能,就能为相连的设备分配IP地址

    我们的手机,也具有无线DHCP服务器的功能,也就是热点功能

    目前DoIP实体的IP地址都是静态写入的,所以这部分的内容暂时不表述

    数据传输顺序

    DoIP消息也是使用网络传输顺序-大端

    DoIP协议

    ISO 13400明确了两个注意点

  • 任何以组播地址或广播地址为源IP地址的报文,都应忽略
  • 每个udp数据报只能传输一个DoIP消息
  • DoIP消息通用结构

    DoIP消息都是使用的通用结构,这点要明确

    • Protocol Version

    DoIP协议版本号,1个字节

    目前主流使用的是02的版本,03版本预留以后使用,ff是默认的版本

    当通信一方支持的DoIP版本,另一方不支持时,就可以使用默认版本

    • Inverse Protocol Version

    反转协议版本,1个字节

    它的值是协议版本号与0xff的异或运算

    它与DoIP协议版本一起用于协议验证,以确保接收到DoIP消息格式正确

    • Payload Type

    DoIP数据类型,2个字节

    所有类型如下

    • 0x0000

    Generic DoIP header negative acknowledge,通用DoIP报头否定确认

    当DoIP实体接收到外部测试设备发来的DoIP消息时,首先会确认自己是否支持这条报文里的DoIP协议版本号、反向版本号、数据类型等

    如果不支持,DoIP实体就会回复一条通用DoIP报头否定确认报文

    通用DoIP头部否定确认报文结构

    这个NACK code占用一个字节,它不同的值表示不同的DoIP消息的错误类型,以及DoIP实体要如何处理接收到的DoIP消息

    由于通用DoIP报头否定报文也是DoIP消息,所以它也使用DoIP消息通用结构,只是payload type是0x0000

    当type为0x0000时,还会把NACK code的值放在payload里的第一个位置

    下面看一下NACK code值对应的是哪种错误类型,以及这种错误类型的DoIP消息要如何处理

    • 0x00

    DoIP实体不支持DoIP协议版本或反向协议版本错误

    这种情况下,DoIP实体需要关闭socket,这里的socket应该是tcp socket

    • 0x01

    DoIP实体不支持DoIP消息里的payload type

    这种情况下,DoIP实体忽略这条错误的DoIP消息即可

    • 0x02

    DoIP消息payload长度超过了DoIP实体支持的最大DoIP消息的长度
    这种情况下,DoIP实体忽略这条错误的DoIP消息即可

    • 0x03

    DoIP消息payload长度超过了DoIP实体的DoIP程序的处理内存

    这种情况下,DoIP实体忽略这条错误的DoIP消息即可

    • 0x04

    DoIP消息的Payload Length字段不正确

    这种情况下,DoIP实体需要关闭socket,这里的socket应该是tcp socket

    其他的一些注意点

    通用DoIP报头否定报文是由DoIP实体发给外部测试设备的,外部测试设备收到这个报文后,不需要响应这个报文

    外部测试设备不应该发送通用DoIP报头否定报文,但是如果硬要发给DoIP实体,DoIP实体会忽略它,不作处理

    如果DoIP实体发送了错误的DoIP消息给外部测试设备,外部测试设备不需要对其进行处理,也就是没必要回复通用DoIP报头否定报文

    DoIP报头处理流程如下,建议详细分析

    这里有个有趣的点,之前一直不明白Alive check request和Alive check response是DoIP实体发、外部测试设备响应,还是外部测试设备发、DoIP响应,通过上图应该就很明显了,DoIP实体发确认DoIP是否存活请求给外部测试设备,外部测试设备作出响应



声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • RF
  • 射频
  • 通信
  • 无线
下载排行榜
更多
评测报告
更多
广告