TSMaster 可以少代码甚至零代码就可以完成诊断流程开发,诊断开发人员只需要熟悉诊断流程,就能打通研发、产线、售后整条链路环节。
TSMaster 的 UDS 诊断功能不仅支持 CAN, LIN,同时也支持以太网的 DoIP 的诊断功能,TSMaster 的 CAN UDS 诊断操作指南(上)篇,主要是针对UDS 诊断模块的创建、CAN UDS 诊断传输层配置和TSMaster 基础诊断配置进行讲解。
本文关键字:UDS,基础诊断,诊断系统变量
本文目录
1、TSMaster 的 UDS 诊断模块的创建
TSMaster 的 UDS 诊断模块的创建流程如下:
Step1:诊断模块位于主菜单【应用】->【诊断模块】,如下图 1-1。
2、CAN UDS 诊断传输层配置
1.诊断传输层
CAN 诊断传输层 ISO TP,包含诊断传输层和诊断服务层参数,如图 2-1 所示。
其中诊断传输层 ISO TP 的具体参数如下分类介绍:
● 总线类型:诊断传输层类型
使用同星 UDS on CAN/CANFD 功能可以选择总线类型为【CAN】或者【CAN FD】,通过下拉列表可以选择,如图 2-2 所示:
● 通道:诊断模块用到的逻辑通道
TSMaster 支持多个诊断模块同时在线工作,这里用于选择当前诊断模块的应用逻辑通道,通过下拉列表进行选择,如图 2-3 所示:
● 请求 ID: 设置诊断模块 PC 工具端的诊断请求 ID。
● 请求 ID 类型:设置诊断模块 PC 工具端的诊断请求 ID 类型,0 是标准帧(11 位),1 是扩展帧(29 位),如图 2-4 所示。
● 应答 ID:设置诊断模块 PC 工具端的诊断应答 ID
● 应答 ID 类型:设置诊断模块 PC 工具端的诊断应答 ID 类型,0 是标准帧(11 位),1 是扩展帧(29 位)。
● 功能 ID:设置诊断模块 PC 工具端的诊断功能 ID
● 功能 ID 类型:设置诊断模块 PC 工具端的诊断功能 ID 类型,0 是标准帧(11 位),1 是扩展帧(29 位)。
● 发送填充字节:传输过程中,实际有效字节不足一个 CAN 报文数据端的时候,剩余数据段进行填充字节。比如一帧 CAN 报文 8 个字节,如果有效传输字节是[0x02,0x10,0x02],填充字节是 0xAA,则实际的报
文字节是[0x02,0x10,0x02,0xAA,0xAA,0xAA,0xAA,0xAA]。
●接收帧间隔:接收连续帧最小帧间隔(ms)。TSMaster 诊断模块作为接收端,在接收连续帧报文的时候能够支持的诊断帧之间的最短时间间隔,这个参数是回复给诊断客户端的。设置为 0,表示支持以最短的时间间隔接收。
● 用户自定义发送帧间隔:发送连续帧最小间隔由用户确定,具体间隔时间由【发送帧间隔】的值设定。
● 发送帧间隔:发送连续帧最小间隔。
● 发送块大小:TSMaster 诊断模块作为发送端,在发送连续帧报文的时候一次能够发送的数据块的大小。设置为 0,表示一次性能够发送任意大小的数据块。
● FC 帧后间隔:表示发送流控帧与发送第一帧连续帧之间的最大时间间隔。
● FD 最大 DLC:FD 帧的最大 DLC 值,该参数只在有【总线类型】为CAN FD 模式下才有效。如图 2-5 所示:
● FD 可变波特率:可以选择是否开启可变波特率模式。
● 最大长度:服务层数据包的最大长度。该参数对于普通 CAN/LIN 是无意义的。
比如,多帧传输时 DLC 长度=8 字节,首帧(First Frame)采用第 0 字节低四位加第一个字节的 8 位,共 12Bit 表示一次传输的包的大小,也就是最多 4095个字节,如下表所示:
2.诊断服务层
诊断服务层参数主要包含路由激活,S3,P2 时间参数,以及加载 SeedKey 的安全访问。如图 2-6 所示:
2.1 P2 时间参数
【P2 超时时间】:表示 ECU 收到诊断请求帧过后,最短回复的时间间隔。对于诊断工具端,该参数可以作为发送请求过后,等待回复的超时判断参数。比如诊断工具发送了一个诊断报文,P2 超时时间段内都没有收到回复,则认为请求失败,超时退出。
【P2 扩展时间】:当诊断工具发出诊断报文过后,被测 ECU 来不及在 P2 超时时间段内做出应答,则回复一帧 7F XX 78 报文,告诉诊断工具端自己来不及响应,需要延长等待时间再回复。ECU 发送了延迟等待报文后,则把等待时间参数切换为 P2 扩展时间。诊断工具端的超时判断参数在收到延迟等待报文后,需要切换到 P2 扩展时间。
上述两个参数可以点开【详情】按钮,查看图示说明,如图 2-7 所示:
2.2 诊断仪在线
诊断仪在线包括 S3 服务器时间和 S3 客户端时间参数。
【S3 服务器时间】:表示该 ECU 从默认会话(Default Session)被切换到其他会话过后,经过多长时间会自动切换回默认会话的超时时间。
【S3 客户端时间】:表示作为诊断测试仪端,发送 TesterPresent 帧的时间间隔。
上述两个参数的示意图,可以点开【详情】按钮,查看图示说明,如图 2-8所示:
当使能【诊断仪在线】,在诊断模块上方会出现启动【诊断仪在线】的开关。设置诊断仪在线为【打开】状态,则按照设定的 S3 客户端时间间隔发送该报文。
诊断仪在线的发送字节是可选的。支持三种类型:
【默认诊断仪在线服务】:为最常用的 0x3E 0x80。
【从基础配置中选择】:从基本诊断配置中选择配置好的 3E 命令。
【用户自定义】:用于自定义的字节
2.3 种子密钥
TSMaster 中提供了两种 SeedKey 种子密钥的处理方法。第一种就是常用的加载主流的种子密匙的 DLL 动态链接库;第二种是提供了内置的种子密钥的解释器,可以直接编写 SeedKey 源代码,并可以保存生成 DLL 动态链接库。
2.3.1 载入动态链接库
TSMaster 不仅支持了 C/C++,Delphi 等语言封装的 DLL 文件,也新增支持基于 Dot Net 平台如 C#,VB.Net 等语言编写的 DLL 动态链接库,可以高效兼容不同平台生成的安全访问 DLL,为工程师带来更便捷的使用体验。
载入动态链接库加载界面,如图 2-10 所示:
图标从左往右依次为:
【1】 加载 DLL
【2】 删除 DLL
【3】 打开 DLL 校验器,通过 DLL 校验器,用户可以判断加载的 DLL 接口是否正确,算法是否符合设计要求。比如,用户选择 Seed 的 Level 过后,输入 Seed 值,点击 GenKey 进行判断。如果该 DLL 接口跟模板定义接口统一,则会输出提示信息:Generate Key Success,然后用户根据 Key 值跟目标值对比,进一步确认 DLL 中的算法是否符合设计要求。如图 2-11。
【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 文件,二次封装流程的示意图,如图 2-12。
第一步,查看当前的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 工程二次封装示例,如图 2-13。
第 三 步, 该 GenerateKeyEx 工 程 开 发 结 束 后 , TSMaster 直 接 加 载GenerateKeyEx 所在的 DLL。需要注意的是,用户需要把现有的 UserSeedKey.DLL
拷贝到 TSMaster 根目录或者 GenerateKeyEx.DLL 所在的目录。如果不拷贝过去,GenerateKeyEx.DLL 执行的时候会出现找不到对应依赖 DLL 的情况,解锁失败。
2.3.2 编写 SeedKey 代码
在 TSMaster 的内置算法编辑器里的操作流程,示意如图 2-14 所示。
【1】选择 SeedKey 算法的函数;
【2】打开算法校验器,可以于检查算法结果是否正确;
【3】打开编写代码的窗口;
【4】可用于导出所编写代码的为 DLL 文件;
【5】选择一个需要的 SeedKey 函数接口,并支持扩展自定义函数接口;
【6】SeedKey 源代码编辑工作区,用于解密算法代码的输入与编辑。
值得注意的是,TSMaster 目前提供了最常用的算法函数的接口形式,如果使用自己特殊的函数接口形式,可以联系上海同星支持,可将相应接口增加到选项中。
另外,所有的接口函数都定义了返回值类型为 s32。增加此约束,主要是增加函数的严谨性。其中,返回值为 0 表示成功,返回值为其他值则有对应的错误码。因此,在编辑代码的时候,最后一行需要加上 return 返回值,如图 2-15 所示,否则系统执行函数过后会认为算法执行失败,不予往后面执行。
3、TSMaster 基础诊断配置
1.添加删除服务命令
把鼠标放到需要添加和删除的服务命令上方,右键展开,选择是否需要添加和删除该服务,如下图所示:
2.配置基本诊断参数
以诊断会话控制为例,主要包含如下参数的配置,如图 3-3:
- 【1】 配置服务名称:用户可以配置一个易于理解和管理的服务名称。
- 【2】 是否功能标识符:本诊断服务是否采用功能标识符发送诊断请求。
- 【3】 是否有回复:用户可配置是否检查此服务的回复内容。
- 【4】 选择子服务类型:比如 Session Control 中的 DiagnosticSessionType 就包含如上图所示的 Session 类型。
- 【5】 参数列表的字节序:支持 Motorola 和 Intel 字节序。
- 【6】 参数列表:诊断服务除了诊断 ID 和子服务类型 ID,还可以带着参数发送给被测 ECU。参数列表包含请求和应答帧的参数列表,可以选择增加/删除多种类型的参数。如图 3-4。
3.诊断服务参数
诊断模块参数支持 7 种数据类型。包括:UInt,Int,Single,Double,HexArray,Ascii 和 SystemVar。如图 3-6。
- 【1】 UInt:无符号整型,其数据长度必须小于 32bits,并且为 8 的倍数,可以为 8,16,24,32bits。
- 【2】 Int:有符号整形,其数据长度必须小于 32bits,并且为 8 的倍数,可以为8,16,24,32bits。
- 【3】 Single:单精度浮点数,数据长度为固定的 32bits。用户直接输入输出浮点数据。
- 【4】 Double:单精度浮点数,数据长度为固定的 64bits。用户直接输入输出浮点数据。
- 【5】 Hex Array:十六进制数组,数据长度为 8 的倍数。输入数据满足 16 禁止数据类型。
- 【6】 ASCII:ASCII 字符串,数据长度为 8 的倍数。输入数据为 ASCII 字符数组,转化为 16 进制后进行发送。
- 【7】 SystemVar:系统变量,数据长度为 8 的倍数。TSMaster 系统变量可支持Uint,Int,Single,Double,UintArray,DoubleArray,HexArray,String 等各种数据类型。其具体的数据类型由系统变量自身定义所决定。
4.配置组合服务
诊断组合服务($343637 下载文件)共包含通用配置、擦除 Flash 配置、请求和传输数据配置、传输退出配置、扩展和辅助的配置。如下详细介绍每个配置。
4.1 通用配置
通用配置中支持加载下载文件格式为 hex/bin/s19/mot/srec/vdf 等等。可以对起始地址和数据长度的字节数修改,调调整校验和字节序和自定义 CRC 校验算法导入和修改,并可通过下载文件查看器下载文件内容。如图 3-7。
【1】服务名称:配置该服务的名称
【2】文件名称:加载可执行文件,支持 hex\bin\s19\mot\srec\vdf…
【3】hex viewer:TSMaster 内置了可执行文件查看编辑器 TSHexViewer,用户可以用该工具,查看载入 Hex 文件的详细信息,如图 3-8 所示。
【4】地址和长度标识符。可修改起始地址和数据长度的字节。
【5】校验和相关配置。校验和字节序支持英特尔和摩托罗拉。在程序下载过程中,为了保证数据的完整性,需要引入 Checksum 算法对数据的完整性和有效性进行校验。TSMaster 诊断模块的符合服务中,引入了主流的 CRC 算法进行校验。其选择框如下图所示,同时可实现自定义 CRC 校验算法导入和修改,此处自定义算法只能是 DLL 文件的形式,如图到 3-9。
4.2 擦除 Flash 配置
擦除 Flash 配置,可以配置无自动擦除、擦除 Hex 地址范围、下载每一个数据块之前擦除对应块。期望回复值以实际 ECU 的响应进行填写输入。如图 3-13。
4.3 请求和传输数据配置
请求传输数据命令的数据格式可以修改,比如从 00 修改为 AA。可以自定义最大传输数据块的长度,默认为 0x202,实际传输层数据包为 514 字节。如图3-14。
4.4 传输退出配置
传输退出配置,可以设置如下配置,如图 3-15:
- 无校验
- 在 ECU 端校验($37+块校验和)
- 用户自定义
- 在 PC 端校验($37+块校验和)
- 校验和类型选择无校验或校验每一个数据块
4.5 扩展
扩展配置可以添加签名文件、特殊的 CRC 算法,与通用配置-校验和相关配置里的自定义 CRC 算法导入相比,此处更灵活可支持任意格式的文件,如图 3-16。
4.6 辅助
辅助中可对下载文件按连续地址的大小分割,比如将数据块按 0x1000 进行分割。如图 3-17。