案例背景:
vFlash 是一种易于使用的工具,用于对一个或多个 ECU 进行刷写软件。由于方法灵活,它可以支持各种汽车原始设备制造商的不同刷写规范。它支持通过 CAN、CAN FD、FlexRay、LIN、以太网/DoIP 和以太网/SoAd 对 ECU 进行刷写。
vFlash 既可交互使用,也可通过自动化接口控制。在交互模式下,用户只需按下按钮,即可加载项目并开始编程。
下面教您如何制作Vflash刷写过程中27服务 解锁所需的DLL动态链接库文件。
目录
[1 如何制作该"DLL动态链接库文件"](#1 如何制作该“DLL动态链接库文件”)
[1.1 如何获取"DLL动态链接库文件"的DEMO](#1.1 如何获取“DLL动态链接库文件”的DEMO)
[1.2 使用Visual Studio打开"DLL动态链接库文件"的DEMO](#1.2 使用Visual Studio打开“DLL动态链接库文件”的DEMO)
[1.2.1 API接口参数说明](#1.2.1 API接口参数说明)
[1.2.2 举例:27服务解锁算法](#1.2.2 举例:27服务解锁算法)
[1.2.3 生成DLL文件](#1.2.3 生成DLL文件)
1 如何制作该"DLL动态链接库文件"
1.1 如何获取"DLL动态链接库文件"的DEMO
在Vflash的安装路径下都会有下图这样的文件夹**SeedKeyExample。**这就是制作该DLL文件的DEMO。
Vflash的路径:
C:\Users\Public\Documents\Vector\vFlash\5\Examples\SeedKeyExample
1.2 使用Visual Studio打开"DLL动态链接库文件"的DEMO
下面以文件夹SeedKeyExample 为例。双击打开SeedKey.vcproj文件(须确保电脑已经安装Visual Studio)。
使用Visual Studio打开该工程后,在右侧的"解决方案资源管理器 "中,依次选择SeedKey -- > Source Files -- > SeedKey.cpp,接着在左侧你会看到被打开的SeedKey.cpp文件,在其中你会看到一个API GenerateKeyEx 接口,在该API接口中完成"27服务各security level安全等级解锁算法"即可。
1.2.1 API接口参数说明
ipSeedArray :表示接收到的27服务奇数subfunction中的Seed种子字节值"数组";
iSeedArraySize :表示接收到的27服务奇数subfunction中的Seed种子长度;
iSecurityLevel:表示接收到的27服务Security Level安全等级;
ipVariant:表示CanOe / Canalyzer中加载的诊断描述文件"当前使用的变体";
iopKeyArray :表示27服务偶数subfunction中发送的Key密钥字节值"数组";
iMaxKeyArraySize :表示27服务偶数subfunction中的发送的Key密钥长度;
oActualKeyArraySize :表示输出Key密钥长度,通常让oActualKeyArraySize =iSeedArraySize;。
1.2.2 举例:27服务解锁算法
假设:Seed的长度为4,Key的长度也是4。Key = Seed + 123456。我们可以这样改写该API GenerateKeyEx接口。
KEYGENALGO_API VKeyGenResultEx GenerateKeyEx(
const unsigned char* ipSeedArray, unsigned int iSeedArraySize,
const unsigned int iSecurityLevel, const char* ipVariant,
unsigned char* iopKeyArray, unsigned int iMaxKeyArraySize,
unsigned int& oActualKeyArraySize)
{
unsigned int seed = 0;
unsigned int key = 0;
seed = ((ipSeedArray[0] << 24) & 0xFF000000);
seed |= ((ipSeedArray[1] << 16) & 0x00FF0000);
seed |= ((ipSeedArray[2] << 8) & 0x0000FF00);
seed |= ((ipSeedArray[3] << 0) & 0x000000FF);
key = seed + 123456;
iopKeyArray[0] = ((key >> 24) & 0x000000FF);
iopKeyArray[1] = ((key >> 16) & 0x000000FF);
iopKeyArray[2] = ((key >> 8) & 0x000000FF);
iopKeyArray[3] = ((key >> 0) & 0x000000FF);
oActualKeyArraySize = iSeedArraySize;
return KGRE_Ok;
}
1.2.3 生成DLL文件
SeedKey.cpp文件编辑完成后,在右侧的"解决方案资源管理器"选中SeedKey,并鼠标右键,在其上下文中,单击生成。
在DEMO工程的路径下的Debug文件夹中,你会看到生成的SeednKey.dll文件。
将该SeednKey.dll 文件加载到Vflash中的Miscellaneous。
结尾
获取更多"汽车电子资讯"和"工具链使用"
请关注CSDN博客"汽车电子助手",做您的好助手。