首页 > 代码库 > CAN总线学习笔记

CAN总线学习笔记

1.总线状态

  总线有“显性”和“隐性”两个状态,“显性”对应逻辑“0”,“隐性”对应逻辑“1”。“显性”状态和“隐性”状态与为“显性”状态,所以两个节点同时分别发送“0”和“1”时,总线上呈现“0”。

2.优先级 

  在CAN总线上,若同一个时刻,既有节点向总线上发送隐形电平(1),也有节点发送显性电平(0),那么此时总线上表现出来的为显性(0)。
  当总线空闲时,有多个节点同时需要发送报文,那么每个节点的发送器将会对发送位的电平和被监控的总线电平做比较,如果电平相同,那么该节点可以继续发送,如果发送的为一“隐性”电平(1),但是监控到一“显性”电平(0),那么该节点失去仲裁,必须退出发送状态,只到下一次总线空闲的时候在参与总线的仲裁竞争。
  由以上也可以看出,当有多个节点同时争夺总线的控制权,ID最小的那个节点将会胜出,所以在CAN总线上,节点的ID越小,优先级越高。
  先列举2种特殊情况,根据仲裁来判断优先级。
  1
)若在同一时刻,标准格式的报文与扩展格式的报文同时抢占总线,且它们的基础ID相同,则发标准格式的报文节点就会PK成功。这是因为扩展格式在基本ID后,紧接着是SRR位,与IDE位,且这两位都是隐性位。而在标准格式中,这两位分别对应的位为RTR与r1,其中RTR既可以为隐性位,也可以为显性位,,但是r1必须为显性位。由仲裁规则可以此时标准帧必定胜出。
  2
)同理,如果在同一时刻,具有相同格式,且具有相同ID的数据帧与远程帧争夺总线控制权,那么数据帧必定胜出。因为RTR显性表示数据帧,隐性表示远程帧。