控制器區域網路

控制器局域网 (Controller Area Network，简称CAN或者CAN bus) 是一种功能丰富的车用总线标准。被设计用于在不需要主机（Host）的情况下，允许网络上的单片机和仪器相互通信。 它基于消息传递协议，设计之初在车辆上采用复用通信线缆，以降低铜线使用量，后来也被其他行业所使用。
CAN创建在基于信息导向传输协定的广播机制（Broadcast Communication Mechanism）上。其根据信息的内容，利用信息标志符（Message Identifier，每个标志符在整个网络中独一无二）来定义内容和消息的优先顺序进行传递，而并非指派特定站点地址（Station Address）的方式。
因此，CAN拥有了良好的弹性调整能力，可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外，消息的传递不基于特殊种类的节点，增加了升级网络的便利性。

历史

罗伯特·博世公司 于1983年开发了控制器局域网（CAN bus）。 该协议于1986年美国密歇根州底特律市举行的国际汽车工程师学会（SAE）会议上正式发表。第一个CAN控制芯片，由英特尔和飞利浦生产，并且于1987年发布。 世界上第一台装载了基于CAN的多重线系统的汽车是1991年推出的梅赛德斯-奔驰 W140。
博世公司发表了关于CAN规范的几个版本，最新的CAN 2.0于1991年发布。 该规范被分为两部分；A部分适用于使用11位标识符的标准格式，B部分适用于使用29位标志符的拓展格式。使用11位标识符的CAN设备一般被称作CAN 2.0A，而使用29位识别码的CAN设备通常称为CAN 2.0B。博世公司免费提供标准、规范和白皮书。
1993年，国际标准化组织（ISO）公布了CAN标准ISO11898。后来CAN标准被重新编译分成两个部分：ISO11898-1涵盖了数据链路层；ISO11898-2涵盖了高速CAN总线的物理层； ISO11898-3于晚些时候公布并且涵盖了低速CAN总线的物理层和CAN总线容错规范。 物理层标准ISO11898-2和ISO11898-3并不包含在博世CAN2.0规范中，它们可以单独从ISO购买。
之后，博世公司仍然积极地拓展CAN标准。2012年，博世公布CAN FD 1.0或称作灵活数据速率的CAN。这个规范使用不同的架构，允许在仲裁之后，切换至更快的比特率，传输不同的数据的长度。CAN FD兼容现有的CAN 2.0网络，所以新的CAN FD设备能够与现有CAN设备共存于同一控制网络。
CAN总线是五个使用在车载诊断 (OBD)-II标准的协议的其中一个。1996年以后，所有在美国销售的汽车及轻型卡车被强制要求符合OBD-II标准。在欧盟，自2001年后销售的汽油载具及2004年后销售的柴油载具都强制规定需要符合EOBD标准。

ID分配

信息ID在单条CAN总线上必须是唯一的，否则两个节点将在仲裁位(ID)传送结束后继续传输，造成错误。
1990年代早期，为信息选择标志符（ID）的准则仅仅基于数据的种类和发信节点。但是，当标志符同样代表着信息的优先级时，这会带来不好的实时响应。在这种情况下，通常要求CAN总线只能使用大概30%才能保证信息可以在截止时间之前到达。然而，如果信息的标志符根据信息的优先级决定，更低标志符的信息获得更高优先级，那么在不损失数据的前提下，总线的使用率可以达到70%到80%。

位时序

CAN网络上的所有节点必须运行在相同的标称比特率下，但噪音、相移、振荡频率容差和振荡频率漂移导致实际的比特率可能与标称比特率不同。由于没有使用一个单独的时钟信号，需要一个同步节点方法。同步在仲裁机制中十分重要，因为仲裁中的节点需要能够同时看到它们传输数据的数据和其他节点的传输数据。 同步在确保节点间震荡时间不同时不发生错误上十分重要。
总线闲置一段时间后，在第一个隐性信号向显性信号转换时（起始位） 进行硬同步。再次同步发生在传输帧期间的每次从隐性向显性转换时。CAN控制器期望在标称位时间内发生多次转换。如果并没有在期望的确定时间发生，控制器将根据这调整标称位时间。
调整是通过将每一位划分成多个称为量子的时间段,并分配一定数量的量子到位中的四个阶段完成的。这四个阶段分别为：同步、传播、相位段1和相位段2。 
位被分成的量子数量会因控制器的不同而不同，每一个阶段分配的量子数会因比特率和网络状况的不同而改变。
在预期时刻之前或之后发生的过渡会促使控制器计算时间差，并根据计算所得的时间差延长相位段1或者缩短相位段2。这有效地改变接收器到发信器的时序，将它们同步在一起。这个重新同步过程不断地在每次隐性向显性过渡时进行已确保发信器和接收器保持同步。不断地重新同步降低了噪声产生的错误，让同步至已经失去仲裁的节点的接收节点重新同步到赢得仲裁的节点。

确认槽（ACK）

确认插槽用于确认收到的CAN帧有效。接收到帧而没有发现错误的每个节点在ACK槽中发送显性水平，来覆盖发射机的隐性水平。如果发射机在ACK时隙中只检测到隐性电平，它就知道没有任何接收器获得有效的帧。接收节点可以发送隐性信号来指示它没有接收到有效帧，但是确实接收到有效帧的其它节点可以用显性信号覆盖它。发送节点无法知道CAN网络上的是否所有节点都收到了该消息。

帧间内容

数据帧和远程帧通过称为帧间空间的区域与前面的帧分开。帧间空间由至少三个连续的隐性（1）位组成。之后，如果检测到一个显性位，它将被视为下一帧的“起始位”。 过载帧和错误帧不比帧间空间重要，并且多个过载帧也不由帧间空间分隔。帧间空间包含了字段中断和总线空闲，并且如果前一消息的发送器是被动错误站点，会将总线暂挂。

CAN低层标准

ISO 11898系列规定了用于道路车辆的CAN串行通信技术的物理层和数据链路层（ISO/OSI模型的第一和第二层），支持分布式实时控制和多路复用。
有如下几个CAN物理层及其他层的标准：
ISO 11898-1:2015规定了控制器局域网（CAN）的数据链路层（DLL）和物理信令。该文档根据ISO/IEC 7498-1中创建的开放系统互连（OSI）的ISO参考模型，描述了CAN总线层级通用架构，并提供了在模块之间创建数字信息交换实现CAN数据链路层的特性，和逻辑链路控制（LLC）次层和介质访问控制（MAC）次层的详细参数。
ISO 11898-2:2003规定了高速（传输速率高达1 Mbit / s）介质访问单元（MAU）和一些介质相关接口（MDI）特性（根据ISO 8802-3），共同组成了控制局域网的物理层。ISO 11898-2使用双线平衡传输线信令体系，是车用动力总成应用和工业控制网络中最常用的物理层。
ISO 11898-3:2006规定了在道路车辆电子控制单元之间创建的低速、容错、依赖介质的接口的数字信息交换设置，其传输速率在40kBit/s至125kBit/s之间。
ISO 11898-4:2004规定了在CAN中的时间触发通信（TTCAN）。它适用于在配备CAN的道路车辆的电子控制单元（ECU）之间创建时间触发的数字信息交换，并且根据ISO11898-1规定了与逻辑链路和介质访问控制协调的帧同步，提供了时间触发的通讯时间表。
ISO 11898-5:2007规定了道路车辆内传输速率高达1 Mbit/s的CAN网络物理层。它根据ISO 8802-2描述了介质访问单元的功能以及一些与介质相关的接口功能。它是ISO 11898-2的扩展，应对没有主动主线通讯但是要求低功耗特性的系统。
ISO 11898-6:2013规定了道路车辆内传输速率高达1 Mbit/s的CAN网络物理层。它根据ISO 8802-2描述了介质访问单元的功能以及一些与介质相关的接口功能。它是ISO 11898-2和ISO 11898-5的扩展，描述了一种可选的，利用可配置的CAN网络帧的选择性唤醒机制。
ISO 16845-1:2004提供了用于检查CAN是否符合ISO 11898-1规定所必需的方法和简要测试包。
ISO 16845-2:2014设立测试案例和测试要求，验证具有选择性唤醒功能的CAN收发器是否符合指定的功能。ISO 16845-2：2014中定义的测试类型称为一致性测试。

基于CAN的高层协议

由于CAN标准不包括例如数据流量控制、设备寻址、传输多条消息的数据块和应用数据等应用层协议的工作，许多高层协议被指定出来。 尽管这些协议都能被制造商扩展，但其中只有几个为商用领域标准化。对于乘用车，每个制造商都有自己的标准。 其中包括：

CANopen电梯

CANopen特别兴趣组织（SIG）“电梯控制”成立于2001年，为电梯控制系统开发了CiA 417 CANopen应用配置。CiA 417的第一个版本于2003年夏发布。2.0版本于2010年2月在CiA网站公布。SIG致力于扩展CANopen电梯系统的功能，改进技术内容并确保满足当前对电梯控制系统的法律标准。2.1.0版本于2012年7月发布，于2015年12月发布2.2.0版本（CiA成员可以获得）标准草案提案。 当前（2016年）SIG正在开发2.3.0版本（CiA成员可以获得）。
SIG的主席是Jörg Hellmich（ELFIN GmbH），它同时是CANopen电梯社区维基的管理员。

安全性

CAN是低级协议，不支持任何内在的安全功能。在标准的CAN中也没有加密，这使得这些网络数据能被截取。在大多数应用中，应用程序需要部署自己的安全机制，例如认证传入命令或网络上某些设备的存在。若不执行适当的安全措施，其他人可能设法在总线上插入消息。 尽管一些安全关键功能（如修改固件，编程键或控制防抱死制动）存在密码，但这些系统并未普遍实施，并且密钥对的数量有限。

开发工具

在开发CAN总线或排除故障时，检查硬件信号非常重要。可以使用逻辑分析仪和总线分析仪来收集、分析、解码并储存高速波形信号。此外，还有CAN总线监视器及其它特殊工具。
CAN总线监视器是一个分析工具，通常是硬件和软件的组合，用于开发使用在CAN总线上的硬件。
通常，CAN总线监视器将监听CAN总线上的通信量，以便将其显示在自身的用户界面中。它通常也能将CAN帧发送到总线来模拟CAN总线活动。 因此，CAN总线监视器可用于验证来自待测设备的预期CAN流量或模拟CAN流量以验证测试设备连接到CAN总线时的反应。

许可

博世公司拥有该技术的专利，生产兼容CAN的微处理器的制造商需要向博世公司支付许可费，这些费用通常加在芯片价格中传递给客户。 生产兼容CAN的定制特殊应用积体电路（ASICs）或现场可编程逻辑门阵列（FPGA）模块的制造商需要为CAN协议许可证支付费用。