您现在的位置:首页 > >

CAN总线中节点ID相同会怎样?

发布时间:

CAN 总线中节点 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 总线分析仪,产品详见 ZLG 致远电子官网) 图 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 段相同的情况出现。


热文推荐
猜你喜欢
友情链接: 工作计划 总结汇报 团党工作范文 工作范文 表格模版 生活休闲