转载:http://www.eeworld.com.cn/qrs/2011/0712/article_5834.html
CAN总线采用的是一种叫做“载波监测,多主掌控/冲突避免”(CSMA/CA)的通信模式。这种总线仲裁方式允许总线上的任何一个设各都有机会取得总线的控制权并向外发送数据。如果在同一时刻有2个或2个以上的设各要求发送数据,就会产生总线冲突,CAN总线能够实时地检测这些冲突并对其进行仲裁,从而使具有高优先级的数据不受任何损坏地传输。
当总线处于空闲状态时呈隐性电平,此时任何节点都可以向总线发送显性电平作为帧的开始。如果2个或2个以上同时发送就会产生竞争。CAN总线解决竞争的方法同以太网的CSMA/CD(Carrier Sense Multiple Access with Collislon Detection)方法基本相似,如图1所示。此外,CAN总线做了改进并采用CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)访问总线,按位对标识符进行仲裁。各节点在向总线发送电平的同时,也对总线上的电平读取,并与自身发送的电平进行比较,如果电平相同继续发送下一位,不同则停止发送退出总线竞争。剩余的节点继续上述过程,直到总线上只剩下1个节点发送的电平,总线竞争结束,优先级高的节点获得总线的控制权。
图1 Ethernet采用的CSMA/ CD总线访问过程
CAN总线以报文为单位进行数据传输,报文的优先级结合在44位标识符中(扩展帧的标识符29位),具有最小二进制数的标识符的节点具有最高的优先级。这种优先级一旦在系统设计时确定就不能随意地更改,总线读取产生的冲突主要靠这些位仲裁解决。之所以CAN总线不采用以太网使用的延时避免冲突,主要是为了保证具有更高优先级的节点能够完整地实时传输,而且CSMA/CA可以有效地避免冲突。
如图2所示,节点A和节点B的标识符的第lO、9、8位电平相同,因此两个节点侦听到的信息和它们发出的信息相同。第7位节点B发出一个“1”,但从节点上接收到的消息却是“0”,说明有更高优先级的节点占用总线发送消息。节点B会退出发送处于单纯监听方式而不发送数据;节点A成功发送仲裁位从而获得总线的控制权,继而发送全部消息。总线中的信号持续跟踪最后获得总线控制权发出的报文,本例中节点A的报文将被跟踪。这种非破坏性位仲裁方法的优点在于,在网络最终确定哪个节点被传送前,报文的起始部分已经在网络中传输了,因此具有高优先级的节点的数据传输没有任何延时。在获得总线控制权的节点发送数据过程中,其他节点成为报文的接收节点,并且不会在总线再次空闲之前发送报文(空闲检测应该就是规定总线多长时间为隐性电平,所以最极端状况是两个节点同时发送报文)。
图2 CAN总线节点访问总线过程
图3为CAN总线上节点的电平逻辑,总线上的节点电平对于总线电平而言是相与的关系,只有当3个节点的电压都等于1(隐性电平),总线才会保持在ycc(隐性电平)状态。只要有1个节点切换到0状态(显性电平),总线就会被强制在显性状态(0)。这种避免总线冲突的仲裁方式能够使具有高优先级的消息没有延时地占用总线传输。
图3 CAN总线上节点的电平逻辑