can总线仲裁问题

时间:2022-05-18 07:54:38
          首先,你要明确一个概念,CAN总线上的节点都是自顾自的发送报文,抢夺总线资源的;然后,一个CAN节点在发送报文的同时也在接收总线上的信息,每个报文都是从ID先开始发送,并且通过ID判断优先级(显性覆盖隐性),当它发现接收到的数据(ID)与它发送的不一致时就退出发送,等待一会;再然后,为什么数据(ID)不一致就退出呢,因为只有优先级比它高的报文才能覆盖它的ID场,最后,回答你第一个问题,几个报文在抢,优先级最高的就抢到了总线,其实它并不知道有人跟它抢(因为它优先级高),她认为总线对它来说是空闲的。
 
 在CAN总线上,若同一个时刻,既有节点向总线上发送隐形电平(1),也有节点发送显性电平(0),那么此时总线上表现出来的为显性(0)。  当总线空闲时,有多个节点同时需要发送报文,那么每个节点的发送器将会对发送位的电平和被监控的总线电平做比较,如果电平相同,那么该节点可以继续发送,如果发送的为一“隐性”电平(1),但是监控到一“显性”电平(0),那么该节点失去仲裁,必须退出发送状态,只到下一次总线空闲的时候在参与总线的仲裁竞争。 由以上也可以看出,当有多个节点同时争夺总线的控制权,ID最小的那个节点将会胜出,所以在CAN总线上,节点的ID越小,优先级越高。