CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。下图是车载网络的构想示意图。CAN 等通信协议的开发,使多种LAN 通过网关进行数据交换得以实现。
CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
在总线空闲时,所有的单元都可开始发送消息(多主控制)。 最先访问总线的单元可获得发送权(CSMA/CA 方式)。多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权。在CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。 正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
处于主动错误状态的单元检测出错误时,输出主动错误标志。处于被动错误状态的单元虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。 处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的。 处于被动错误状态的单元检测出错误时,输出被动错误标志。 另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8 个位的隐性位)。这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关系如表1 及图所示。
发送错误计数值和接收错误计数值根据一定的条件发生变化。 错误计数器在错误标志的第一个位出现的时间点上开始计数。
CAN 协议如表3 所示涵盖了ISO 规定的OSI基本参照模型中的传输层、数据链路层及物理层。 CAN 协议中关于ISO/OSI 基本参照模型中的传输层、数据链路层及物理层,具体有哪些数据链路层分为MAC 子层和LLC 子层,MAC 子层是CAN 协议的核心部分。数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息的帧化、仲裁、应答、错误的检测或报告。数据链路层的功能通常在CAN 控制器的硬件中执行。 在物理层定义了信号实际的发送方式、位时序、位的编码方式及同步的步骤。但具体地说,信号电平、通信速度、采样点、驱动器和总线的电气特性、连接器的形态等均未定义。这些必须由用户根据系统需求自行确定。
CAN 协议经ISO 标准化后有ISO11898 标准和ISO11519-2 标准两种。ISO11898 和ISO11519-2 标准对于数据
ISO11898 是通信速度为125kbps-1Mbps 的CAN 高速通信标准。 目前,ISO11898 追加新规约后,成为ISO11898-1 新标准。ISO11519 是通信速度为 125kbps 以下的CAN 低速通信标准。 ISO11519-2 是ISO11519-1 追加新规约后的版本。 下图 表示CAN 协议和ISO11898 及ISO11519-2 标准的范围。
不仅是ISO,SAE 等其它的组织、团体、企业也对CAN 协议进行了标准化。基于CAN 的各种标准规格如表6 所示,如图所示,面向汽车的通信协议以通信速度为准进行了分类。另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11 个位的标识符(Identifier: 以下称ID),扩展格式有29 个位的ID。 各种帧的用途如表 7 所示,各种帧的构成如图1~图5 所示。多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。 (1) 发送单元的工作 在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续5 位,在下一个位(第6 个位)则要插入1 位与前5 位反型的电平。 (2) 接收单元的工作 在接收数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续5 位,需要删除下一个位(第6 个位)再接收。如果这个第6 个位的电平与前5 位相同,将被视为错误并发送错误帧。错误的种类、错误的内容、错误检测帧和检测单元如表 9 所示。由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。 这些段又由可称为 Time Quantum(以下称为Tq)的最小时间单位构成。 1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序。 1 位由多少个Tq 构成、每个段又由多少个Tq 构成等,可以任意设定位时序。通过设定位时序,多 个单元可同时采样,也可任意设定采样点。 各段的作用和 Tq 数如表11 所示。1 个位的构成如图所示。CAN 协议的通信方法为NRZ(Non-Return to Zero)方式。各个位的开头或者结尾都没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。另外,接收单元根据总线上电平的变化进行同步并进行接收工作。但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差。因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。接收单元在总线空闲状态检测出帧起始时进行的同步调整。 在检测出边沿的地方不考虑 SJW 的值而认为是SS 段。 硬件同步的过程如图所示。在接收过程中检测出总线上的电平变化时进行的同步调整。 每当检测出边沿时,根据 SJW 值通过加长PBS1 段,或缩短PBS2 段,以调整同步。但如果发生了超出SJW值的误差时,最大调整量不能超过SJW 值。(2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。(3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。(4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。但还要满足下面条件。(5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。(6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。