随着DoIP协议的广泛应用,现代汽车内部通信会大量存在传统诊断报文(UDSonCAN、UDSonLIN)和基于以太网的诊断报文(UDSonIP)并存的现象,比如UDSonCAN和UDSonIP之间,这些报文会存在信息互转的场景,我们也称之为诊断路由。
继上篇《干货 | DoIP协议深度排雷》按照“激活线激活——车辆发现——路由激活——诊断交互——关闭TCP_DATA_Socket”五个步骤详细讲解了DoIP诊断会话中需要重点关注的信息,今天给大家分享一下在系统或实车诊断通信环境下GW(网关)执行以太网诊断路由的一些关键知识点。小怿会从诊断路由的应用场景、诊断路由转发规则和诊断路由测试三个维度给大家进行介绍。
在诊断通信应用中,网关承担诊断仪与被诊断节点之间诊断报文的路由功能。诊断仪连接在OBD口,通过网关与内部ECU进行诊断通信。
下图是诊断路由的一个典型应用场景,如图1所示,整个流程概况如下:
图 1 诊断路由典型应用场景示意图
诊断路由最核心的还是路由的概念,这就涉及到车内所有应用诊断协议的总线/网络之间诊断报文的转发,如CAN/CANFD/Ethernet/Flexray/LIN等。今天小怿只介绍两种最常见的应用场景的路由规则:DoIP与DoIP之间的路由、DoIP与DoCAN/DoCANFD之间的路由。
诊断仪从外部OBD-Ethernet诊断口对内部DoIP节点进行诊断通信。在DoIP-DoIP通信情况下,网关需要实现诊断报文从外网到内网以及内网到外网的转换。
网关转发诊断请求(物理寻址)
物理寻址诊断报文转发的规则大致如下:
图 2 诊断请求转发至内部DoIP节点
功能寻址的过程与物理寻址类似,区别在于:功能寻址诊断请求时,网关需分别映射功能寻址地址对应的所有DoIP节点IP及MAC地址,并分别转发至各DoIP节点。
网关转发诊断响应
诊断响应转发的规则大致如下:
下图总结了以上过程,如图3所示。
图 3 DoIP诊断响应转发至诊断仪
功能寻址的过程与物理寻址类似,区别在于:对于功能寻址诊断请求,各车内DoIP节点进行诊断响应时,源逻辑地址皆更换为各自ECU对应的逻辑地址。
诊断仪从外部OBD-Ethernet诊断口对内部CAN/CANFD节点进行诊断通信。在DoIP-DoCAN/CANFD通信情况下,网关需要实现诊断报文从以太网到CAN/CANFD总线以及CAN/CANFD总线到以太网的转换。
网关转发诊断请求
物理寻址诊断报文的转发逻辑如下:
下图总结了以上过程,如图4所示。
图 4 诊断请求转发至内部CAN/CANFD节点
功能寻址的过程与物理寻址类似,区别在于:功能寻址诊断请求时,网关需将DoIP报文中功能寻址地址(DoIP TA)映射为DoCAN/CANFD的功能寻址诊断请求ID,并分别以DoCAN/CANFD报文格式转发至该功能寻址地址所覆盖的CAN/CANFD总线。
网关转发诊断响应
诊断响应转发的规则大致如下:
下图总结了以上过程,如图5所示。
图 5 DoCAN/CANFD诊断响应转发至诊断仪
功能寻址的过程与物理寻址类似,区别在于:对于功能寻址诊断请求,车内CAN/CANFD节点需使用各自诊断响应ID进行诊断响应。
总的来说,我们可以看到DoIP与DoCAN/CANFD之间的路由多了DoIP逻辑地址与内部CAN/CANFD总线诊断ID映射的步骤。
网关如何处理DoIP大包数据
上述诊断请求及响应路由皆是在单帧传输的情况下网关执行DoIP-DoCAN/CANFD路由转发的机制。而众所周知,以太网数据的长度定会出现大于DoCAN/DoCANFD单帧传输的字节长度的情况,那么此时网关是如何执行诊断数据路由的呢?
下面小怿就来解析这个问题,分为如下的步骤:
下图总结了以上过程,如图6所示。
图 6 多帧诊断请求转发
对于多帧诊断响应,网关与目的ECU同样遵循ISO 15765 CANTP多帧传输机制进行诊断响应数据的传输。但此处对于网关与诊断仪的交互来讲,通常实现方式是网关将接收的诊断响应进行存储,当接收完所有诊断响应帧后,再将数据重新封装后转发给诊断仪。因此在诊断响应数据传输过程中,网关同样需要按照上述规则向诊断仪发送NRC为0x78的诊断否定响应报文,直至诊断响应数据接收完成。
小怿也遇到过网关执行边接收边转发的机制,即在接收CAN/CANFD节点回复的多帧诊断响应时不进行存储,直接将诊断响应帧转换成DoIP报文格式转发给诊断仪,由诊断仪来执行所有诊断响应数据的组包功能。
具体按照哪种方式去实现国际标准中没有硬性标准,OEM或供应商可根据设计需求选择适当的实现方案。
可以看到,诊断路由的整个过程和规则还是相当复杂的,也是车载通讯很容易出错的一个环节,可以说诊断路由的测试是汽车通讯测试重中之重。下面小怿就跟大家介绍一下诊断路由的测试环境。
若要搭建一套诊断路由通信环境,需要诊断仪、网关、内部ECU都已具备诊断通信功能,而往往在测试阶段,某些ECU功能尚未集成或缺少某些ECU。因此我们在诊断路由测试时需要模拟内部ECU来实现诊断请求的接收及诊断响应的发起。
图 7 诊断路由测试拓扑
我们使用Vector的CANoe工具搭建测试环境,开发测试工程。基于CAPL编程模拟实现内部ECU的诊断通信功能,测试过程中需要依据诊断路由表实现内部各ECU与网关的诊断数据交互。
诊断路由测试为自定义测试内容,基本上包含以下内容:
除了以上较为通用的内容外,我们也会根据OEM诊断路由设计规范,对特定功能定制开发一些测试用例,比如诊断报文重复发送测试,来实现对完整诊断路由功能的测试覆盖。
鉴于篇幅,小怿只介绍了目前应用广泛的以太网通信相关DoIP-DoIP及DoIP-DoCAN/CANFD的诊断路由相关内容,通过图形化的示例展示了诊断路由的基本规则,介绍了我们常用的诊断路由的测试方法和测试维度。如果各位仍有不明白的地方,可以在下方评论区留言哦,同时也非常欢迎各位对以太网诊断及诊断路由相关内容有兴趣的专家来怿星交流,我们与您共同进步。
更多精彩推荐:
干货 | DoIP协议深度排雷
DoIP了解一下?
汽车以太网应用案例之DoIP刷写——让数据“飞”起来
如何使用DiVa测试UDS On DoIP
道路千万条,安全第一条——TCP/IP协议一致性测试排雷攻略
汽车以太网对TCP/IP协议簇的应用
汽车以太网标准化组织介绍
CAN总线测试与汽车以太网测试的区别