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 ControlMAC = Medium Access Control
1 物理层 物理层,为物理编码子层PCS该层定义信号是如何实际地传输的,因此涉及到位时间、位编码、同步。

14.1.4 CAN网络拓扑

  CAN总线是一种分布式的控制总线。CAN总线作为一种控制器局域网,和普通以太网一样,它的网络很多CAN节点构成。其网络拓扑结构如下图所示:
CAN编程介绍_第1张图片
  CAN网络的每个节点非常简单,均由一个MCU(微控制器)、一个CAN控制器和一个CAN收发器构成,然后使用双绞线连接到CAN网络中。
 

14.1.5 CAN物理特性

  CAN总线遵循国际标准ISO11898,如ISO11898-1,ISO11898-2,ISO11898-3,ISO11898-4标准。
  
CAN总线:

序号 标准 描述
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控制

 

14.1.6 CAN报文帧

14.1.6.1 CAN报文格式

  标准 CAN 的标志符长度是 11 位,而扩展格式 CAN 的标志符长度可达 29 位。CAN 协议的 2.0A 版本 规定 CAN 控制器必须有一个 11 位的标志符。同时,在 2.0B 版本中规定,CAN 控制器的标志符长度可以是 11 位或 29 位。遵循 CAN2.0B 协议的 CAN 控制器可以发送和接收 11 位标识符的标准格式报文或 29 位标识符的扩展格式报文。
  
标准帧&扩展帧对比:

帧格式 标准帧 扩展帧
规范 CAN2.0A CAN2.0B
CAN ID(标识符)长度 11 bits 29 bits
CAN ID(标识符)范围 0x000~0x7FF 0x00000000~0x1FFFFFFF

  

14.1.6.2 CAN报文帧类型

  CAN报文类型又分如5种帧类型:

  • 数据帧:主要用于发送方向接收方传输数据的帧;
  • 遥控帧:主要用于接收方向具有相同ID的发送方请求数据的帧;
  • 错误帧:主要用于当检测出错误时向其他节点通知错误的帧。
  • 过载帧:主要用于接收方通知其他尚未做好接收准备的帧。
  • 间隔帧:主要用于将数据帧及遥控帧与前一帧分隔开来的帧。
      
      其中数据帧是使用最多的帧类型,这里重点介绍以下数据帧。
      数据帧如下图所示:
    CAN编程介绍_第2张图片
    由上图所示,数据帧包括:
      (1)帧起始。表示数据帧开始的段。
      (2)仲裁段。表示该帧优先级的段。
      (3)控制段。表示数据的字节数及保留位的段。
      (4)数据段。数据的内容,一帧可发送0~8个字节的数据。
      (5)CRC段。检查帧的传输错误的段。
      (6)ACK段。表示确认正常接收的段。
      (7)帧结束。表示数据帧结束的段。
      
    具体介绍可以查看”CAN2.0A”、”CAN2.0B”详细介绍。
    我们主要关注我们编程所需要关注的几个段:
    ID: CAN报文ID;
    IDE: 为0是标准帧,为1是扩展帧;
    RTR: 为0是数据帧,为1是远程帧;
    DLC: CAN报文数据长度,范围0~8字节;
    Data:数据,0~8个字节;
      

  
未完待续...关于CAN,还有很多内容(70多页),剩下内容:
CAN编程介绍_第3张图片
加微信13923404017,免费获取完整版;