从零学习VH6501(八) —— 采样点测试

本文介绍了CAN/CANFD总线的采样点重要性,详细阐述了测试原理,通过VH6501设备进行干扰报文以测试节点的采样点,同时提供了具体的测试脚本示例,展示了如何设置和调整采样点以确保网络中节点的一致性。测试结果显示采样点对于避免错误帧和网络故障至关重要。
摘要由CSDN通过智能技术生成

📙 相关文章

在这里插入图片描述


📘前言

  • 采样点是节点判断信号逻辑电平的位置,对CAN/CAN FD总线来说极其重要,尤其是在组网的时候,多个节点要尽量保持同一个采样点。若网络中节点采样点不一致可能会导致同样的采样频率出现采样错误,进而使整个网络出现故障,所以对CAN/CAN FD节点进行采样点的测试显得尤为重要

在这里插入图片描述

请添加图片描述

测试原理

本文描述的采样点测试案例中被测节点扮演的是接收节点的角色。以CAN采样点测试为例,VH6501在检测到总线空闲时,发送较高优先级的特定干扰报文,完成一个干扰循环。每次干扰循环发送结束,微调CRC Delimiter位(隐性位)长度,使其逐次缩短,导致后一位ACK Slot(显性位)前移,并将ACK Slot长度增加,保证整帧报文的长度不变。当显性位电平由后往前,移至DUT采样点位置,会被DUT采到并判定CRC Delimiter位为高电平,出现格式错误,DUT随即发送错误帧,并被CANoe采集到


在这里插入图片描述


采样点设置

比如我演示使用的ECU的需求是这样的; the def_SAMPLE POINT position for nominal bit shall be 80%

  • 位时间分布如下图1所示 ,这点需要先了解下位时间的概念链接不然真不好理解采样点的参数
  • 所以我设置采样点参数如下图2

在这里插入图片描述
在这里插入图片描述


测试脚本

这个测试脚本测试的是CAN-FD 仲裁段的采样,如果要对数据段采样测试,请干扰数据段的bit
代码理解:
每次触发干扰就会进入 on sysvar sysvar::CANDisturbanceInterface1::Trigger::State
干扰位缩短到一定程度时,成为错误帧进入 on errorFrame 测试结束

/*@!Encoding:936*/
includes
{
  
}
variables
{
    CanDisturbanceFrameTrigger frameTrigger;
    CanDisturbanceFrameSequence frameSequence;
    CanDisturbanceSequence sequence;
    CanDisturbanceTriggerRepetitions repetitions;

    //Number of disturbance repetitions in a cycle
    long result;
    long validityMask;
    long cycleFlag;
    message 0x100 triggerMessage = {FDF = 1}; //The triggermessage.(ID is not important.)
    message 0x0 spTestMsg = {FDF = 1}; //The disturbance frame sequence which CRC DEL need to be shorten.
    char spTestDone[33] = "SPDone";
    int init_bit_length ,last_bit_length ;
}

on errorFrame
{
    if(this.msgChannel == @sysvar::CANDisturbanceInterface1::ChannelNo)
    {
     last_bit_length =  frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0];
     write("Last CRC Delimiter Bit Length = %d",last_bit_length);
     testSupplyTextEvent(spTestDone);
    }
}


on sysvar sysvar::CANDisturbanceInterface1::Trigger::State
{
    //6501 is Idle after repetition_times_in_one_cycle finish
    if(@this == sysvar::CANDisturbanceInterface1::Trigger::State::Idle) // Idle:0 ;Active:1;Triggered:2 
    {
       // 如果测试CAN-FD的高速数据段的采样点,请使用 frmSequence.CRC 数据
        --frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0];
        ++frameSequence.AckSlot.BitSequence[0].segmentLength[0];
        result = canDisturbanceTriggerEnable(@sysvar::CANDisturbanceInterface1::DeviceNo,frameTrigger, frameSequence, repetitions);
        if(result == 1)
        {
            write("Trigger is enabled,frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0] = %d",frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0]);
        }
        else
        {
            write("Enable trigger error Result = %d", result);
        }         
    }
}
testcase SamplePointTest_forVH6501()
{
    frameSequence.SetMessage(@sysvar::CANDisturbanceInterface1::DeviceNo,spTestMsg);
    validityMask = 0; //trigger on any CAN messages
    frameTrigger.SetMessage(triggerMessage,@sysvar::CANDisturbanceInterface1::DeviceNo, validityMask);
    frameTrigger.TriggerFieldType = @sysvar::CanDisturbance::Enums::FieldType::EndOfFrame;
    frameTrigger.TriggerFieldOffset = 9; //Trigger position is the third bit of IFS.
    init_bit_length = frameSequence.CRCDelimiter.BitSequence[0].segmentLength[0] ;
    write("Init CRC Delimiter Bit Length = %d",init_bit_length);
    repetitions.Cycles = 1;
    repetitions.HoldOffCycles = 0;
    repetitions.HoldOffRepetitions = 0;
    repetitions.Repetitions = 1;
    result = canDisturbanceTriggerEnable(@sysvar::CANDisturbanceInterface1::DeviceNo,frameTrigger,frameSequence,repetitions);
    if(result == 1)
    {
        write("Trigger is enabled.");
    }
    else
    {
        write("Enable trigger error Result = %d", result);
    }
    result = testWaitForTextEvent(spTestDone, 10000);
    if(result == 1)
    {
        write("sample point lies in %f", (double)last_bit_length / init_bit_length*100);
    }
}


测试结果如下:
在这里插入图片描述


在这里插入图片描述

End

🌎总结

23

请添加图片描述

🍅 有需要这个系列演示文章所用demo工程的,可以关注下方公众号网盘自取啦,感谢阅读。
7

  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

  • 🚩 有微信的小伙伴可以关注下浪哥车载诊断,一个行业内小小圈子,群里有网盘资料源码还有各路大神 闲时交流交流技术,聊聊工作机会啥的。

  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
    18
  • 22
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚂蚁小兵

慢慢长夜磨一章好文章,费烟!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值