新闻  |   论坛  |   博客  |   在线研讨会
干货分享 | TSMaster 的 CAN UDS 诊断操作指南(上)
汽车电子工程师 | 2024-06-25 14:47:44    阅读:5467   发布文章

TSMaster 可以少代码甚至零代码就可以完成诊断流程开发,诊断开发人员只需要熟悉诊断流程,就能打通研发、产线、售后整条链路环节。


TSMaster 的 UDS 诊断功能不仅支持 CAN, LIN,同时也支持以太网的 DoIP 的诊断功能,TSMaster 的 

CAN UDS 诊断操作指南(上)篇,主要是针对UDS 诊断模块的创建、CAN UDS 诊断传输层配置和TSMaster 基础诊断配置进行讲解。


本文关键词:UDS,基础诊断,诊断系统变量


目录

Catalog

1. TSMaster 的 UDS 诊断模块的创建

2. CAN UDS 诊断传输层配置

3. TSMaster 基础诊断配置


一、TSMaster 的 UDS 诊断模块的创建

TSMaster 的 UDS 诊断模块的创建流程如下:


Step1:诊断模块位于主菜单【应用】->【诊断模块】,如下图 1-1。

图片

图 1-1 诊断模块


Step2:【添加基础诊断】模块,可以添加多个 CAN 基础诊断模块,如图 1-2。

图片

图 1-2 添加 CAN 基础诊断模块


TSMaster 支持创建多个诊断模块,并通过多通道的同星 CAN 卡进行绑定,可以同时与多个UDS诊断 ECU进行连接和诊断交互,进一步可以实现多个ECU的同步诊断刷写功能。


二、CAN UDS 诊断传输层配置

TSMaster 提供了诊断传输层的配置功能,用户可以根据需求配置相应的传输层配置比如总线类型、请求和应答 ID、FD 可变波特率、安全算法等等一系列配置。


1.诊断传输层

CAN 诊断传输层 ISO TP,包含诊断传输层和诊断服务层参数,如图 2-1 所示。

图片

图 2-1 诊断传输层 ISO TP 配置


其中诊断传输层 ISO TP 的具体参数如下分类介绍:


 总线类型:诊断传输层类型

使用同星 UDS on CAN/CANFD 功能可以选择总线类型为【CAN】或者【CAN FD】,通过下拉列表可以选择,如图 2-2 所示:

图片

图 2-2 CAN/CANFD 诊断总线类型


 通道:诊断模块用到的逻辑通道

TSMaster 支持多个诊断模块同时在线工作,这里用于选择当前诊断模块的应用逻辑通道,通过下拉列表进行选择,如图 2-3 所示:

图片

图 2-3 传输层通道选择


 请求 ID: 设置诊断模块 PC 工具端的诊断请求 ID。

 请求 ID 类型:设置诊断模块 PC 工具端的诊断请求 ID 类型,0 是标准帧(11 位),1 是扩展帧(29 位),如图 2-4 所示。

图片

图 2-4 请求 ID 类型选择


 应答 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 所示:

图片

图 2-5 FD 帧的最大 DLC


 FD 可变波特率:可以选择是否开启可变波特率模式。

 最大长度:服务层数据包的最大长度。该参数对于普通 CAN/LIN 是无意义的。


比如,多帧传输时 DLC 长度=8 字节,首帧(First Frame)采用第 0 字节低四位加第一个字节的 8 位,共 12Bit 表示一次传输的包的大小,也就是最多 4095个字节,如下表所示:

图片


当使用 CANFD 协议时,设置 DLC 长度>8 字节,可以采用更多的 Bits 来传输信息。因此,CANFD 的传输层支持采用第 2,3,4,5 四个字节共 32bit 来传输一个数据 Block 的长度,换句话说,CANFD 的传输层一次支持传输最多 4 个 G 的数据。具体支持多少,可由用户自主进行配置。

图片


注意:第一个字节 Byte0 的高四位=1,表示该帧是首帧(First Frame),无论是 CAN 还是 Classical CAN 的传输层都是如此。


2.诊断服务层

诊断服务层参数主要包含路由激活,S3,P2 时间参数,以及加载 SeedKey 的安全访问。如图 2-6 所示:

图片

图 2-6 诊断服务层参数


2.1 P2 时间参数

【P2 超时时间】:表示 ECU 收到诊断请求帧过后,最短回复的时间间隔。对于诊断工具端,该参数可以作为发送请求过后,等待回复的超时判断参数。比如诊断工具发送了一个诊断报文,P2 超时时间段内都没有收到回复,则认为请求失败,超时退出。


【P2 扩展时间】:当诊断工具发出诊断报文过后,被测 ECU 来不及在 P2 超时时间段内做出应答,则回复一帧 7F XX 78 报文,告诉诊断工具端自己来不及响应,需要延长等待时间再回复。ECU 发送了延迟等待报文后,则把等待时间参数切换为 P2 扩展时间。诊断工具端的超时判断参数在收到延迟等待报文后,需要切换到 P2 扩展时间。


上述两个参数可以点开【详情】按钮,查看图示说明,如图 2-7 所示:

图片

图 2-7 P2 时间参数设置

2.2 诊断仪在线

诊断仪在线包括 S3 服务器时间和 S3 客户端时间参数。


【S3 服务器时间】:表示该 ECU 从默认会话(Default Session)被切换到其他会话过后,经过多长时间会自动切换回默认会话的超时时间。


【S3 客户端时间】:表示作为诊断测试仪端,发送 TesterPresent 帧的时间间隔。


上述两个参数的示意图,可以点开【详情】按钮,查看图示说明,如图 2-8所示:

图片

图 2-8 S3 时间参数设置


【诊断仪在线】:TSMaster 断模块中,可以选择配置并使能诊断仪在线命令,如图 2-9 所示:

图片

图 2-9 诊断仪在线设置


当使能【诊断仪在线】,在诊断模块上方会出现启动【诊断仪在线】的开关。设置诊断仪在线为【打开】状态,则按照设定的 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 所示:

图片

图 2-10 载入动态链接库


图标从左往右依次为:

【1】 加载 DLL

【2】 删除 DLL

【3】 打开 DLL 校验器,通过 DLL 校验器,用户可以判断加载的 DLL 接口是否正确,算法是否符合设计要求。比如,用户选择 Seed 的 Level 过后,输入 Seed值,点击 GenKey 进行判断。如果该 DLL 接口跟模板定义接口统一,则会输出提示信息:Generate Key Success,然后用户根据 Key 值跟目标值对比,进一步确认 DLL 中的算法是否符合设计要求。如图 2-11。

图片

图 2-11 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 文件,二次封装流程的示意图,如图 2-12。

图片

图 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。

图片

图 2-13 GenerateKeyEx 工程二次封装示例


第 三 步, 该 GenerateKeyEx 工 程 开 发 结 束 后 , TSMaster 直 接 加 载GenerateKeyEx 所在的 DLL。需要注意的是,用户需要把现有的 UserSeedKey.DLL 拷贝到 TSMaster 根目录或者 GenerateKeyEx.DLL 所在的目录。如果不拷贝过去,GenerateKeyEx.DLL 执行的时候会出现找不到对应依赖 DLL 的情况,解锁失败。


2.3.2 编写 SeedKey 代码

在 TSMaster 的内置算法编辑器里的操作流程,示意如图 2-14 所示。

图片

图 2-14 内置算法编辑器


【1】选择 SeedKey 算法的函数;

【2】打开算法校验器,可以于检查算法结果是否正确;

【3】打开编写代码的窗口;

【4】可用于导出所编写代码的为 DLL 文件;

【5】选择一个需要的 SeedKey 函数接口,并支持扩展自定义函数接口;

【6】SeedKey 源代码编辑工作区,用于解密算法代码的输入与编辑。


值得注意的是,TSMaster 目前提供了最常用的算法函数的接口形式,如果使用自己特殊的函数接口形式,可以联系上海同星支持,可将相应接口增加到选项中。


另外,所有的接口函数都定义了返回值类型为 s32。增加此约束,主要是增加函数的严谨性。其中,返回值为 0 表示成功,返回值为其他值则有对应的错误码。因此,在编辑代码的时候,最后一行需要加上 return 返回值,如图 2-15 所示,否则系统执行函数过后会认为算法执行失败,不予往后面执行。

图片

图 2-15 函数 return 返回值


三、TSMaster 基础诊断配置


基础诊断模块包含基本诊断服务和组合服务。对于诊断过程中独立执行的命令,在基本诊断服务中;用于文件下载的$34、$36 和$37 放入组合服务中。如图3-1 所示:

图片

图 3-1 基础诊断配置


1添加删除服务命令

把鼠标放到需要添加和删除的服务命令上方,右键展开,选择是否需要添加和删除该服务,如下图所示:

图片

图 3-2 添加和删除的服务命令


2.配置基本诊断参数

以诊断会话控制为例,主要包含如下参数的配置,如图 3-3:

图片

图 3-3 配置基本诊断参数


【1】 配置服务名称:用户可以配置一个易于理解和管理的服务名称。

【2】 是否功能标识符:本诊断服务是否采用功能标识符发送诊断请求。

【3】 是否有回复:用户可配置是否检查此服务的回复内容。

【4】 选择子服务类型:比如 Session Control 中的 DiagnosticSessionType 就包含如上图所示的 Session 类型。

【5】 参数列表的字节序:支持 Motorola 和 Intel 字节序。

【6】 参数列表:诊断服务除了诊断 ID 和子服务类型 ID,还可以带着参数发送给被测 ECU。参数列表包含请求和应答帧的参数列表,可以选择增加/删除多种类型的参数。如图 3-4。

图片

图 3-4 新增与删除参数


其中,根据不同服务指令,可以设置不同的 ID 参数。比如诊断请求会话里的诊断会话类型参数是必选设置,而参数列表是可选的。在修改配置后,界面上方会实时显示实际诊断报文的示例报文,如请求协议数据包是:【10 01 xx xx】:xx 表示该参数是可变的,根据用户实际填入的数据确定;诊断仪将要收到的应答协议数据包为【50 01 xx】。如图 3-5 所示。

图片

图 3-5 请求与应答参数设置


3.诊断服务参数

诊断模块参数支持 7 种数据类型。包括:UInt,Int,Single,Double,HexArray,Ascii 和 SystemVar。如图 3-6。

图片

图 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。

图片

图 3-7 通用配置


【1】服务名称:配置该服务的名称

【2】文件名称:加载可执行文件,支持 hex\bin\s19\mot\srec\vdf...

【3】hex viewer:TSMaster 内置了可执行文件查看编辑器 TSHexViewer,用户可以用该工具,查看载入 Hex 文件的详细信息,如图 3-8 所示。

图片

图 3-8 查看载入的下载文件


【4】地址和长度标识符。可修改起始地址和数据长度的字节。

【5】校验和相关配置。校验和字节序支持英特尔和摩托罗拉。在程序下载过程中,为了保证数据的完整性,需要引入 Checksum 算法对数据的完整性和有效性进行校验。TSMaster 诊断模块的符合服务中,引入了主流的 CRC 算法进行校验。其选择框如下图所示,同时可实现自定义 CRC 校验算法导入和修改,此处自定义算法只能是 DLL 文件的形式,如图到 3-9。

图片

图 3-9 支持自定义 CRC 算法导入与修改


当加载好下载文件后,选择指定的算法过,诊断模块会对可执行文件计算其检验和值,包括该可执行文件每一个数据块的检验和值以及文件整体的检验和值,如图 3-10 所示。

图片

图 3-10 文件与数据块检验和值


TSMaster 的诊断模块能够直接把系统变量作为参数,在计算好每一个数据块与文件的检验和值过后,会进一步自动转化成系统变量,如图 3-11。

图片

图 3-11 检验和系统变量


生成好的检验和系统变量,可以通过系统变量的类型添加到服务参数中。以常用的校验可执行文件的有效性为例,配置如下的 $31 例程控制服务命令,就可以实现对文件有效性的检查,如图 3-12:

图片

图 3-12 检验和系统变量添加到服务参数


4.2 擦除 Flash 配置

擦除 Flash 配置,可以配置无自动擦除、擦除 Hex 地址范围、下载每一个数据块之前擦除对应块。期望回复值以实际 ECU 的响应进行填写输入。如图 3-13。

图片

图 3-13 擦除 Flash 配置


4.3 请求和传输数据配置

请求传输数据命令的数据格式可以修改,比如从 00 修改为 AA。可以自定义最大传输数据块的长度,默认为 0x202,实际传输层数据包为 514 字节。如图3-14。

图片

图 3-14 请求和传输数据配置


4.4 传输退出配置

传输退出配置,可以设置如下配置,如图 3-15:


 无校验

 在 ECU 端校验($37+块校验和)

 用户自定义

 在 PC 端校验($37+块校验和)

 校验和类型选择无校验或校验每一个数据块

图片

图 3-15 传输退出配置


4.5 扩展

扩展配置可以添加签名文件、特殊的 CRC 算法,与通用配置-校验和相关配置里的自定义 CRC 算法导入相比,此处更灵活可支持任意格式的文件,如图 3-16。

图片

图 3-16 扩展配置


4.6 辅助

辅助中可对下载文件按连续地址的大小分割,比如将数据块按 0x1000 进行分割。如图 3-17。

图片

图 3-17 下载文件分割设置


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客