第8章 CAN总线及其接口

CAN(控制器局域网,Controller Area Network)是历史最悠久的、使用最为广泛的汽车控制领域网络,在工业控制领域CAN也被广泛使用。 第17届国际CAN大会(2020年iCC)上启动的CAN XL规范被称作第三代CAN总线,距离第一代CAN总线规范的发布已经整整过去30年的时间, CAN2.0A/B(第一代CAN)和CAN FD(第二代CAN)已经被各汽车制造商接受。有人甚至认为,CAN总线在汽车控制领域具有压倒性的地位, 虽然曾经诞生过性能和可靠性都超过CAN的FlexRay等总线,100MBase-T1以太网也被各汽车制造商所接受,但CAN总线仍具有不可替代的地位。

我们在前一章中了解RS485和ModeBus等工业控制领域广泛使用的异步串行通讯网络的数据传输是面向字节编码的,即每一个数据帧的最小编码单元是字节, 每一个字节不仅包含有固定的数据位(如8位)还包含有起始位和停止位(字节同步位)、校验位等冗余信息。CAN总线是面向位流编码的网络, 我们将会在本章中发现位流编码的网络不仅传输效率高(去掉每个字节中的冗余位和字节间隙位),还具有其他的一些优点,譬如容易实现多主网络。

本章将了解CAN总线相关的基本概念,以及CAN总线的接口设计、CAN总线协议(含多种版本)和CAN网络节点的编程控制等。


Note

CAN总线相关的基础概念:

  1. CAN (控制器局域网,Controller Area Network),由Bosch于80年代初制订的异步串行数据通讯标准,后被ISO国际标准化组织接受,通过ISO11898和ISO11519进行了标准化,已是全球汽车网络的标准协议。CAN是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率最高可达1Mbps。CAN总线是符合OSI的物理层和数据链路层的协议。
  2. CANopen,构建在CAN(物理层和数据链路层)总线上的OSI应用层协议。由于CAN总线没有定义应用层协议,后来非营利组织CiA(CAN in Automation)进行应用层协议的标准化,即CANopen协议,最初版本称作CiA 301,后来的扩展版本包括:面向I/O模组的CiA 401和面向运动控制的CiA 402。
  3. DeviceNet,构建在CAN(物理层和数据链路层)总线上的OSI应用层协议,由美国的Allen-Bradley公司(现已被Rockwell Automation合并)在1994年开发。DeviceNet是面向工业自动化领域的CAN总线应用层协议。
  4. CAN2.0A/B,于1991年制定的CAN总线技术规范的2种版本,其中A版本使用11位长度的消息ID(该版本也被成为经典CAN总线),B版本支持29位长度的消息ID,同时B版本兼容A版本。CAN2.0A/B支持的最大波特率为1Mbps,数据域长度为0~8,且支持远程请求帧(即某个节点主动地从另一个节点读取消息)。
  5. CAN FD,于2011年制定的CAN FD(即CAN with Flexible Data-rate)是为了满足越来越大的汽车网络信息负荷,CAN FD兼容CAN2.0B标准但允许使用两种波特率传输一个数据帧,总线仲裁阶段和帧尾(包含应答域和EOF)仍采用CAN2.0B的1Mbps最大波特率,但数据域和CRC校验域允许5Mbps甚至更高的波特率,而且数据域的长度支持0~64字节。
  6. CAN XL,于2020年提出的第三代CAN总线规范,与CAN FD(被称作第二代CAN总线规范)相比,CAN XL的仲裁阶段仅支持11位长度的消息ID且仍支持1Mbps的最大波特率,但数据域的波特率强制切换到最大10Mbps(CAN FD的数据域是可选择地切换至高波特率)。此外,CAN XL的数据域长度扩展为1~2048字节。