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

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

OK 干货来了,开始讲解函数调用过程
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文件;

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

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

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

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

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


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


更多关于Vector工具介绍和应用案例,请关注怿星科技公众号!

怿星科技重点关注和跟踪汽车电子行业的新兴技术和产品,商务合作请联系:
电话:+86-021-6495-5659
网址:http://www.e-planet.cn
邮箱:marketing@e-planet.cn
上海总部:上海市徐汇区钦州北路1199号智汇园87号楼5F室(200233)
北京分公司:北京市大兴区CDD创意港嘉悦广场8号楼802室(102600)
微信号:怿星科技
英文ID:e-planet

