在第三篇中将CAN协议帧结构基本介绍完了,下面来分析下具体的总线仲裁。
基于上节的仲裁段和控制段,这里主要考虑几种情况的仲裁:
假设一条CAN总线上有两个节点Node_A和Node_B。在总线空闲时,总线上为隐性电平,就在这个时候Node_A 和 Node_B 这两个节点同时向总线上发送数据,如下图,其中,Tx表示发送,Rx表示接收,也就是说每个节点都有发送与接收。
当作为发送方的节点会去接收自己发送的内容进行检查,即回读机制(节点在向总线上发送报文的过程中,同时也对总线上的二进制位进行“回读”,对比该节点发出的二进制位与总线上当前的二进制位是否一致,就可节点数据是否被正确接收。)
**情况1:**仲裁在前11位ID就结束 ,如上图。
从D28-D18,采用线与机制,逐位进行比较,一旦某位出现不同,上图的ID25,则显性位覆盖隐性位,仲裁结束,显性位的对应节点胜出,上图的Node_A。
**情况2:**仲裁在前11位ID未结束,即说明前11位ID相同
在这种情况下,我们就需要回顾一下前面的一个表:
根据这个表,我们可以进一步分为4种情况:
- 标准格式的数据帧与遥控帧,看RTR位,数据帧的RTR位恒为显性,遥控帧的RTR位恒为隐性。故前11位ID号相同时,标准数据帧优先级高于标准遥控帧。
- 扩展格式的数据帧与遥控帧,在前11位ID和后18位ID全相同的情况,与上条一致。
- **数据帧的标准格式与扩展格式,**比较标准格式的RTR位与扩展格式的SRR位,标准格式的RTR位恒为显性,扩展格式的SRR位恒为隐性。故前11位ID号相同时,标准数据帧优先级高于扩展数据帧。
- 遥控帧的标准格式与扩展格式,看IDE位,扩展格式的IDE位恒为隐性,标准格式的IDE位在控制段,恒为显性。故前11位ID号相同时,标准遥控帧优先级高于扩展遥控帧。
通过上述分析,我们可以知道在前11位ID号相同时,根据协议设定的RTR, SRR, IDE,就可以保证如下:
- RTR:保证数据帧优先级高于遥控帧;
- SRR :保证标准数据帧的优先级高于扩展数据帧;
- IDE :保证标准遥控帧的优先级高于扩展遥控帧。