CAN 即控制器局域网,最初是德国 BOSCH 公司为汽车的监测与控制而设计
的,以解决汽车众多控制设备与仪器仪表之间的大量数据交换用硬件接线带来的
问题。当今 CAN 的应用已不再局限于汽车行业,而向过程工业、机械工业、机器
人、数控机床、医疗器械和传感器等领域发展。
1 CAN 总线基本概念
依据国际标准化组织/开放系统互连(International
Standardi-zation Organization/Open SystemInterconnection,ISO/OSI)
参考模型,CAN 的 ISO/OSI 参考模型的层结构如图 7-6 所示。下面对 CAN 协议
的媒体访问控制子层的一些概念和特征做如下说明:
(1)报文(Message) 总线上的报文以不同报文格式发送,但长度受到限制。
当总线空闲时,任何一个网络上的节点都可以发送报文。
(2)信息路由(Information Routing) 在 CAN 中,节点不使用任何关于系统
配置的报文,比如站地址,由接收节点根据报文本身特征判断是否接收这帧信息。
因此系统扩展时,不用对应用层以及任何节点的软件和硬件作改变,可以直接在
CAN 中增加节点。
(3)标识符(Identifier) 要传送的报文有特征标识符(是数据帧和远程帧的
一个域),它给出的不是目标节点地址,而是这个报文本身的特征。信息以广播
方式在网络上发送,所有节点都可以接收到。节点通过标识符判定是否接收这帧
信息。
(4)数据一致性应确保报文在 CAN 里同时被所有节点接收或同时不接收,这
是配合错误处理和再同步功能实现的。
(5)位传输速率不同的 CAN 系统速度不同,但在一个给定的系统里,位传输
速率是唯一的,并且是固定的。
(6)优先权 由发送数据的报文中的标识符决定报文占用总线的优先权。标识
符越小,优先权越高。
(7)远程数据请求(Remote Data Request) 通过发送远程帧,需要数据的节
点请求另一节点发送相应的数据。回应节点传送的数据帧与请求数据的远程帧由
相同的标识符命名。
(8)仲裁(Arbitration) 只要总线空闲,任何节点都可以向总线发送报文。
如果有两个或两个以上的节点同时发送报文,就会引起总线访问碰撞。通过使用
标识符的逐位仲裁可以解决这个碰撞。仲裁的机制确保了报文和时间均不损失。
当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。在仲裁
期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平
相同,则这个单元可以继续发送,如果发送的是“隐性”电平而监视到的是“显
性”电平,那么这个单元就失去了仲裁,必须退出发送状态。
(9)总线状态 总线有“显性”和“隐性”两个状态,“显性”对应逻辑
“0”,“隐性”对应逻辑“1”。“显性”状态和“隐性”状态与为“显性”状
态,所以两个节点同时分别发送“0”和“1”时,总线上呈现“0”。CAN 总线
采用二进制不归零(NRZ)编码方式,所以总线上不是“0”,就是“1”。但是 CAN
协议并没有具体定义这两种状态的具体实现方式,如图 7-7 所示。
10)故障界定(Confinement) CAN 节点能区分瞬时扰动引起的故障和永久性故障。
故障节点会被关闭。
(11)应答接收节点对正确接收的报文给出应答,对不一致报文进行标记。
2 CAN 总线协议内容
CAN 总线的物理层是将 ECU 连接至总线的驱动电路。ECU 的总数将受限于总
线上的电气负荷。物理层定义了物理数据在总线上各节点间的传输过程,主要是
连接介质、线路电气特性、数据的编码/解码、位定时和同步的实施标准。BOSCH
CAN 基本上没有对物理层进行定义,但基于 CAN 的 ISO 标准对物理层进行了定义。
设计一个 CAN 系统时,物理层具有很大的选择余地,但必须保证 CAN 协议中媒体
访问层非破坏性位仲裁的要求,即出现总线竞争时,具有较高优先权的报文获取
总线竞争的原则,所以要求物理层必须支持 CAN 总线中隐性位和显性位的状态特
征。在没有发送显性位时,总线处于隐性状态,空闲时,总线处于隐性状态;当
有一个或多个节点发送显性位,显性位覆盖隐性位,使总线处于显性状态。在此
基础上,物理层主要取决于传输速度的要求。从物理结构上看,CAN 节点的构成
如图 7-8 所示。在 CAN 中,物理层从结构上可分为三层:分别是物理层信令
(Physical Layer Signaling,PLS)、物理介质附件(Physical MediaAttachment,
PMA)层和介质从属接口(Media Dependent:Inter-face,MDI)层。其中 PLS 连同
数据链路层功能由 CAN 控制器完成,PMA 层功能由 CAN 收发器完成,MDI 层定义
了电缆和连接器的特性。目前也有支持 CAN 的微处理器内部集成了 CAN 控制器和
收发器电路,如 MC68HC908GZl6。PMA 和 MDI 两层有很多不同的国际或国家或行
业标准,也可自行定义,比较流行的是 ISOll898 定义的高速 CAN 发送/接收器
标准。理论上,CAN 总线上的节点数几乎不受限制,可达到 2000 个,实际上受
电气特性的限制,最多只能接 100 多个节点。
CAN 的数据链路层是其核心内容,其中逻辑链路控制(Logical Link control,
LLC)完成过滤、过载通知和管理恢复等功能,媒体访问控制(Medium Aeeess
control,MAC)子层完成数据打包/解包、帧编码、媒体访问管理、错误检测、
错误信令、应答、串并转换等功能。这些功能都是围绕信息帧传送过程展开的。
3 CAN 总线的报文传输和结构
1.报文类型
在 CAN2.0B 的版本协议中有两种不同的帧格式,不同之处为标识符域的
长度不同,含有 ll 位标识符的帧称之为标准帧,而含有 29 位标识符的帧称为扩
展帧。如 CAN1.2 版本协议所描述,两个版本的标准数据帧格式和远程帧格式分
别是等效的,而扩展格式是 CAN2.0B 协议新增加的特性。为使控制器设计相对
简单,并不要求执行完全的扩展格式,对于新型控制器而言,必须不加任何限制
的支持标准格式。但无论是哪种帧格式,在报文传输时都有以下四种不同类型的
帧:
(1)数据帧(Data ) 数据帧将数据从发送器传输到接收器。
(2)远程帧(Remote ) 总线单元发出远程帧,请求发送具有同一标识符的数
据帧。
(3)错误帧(Error ) 任何单元检测到总线错误就发出错误帧。
(4)过载帧(Overload ) 过载帧用在相邻数据帧或远程帧之间提供附加的延
时。
2.报文帧结构形式
在报文传输时,不同的帧具有不同的传输结构,下面将分别介绍四种传输帧
的结构,只有严格按照该结构进行帧的传输,才能被节点正确接收和发送。
(1)数据帧
数据帧格式如图 7-9 所示。数据帧由七种不同的位域(Bit Field)组成:
帧起始(Start of )、仲裁域(Arbitration Field)、控制域(Control Field)、
数据域(DataField)、CRC 域(CRC Field)、应答域(ACK Field)和帧结尾(End
of )。数据域的长度可以为 0~8 个字节。
1)帧起始(SOF):帧起始(SOF)标志着数据帧和远程帧的起始,仅由一个“显
性”位组成。在 CAN 的同步规则中,当总线空闲时(处于隐性状态),才允许站点
开始发送(信号)。所有的站点必须同步于首先开始发送报文的站点的帧起始前沿
(该方式称为“硬同步”)。
2)仲裁域:仲裁域如图 7-10 所示,仲裁域由标识符和 RTR 位组成,标准帧
格式与扩展帧格式的仲裁域格式不同。标准格式里,仲裁域由 1l 位标识符和 RTR
位组成。标识符位有 ID28~IDl8。扩展帧格式里,仲裁域包括 29 位标识符、SRR
位、IDE(Identifier Extension,标志符扩展)位、RTR 位。其标识符有 ID28~
IDO。为了区别标准帧格式和扩展帧格式,CANl.0~1.2 版本协议的保留位 r1
现表示为 IDE 位。IDE 位为显性,表示数据帧为标准格式;IDE 位为隐性,表示
数据帧为扩展帧格式。在扩展帧中,替代远程请求(Substitute Remote Request,
SRR)位为隐性。仲裁域传输顺序为从最高位到最低位,其中最高 7 位不能全为零。
RTR 的全称为“远程发送请求(Remote TransmissionRequest)”。RTR 位在数据
帧里必须为“显性”,而在远程帧里必须为“隐性”。它是区别数据帧和远程帧
的标志。
3)控制域:控制域由 6 位组成,包括 2 个保留位(r0、r1 同于 CAN 协议扩展)
及 4 位数据长度码,允许的数据长度值为 0~8 字节。
4)数据域:发送缓冲区中的数据按照长度代码指示长度发送。对于接收的数
据,同样如此。它可为 0~8 字节,每个字节包含 8 位,首先发送的是 MSB(最高
位)。
5)CRC 校验码域:它由 CRC 域(15 位)及 CRC 边界符(一个隐性位)组成。CRC
计算中,被除的多项式包括帧的起始域、仲裁域、控制域、数据域及 15 位为 0
的解除填充的位流给定。此多项式被下列多项式 X15+X14+X10+X8+X7+X4+X3+1
除(系数按模 2 计算),相除的余数即为发至总线的 CRC 序列。发送时,CRC 序列
的最高有效位被首先发送/接收。之所以选用这种帧校验方式,是由于这种 CRC
校验码对于少于 127 位的帧是最佳的。
6)应答域:应答域由发送方发出的两个(应答间隙及应答界定)隐性位组成,
所有接收到正确的 CRC 序列的节点将在发送节点的应答间隙上将发送的这一隐
性位改写为显性位。因此,发送节点将一直监视总线信号已确认网络中至少一个
节点正确地接收到所发信息。应答界定符是应答域中第二个隐性位,由此可见,
应答间隙两边有两个隐性位:CRC 域和应答界定位,如图 7-1l 所示
7)帧结束域:每一个数据帧或远程帧均由一串七个隐性位的帧结束域结尾。
这样,接收节点可以正确检测到一个帧的传输结束。
(2)错误帧错误帧由两个不同的域组成:第一个域是来自控制器的错误标志;
第二个域为错误分界符。其结构如图 7-12 所示。
1)错误标志:有两种形式的错误标志。
①激活(Active)错误标志。它由 6 个连续显性位组成。
②认可(Passive)错误标志。它由 6 个连续隐性位组成。
它可由其他 CAN 控制器的显性位改写。
2)错误界定:错误界定符由 8 个隐性位组成。传送了错误标志以后,每一站
就发送一个隐性位,并一直监视总线直到检测出 1 个隐性位为止,然后就开始发
送其余 7 个隐性位。
(3)远程帧 远程帧也有标准格式和扩展格式,而且都由 6 个不同的位域组成:
帧起始、仲裁域、控制域、CRC 域、应答域、帧结尾。与数据帧相比,远程帧的
RTR 位为隐性,没有数据域,数据长度编码域可以是 0~8 个字节的任何值,这
个值是远程帧请求发送的数据帧的数据域长度。当具有相同仲裁域的数据帧和远
程帧同时发送时,由于数据帧的 RTR 位为显性,所以数据帧获得优先。发送远程
帧的节点可以直接接收数据。远程帧结构如图 7-13 所示。
(4)过载帧 过载帧由两个区域组成:过载标识域及过载界定符域。下述三种
状态将导致过载帧发送:
1)接收方在接收一帧之前需要过多的时间处理当前的数据(接收尚未准备
好);
2)在帧空隙域检测到显性位信号;
3)如果 CAN 节点在错误界定符或过载界定符的第 8 位采样到一个显性位节点
会发送一个过载帧。
过载帧的具体结构如图 7-14 所示。
3.位定时要求
标称位速率是指理想发送器在没有重新同步的情况下每秒发送的位数量。标
称位速率的倒数即为标称位时间。不同的 CAN 系统中,CAN 的位速率不同。但在
一个给定的 CAN 系统中,位速率是一定的,其最大值受所选用的 CAN 控制器类型、
收发器和物理介质等因素的影响,可在一定范围内自由设定。CAN 总线的数据传
输速率最高可达 1Mbit/s,通常用石英晶体振荡器作为时钟发生器,可以独立
地进行位定时的参数设置,这样即使网络中节点之间的时钟周期不一样,仍可获
得相同的位速率。
可以把标称位时间划分成为几个不重叠的时间片段,它们是同步段、传播段、
相位缓冲段 1 和相位缓冲段 2,如图 7-15 所示。
4 CAN 总线特点的分析
CAN 总线通信接口集成了 CAN 协议的物理层和数据链路层功能,可
完成对通信数据的成帧处理。CAN 总线的一个最大特点是废除了传统的站地址编
码,而代之以对通信数据块进行编码。数据帧的标识码可由 11 位或 29 位组成,
CAN2.0B 规定在标识符的前 7 位不能同时为逻辑零,这种按数据帧编码的方式,
还可使不同的节点同时接收到相同的数据。数据段长度最多为 8 字节,可满足通
常工业领域中控制命令、工作状态及测试数据的一般要求。同时,8 字节不会占
用过长的总线时间,从而保证了通信的实时性。CAN 协议采用 CRC,并可提供相
应的错误处理功能,保证数据通信的可靠性。CAN 具有以下特性:
1)CAN 为多主方式工作,不分主从,通信方式灵活,通过报文标识符通信,
无需站地址等节点信息;
2)CAN 上的节点信息分成不同的优先级,可满足不同的实时要求;
3)CAN 采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优
先级较低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传输
数据,从而大大节省了总线冲突仲裁时间。尤其是在网络负荷很重的情况下,也
不会出现网络瘫痪情况;
4)CAN 只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方
式的数据传送与接收,无需专门的“调度”;
5)CAN 的直接通信距离最远可达 10km;
6)CAN 上的节点数主要取决于总线驱动电路,目前可达 110 个。报文标识符
可达 204.8 种(CAN2.0A),而 CAN2.0B 的报文标识符几乎不受限制;
7)采用短帧结构,传输时间短,受干扰概率低,具有极好的检错效果。CAN
的每帧信息都有 CRC 及其他检错措施,降低了数据出错概率。CAN 节点在错误严
重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响;
8)cAN 的通信介质可为双绞线、同轴电缆或光纤,选择灵活。
CAN 总线在汽车电子系统中已得到广泛应用,成为欧洲汽车制造业的主体行
业标准,代表着汽车电子控制网络的主流发展趋势。现代汽车越来越多地采用电
子装置控制,例如发动机的定时注油控制,加速、制动控制及防抱死制动系统(ABS)
等。世界上很多著名的汽车制造厂商,如 Volkswagen(大众)、Benz(奔驰)、BMW(宝
马)、Porsche(保时捷)、Rolls.Royce(劳斯莱斯)、Jaguar(美洲豹)等公司都已
经采用 CAN 总线来实现汽车内部控制系统的数据通信。