CANoe诊断功能——安全算法调用介绍

通常情况下,在CANoe中加载诊断数据库cdd文件后,我们就可以在DiagnosticConsole诊断面板里进行安全访问相关操作。但是至少要需要手动依次触发3个诊断命令(如下图):扩展模式切换(10 03)- 请求种子(27 03)-发送秘钥(27 04),在一些诊断服务(比如22写服务)中会频繁地涉及到安全访问,这时候手动发送安全访问指令会非常不方便。Don’t worry, 山人自有妙计,今天小编就在这里介绍如何利用CANoe的CAPL函数快速实现安全访问的方法。

 

 

在进入函数讲解之前,先看一下安全访问的基本概念,和其它常规通信一样,就是一个由种子计算秘钥的过程,有点像行走江湖上的人对暗号(天王盖地虎,宝塔镇河妖),嘿嘿。

 

OK  干货来了,开始讲解函数调用过程

 

制作安全算法DLL

 

1)利用Vector自带的VC模板生成DLL文件,这个文件在公用文档里的Vector Diva或vFlash文件夹里,或者在CANoe的诊断demo里面也可以找到,如下图:

 

2)用VC6.0或VS201X(2010,2013,2015等都可以)打开项目中的.vcproj工程,注意用VS打开后系统会提示程序迁移变化,不用管它选择接受即可;

 

3)打开后编辑安全等级算法(接口函数在.cpp文件里),接口函数参数是和CAPL里一一对应的,比如在这里编辑一级安全访问算(key =  seed + 8),也可以嵌入CRC8或CRC32的算法;

 

 

 

4)在VS中编译生成DLL,在项目文件下的debug目标可以找到生成的DLL文件;

 

在CANoe中加载安全算法DLL

1) 进入CANoe的Diagnostic/ISO TP界面;

 

 

2) 加载完cdd后,在Diagnostic Layer界面下的Security Access选项下加载DLL文件;

 

 

 

在CAPL编辑脚本调用安全算法DLL

1)在CAPL的变量声明中先定义与安全访问相关的参数和诊断请求:

 

2)在请求到ECU发出的种子后,使用DiagGenerateKeyFromSeed函数调用DLL计算秘钥,然后发给ECU;若秘钥计算正确,ECU解锁,安全访问通过,否则不通过。此函数具体使用方法见help文档,选中函数名称点F1即可查询。

 

 

3)在CANoe中运行, demo用的是仿真模式,ECU响应也由CAPL模拟,按下a键则安全访问开始,如下:

 

4)OK,剩下的工作就是集成其它诊断命令了,比如在安全访问前发出1003(扩展模式切换),或者在安全访问之后进行22写服务,大家可以自由发挥了。