文章目录
- 1、什么是CAN总线仲裁?
- 2、仲裁机制
- 3、仲裁过程
1、什么是CAN总线仲裁?
CAN总线上的每个节点都能监测到总线上发送的数据,当总线空闲时每个节点都能够进行报文发送,多个节点同时发送报文时,最终由哪个节点来进行发送是仲裁机制的来源。
2、仲裁机制
CAN总线采用的是非破坏性仲裁机制,具体来说就是:当节点B发送(Tx)的隐性电平1,回读/接收(Rx)的却是显性电平0,故节点B就知道仲裁失败了,从而转为接收状态。
3、仲裁过程
仲裁发生在报文的仲裁段Identifier。ID值越小,优先级越高。
如下图,在CAN网段上的节点123进行报文发送时,在仲裁段进行总线仲裁:
- 第一个位都是0,没有抉择出优先级高的报文,三个节点都继续发送;
- 第二个位节点3是1,其他两个节点是0,节点3退出发送,转为接收,节点1、2继续发送;
- 第三个位节点2是1,节点1是0,节点2退出发送,转为接收,节点1继续发送。
最终,经过总线仲裁节点1获得总线占用,进行报文发送。而节点2、3仲裁失败进入“只听”模式,在检测到总线空闲的第一时间再次尝试发送,继续进行总线仲裁。
风险在于网络负载率很高、消息报文很多时,低优先级的消息可能会延迟很久才发送成功。