14 CAN编程
14.1 CAN介绍
14.1.1 CAN是什么?
CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。
最初,CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车
电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入 CAN 控制装
置。
一个由 CAN 总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件
的电气特性所限制。例如,当使用 Philips P82C250 作为 CAN 收发器时,同一网络中允许挂接 110 个节点。
CAN 可提供高达 1Mbit/s 的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增
强了 CAN 的抗电磁干扰能力。
14.1.2 CAN的起源
CAN 最初出现在 80 年代末的汽车工业中,由德国 Bosch 公司最先提出。当时,由于消费者对于汽车功
能的要求越来越多,而这些功能的实现大多是基于电子操作的,这就使得电子装置之间的通讯越来越复杂,
同时意味着需要更多的连接信号线。提出 CAN 总线的最初动机就是为了解决现代汽车中庞大的电子控制装
置之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被
挂接在该总线上。1993 年,CAN 已成为国际标准 ISO11898(高速应用)和 ISO11519(低速应用)。
CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检
测出产生的任何错误。当信号传输距离达到 10Km 时,CAN 仍可提供高达 50Kbit/s 的数据传输速率。
由于 CAN 总线具有很高的实时性能,因此,CAN 已经在汽车工业、航空工业、工业控制、安全防护等领
域中得到了广泛应用。
14.1.3 CAN传输模型
CAN 通讯协议主要描述设备之间的信息传递方式。CAN 层的定义与开放系统互连模型(OSI)一致。每
一层与另一设备上相同的那一层通讯。实际的通讯发生在每一设备上相邻的两层,而设备只通过模型物理
层的物理介质互连。CAN 的规范定义了模型的最下面两层:数据链路层和物理层。下表中展示了 OSI 开放
式互连模型的各层。应用层协议可以由 CAN 用户定义成适合特别工业领域的任何方案。已在工业控制和制
造业领域得到广泛应用的标准是 DeviceNet,这是为 PLC 和智能传感器设计的。在汽车工业,许多制造商
都应用他们自己的标准。
| 表格 OSI开发系统互联模型 | ||
|---|---|---|
| 序号 | 层次 | 描述 |
| 7 | 应用层 | 最高层。用户、软件、网络终端等之间用来进行信息交换。 |
| 6 | 表示层 | 将两个应用不同数据格式的系统信息转化为能共同理解的格式 |
| 5 | 会话层 | 依靠低层的通信功能来进行数据的有效传递。 |
| 4 | 传输层 | 两通讯节点之间数据传输控制。操作如:数据重发,数据错误修复 |
| 3 | 网络层 | 规定了网络连接的建立、维持和拆除的协议。如:路由和寻址 |
| 2 | 数据链路层 | 规定了在介质上传输的数据位的排列和组织。如:数据校验和帧结构 |
| 1 | 物理层 | 规定通讯介质的物理特性。如:电气特性和信号交换的解释 |
虽然CAN传输协议参考了OSI 七层模型,但是实际上CAN协议只定义了两层“物理层”和“数据链路层”,因此出现了各种不同的“应用层”协议,比如用在自动化技术的现场总线标准DeviceNet,用于工业控制的CanOpen,用于乘用车的诊断协议OBD、UDS(统一诊断服务,ISO14229),用于商用车的CAN总线协议SAEJ1939.
| 表格 CAN的 | ||
|---|---|---|
| 序号 | 层次 | 描述 |
| 7 | 应用层 | 主要定义CAN应用层。 |
| 2 | 数据链路层 | 数据链路层分为逻辑链接控制子层LLC和介质访问控制子层MAC。MAC 子层是 CAN 协议的核心。它把接收到的报文提供给 LLC 子层,并接收来自 LLC 子层的报文。 MAC 子层负责报文分帧、仲裁、应答、错误检测和标定。MAC 子层也被称作故障界定的管理 实体监管 LLC 子层涉及报文滤波、过载通知、以及恢复管理。LLC = Logical Link Control MAC = Medium Access Control |
| 1 | 物理层 | 物理层,为物理编码子层PCS. 该层定义信号是如何实际地传输的,因此涉及到位时间、位编码、同步。 |
14.1.4 CAN网络拓扑
CAN总线是一种分布式的控制总线。
CAN总线作为一种控制器局域网,和普通以太网一样,它的网络很多CAN节点构成。
其网络拓扑结构如下图所示:

CAN网络的每个节点非常简单,均由一个MCU(微控制器)、一个CAN控制器和一个CAN收发器构成,然后使用双绞线连接到CAN网络中。
14.1.5 CAN物理特性
CAN总线遵循国际标准ISO11898,如ISO11898-1,ISO11898-2,ISO11898-3,ISO11898-4标准。
| 序号 | 标准 | 描述 |
|---|---|---|
| 1 | ISO11898-1 | 数据链路层和物理层信号 |
| 2 | ISO11898-2 | 高速接入单元 |
| 3 | ISO11898-3 | 低速容错接入单元 |
| 4 | ISO11898-4 | 时间触发通讯 |
| 5 | ISO11898-5 | 低功耗的接入单元 |
| 6 | ISO11898-6 | 选择性唤醒的高速接入单元 |
CAN 能够使用多种物理介质,例如双绞线、光纤等。最常用的就是双绞线。
信号使用差分电压传送,两条信号线被称为“CAN_H”和“CAN_L”。
静态时CAN_H和CAN_L均是 2.5V 左右,此时状态表示为逻辑“1”,也可以叫做 “隐性”。
用 CAN_H 比 CAN_L 高表示逻辑“0”,称为“显形”,此时,通常电压值为:CAN_H = 3.5V 和 CAN_L
= 1.5V 。
目前实际常用的CAN收发器有如下几种型号:
| 序号 | 型号 | 描述 |
|---|---|---|
| 1 | PCA82C250 | 高速 CAN 收发器 |
| 2 | PCA82C251 | 高速 CAN 收发器 |
| 3 | PCA82C252 | 容错 CAN 收发器 |
| 4 | TJA1040 | 高速 CAN 收发器 |
| 5 | TJA1041 | 高速 CAN 收发器 |
| 6 | TJA1042 | 高速 CAN 收发器 |
| 7 | TJA1043 | 高速 CAN 收发器 |
| 8 | TJA1050 | 高速 CAN 收发器 |
| 9 | TJA1053 | 容错 CAN 收发器 |
| 10 | TJA1054 | 容错 CAN 收发器 |
目前实际常用的CAN控制器有如下几种型号:
| 序号 | 型号 | 描述 |
|---|---|---|
| 1 | SJA1000 | 独立CAN控制器 |
| 2 | MCU内部控制器 | 目前市面上如STM32系列,S32K系列,IMX6系列等等很多单片机均内部集成了CAN控制。 |