从零学习VH6501 —— Sequences 类的理解

Posted 蚂蚁小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零学习VH6501 —— Sequences 类的理解相关的知识,希望对你有一定的参考价值。

相关文章

系列用的CANoe演示工程我放在了Git上,不定时根据博客更新。

CANoe-Demn


前言

  • 测试软硬件环境:
    VH6501 CAN Disturbance Interface
    CANoe 11 SP2
    Win10 X64

  • 如下图这是整个VH6501能够用到的所有

本章节将主要讲解 Sequences


文章目录


Class: CanDisturbanceSequence 直接输出一个自定义的序列

A user-defined sequence is sent directly on the bus
用户可以自定义的序列,可以直接发送到总线上

① 下面的这个脚本就是直接在总线上发送一个显性电平序列

下面的脚本是本系列博客用到的最简单的,代码最少的干扰代码。

testcase TC_01()

    CanDisturbanceSequence      sequence; //Object of sequence
    dword                       deviceID; //Device Id of disturbance interface
    char                        buffer[1024]; //text buffer for ToString method
    int result;
    char temp[100];
    deviceID = 1;


   sequence.Clear();

  //configure a sequence 320 FPGA ticks long and send a recessive bit at the Ack slot bit on the bus. A FPGA tick is 6.25 ns long, which leads to a bit time of 2 µs
  result = sequence.AppendToSequence(320, 'd');
  //Configure the frame trigger and the sequence to the CAN Disturbance Device
    //Send the sequence immediately on the bus
    result = canDisturbanceTriggerNow(deviceID, sequence);
    snprintf(temp, elcount(temp), "时间戳:%f ;结果:%d ", timeNow()/100000.0,result);//方便队医trace和报告的时间戳
    testCaseComment(temp);



② 运行结果,可以看到trace上一条 stuff error 的报文报错


③ 主要方法 AppendToSequence ()注解:

CanDisturbanceSequence 总共有三个方法;其它两个好理解,下面主要说AppendToSequence(添加要输出的序列)

下面的内容很对AppendToSequence 做详细解释。。。
下面的内容很重要。。。
下面的内容很重要。。。
下面的内容很重要。。。

AppendToSequence 方法有以下两个参数:

  • segmentLength:干扰总线的时间,多少个 FPGA ticks,这一点我们要知道,VH6501的FPGA晶振是160M的,所以一个 FPGA ticks 周期 T0 = 1/160M = 6.25 ns(纳秒)
    代码中的 sequence.AppendToSequence(320, 'd'); 320 什么意思呢?因为我们CAN总线是500kb/s速率,所以周期T1 = 1/500K = 2000 ns (纳秒) ; 而320 * 6.25 =2000 ,也就是说需要320个 FPGA ticks才能刚好干扰一个CAN bit 位。

  • segmentValued: 显性干扰 ,r是 隐性干扰

那又为什么?脚本中输出了这个序列 sequence.AppendToSequence(320, 'd'); ,就导致了stuff error(格式错误)了呢

总线空闲状态都是隐形电平,当收到一个显性电平(VH6501此处干扰导致),那么总线认为这个一个报文的起始帧,但是后面并没有真的报文的结构,所以总线报错,格式错误。(看下图的帧格式说明)
如果上面脚本设置了sequence.AppendToSequence(320, 'r');和设置了sequence.AppendToSequence(320, 'R');都不能导致总线错误的,不信的小伙伴可以尝试下。







Class: CanDisturbanceFrameSequence ,输出一个指定的报文到总线上

Represents a CAN/CAN FD frame as sequence. Contains all fields of a CAN/CAN FD frame.

当满足触发条件后,将向总线上发送一帧定义的报文

① 下面的这个脚本就是直接在总线上发送一个报文ID为0x100的报文

testcase TC_02()

    canDisturbanceFrameSequence frameSequence;
    message 0x100               msgFrameSeq;
    dword                       deviceID; //Device Id of disturbance interface
    long                        result;
    char temp[100];
    deviceID = 1;
    //set message to sequence
    msgFrameSeq.dlc = 4;
    frameSequence.SetMessage(deviceID, msgFrameSeq); 
    result = canDisturbanceTriggerNow(deviceID, frameSequence); //output the sequence once
    snprintf(temp, elcount(temp), "时间戳:%f ;结果:%d ", timeNow()/100000.0,result);
    testCaseComment(temp);



② 运行结果,可以看到trace上一条ID为0x100,DLC=4的报文。


③ 主要方法 canDisturbanceFrameSequence:: SetMessage ()注解:

设置当触发条件满足后,向总线上输出的报文。
仔细看,这个方法还有一个重载的方法,form2 这个方法呢,还可以定义要触发报文的 仲裁段和数据段的bit 长度;比如我这里用的CAN速率是500kb/s ,也就是320个 FPGA ticks ; 如果我们使用form2 ,可以让这个触发报文的速率和我们的总线不同,当然这会导致总线错误


Class: CanDisturbanceFrameSequenceField 和CanDisturbanceBitSequence

这两个类呢,是可以设置和访问到具体的CAN/CAN-FD 帧结构的具体每个bit的,因为用的少,下面通过一个case简单介绍下(暂时空缺,有好的case再填充)

总结

本章博客,讲解了VH6501的函数库中的 CanDisturbanceSequence 类,和主要方法 AppendToSequence 方法。
更全面的VH6501学习请参考帮助文档和官方示例
C:\\Users\\Public\\Documents\\Vector\\CANoe\\Sample Configurations 11.0.55\\CAN\\MoreExamples\\CANDisturbanceInterface

  • 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
  • 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

以上是关于从零学习VH6501 —— Sequences 类的理解的主要内容,如果未能解决你的问题,请参考以下文章

从零学习VH6501 —— Trigger Configuration类干扰触发条件的设置

从零学习VH6501 —— Repetitions 干扰触发的次数配置

从零学习VH6501 —— 环境搭建

从零学习VH6501 —— 采样点测试

从零学习VH6501 —— Bus Off 的基本理解和测试用例设计

500K通讯速率下标称位宽度为320ticks