——摘自《汽车CAN总线系统原理设计与应用》
目前在汽车上使用的高速网络系统采用的都是基于CAN总线的标准,特别是广泛使用的ISO 11898标准。CAN总线通常采用屏蔽或非屏蔽的双绞线,总线接口能在极其恶劣的环境下工作。根据ISO 11898的标准建议,即使双绞线中有一根断路,或有一根接地甚至两根线短接,总线都必须能继续工作。
CAN总线是一种串行数据通信总线,其通信速率最高可达1Mb/s。CAN系统内两个任意节点之间的最大传输距离与其位速率有关,如图所示。

从图中不难看出,CAN的传输速率达1Mb/s时,最大传输距离为40m。对一般实时控制现场来说足够使用。
CAN总线具有较强的错误检测能力,通过监视、循环冗余校验、位填充和报文格式检查,使得未检测出的出错概率小于4.7e-11。
通过故障界定,CAN节点还有自动识别永久性故障和短暂干扰的能力。在处于连续干扰时,CAN节点将处于关闭状态。而且,CAN中的节点可在不要求所有节点及其应用层改变任何软件或硬件的情况下被连于CAN网络中。
CAN有如下基本特点:
- 总线访问采用基于优先权的多主方式。CAN总线的最大特点是任一节点所发送的数据信息不包括发送节点或接收节点的物理地址。信息的内容通过一个标识符(ID)作标记,在整个网络中,该标识符是唯一的。网络上的其他节点收到信息后,每一节点都对这个标识符进行检测,以判断此信息是否与自己有关。若是相关信息,则它将得到处理;否则被忽略。这一方式称为多主方式。采用多主的优点是可使网络内的节点数在理论上不受限制(实际上受限于电气负载),也可以使不同的节点同时接收到相同的数据。数据字段最多为8字节,既能满足一般要求,又可保证通信的实时性。标识符还决定了信息的优先权。ID值越小,其他优先权越高。CAN总线确保发送具有最高优先权信息的节点获得总线使用权,而其他的节点自动停止发送。总线空闲后,这些节点将自动重新发送信息。
- 非破坏性的基于线路竞争的仲裁机制。CAN采用带有冲突检测的载波侦听多路访问方法,它能通过无破坏性仲裁解决冲突。CAN总线上的数据采用非归零编码(NRZ),数据位可以具有两种互补的逻辑值,即显性和隐性。显性电平用逻辑“0”表示,隐性电平用逻辑“1”表示。总线按照线与机制对总线上任一潜在的冲突进行仲裁,显性电平覆盖隐性电平。CAN总线上的信息是用固定格式的帧来进行传送的,这些帧长度有限且不尽相同。总线空闲时,接在其上的任何节点都可以开始发送新的帧。总线空闲时,任何节点都可以开始发送帧。如果两个和两个以上节点同时开始发送帧,由此引起的总线访问冲突是利用基于线路竞争的仲裁对标识符进行判别来解决的。仲裁机制可以保证既不会丢失信息,也不会浪费时间。优先权最高的帧的发送器将获得访问总线的权利。
- 利用接收滤波对帧实现了多点传送。在CAN系统中,节点可以不用任何有关系统配置(如节点地址)的信息。接收器对信息的接受或拒收是建立在一种称为帧接收滤波的处理方法上的。该处理方法能判断出接收到的信息是否和接收器有关联,所以接收器没有必要辨别出谁是信息的发送器,反过来也是如此。
- 支持远程数据请求。通过送出一个远程帧,需要数据的节点可以请求另外一个节点向自己发送相应的数据帧,该数据帧的标识符被指定为和相应远程帧的标识符相同。
- 配置灵活。往CAN网络中增添节点时,如果要增添的节点不是任何数据帧的发送器或者该节点根本不需要接收额外追加发送的数据,则网络中所有节点均不用做任何软件或硬件方面的调整。
- 数据在整个系统范围内具有一致性。使一个帧既可以同时被所有节点接收,也可以同时不被任何节点所接收,这在CAN网络中完全能够做到。因此,系统具有数据一致性的特征,而这一特征是利用多点传送原理和故障处理方法来获得的。
- 有检错和出错通报功能。在CAN总线中有下列几种检测错误的措施:1、位检测;2、15位循环冗余码校验;3、填充宽度为5的位填充;4、帧校验。
- 仲裁失败、或传输期间被故障损坏了的帧能自动重发。任何正在发送数据的节点和任何正在正常(或错误激活状态下)接收数据的节点都能对出现了错误的帧作出标记,并进行出错通报。这些帧会立即被放弃,此后,遵循系统所采取的恢复计时机制,它们被适时重发。从检测出错误开始、到可以着手发送下一个帧为止的这段时间称为恢复时间,此后如果再未出错的话,恢复时间一般占17~23个位时间(在总线遭受严重干扰的场合,最多占29个位时间)。所有接收器都会校验所接收帧的一致性,然后对具有一致性的帧做出应答、对不具有一致性的帧做出标记。仲裁失败或在发送过程中被错误干扰了的帧将会在下次总线空闲期间被自动重发。要被重发的帧处理起来与别的帧完全一样。这意味着,为了获得对总线进行访问的权利,它还是要参与仲裁过程。
- 能区分节点的临时故障和永久性故障并能自动断开故障节点。CAN节点能够区分出短期干扰和永久性故障,出故障的节点会被断开。断开意味着该节点脱离了与总线逻辑上的连接,因此它既无法发送、也无法接收到任何帧。通常情况下,一个CAN节点必须处于错误-激活、错误-认可或离线中的某一种状态。处于错误-激活状态的节点可以正常参与总线通信活动,而且可以在检测到错误时送出活动错误标志。活动错误标志由连续的6个显性位构成,这违反了位填充规则及正常帧所具有的各种规定格式。处于错误-认可状态的节点不能送出活动错误标志。它参与总线通信活动,但在检测到错误时送出的是认可错误标志。认可错误标志由连续的6个隐性位构成。发送完毕后,处于错误-认可状态的节点在起动下一次发送之前还要另外再等一定的时间。节点因故障界定实体的要求而从总线上断开后就进入离线状态,处于离线状态的节点既无法发送、也无法接收任何帧,只有用户请求才能使该节点结束离线状态。
附件: