前提说明
25年5月13号,再次编写,完善一下整个NetworkHardwareConfiguration的整体介绍,
整个网络硬件配置,涉及选项也比较多,此外根据总线类型,CAN或者CAN_FD(CANFD又分为两种ISOCANFD, NONCANFD两种),CANxl几种,每种总线协议下Setup界面都是不同的。我们先从简单到复杂,最后介绍Setup界面
配置界面
我们选择 CAN_1的逻辑通道为例:
(步骤1)开启NetworkHardwareConfiguration界面,如下图
从图中可以看到,右侧按照逻辑通道(也就是CAN1....CAN4....这些值都是固定的)呈现一个树形
区域,单击展开按键,可以依次打开选项
(1)CAN1-CAN4,每一个大项又单独包含4和小选项,依次是
(*1)Setup 设置
【这也是最重要的,很多基本和重要功能都是在这里设置的,多说一句,如果只想掌握基本操作,CANoe工程能够运行,那么掌握Setup中的一些基本配置即可】
(*2)Acceptance Filter
(接收过滤器,在设置界面上设置那些报文可以通过);
(*3)options
(若干配置项,主要是一些SSP设置和Txrq);
(*4)
CANopenSetting 关于CANopenSetting的设置;简单来说CANopen是针对在机器人,轨道机动车,医疗设备等上应用的比较多!CANopen是一种应用层协议。
1、先从最简单的 Acceptance Filter 开始说起
这就是一个可以设置那些帧报文可以通过的设置,怎么说喃?这是在数据链路层就进行的一种筛选方式,和我们在Trace界面上通过ID筛选存在不同(这是属于应用层的一种筛选)。此外根据官方文档的解释,此处进行更改还会导致总线statics数据发生变化。
实例化的解释就是,如果在此界面设置只能通过3条帧报文,但是实际上总线上有30条报文在总线上发生,假如此时总线负载率=60%,但是此时VN1640显示的总线负载率只有=6%。这一点也是之前就声明了的,这是针对数据链路层的过滤器,而总线负载率也是通过数据链路层来统计的。
1.1 Acceptance Filter设置界面
可以看到,右侧界面存在两个设置区,一个是针对传统11bit帧报文,一种是针对拓展29bit帧报文。
我们只需要掌握一种配置即可,
从上到下
(*1)Block all 所有报文都不接收
(*2)ID,可以单击Select ID在选择DBC中以及定义的报文。前面还有一段11bit XXXX。。。构成的示意图。这里选择后,ID就直接变成了你选择ID二进制。
(*3)Code和Mask,这两个放在一起讲,
1、Code 代表期望接收的报文 ID 的特征码。
2、Mask 则定义了哪些位是需要匹配的。具体来说,Mask 中的每一位如果是 1,就表示对应的 Code 位必须与接收到的报文 ID 位匹配;如果是 0,就表示该位可以忽略,不进行匹配。
比如,假设 Code 设为 0x123(001 0010 0011),Mask 设为 0x700。那么 Mask 的二进制是 01110000000,意味着只检查 ID 的高 3 位。接收到的报文 ID 高 3 位如果是 001(即 1),就会匹配,因为 0x123 的高 3 位是 001(假设 ID 是 11 位)。这样可以灵活过滤 ID。
即报文0x110,0x120,0x123等都可以通过,也就是报文ID最高位=1的报文都可以通过。
首先查看Mask,1表示要检查位,0表示不需要检查位。然后将需要Mask&(按位与)Code,得到一个值,只要报文的需要检查的位=Mask&(按位与)Code。
小结:总体来说比较复杂,实际作用不是很大,如果不感兴趣可以直接跳过。
2、Options(选项)
单击左侧树形导航图中的Options,得到如下界面
框选部分分为两个区域:“Channel-specific(通道设置)” 和 “CAN FD specific(CANFD设置)”。
2.1 先看 “Channel-specific” 下的选项:
- “Activate TxRq”:激活发送请求。勾选后,设备会启用发送请求机制,允许主动触发数据发送,用于控制数据何时通过通道发送到总线上。(这里对发送请求机制做出了些许解释,但是还是很含糊不清,并没有解释发送请求机制的主要内容是什么?定时发送机制?)
[查阅相关资料后,这个选项是和Output函数相关
output()
函数的行为:无论是否勾选 “Activate TxRq”,output()
都能发送报文,但底层实现不同:- 未勾选:CANoe 可能直接写入硬件发送缓冲区,绕过 TxRq 机制。
- 勾选:CANoe 会通过硬件的 TxRq 寄存器触发发送,更接近真实 ECU 的发送行为。实际影响:在大多数测试场景中,不勾选也能正常发送;但在模拟 ECU 通信或测试总线负载时,建议勾选以获得更真实的结果。
- “Activate Tx failed notification”:激活发送失败通知。勾选后,发送失败时会通知,便于错误处理。
-
- 勾选 “Activate Tx failed notification” 后,发送失败时 Trace 窗口会显示错误信息。
- 未勾选时,
outputEx()
可能仍返回错误,但 Trace 窗口不会特别标注
- Activate Tx failed notification” 的作用是:使 VN1640A 硬件在发送失败时设置状态标志。影响
outputEx()
的返回值,便于用户程序检测错误
2.2 再看 “CAN FD specific” 下的选项:
2.2.1)“Protocol exception support”: 协议外事件支持
勾选后,设备会处理 CAN FD 协议中的异常情况,增强容错。
看下文的一段描述:
这里勾选,起到的作用就是,检测到 res = 1时,不会报错。
2.2.2 另外一个重要的概念:“总线整合状态”,
什么叫做 “总线整合状态”
“总线整合状态(bus integration state)” 可通俗理解为 CAN 节点的 “通信准备阶段”。当 CAN 节点刚启动协议操作、从总线关闭状态恢复,或检测到协议外状态(仅 CAN FD 或兼容节点)时,会进入该状态。在此状态下,节点会监听总线信号,调整自身发送和接收行为,就像车辆进入高速公路前观察路况、调整车速,确保后续通信顺畅。当节点检测到总线连续出现 11 个隐性位(即总线空闲),则认为 “路况畅通”,随即离开该状态,正式参与总线通信。
提炼与总结:
(*1)所谓“总线整合状态(bus integration state)”,是针对节点(Node而言的);
(*2)“总线整合状态“ 是一种节点准备参与通信的一种阶段,只监听总线状态
2.2.3 另外一个重要的概念:“协议外事件”,
1)、什么是协议外事件
在 ISO 11898-1 标准中,“协议外事件” 是指接收节点检测到自身不支持,但符合规范定义的特定异常情况,这些事件旨在提高协议的向上(前向)兼容能力,是一种前瞻性容错机制,允许现有节点在无需修改硬件的条件下,容忍未来协议扩展带来的未知帧格式,降低网络升级复杂度。
解读:
2)、协议外事件的处理方式
3)、协议外事件处理实例
实例说明
实例1:CAN FD节点与传统CAN节点共存
- 场景:
CAN FD网络中存在一个传统CAN节点(此CAN节点仅支持经典帧格式,而其他节点则支持CAN_FD)。 - 协议外事件触发:
传统CAN节点作为接收节点时、收到CAN FD帧(符合ISO 11898-1标准但自身不支持),检测到以下特征:- FD帧的FDF(FD Format)位为隐性(表示CAN FD格式),但是CAN节点自身没有那么智能,在接收到CAN_FD帧报文时,传统CAN节点依次接收SOF+ID+RTR+IDE+r0。传统CAN协议中r0位一定要是显性,但是CAN_FD发出的却是FDF=01。如果此CAN节点,不支持协议外事件,就会报错,接收节点就会发出错误帧
- 数据段波特率提升至2 Mbps以上(传统CAN节点硬件不支持)。
- 处理方式:
传统CAN节点将此事件标记为“协议外事件”,忽略数据段内容,仅处理仲裁段(ID、DLC等),避免发送错误帧。总线通信正常进行,仅该传统CAN节点无法解析数据段。
解读:
2.2.4)“Use Edge filter for bus integration”:使用边沿滤波器进行总线集成。
- 3)“SSP offset user defined”:用户定义 SSP 偏移。勾选后可自定义第二采样点偏移,下方输入框 “SSP offset (%)” 用于设置偏移百分比,图中是 0%。
4:Mode=ISO_CAN_FD
重点讲解红色框中的参数,其他参数该如何设置,请参考我另外一篇文章“关于CANoe硬件及接口的学习笔记(VN1640A)”或自行查阅相关资料即可。
4.1 ClockFrequency
这个值是对应VN1640A内部的晶振频率,为80000KHZ,是固定值。用户不可修改。
4.2 SamplePoint 设置
点击... 图标,进入以下界面
这张图中所有参数,都值得研究
**1)Sample point ,采样点,CAN中采样点,在结构上是有固定位置的,即位于TSG1与TSG2的交接点出(不了解的同学,可以查查关于CAN的再同步资料CAN的填充机制解释及其延伸知识_can总线 位填充-CSDN博客)
暂时我们还需要记住,Sample point采样点的取值范围= [50.6,96.3]
**2)BTL cycles:可以理解为将一个bit位,拆解为多少份,很多资料将拆解成的小份成为Tq。
BTL= (ClockFrequent/总线波特率)/PreScaler。
首先我们来了解一个概念(单片机中的概念),即一个单片机时钟的频率=X(单位频率),则它对应的震荡周期T=1/X。
单片机通讯中,又存在另外一个概念,即分频系数。
单片机时钟频率/分频系数=通讯波特率。
注意:但是CAN通讯中,又引用了另外一个概念,预分频(Prescrele),就是指一个Tq(最小时间单元)频率=单片机时钟频率/预分频系数。
我们看图中第一行
BTL =80 = (80000K/500K)/ prescaler ,prescaler=2 带入是不是就计算出来了。
BTL的选取规则,BTL将一个bit分解为BTL个Tq,总线下降沿的时间<=Tq的时间。
**3)TSG1,TSG2
CAN的再同步过程中将一个bit位分为三部分
SS(同步段,固定占一个Tq的时间)+TSG1+TSG2 =BTLcycle
采样点= (TSG1/BTL)*100%
**4)SJW(同步跳跃宽度)
SJW跳跃宽度的执行规则(重点)
CAN的位同步过程中:
1)当下降沿出现在TSG1中时,先观察下降沿出现在,距离SS与TSG1交界点处的距离,记为X个Tq的距离。当X<=SJW,时增加TSG1中X个Tq的长度。即可正常完成再同步。
2)当下降沿出现在TSG2中时,先观察下降沿出现在,距离TSG1与TSG2交界点处的距离,记为Y个Tq的距离。当Y<=SJW,时缩短TSG2中Y个Tq的长度。即可正常完成再同步。
大家回到,下图中的设置界面
带着以下问题,再去看一遍所有的配置选项
1:TSG2的数值和SJW的数值大小关系?。
2:上文我们有两个结论,(1)*TSG1和TSG2是根据SJW会动态变化,而TSG1又会根据SJW动态变长,TSG2又会动态变短。(2)sample point是在TSG1和TSG2的交界处的。那么是否能够说明Sample Point的点也是浮动变化的?
答1:TSG2=SJW,也就是说在再同步过程中,TSG1可以最大增加SJW个Tq的宽度。SJW=TSG2,也就说明甚至一个帧中TSG1可以完全覆盖TSG2。所以采样点的位置,应该这样描述更加准确,是在TSG1结束时刻。
答2:结论就是Sample Point的点也是浮动变化的。软件执行时只会根据TSG1结束作为采样执行的触发条件。