在文章《CANoe-如何实现27服务解锁》里,我们介绍了诊断控制台中如何实现27解锁,如果我想在CANoe中使用CAPL程序解锁的话,又要如何实现呢?
CAPL脚本也是通过模拟手动操作来实现27解锁,所以步骤为:
- 发送10 03
- 发送27 01
- 接收67 01,获取seed值
- 根据seed值和算法,计算出key值
- 发送27 02 + key值
- 接收67 02,说明解锁成功
所以问题的关键就在:CAPL如何使用算法计算key值!
在CAPL的诊断函数集中,有一个函数可以根据seed计算出key:
具体语法:
long diagGenerateKeyFromSeed ( byte seedArray[], dword seedArraySize, dword securityLevel, char variant[], char ipOption[], byte keyArray[], dword maxKeyArraySize, dword& keyActualSizeOut); // form 1long DiagGenerateKeyFromSeed(char ecuQualifier[], byte seedArray[] , dword seedArraySize, dword securityLevel, char variant[], char option[] , byte keyArray[], dword maxKeyArraySize, dword& keyActualSizeOut