CAN-bus网络中,出现具有相同ID段的两个节点会发生什么?

can-bus网络中原则上不允许两个节点具有相同的id段,但如果两个节点id相同会怎样呢?资深强迫症患者想一探究竟!
实验前,我们首先要对can报文的结构组成、仲裁原理有清晰的认识。
can报文结构
目前使用最广泛的can-bus网络标准是v2.0版本,该标准又分为a、b两部分,它们主要的区别在仲裁区域的id码长度。其中can2.0a(标准帧)为11位id,can2.0b(扩展帧)为29位id。下表1为can报文结构:
表1 can报文结构
仲裁原理
can总线的仲裁是基于“线与原理”,如图1所示。当个收发器同时发出不同电平信号时,隐性电平总是被显性电平覆盖。can控制器在发送报文的同时会监听总线状态与自己发送的电平是否一致,如果不一致发生在id段则会发生仲裁,如果发生在其他区域则会触发相应错误。
图1 线“与”示意图
下面进入重点,如果两个节点id段相同会怎样?我们用两个can卡 和一台canscope开始实验,can卡模拟can标准节点收发报文,canscope做通信监控,如图2所示。(注:can卡为usb转can工具,canscope为can总线分析仪,产品详见致远电子官网)
图2 实验平台搭建
实验一:id段相同但数据不同
使用一个can卡发送id为000h数据为01020304050607h的can帧,使用另一个can卡发送id为000h数据为02020304050607h的can帧。canscope监听的数据如图3所示,可以观察到有大量的数据场填充错误。
图3 数据场填充错误
为什么会这样呢?我们首先分别获取两个can卡发送报文对应的波形,如图4。因为两针报文同为标准数据帧,且每帧包含8个字节数据,所以两帧报文对应的波形在id段、rtr、ide、r0以及dlc段完全一致。因此,仲裁作用失效,两节点都认为自己获得了优先权,继续发送数据。
图4 报文对应波形对比
现在我们聚焦数据段,第一个字节数据相同,均为为00h;第二个字节数据不同,分别为01h、02h。图5箭头标示处可以看到两者对应位的逻辑分别为0和1。前面我们提到can节点在发送报文的同时会检测总线电平是否与自己发送的电平一致,若不一致发生在非仲裁区域则触发相应错误,因此若这两帧报文同时发送到总线上必将发生位发送错误。因为位发送错误会引起节点发送违反填充规则的6个显性位(主动错误破坏该帧数据),故出现数据场填充错误,如图3。
图5 数据场冲突
实验二:id相同数据也相同
同时使用两个can卡发送id为000h数据为01020304050607h的can帧,canscope做通信监控。首先,我们不勾选“总线应答”选项,使canscope工作在仅监听模式。实验结果如图6所示,出现的是应答定界符格式错误。
图6 应答界定符格式错误
为什么会发生这种错误呢?发送报文的节点会在ack段发送两个隐性位,若在第一个位期间接收到显性电平则认为该帧被正确接收。由于仲裁段相同时两节点都认为自己取得仲裁权,在ack段等待应答,但该网络中仅存在两个节点,因此在ack段不能收到应答,进而发生应答定界符错误。简单说来这种情形就类似于总线中只有一个节点将不能实现数据发送。图7是在ack段有无应答时的波形对比。
图7 ack应答
我们勾选上总线应答,再次开始实验(此时总线中相当于有3个节点)。这时如图8所示,总线数据收发正常。
图8 启动总线应答
总结
当两节点同时发送id相同数据不同的报文时,将发生数据场填充错误;当两节点同时发送id相同数据也相同的报文时,若有其他节点应答则不发生错误,若无其他节点应答则发生应答错误。因此,我们在设计can总线时应避免id段相同的情况出现。

1月7日CES开展 五大话题最热
中国电信“医疗云专区”方案发布,标志底座能力进一步夯实
泰克公司推出TLA6400系列便携式逻辑分析仪
智能音箱到底智能在哪些地方
浅谈状态机的要素、分类
CAN-bus网络中,出现具有相同ID段的两个节点会发生什么?
低功耗技术与信号检测简介
带通滤波器ACPF-7024和ACPF-7025特性分析
树莓派设计 无线感应报警器DIY创意无限
稳压器和UPS电源对医疗设备的重要性
贴片电阻的工作参数和类别,如何判断贴片电阻的阻值和功率大小?
超声波塑焊机的焊接原理
关于导热硅脂的小知识
使用Python可视化数据,机器人开发编程
MAX9617–MAX9620低功耗、零温漂运算放大器
高频印制板应用与基板材料简介
释放音乐动力 大众帕萨特改装芬朗汽车音响
人工智能已在军事领域引起极大兴趣
想要完成全球先进产能的配套服务,需与海外企业充分合作
100%自主研发!龙芯中科新一代通用处理器发布