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段相同的状况呈现。