硬件接口协议之“CAN总线仲裁及优先级”

本文主要介绍CAN总线的仲裁及优先级。


在总线空闲时,最先开始发送消息的节点获得发送权。如果多个节点同时往总线上发送消息,总线的使用权是通过消息帧标识符的逐位仲裁机制决定的,从仲裁段的第一位开始进行仲裁,连续输出显性电平最多的单元可继续发送。在仲裁过程中消息是不会丢失的,仲裁完成后,获得总线控制权的消息内容没有被仲裁过程篡改,将继续在总线上发送没有传输完的消息。
在CAN总线上,标识符值越小,消息的优先级越高。标识符全零的消息,由于它将总线电平保持在显性的时间最长,因此优先级最高。
CAN总线的仲裁机制如下图所示:


Wire-AND Bus Logic:只有节点发送的全是隐性,总线电平才表现为隐性;
Arbitration Logic:所有发送节点在发送数据的同时,也检测总线上的电平状态。如果总线电平状态与它发送的电平状态一致,则继续发送(Next);如果发送为显性,总线电平状态为隐性,则传输出现故障(Fault);如果发送为隐性,总线电平状态为显性,则该节点退出对总线占用权的竞争(Stop);
节点A和节点C同时向总线上发送数据,在仲裁阶段,逐位对比总线上电平与自身发送的电平,在标识符的第四位(ID7),节点C检测到总线上电平与其自身发送电平不一致,它自动退出对总线的竞争,节点A则继续发送数据。
具有相同ID的数据帧和远程帧在总线竞争时,仲裁段最后一位(RTR)为显性位的数据帧具有优先权,可继续发送。
标准格式ID与具有相同ID的远程帧或者扩展格式的数据帧进行总线竞争时,标准格式的RTR位为显性位的具有优先权,可继续发送。


CAN总线上的逐位仲裁机制与I2C总线的仲裁都应用到线与逻辑的电路基础,不同的是I2C的仲裁只是在主机间进行,而CAN总线没有主从机的概念。另外I2C的消息本身是不分优先级的,而CAN消息则是带优先级,有的消息出身高贵(标识符值越小),在仲裁中总会取胜。
为消息划分优先级比较适合于实时控制系统,这样可以确保重要的信息优先发送,相对次要的消息延迟发送,系统设计师应该根据应用的特点为不同消息确定不同的优先级(标识符),在类似DeviceNet这些规范组织的定义中,对于同样类型的消息,比如温度传感器,即使它们可能来自不同的供应商,但消息标识符是一致的。
对于车身控制CAN网络(舒适+信息娱乐),其特点是消息标识符种类多,而且消息发送没有固定频率或规律,在此类应用的CAN控制器,例如 Freescale 的 MSCAN(Motorola Scalable Controller Area Network)的设计中,控制器内部包括FIFO寄存器,它将具有相同标识符的消息按顺序保存,从而避免接收缓冲器溢出。而对于动力系统控制的CAN网络,总线上的消息特点是速度快,但是存在一定规律,此类应用的CAN控制器,例如Freescale的FlexCAN(CAN 2.0B-Compliant),它包括16~64个称为“mailbox”的接收缓冲器,运行时根据特定的过滤规则,将不同标识符的消息送到各自对应的mailbox。

支持小编,请点在看