车载以太网诊断协议,Diagnostics over Internet Protocol简称为DoIP,可以通过以太网协议进行汽车诊断。DoIP是一种用于在车辆之间或车辆与诊断设备之间进行通信和诊断的标准协议。通过DoIP,诊断工程师可以通过以太网或远程访问和诊断车辆的电子系统,并可以进行以太网控制器的诊断访问和刷写。
DoIP是TSMaster支持的重要功能之一,本文主要介绍TSMaster的DoIP模块中诊断服务功能操作,以及相应的传输层配置,并结合诊断功能常见的使用操作进行展开,本文要点如下:
1. TSMaster DoIP的同星以太网硬件准备
2. TSMaster DoIP模块如何开始使用
3. TSMaster被测仪IP网络接口配置
4. TSMaster DoIP诊断传输层配置
5. TSMaster基础诊断配置
6. TSMaster诊断控制台
7. TSMaster自动诊断流程与注册系统变量
8.诊断典型应用
1、TSMaster DoIP的同星以太网硬件准备
TSMaster的DoIP软件功能的实现,是以同星的以太网硬件作为基础。其中应用于DoIP的同星以太网硬件有TE1051、TE1054(规划中)、TE1021。
TE1051是一路以太网转USB接口的设备,可以将标准以太网100Base-Tx 1000Base-T或车载以太网100/1000Base-T1的数据通过USB接口传输到PC上,并通过TSMaster软件实现以太网数据的仿真、分析、测试,也可以实现DoIP和SOMEIP等功能。同时,TE1051设备小巧且外壳坚固,无需外部供电,适用于各种环境工况下的DoIP诊断刷写。
图1-1 TE1051硬件
TE1021是一路车载以太网转普通以太网接口(100/1000Base-T1 to 100Base-Tx/1000Base-T)的介质转换工具。用户可以将100Base-T1转换为100Base-Tx或将1000Base-T1转换为1000Base-T。可适用于不同以太网接口的DoIP应用场景,同时TE1021小巧且外壳坚固,携带方便。
图1-2 TE1021硬件
2、TSMaster DoIP模块如何开始使用
TSMaster的DoIP模块的创建与基本使用流程如下:
▲ Step1:DoIP位于主菜单【应用】->【DoIP】,如图2-1。
图2-1 DOIP
▲ Step2:【添加DoIP】模块,可以添加多个DoIP模块,如图2-2。
图2-2 添加DoIP模块
▲ Step3:根据ECU的配置设置车载以太网传输层参数,比如诊断仪类型、通道、被测件IP地址等以太网参数和安全访问算法。具体操作流程在下文第3章节展开。
▲ Step4:当配置好传输层相关参数与安全算法,启动工程后,点击【Connect DUT】连接车载控制器。当连接成功后,基础诊断窗口和系统消息窗口会提示:连接以太网被测件成功,如图2-3。以及在ISO15765-2的地方可以看到连接的服务消息,如图2-4。
图2-3 连接以太网被测件
图2-4 ISO5765-2消息
▲ Step5: 服务以及流程都配置好之后,在【自动诊断流程】处直接打开启动按钮,执行诊断流程。如图2-5所示。
图2-5 执行自动诊断流程
3、TSMaster诊断仪IP网络接口配置
TSMaster的网络接口配置流程如下:
▲ Step1:找到主菜单【硬件】->【TCP/IP Stack】,如图3-1。
图3-1 TCP/IP Stack
▲Step2:【Eth CH1】右键选择【Add Network Card】,如图3-2。
图3-2 添加网络接口
▲ Step3:在【General Setting】中选择【用户自定义Mac】,输入自定义Mac地址。如图3-3。
图3-3 自定义Mac地址
▲ Step4:【使能IPV4】,然后打开【添加】按钮,输入诊断测试仪的IP地址和IP掩码,如图3-4。
图3-4 添加IP地址
4、TSMaster DoIP诊断传输层配置
TSMaster 提供了DoIP的诊断传输层的配置功能,用户可以根据需求配置相应的传输层配置比如诊断仪类型、通道、IP地址、端口和请求和应答ID、以及安全算法等一系列配置。
4.1 诊断传输层
诊断传输层的配置根据诊断仪类型分为两种:TE系列设备和系统TCP/IP。
4.1.1 TE系列设备
TE系列设备类型以TE1051为例,TE1051是一个1路以太网转USB接口的工具,通过USB接口传输到PC上,并通过TSMaster软件实现以太网数据的DoIP功能。
对于DoIP诊断传输层ISO TP,包含被测件和测试仪的以太网参数和诊断ID参数,如图4-1所示。
图4-1 DoIP诊断传输层ISO TP配置
DoIP诊断传输层ISO TP的具体参数如下分类介绍:
▲ 总线类型:诊断传输层类型。
使用同星DoIP功能选择总线类型为【Ethernet】,如图4-2所示。
图4-2 DoIP诊断总线类型
▲ 诊断仪类型:诊断设备类型。
通过USB连接PC,选择的诊断仪类型为【TE系列设备】,若是传统的网线连接PC则选择系统TCP/IP,如图4-3所示。
图4-3 Ethernet 诊断仪类型选择
▲ 通道:诊断模块用到的逻辑通道。
TSMaster 支持多个诊断模块同时在线工作,这里用于选择当前诊断模块的应用逻辑通道,通过下拉列表进行选择,如图4-4所示。
图4-4 Ethernet 通道选择
▲ IP地址掩码:以太网通信使用的IP地址掩码。
▲ 被测件IP:被测件的IP地址。
在DoIP通信中,IP地址掩码和被测件IP地址需要根据具体的网络拓扑结构和通信需求进行设置。
▲ 被测件端口:被测件端口号。
在ISO 13400标准中端口13400被指定为DoIP通信的默认端口号。
▲ 测试仪IP:测试仪的IP地址。
测试仪IP为连接PC的测试设备(如同星的TE051)的IP地址。根据IP地址掩码和被测件IP,将PC的IP地址和被测件IP配置在同一网段内,以此两者可以正常连接和通信。测试仪IP地址的配置在前面的第3章已详细说明。
▲ 测试仪端口:测试仪或PC的端口
注意:对于诊断工具的端口号设置并没有固定的规定,用户可以根据需求自己设置或者使用软件自动分配的端口号。
▲ 请求ID / 应答ID / 功能ID:设置诊断模块PC工具端的诊断请求/应答/功能帧的 ID。
4.1.2 系统TCP/IP
系统TCP/IP类型以TE1021为例,TE1021是直接通过系统的网口连接PC。
DoIP诊断传输层ISO TP,包含被测件和测试仪的以太网参数和诊断ID参数,如图4-5所示。
图4-5 DoIP诊断传输层ISO TP配置
DoIP诊断传输层ISO TP的具体参数如下分类介绍:
▲ 总线类型:诊断传输层类型。
使用同星DoIP功能选择总线类型为【Ethernet】,如图4-6所示。
图4-6 DoIP诊断总线类型
▲ 诊断仪类型:诊断设备类型。
诊断仪通过PC系统的网口连接PC,则选择的诊断仪类型为【系统TCP/IP】,如图4-7所示。
图4-7 Ethernet 诊断仪类型选择
▲ 通道:诊断模块用到的逻辑通道。
用于选择当前诊断模块的应用逻辑通道,这里默认是【System Ethernet Interface】,如图4-8所示。
图4-8 Ethernet 通道选择
▲ IP地址掩码:以太网通信使用的IP地址掩码。
▲ 被测件IP:被测件的IP地址。
在DoIP通信中,IP地址掩码和被测件IP地址需要根据具体的网络拓扑结构和通信需求进行设置。
▲ 被测件端口:被测件端口号。
在ISO 13400标准中端口13400被指定为DoIP通信的默认端口号。
▲ 测试仪IP:PC的系统的网口的IP地址。
根据IP地址掩码和被测件IP,将PC的IP地址和被测件IP配置在同一网段内,使得两者可以正常连接和通信。找到电脑的【设置】->【网络和Internet】,找到网口所连接的以太网,选择【属性】,在【IP分配】选择【编辑】按钮。选择手动,打开IPv4,填写IP地址以及子网掩码。如图4-9所示。
图4-9 PC端以太网IP地址设置
▲ 测试仪端口:测试仪或PC的端口
注意:对于诊断工具的端口号设置并没有固定的规定,用户可以根据需求自己设置或者使用软件自动分配的端口号。
▲ 请求ID / 应答ID / 功能ID:设置诊断模块PC工具端的诊断请求/应答/功能帧的 ID。
4.2 诊断服务层
诊断服务层参数主要包含路由激活,S3,P2 时间参数,以及加载 SeedKey 的 安全访问。如图4-10所示。
图4-10 诊断服务层参数
4.2.1 路由激活
【连接DUT之后自动执行路由激活命令】:勾选后,当测试仪或PC与被测件建立网络连接后,软件自动执行路由激活命令。
【TCP初始化激活超时时间】:这个参数描述了从TCP_Data连接建立过后到失效的最大超时时间。如果在设定时间范围内都不执行激活路由的指令,DoIP模块会主动关闭TCP_Data套接字。规范定义时间为2000ms。
【激活类型】,共有5种类型:
1. 【Default】:默认激活模式(Default Activation Mode),这是最基本的路由激活类型,通常用于建立标准的DoIP通信会话。在默认激活模式下,设备之间会进行基本的身份验证和参数交换,以建立通信连接。
2. 【WWH-OBD】:全球调和车载诊断系统要求的诊断通信激活,在这种模式下,设备之间可能需要进行额外的身份验证和安全验证,以确保通信的合规性和安全性。
3. 【ISO/SAE Reserved】:为未来的标准或特定应用保留的路由激活模式。
4. 【Central Security】:Central Security(中央安全)路由激活模式,它涉及到车辆网络安全的核心管理和认证机制。这种模式通常用于确保只有经过授权和验证的设备才能与车辆的网络系统进行通信。
5. 【Additional OEM-Specific Use】:为原始设备制造商(OEM)提供的特定用途而保留的额外路由激活模式。不同的OEM可以根据自己的需求和车辆网络架构,定义和使用特定的路由激活模式,以满足其独特的诊断、通信或安全要求。
4.2.2 P2时间参数
【P2超时时间】:表示 ECU 收到诊断请求帧过后,最短回复的时间间隔。对于诊断工具端,该参数可以作为发送请求过后,等待回复的超时判断参数。比如诊断工具发送了一个诊断报文,P2超时时间段内都没有收到回复,则认为请求失败,超时退出。
【P2扩展时间】:当诊断工具发出诊断报文过后,被测 ECU 来不及在 P2 超时时间段内做出应答,则回复一帧 7F XX 78 报文,告诉诊断工具端自己来不及响应,需要延长等待时间再回复。ECU 发送了延迟等待报文后,则把等待时间参数切换为 P2扩展时间。诊断工具端的超时判断参数在收到延迟等待报文后,需要切换到 P2扩展时间。
上述两个参数可以点开【详情】按钮,查看图示说明,如图4-11所示。
图4-11 P2时间参数设置
4.2.3 诊断仪在线
诊断仪在线包括S3服务器时间和S3客户端时间参数。
【S3服务器时间】:表示该ECU从Default会话被切换到其他会话过后,经过多长时间会自动切换回默认会话的超时时间。
【S3客户端时间】:表示作为诊断Tester端,发送TesterPresent帧的时间间隔。
上述两个参数的示意图,可以点开【详情】按钮,查看图示说明,如图4-12所示。
图4-12 S3时间参数设置
【诊断仪在线】:TSMaster 断模块中,可以选择配置并使能诊断仪在线命令,如图4-13所示。
图4-13 诊断仪在线设置
当使能【诊断仪在线】,在诊断模块上方会出现启动【诊断仪在线】的开关。设置诊断仪在线为【打开】状态,则按照设定的S3客户端时间间隔发送该报文。
诊断仪在线的发送字节是可选的。支持三种类型:
【默认诊断仪在线服务】:为最常用的0x3E 0x80。
【从基础配置中选择】:从基本诊断配置中选择配置好的3E命令。
【用户自定义】:用于自定义的字节。
4.2.4 种子密钥
TSMaster 中提供了两种SeedKey种子密钥的处理方法。第一种就是常用的加载主流的种子密匙的DLL动态链接库;第二种是提供了内置的种子密钥的解释器,可以直接编写SeedKey源代码,并可以保存生成DLL动态链接库。
—4.2.4.1载入动态链接库
TSMaster不仅支持了C/C++,Delphi等语言封装的DLL文件,也新增支持基于DotNet平台如C#,VB.Net等语言编写的DLL动态链接库,可以高效兼容不同平台生成的安全访问DLL,为工程师带来更便捷的使用体验。
载入动态链接库加载界面,如图4-14所示。
图4-14 载入动态链接库
图标从左往右依次为:
【1】 加载DLL
【2】 删除DLL
【3】 打开DLL校验器,通过DLL校验器,用户可以判断加载的 DLL 接口是否正确,算法是否符合设计要求。比如,用户选择Seed的Level过后,输入Seed值,点击GenKey 进行判断。如果该DLL接口跟模板定义接口统一,则会输出提示信息:Generate Key Success,然后用户根据Key值跟目标值对比,进一步确认DLL中的算法是否符合设计要求。如图4-15。
图4-15 SeedKey校验器
【4】 可打开TSMaster安装目录下Seed&Key接口工程所在的文件路径。
在TSMaster安装目录中,提供了封装Seed&Key 算法的模板工程。如GenerateKeyEx,GenerateKeyExOpt, ASAP1A_CCP_ComputeKeyFromSeed,基于此模板工程开发即可得到能够直接加载的DLL函数。TSMaster默认支持SeedKey函数接口具体为如下:
函数接口1:
unsigned int GenerateKeyEx(
const unsigned char* ipSeedArray, /* Array for the seed [in] */
unsigned int iSeedArraySize, /* Length of the array for the seed [in] */
const unsigned int iSecurityLevel,/* Security level [in] */
const char* ipVariant, /* Name of the active variant [in] */
unsigned char* iopKeyArray, /* Array for the key [in, out] */
unsigned int iMaxKeyArraySize, /* Maximum length of the array for the key [in] */
unsigned int& oActualKeyArraySize); /* Length of the key [out] */
函数接口2:
unsigned int GenerateKeyExOpt(
const unsigned char* ipSeedArray, /* Array for the seed [in] */
unsigned int iSeedArraySize, /* Length of the array for the seed [in] */
const unsigned int iSecurityLevel, /* Security level [in] */
const char* ipVariant, /* Name of the active variant [in] */
const char* iPara, /* */
unsigned char* iopKeyArray, /* Array for the key [in, out] */
unsigned int iMaxKeyArraySize, /* Maximum length of the array for the key [in] */
unsigned int& oActualKeyArraySize) /* Length of the key [out] */
函数接口3:
bool ASAP1A_CCP_ComputeKeyFromSeed(
const unsigned char* ipSeedArray, /* Array for the seed [in] */
unsigned short iSeedArraySize, /* Length of the array for the seed [in] */
unsigned char* iopKeyArray, /* Array for the key [in, out] */
unsigned short iMaxKeyArraySize, /* Maximum length of the array for the key [in] */
unsigned short* opSizeKey) /* Length of the key [out] */
如何兼容其他函数接口
在日常使用中经常出现用户已经开发好了SeedKey DLL,同时该 DLL 的接口不是上述三种中的任何一种,则无法直接加载到TSMaster的诊断模块中。对此,可以通过二次封装的形式将存在的SeedKey算法库进行包装,生成可以直接加载到TSMaster诊断模块中的 DLL 。
以一个实际的实例来讲解如何兼容其他接口函数的DLL文件,二次封装流程的示意图,如图4-16。
图4-16 二次封装流程
▲第一步:查看当前的DLL,名称为UserSeedKey.DLL。该函数内部的API函数有:
●Seed 等级为1的时候,调用函数void GetKeyFromSeed01(byte* ASeed, byte* AKey);
●Seed等级为3的时候,调用函数void GetKeyFromSeed03(byte* ASeed, byte* AKey);
●Seed等级为11的时候,调用函数 void GetKeyFromSeed11(byte* ASeed, byte* AKey);
进而得知当前DLL不支持上述三种函数接口,需要进行二次封装。
▲第二步:选择 TSMaster 安装目录中提供的 GenerateKeyEx 的模板工程,在该工程中用上述DLL的函数接口。基本思路是:
1. 采用 Loadlibrary 动态用户现有的 DLL。
2. 根据传入的Level参数,采用GetProcAddress函数动态获取实际的用于计算Key的函数指针。
3. 如果获取函数指针成功,则使用该函数指针传输Seed值,并计算对应的Key值。GenerateKeyEx工程二次封装示例,如图4-17。
图4-17 GenerateKeyEx工程二次封装示例
▲ 第三步:该GenerateKeyEx工程开发结束后,TSMaster 直接加载GenerateKeyEx所在的DLL。需要注意的是,用户需要把现有的UserSeedKey.DLL拷贝到TSMaster根目录或者GenerateKeyEx.DLL所在的目录。如果不拷贝过去,GenerateKeyEx.DLL执行的时候会出现找不到对应依赖DLL的情况,解锁失败。
—4.2.4.2 编写SeedKey代码
在TSMaster的内置算法编辑器里的操作流程,示意如图4-18所示。
图4-18 内置算法编辑器
【1】选择SeedKey算法的函数;
【2】打开算法校验器,可以于检查算法结果是否正确;
【3】打开编写代码的窗口;
【4】可用于导出所编写代码的为DLL文件;
【5】选择一个需要的SeedKey函数接口,并支持扩展自定义函数接口;
【6】SeedKey源代码编辑工作区,用于解密算法代码的输入与编辑。
值得注意的是,TSMaster 目前提供了最常用的算法函数的接口形式,如果使用自己特殊的函数接口形式,可以联系上海同星支持,可将相应接口增加到选项中。
另外,所有的接口函数都定义了返回值类型为s32。增加此约束,主要是增加函数的严谨性。其中,返回值为0表示成功,返回值为其他值则有对应的错误码。因此,在编辑代码的时候,最后一行需要加上return返回值,如图4-19所示,否则系统执行函数过后会认为算法执行失败,不予往后面执行。
图4-19 函数return返回值
5、TSMaster 基础诊断配置
基础诊断模块包含基本诊断服务和组合服务。对于诊断过程中独立执行的命令,在基本诊断服务中;用于文件下载的$34、$36和$37放入组合服务中。如图5-1所示。
图5-1 基础诊断配置
5.1 添加删除服务命令
把鼠标放到需要添加和删除的服务命令上方,右键展开,选择是否需要添加和删除该服务,如图5-2所示。
图5-2 添加和删除的服务命令
5.2 配置基本诊断参数
以诊断会话控制为例,主要包含如下参数的配置,如图5-3所示。
图5-3 配置基本诊断参数
【1】 配置服务名称:用户可以配置一个易于理解和管理的服务名称。
【2】 是否功能标识符:本诊断服务是否采用功能标识符发送诊断请求。
【3】 是否有回复:用户可配置是否检查此服务的回复内容。
【4】 选择子服务类型:比如 Session Control 中的 DiagnosticSessionType 就包含如上图所示的 Session 类型。
【5】 参数列表的字节序:支持Motorola 和 Intel 字节序。
【6】 参数列表:诊断服务除了诊断 ID 和子服务类型 ID,还可以带着参数发送给被测 ECU。参数列表包含请求和应答帧的参数列表,可以选择增加/删除多种类型的参数。如图5-4。
图5-4 新增与删除参数
其中,根据不同服务指令,可以设置不同的ID参数。比如诊断请求会话里的诊断会话类型参数是必选设置,而参数列表是可选的。在修改配置后,界面上方会实时显示实际诊断报文的示例报文,如请求协议数据包是:【10 01 xx xx】:xx 表示该参数是可变的,根据用户实际填入的数据确定;诊断仪将要收到的应答协议数据包为【50 01 xx】。
图5-5 请求与应答参数设置
5.3 诊断服务参数
诊断模块参数支持 7 种数据类型。包括:UInt,Int,Single,Double,HexArray,Ascii和 SystemVar。如图5-6。
图5-6 诊断模块参数类型
【1】 UInt:无符号整型,其数据长度必须小于32bits,并且为8的倍数,可以为8,16,24,32bits。
【2】 Int:有符号整形,其数据长度必须小于32bits,并且为8的倍数,可以为8,16,24,32bits