LIN总线帧结构及各场干扰 下:LIN总线帧结构干扰 | linSendHeaderError() | linInvertRespBit() | linInvertHeaderBit()

一、LIN总线帧结构——LIN总线帧结构及各场干扰 上

二、LIN总线帧结构干扰

LIN帧的不同场格式需要按照协议进行开发,为了测试样件是否不响应错误的帧结构,就需要对LIN帧中各个场分别进行干扰以达到所需要的测试目的。实现干扰的方式有很多,本文通过CAPL自带函数来进行相应的干扰,下面将对CAPL函数linSendHeaderError()、linInvertRespBit()、linInvertHeaderBit()
进行介绍。

1. linSendHeaderError()

该函数用于干扰报文头,包含三个参数,一个是syncByte,用于设置同步场位;一个是idWithParity,用于设置标识符场;最后一个是StopAfterError,该位置1表示如果报头中一旦有某个场出现错误,则终止之后报头场的发送。

具体参数如图所示

在这里插入图片描述

截取自Vector Browser Helper

下面通过一个干扰ID为0x33的报文PID场中奇偶校验位的实例,来帮助大家进一步深入理解该函数。

// Force an error in header of LIN frame with ID=0x33 by setting wrong protected ID
on key 'h'
{
   byte linID, protectedID, corParity, errParity, errPID;
   // calculate protected ID with wrong parity bits
   linID = 0x33; // use frame ID=0x33
   protectedID = linGetProtectedID(linID); // get protected ID
   corParity = (protectedID & 0xC0) >> 6; // extract parity (0xC=0=11000000)
   errParity = (corParity ^ 0x2) & 0x3; // calculate wrong parity using XOR
   errPID = linID | (errParity << 6); // calculate PID with wrong parity
   linSendHeaderError(0x55, errPID, 0);
}

给大家大致解释一下脚本的实现逻辑,首先通过linGetProtectedID()可以获取该报文正确的PID值,然后通过corParity = (protectedID & 0xC0) >> 6提取出奇偶校验位,与0x2异或干扰校验位,最后通过errPID = linID | (errParity << 6)得出一个干扰过奇偶校验位的PID值并赋值给自己先前声明的errPID即得到了一个带有错误奇偶校验位的PID值,通过函数linSendHeaderError(0x55,errPID,0)发送错误PID值的LIN报头,即实现了对PID场的干扰。

2.linInvertRespBit()

该函数用于干扰响应,主要关注的参数如下,byteIndex用来指定干扰数据场第几字节(如果该参数值设置为报文长度,则干扰的是校验位长度);bitIndex用来指定干扰相对应第几位;level值为0的话,则把相应位从隐形干扰成显性,如果为1则反之从显性干扰成隐性;numberOfExecutions这个参数用来定义干扰的个数。

具体参数如图所示

在这里插入图片描述

截取自Vector Browser Helper

下面通过下面的示例,来帮助大家进一步深入理解该函数。

on key 'i'
{
...
// Invert first bit of byte field 8 for LIN frame with ID=0x33
linInvertRespBit(0x33, 7, 0);
...
// Invert bit 7 of checksum byte field for LIN frame with ID=0x33
linInvertRespBit(0x33, 8, 6);
...
// Invert stop bit of byte field 8 for LIN frame with ID=0x33
linInvertRespBit(0x33, 7, 8);
...
}

第一个函数是干扰第8个比特,由于bitIndex是0,所以干扰的是该比特的第一个位,其中第二个函数如果byteIndex的长度和DLC长度一样,则说明干扰的是该报文的checksum位。

3.linInvertHeaderBit()

该函数用于干扰报头,主要关注的参数如下,byteIndex用来指定干扰数据场类型,如果为-1,则是干扰间隔场,如果为0干扰同步场,如果为1干扰PID场;bitIndex用来指定干扰相对应第几位,如果为8则是干扰stopbit;level值为0的话,则把相应位从隐形干扰成显性,如果为1则反之从显性干扰成隐性;numberOfExecutions这个参数用来定义干扰的个数;disturbAfterHeaderID这个参数用来指定在该ID之后进行干扰,这个参数需要搭配waitForHeaders使用,如果设置waitForHeaders为0,disturbAfterHeaderID为5,则是等收到ID为5的报文后,在下一个报头直接进行干扰。

具体参数如图所示

在这里插入图片描述

截取自Vector Browser Helper

三、小结

通过上述的介绍,大家应该对基于CAPL对LIN报文各场干扰有了一定的了解了。通过发送干扰的报头或者对从节点的响应进行干扰,然后再发送正常帧,即可通过该正常帧的数据,对ResponseError位是否能正确置位进行测试了。

北汇信息作为Vector中国的合作伙伴,致力于为中国汽车客户提供优质的工具支持、解决方案以及测试服务。

图片来源:LIN Specification Package Revision 2.1以及Vector

喜欢本篇文章的话记得💬评论💖点赞⭐收藏
➕更多技术文章直播课程,敬请持续关注北汇信息➕
⬇️业务咨询请私信北汇信息或在官网留言⬇️
📩📩📩
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值