本专栏的第一个部分记录CAN汇流排的一些知识.在CAN汇流排的学习中,主要参考的是瑞萨公司的<<CAN入门书>>,另外还参考了一些网上的其它资料,这里不再一一列举.向诸位分享知识的同学表示感谢.


1. CAN的一些基本概念

1.1 什么是CAN汇流排

CAN 是 Controller Area Network 的缩写,是 ISO 国际标准化的串列通信协议。通俗来的讲,CAN汇流排就是一种传输数据的线,用于在不同的ECU之间传输数据。

CAN汇流排有两个ISO国际标准:ISO11898 和 ISO11519。其中:

  • ISO11898 定义了通信速率为 125 kbps~1 Mbps 的高速 CAN 通信标准,属于闭环汇流排,传输速率可达1Mbps,汇流排长度 ≤ 40米.
  • ISO11519 定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于开环汇流排,传输速率为40kbps时,汇流排长度可达1000米。

Tips: <汇流排的传输速率>:又称为汇流排的通信速率,指的是位速率, 或者称为比特率(和波特率不是一回事),表示的是:单位时间内,通信线路上传输的二进位位的数量,其基本单位是 bps 或者 b/s (bit per second)。

1.2 CAN的拓扑结构

下图中,左边是高速CAN汇流排的拓扑结构,右边是低速CAN汇流排的拓扑结构。

如图中所示,CAN汇流排包括CAN_H 和 CAN_L 两根线。节点通过CAN控制器CAN收发器连接到CAN汇流排上。

Tips :通常来讲,ECU内部集成了CAN控制器和CAN收发器,但是也有没集成的,需要自己外加。

1.3 CAN信号表示

在CAN汇流排上,利用CAN_H和CAN_L两根线上的电位差来表示CAN信号。CAN汇流排上的电位差分为显性电平隐性电平。其中显性电平为逻辑0隐性电平为逻辑1

ISO11898标准(125kbps ~ 1Mbps)中,CAN信号的表示如下:

ISO11519标准(10kbps ~ 125kbps)中CAN信号的表示如下:

1.4 CAN信号传输

发送过程: CAN控制器将CPU传来的信号转换为逻辑电平(即逻辑0-显性电平或者逻辑1-隐性电平)。CAN发射器接收逻辑电平之后,再将其转换为差分电平输出到CAN汇流排上。

接收过程: CAN接收器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。

概括的讲:

  • 发送方通过使汇流排电平发生变化,将其信息传递到CAN汇流排上。
  • 接收方通过监听汇流排电平,将汇流排上的消息读入自己的接收器。

2. CAN通信的特点

CAN通信的基本原理就包含在CAN通信的以下几个特点中, 也是整个CAN通信得以实现的基础.

2.1 多主工作方式

所谓多主工作方式,指的是:汇流排上的所有节点没有主从之分,大家都处于平等的地位。反应在数据传输上,即是:在汇流排空闲状态,任意节点都可以向汇流排上发送消息。

Tips: <汇流排空闲状态>:当汇流排上出现连续的11位隐性电平,那么汇流排就处于空闲状态。也就是说对于任意一个节点而言,只要它监听到汇流排上连续出现了11位隐性电平,那么该节点就会认为汇流排当前处于空闲状态,它就会立即向汇流排上发送自己的报文。 至于为什么连续出现11位隐性电平就可以判定汇流排处于空闲状态,这个问题我们在后面可以结合CAN协议的帧结构来进行理解。

2.2 非破坏性位仲裁机制

在CAN协议中,所有的消息都以固定的帧格式发送。当多个节点同时向汇流排发送消息时,汇流排对各个消息的标识符(即ID号)进行逐位仲裁 。如果某个节点发送的消息仲裁获胜,那么这个节点将获取汇流排的发送权,仲裁失败的节点则立即停止发送并转变为监听(接收)状态。

例如:Node_A和Node_B同时向汇流排发送各自的消息Msg_1和Msg_2,那么对Msg_1的ID号ID_001和Msg_2的ID号ID_002进行逐位仲裁,如果仲裁结果是:ID_001的优先顺序比ID_002高,那么Msg_1在仲裁中获胜,于是发出Msg_1这条报文的节点Node_A就获得了汇流排的发送权。同时,Msg_2在仲裁中失败,于是Node_B就转换到监听汇流排电平的状态。

这种仲裁机制既不会造成已发送数据的延迟,也不会破坏已经发送的数据,所以称为非破坏性仲裁机制。这种机制的实现方式我们将在下一篇文章中介绍

2.3 系统的柔性

CAN通信系统的柔性指的是: CAN汇流排上的节点没有「地址」的概念,因此在汇流排上增加节点时,不会对汇流排上已有节点的软硬体及应用层造成影响。

Tips: 比如, 一个CAN汇流排系统中有Node_A, Node_B, Node_C 三个节点, 那么当增加第四个节点Node_D,之后, Node_D 节点不会对其他三个节点之间的通信产生任何影响.

2.4 通信速度

在同一条CAN线上,所有节点的通信速度(位速率)必须相同,如果两条不同通信速度汇流排上的节点想要实现信息交互,必须通过网关。

例如: 汽车上一般有两条CAN汇流排:500kbps的驱动系统CAN汇流排和125kbps的车身系统CAN汇流排,如果驱动系统CAN汇流排上的发动机节点要把自己的转速信息发送给车身系统CAN汇流排上的转速表节点,那么这两条汇流排必须通过网关相连。

2.5 数据传输方式

CAN汇流排可以实现一对一,一对多以及广播的数据传输方式,这依赖于验收滤波技术。验收滤波技术可以简单的理解为: Node_A 节点将需要接收的CAN报文的ID号记录下来,当Node_A在汇流排上侦听到一帧报文时, 它就会判断听到的这一帧报文的ID号是否在自己记录的ID号中,如果在,那么Node_A就接收该报文,否则就不管这一帧报文.

例如:Node_A记录的自己需要接收的报文的ID号为001,002,003,那么当Node_A侦听到ID号为002的报文时,Node_A就会接收这一帧报文; 如果Node_A侦听到ID号为005的报文, 那么Node_A就对这个005报文置之不理.

2.6 远程数据请求

某个节点Node_A可以通过发送「遥控帧」到汇流排上的方式,请求某个节点Node_B来发送由该遥控帧所指定的报文。关于这个特点, 在后面看过数据帧与遥控侦之后,自然就会理解.

2.7 错误检测、错误通知、错误恢复功能

  • 所有的节点都可以检测出错误(错误检测功能), 也就是说只要汇流排上发生了错误, 那么该汇流排上的所有节点都能发现这个错误;
  • 检测出错误的节点会立即通知汇流排上其它所有的节点(错误通知功能);
  • 正在发送消息的节点,如果检测到错误,会立即停止当前的发送,并在同时不断地重复发送此消息,直到该消息发送成功为止(错误恢复功能)。

关于上面以上三个功能, 在后面看完错误帧之后会有一个更加深刻的认识.

2.8 故障封闭

CAN汇流排上的节点能够判断错误的类型,能够判断是暂时性的错误(如杂讯干扰)还是持续性的错误(如节点内部故障),如果判断是严重的持续性错误,那么节点就会切断自己与汇流排的联系,从而避免影响汇流排上其他节点的正常工作。

如本小节开头所言, CAN汇流排的这些特点都是基于CAN协议所定义的多种帧结构来实现的,因此,在后面对CAN通信的帧结构有进一步解释之后,会对CAN通信的上述特点有一个更加深入的认识.

3.CAN通信网路结构

这一节涉及到CAN网路底层实现的一些问题, 对于简单的应用者而言, 这部分不用深入了解也可以.

3.1 OSI基本参照模型

实际上,CAN汇流排网路底层只采用了OSI基本参照模型中的数据链路层、传输层。而在CAN网路高层仅采用了OSI基本参照模型的应用层 .

3.2 CAN协议网路层次

在CAN协议中,ISO标准只对数据链路层和物理层做了规定。对于数据链路层和物理层的一部分,ISO11898和ISO11519-2的规定是相同,但是在物理层的PMD子层和MDI子层是不同的。

在CAN网路中,每一个层次定义的事项如下:


推荐阅读:
相关文章