二、CAN总线网络技术

1.CAN总线的定义

CAN是Controller Area Network(控制器局域网)的缩写,是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”“通过多个LAN,进行大量数据的高速通信”的需要,1986年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO 11898及ISO 11519进行了标准化,现在在欧洲CAN已是汽车网络的标准协议。

2.CAN总线的特点

作为一款广泛应用的总线,CAN总线主要具有如下特点:

(1)多主控制

在总线空闲时,所有的单元都可开始发送消息(多主控制)。最先访问总线的单元可获得发送权(CSMA/CA)。两个以上的单元同时开始发送消息时,根据标识符(Identifier,ID)决定优先级。ID并不是表示发送的目的地址,而是表示访问总线的消息的优先级。

(2)消息的发送

在CAN协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。

(3)系统的柔软性

与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其他单元的软硬件及应用层都不需要改变。

(4)通信速度

根据整个网络的规模,可设定合适的通信速度。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其他的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。

(5)远程数据请求

可通过发送“遥控帧”请求其他单元发送数据。

(6)错误检测、通知和恢复功能

所有的单元都可以检测错误(错误检测功能)。检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息,直到成功发送为止(错误恢复功能)。

(7)故障封闭

CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

(8)连接

CAN总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的,但实际上受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

3.CAN总线的网络分层结构

CAN总线协议主要包括了ISO规定的开放式系统互联(Open Systems Interconnection,OSI)7层参考模型中的传输层、数据链路层及物理层。其分层结构及具体功能如图2-3所示。

图2-3 CAN总线分层结构及功能

(1)物理层

在OSI参考模型中,物理层(Physical Layer)是参考模型的最底层,也是OSI模型的第一层。物理层利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

(2)数据链路层

数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。该层的主要功能是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。在计算机网络中由于各种干扰的存在,物理链路是不可靠的。因此,这一层的主要功能是在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。该层通常又被分为介质访问控制(MAC)和逻辑链路控制(LLC)两个子层。MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制。LLC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。数据链路层的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层。同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。

(3)网络层

网络层(Network Layer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层,也是通信子网的最高一层。它在下两层的基础上向资源子网提供服务,其主要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。一般地,数据链路层是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。例如在广域网之间通信时,必然会遇到路由(即两节点间可能有多条路径)选择问题。

(4)传输层

OSI下三层的主要任务是数据通信,上三层的任务是数据处理。传输层(Transport Layer)是OSI模型的第四层。因此该层是通信子网和资源子网的接口和桥梁,起到承上启下的作用。该层的主要任务是向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。传输层的作用是向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。传输层提供会话层和网络层之间的传输服务,这种服务从会话层获得数据,并在必要时对数据进行分割。然后,传输层将数据传递到网络层,并确保数据能正确无误地传送到网络层。因此,传输层负责提供两节点之间数据的可靠传送,当两节点的联系确定之后,传输层则负责监督工作。综上,传输层的主要功能如下:

1)传输连接管理:提供建立、维护和拆除传输连接的功能。传输层在网络层的基础上为高层提供“面向连接”和“面向无接连”的两种服务。

2)处理传输差错:提供可靠的“面向连接”和不太可靠的“面向无连接”的数据传输服务、差错控制和流量控制。在提供“面向连接”服务时,通过这一层传输的数据将由目标设备确认,如果在指定的时间内未收到确认信息,则数据将被重发。

(5)会话层

会话层(Session Layer)是OSI模型的第五层,是用户应用程序和网络之间的接口。将不同实体之间的表示层的连接称为会话,因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。用户可以按照半双工、单工和全双工的方式建立会话。当建立会话时,用户必须提供他们想要连接的远程地址。而这些地址与MAC(介质访问控制子层)地址或网络层的逻辑地址不同,它们是为用户专门设计的,更便于用户记忆。会话层的具体功能如下:

1)会话管理:允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。例如提供单方向会话或双向同时会话,并管理会话中的发送顺序,以及会话所占用时间的长短。

2)会话流量控制:提供会话流量控制和交叉会话功能。

3)寻址:使用远程地址建立会话连接。

4)出错控制:从逻辑上讲,会话层主要负责数据交换的建立、保持和终止,但实际的工作却是接收来自传输层的数据,并负责纠正错误。

(6)表示层

表示层(Presentation Layer)是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。其主要功能是处理用户信息的表示问题,如编码、数据格式转换以及加密和解密等。表示层的具体功能如下:

1)数据格式处理:协商和建立数据交换的格式,解决各应用程序之间在数据格式表示上的差异。

2)数据的编码:处理字符集和数字的转换。例如由于用户程序中的数据类型(整型或实型、有符号或无符号等)、用户标识等都可以有不同的表示方式,因此,在设备之间需要具有在不同字符集或格式之间转换的功能。

3)数据的压缩和解压缩:为了减少数据的传输量,表示层还负责数据的压缩与恢复。

4)数据的加密和解密:可以提高网络的安全性。

(7)应用层

应用层(Application Layer)是OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。它在其他各层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外,该层还负责协调各个应用程序间的工作。

4.CAN总线的协议标准

CAN总线的通信主要通过以下5种类型的帧进行:数据帧、遥控帧、错误帧、过载帧、帧间隔。其中,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11个位的标识符(Identifier,ID),扩展格式有29个位的ID。

(1)数据帧

数据帧是发送单元向接收单元传送数据的帧,是CAN总线中用得最多的一种帧类型,主要由7个段组成,分别为帧起始(SOF)、仲裁段、控制段、数据段、CRC段、ACK段、帧结束(EOF)。其组成示意图如图2-4所示。

图2-4 数据帧组成示意图

(2)遥控帧

遥控帧是接收单元向发送单元请求发送数据所用的帧。遥控帧由6个段组成,分别为帧起始(SOF)、仲裁段、控制端、CRC段、ACK段、帧结束,没有数据帧的数据段。其组成示意图如图2-5所示。

图2-5 遥控帧组成示意图

(3)错误帧

错误帧用于在接收和发送消息时检测出错误时通知错误的帧,由错误标志和错误界定符构成。其组成示意图如图2-6所示。

图2-6 错误帧组成示意图

其中错误标志包括主动错误标志和被动错误标志2种,主动错误标志由6个位的显性位组成,被动错误标志由6个位的隐性位组成,错误界定符由8个位的隐性位构成。

(4)过载帧

过载帧是用于接收单元通知其尚未完成接收准备的帧,由过载标志和过载界定符构成。其组成示意图如图2-7所示。

图2-7 过载帧组成示意图

在过载帧中,过载标志由6个位的显性位构成,过载界定符由8个位的隐性位构成。

(5)帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间隔,其组成示意图如图2-8所示。

图2-8 帧间隔组成示意图

帧间隔主要由间隔、总线空闲和延迟传送(发送暂时停止)三部分构成,其中间隔由3个位的隐性位构成。总线空闲是隐性电平,无长度限制(0也可以),在该状态下,可视为总线空闲,要发送的单元可开始访问总线。延迟传送由8个位的隐性位构成,只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

5.CAN总线的标准规格及总线拓扑

CAN总线按照不同的应用领域和速率进行了细化分类,其标准规格见表2-1。

表2-1 CAN总线标准规格

CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,两者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。

6.CAN总线应用示例

CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,两者必居其一,发送方通过使总线电平发生变化,将消息发送给接收方。其应用示例如图2-9所示。

图2-9 CAN总线应用示例

在应用示例图中,主要给出了125kbit/s和500kbit/s两种类型的CAN总线连接图。CPU将控制信号发送给CAN控制器,CAN控制器通过CAN收发器将信号传输给500kbit/s和125kbit/s两类速率总线,其中500kbit/s总线结构上的负载单元主要有ABS、SAS、ETM、ECM等,125kbit/s总线结构上的负载单元主要有DDM、PDM等,负载单元将信号再传输到收发器中与CAN控制器和CPU进行通信,进而完成信息的交互。