Autosar之SomeIP 车载以太网【7】DoIp

9. DoIp

9.1 端口功能

  • UDP_DISCOVERY

    • 端口类型:UDP

    • 端口号:13400

    • 设备启动:

      • 诊断设备发送给DoIP节点的车辆信息请求报文和DoIP节点控制报文(外部测试设备通过UDP广播发送request消息,目标端口号是13400,DoIP设备监听在13400端口,接收此request并响应)

      • 用于DoIP节点在没有收到请求的时候发送的UDP报文(DoIP设备启动后,通过UDP向13400端口广播发送vehicle announcement message,源端口号为13400或随机,里面包含此DoIP设备的基本信息,外部测试设备需要监听13400来接收这些信息)

  • UDP_TEST_EQUIPMENT_REQUEST

    • 端口类型 :UDP

    • 端口号:动态定义(49152-65535)

    • 用于诊断设备向DoIP节点发送的UDP报文

  • TCP_DATA

    • 端口类型:TCP

    • 端口号:13400

    • 用于外部诊断设备和DoIP节点之间的TCP通信

9.2 帧格式

  • Protocol version(8b):协议版本号,0x02

  • Interface Version(8b):协议版本号取反, 0xFD

  • PayloadType(16b)

    • reception

      • 节点管理类

        • 0x0000:通用DoIP报头否定确认(UDP_DISCOVER、TCP_DATA、UDP_TEST_EQUIPMENT_REQUEST)

          • 否定响应错误码

            • 0x00:错误的模式格式, 关闭端口

            • 0x01:未知的负载类型, 忽略消息

            • 0x02:报文太长, 忽略消息

            • 0x03:内存不足, 忽略消息

            • 0x04:不正确的报文长度,关闭端口

        • 0x0001:车辆识别请求电文 (UDP_DISCOVER)

                    该类型报文可以用来请求网络中DoIP节点的车辆信息,诊断设备用UDP报文向网络中发送该报文,来获取被诊断节点的VIN、GID、EID、逻辑地址等信息。

                    该报文中只包含DoIP报头,没有数据。

        • 0x0002:带有EID的车辆识别请求信息(UDP_DISCOVER)

                    在请求报文的数据中搭载了6字节EID,可请求指定EID的DoIP节点的其它车辆信息,用于被诊断节点的EID已知的情况。

        • 0x0003:带有VIN的车辆识别请求信息(UDP_DISCOVER)

                    在报文数据中搭载了17字节的VIN,用于DoIP节点的VIN已知的情况下,请求指定VIN的DoIP节点的其它信息。

        • 0x0004:车辆公告消息/车辆识别响应消息(UDP_DISCOVER、UDP_TEST_EQUIPMENT_REQUEST)

          • 0x0001\0x0002\0x0003的响应报文,报文数据共33字节

            • 17个字节,的VIN

            • 2个字节,逻辑地址,该逻辑地址用于诊断,后文详述

            • 6个字节,EID

            • 6个字节,GID:同一辆车上多个DoIP节点可以编为一组,用GID来标识这一组的DoIP节点。

            • 1个字节,Further action required:该字节用来表示在数据传输过程中是否需要额外的操作,如是否启用安全机制(0x10)

            • 1个字节,VIN/GID sync. status:该字节用来表示车内的DoIP节点是否已经完成了VIN或GID的同步(0x10未同步)。

          • 车辆声明报文(Vehicle announcement)

                        标准规定,当一个DoIP节点成功获取到IP地址后,应在500ms内发送3条车辆声明报文,向网络中的所有DoIP节点广播自己的车辆信息,这时数据部分的定义和上面相同,发送时使用UDP,IP地址设置为255.255.255.255。实际应用过程中发送时间和发送报文数目可能会根据实际情况有所调整。

        • 0x0005:路由激活请求(TCP_DATA)

                    在车辆发现阶段结束后,外部诊断设备已确定对哪个DoIP节点进行诊断,也获取了必要的信息,这时就需要发送路由激活请求报文,在诊断设备和被诊断的DoIP节点间建立起TCP连接,以便于发送诊断数据(诊断报文都是用TCP来发送的)。

                    数据格式,共11字节:

          • 2个字节,源地址(SourceAddress):外部诊断设备的逻辑地址,与诊断通信中的逻辑地址相同。这个逻辑地址用于对某个特定的DoIP节点进行寻址,与UDSonCAN中的CAN ID是类似的概念

          • 1个字节,激活类型(activation type):用于诊断设备通知被诊断DoIP节点进入哪种类型的诊断状态。

          • 剩余字节,保留或自定义字段,一般没有作用。

        • 0x0008:检查响应(TCP_DATA)

                    诊断设备在收到DoIP节点发送的诊断仪在线检查请求报文后,发送该响应报文,数据中携带两字节的诊断设备逻辑地址

      • 车辆信息类

        • 0x4001:DolP实体状态请求(UDP_DISCOVER)

                    该报文可以被诊断设备用来请求DoIP节点的状态,报文数据段没有数据。

        • 0x4003:请求诊断电源模式信息(UDP_DISCOVER)

                    该报文可以被诊断设备用来请求DoIP节点的电源模式信息,报文数据段没有数据。

      • 诊断数据类

        • 0x8001:诊断信息请求(TCP_DATA)

    • sending

      • 节点管理类

        • 0x0000:通用DoIP报头否定确认(UDP_DISCOVER、TCP_DATA、UDP_TEST_EQUIPMENT_REQUEST)

        • 0x0004:车辆公告消息/车辆识别响应消息(UDP_DISCOVER、UDP_TEST_EQUIPMENT_REQUEST)

        • 0x0006:路由激活响应(TCP_DATA)

          • DoIP节点收到诊断设备的路由激活请求报文后,建立TCP连接,并返回该路由激活响应报文,源端口为TCP_DATA,目的端口为诊断设备动态定义的端口。数据格式,共13个字节:

            • 2个字节,诊断设备逻辑地址(Logical address of the external test equipment):就是路由激活请求报文中的诊断设备逻辑地址。

            • 2个字节,DoIP节点逻辑地址(Logical address of the responding DoIP entity):也就是我们上文说的DoIP节点物理逻辑地址。

            • 1个字节,路由激活响应码(Routing activation response code):1字节,用来表示TCP连接建立是否成功,以及不成功的原因。

              • 0x00:由于路由未知,路由激活被拒绝。 Act:不要激活路由并关闭这个TCP_DATA套接字

              • 0x01:所有并发支持的TCP_DATA套接字都已注册激活,路由激活被拒绝。 Act:不要激活路由并关闭这个TCP_DATA套接字

              • 0x02:收到与连接项不同的SA,路由激活被拒绝。 Act:不要激活路由并关闭这个TCP_DATA套接字

              • 0x03:SA已经在另一个套接字上注册并激活,路由激活被拒绝。 Act:不要激活路由并关闭这个TCP_DATA套接字

              • 0x04:由于缺少身份验证,路由激活被拒绝。 Act:不要激活路由

              • 0x05:由于确认被拒绝,路由激活被拒绝。 Act:不要激活路由并关闭这个TCP_DATA套接字

              • 0x06:由于不支持路由激活的类型,路由激活被拒绝。 Act:不要激活路由并关闭这个TCP_DATA套接字

              • 0x10:路由成功激活。 Act:激活路由并注册SA

              • 0x11:路由将被激活,需要确认。 Act:只有车内确认后才能激活路由

            • 剩余字节,保留或自定义字段。

        • 0x0007:检查请求(TCP_DATA)

                    诊断仪在线检查报文,用于DoIP节点检查诊断设备是否还处于连接状态。该报文由DoIP节点在与诊断设备建立了TCP连接后用TCP_DATA端口发送,不携带DoIP数据,报文中只有DoIP报头。

      • 车辆信息类

        • 0x4002:DolP实体状态响应(UDP_TEST_EQUIPMENT_REQUEST)

                    0x4001的响应报文,DoIP节点用该响应报文来向诊断设备发送状态信息。

        • 0x4004:响应诊断电源模式信息(UDP_TEST_EQUIPMENT_REQUEST)

                    0x4003的响应报文,DoIP节点用该响应报文来向诊断设备发送电源模式信息,来告知诊断设备当前节点是否允许进行诊断。

      • 诊断数据类

        • 0x8002:诊断信息确认,正响应(TCP_DATA)

        • 0x8003:诊断信息否定确认,负响应(TCP_DATA)

    • 常用

            0x0001、0x0004:用于汽车诊断连接建立之前的车辆发现过程 0x0005、0x0006:用于tcp socket连接成功后的诊断连接请求与响应 0x8001、0x8002、0x8003:分别表示诊断消息、诊断消息正响应、诊断消息负响应 0x0007、0x0008:用于检查建立的诊断连接是否仍然在使用中,如果不再使用,则关闭socket

  • SourceAddress:发送者逻辑地址

  • TargetAddress:接收者逻辑地址

9.3 组件

  • DoIP实体:它是指通过DoIP协议连接到车辆中的ECU的设备,可以是诊断工具或其他支DoIP协议的设备。

  • DoIP路由器:它是指将DoIP消息从IP网络转发到车辆中的CAN总线或其他网络的设备。

  • DoIP服务器:它是指在车辆中运行的软件模块,用于处理和响应通过DoIP协议发送的消息。

  • DoIP消息:它是指通过DoIP协议传输的数据包,包括请求消息和响应消息。

  • DoIP地址:它是指用于标识ECU和DoIP实体的IP地址。

9.4 步骤

  • 获取IP,同时支持AutoIP和DHCP(优先级高)

  • 建立DoIP连接:首先需要建立DoIP连接,即在远程诊断工具和车辆中的ECU之间建立一个TCP/IP连接。在建立连接时,需要通过DoIP路由器将TCP/IP连接转发到车辆中的CAN总线或其他网络。

  • 发送诊断请求:一旦建立了DoIP连接,远程诊断工具可以向车辆中的ECU发送诊断请求,请求特定的诊断服务。诊断请求包括请求的诊断服务ID、数据以及其他必要的参数。

  • 接收诊断响应:车辆中的ECU接收到诊断请求后,将根据请求的服务类型生成相应的诊断响应。诊断响应包括响应的诊断服务ID、数据以及其他必要的参数。

  • 处理诊断响应:远程诊断工具接收到诊断响应后,将对响应数据进行处理和解析,以获取有关车辆状态的诊断信息。可以使用此信息进行故障排除和维护操作。

  • 关闭DoIP连接:完成诊断操作后,需要关闭DoIP连接,释放TCP/IP资源。

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶小破孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值