1. 引言
在UDS刷写流程中,安全访问(0x27 Service) 是最关键的一道防线。它的作用是防止未经授权的操作——在刷写固件之前,ECU会要求上位机证明自己拥有合法的访问权限。这个验证过程通常基于 种子-密钥(Seed-Key) 机制:
上位机请求种子:发送
27 01请求,ECU返回一个随机数(种子)上位机计算密钥:将种子输入到车厂提供的专用DLL中,计算出对应的密钥
上位机发送密钥:发送
27 02+ 密钥,ECU验证通过后开放刷写权限
TOOMOSS_SID27_SecurityAccess.vi 就是负责完成这个完整流程的子VI。它调用通信基座发送请求和接收响应,并通过调用外部安全访问DLL(通常由车厂提供)完成种子到密钥的转换。
2. 子VI功能概述
2.1 设计目标
发送
27 09请求种子,接收ECU返回的种子数据调用外部安全访问DLL,将种子转换为密钥
发送
27 0A+ 密钥,接收ECU的验证结果返回最终执行状态
2.2 UDS 0x27服务协议说明
请求种子(27 09):
请求:Byte 0: SID = 0x27, Byte 1: subFunction = 0x9 响应(肯定):Byte 0: SID = 0x67, Byte 1: subFunction = 0x09, Byte 2~N: 种子数据
发送密钥(27 0A):
请求:Byte 0: SID = 0x27, Byte 1: subFunction = 0x0A, Byte 2~N: 密钥数据 响应(肯定):Byte 0: SID = 0x67, Byte 1: subFunction = 0x0A
否定响应(两种请求共用):
Byte 0: SID = 0x7F, Byte 1: 0x27, Byte 2: NRC
2.3 输入参数
| 控件 | 类型 | 说明 |
|---|---|---|
| 设备句柄 | U32 | 由TOOMOSS_OpenDev(CAN).vi返回的设备句柄 |
| 通道号 | 枚举(CAN1/CAN2) | 选择使用CAN1还是CAN2通道 |
| 物理地址 | U32 | 请求报文ID(发送给ECU的CAN ID) |
| 响应地址 | U32 | 期望的响应报文ID(ECU回复的CAN ID) |
| 安全访问DLL库路径 | 字符串 | 车厂提供的安全访问DLL的完整路径 |
2.4 输出参数
| 控件 | 类型 | 说明 |
|---|---|---|
| 响应数据 | U8数组 | 完整的安全访问响应数据(包含27 02的响应) |
| 返回值 | I32 | 0表示成功,-1表示失败 |
| 错误信息 | 字符串 | 失败时的错误描述 |