0. 前言
博客内容来自B站上CAN总线入门教程视频讲解,博客中的插图和内容均为视频中的内容。视频链接 CAN总线入门教程
1. CAN简介
先来看看一它名字的意思,can总线,英文全称是 Controller Area Network Bus, 直译是控制器局域网总线,简称 C A N 总线,一般就读作CAN总线,从名字也可以看出来,CAN总线构建的是一种局域网网络,每个挂载在 CAN 总线的设备都可以利用这个局域网去发送自己的消息,也可以接收局域网的各种消息,每个设备都是平等的,都在共享这个局域网的通信资源。这是CAN总线的设计理念。
CAN 总线是由 BOSCH 公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通讯总线,广泛应用于汽车、嵌入式、工业控制等领域。CAN总线最初就是为了汽车而设计的,所以其对可靠性和稳定性的要求非常高。 待会我们也可以了解到,CAN总线的差分信号、应答机制、 CRC 校验、错误处理等设计无处不体现出其严谨和安全。
在满足这么多功能和性能的同时,CAN 总线仍然能保持一个非常简洁易用的硬件电路,所以说CAN 总线的设计还是非常成功的。现在 CAN 总线已经成为一种通用的通信方式,不仅限于汽车领域,在其他很多领域也都有 CAN 总线的身影。另外近几年新能源汽车的火热发展,也促使了很多人来学习CAN总线。
接下来概括的看一下 CAN 总线的特性:
- CAN 总线只有两根通信线,CAN_High和CAN_Low,简称CAN_H 和CAN_L,线路少,且无需共地。也就是说CAN 总线总共就只需要两根线,就能实现任意设备的互相通信了,而且不需要共地,因为它是差分信号,所以CAN 总线的线路非常少。
比如说 I2C 通信,它也只有两根通信线 SCL 、SDA,但是 I2C 是单端信号,必须得共地,所以实际上 I2C 至少得 3 根线。
-
CAN 总线采用差分信号通信,CAN_H 和CAN_L 就是一对差分线,差分线的好处就是抗干扰能力强。如果线路产生干扰,则一般两根线的电压都会同时出现波动,但是两根线的电压差值仍然是不变的,所以利用这个电压插值来传递数据就能极大地避免干扰。
-
目前 CAN 总线分为了两种标准,高速 CAN 和低速 CAN。高速 CAN 在国际标准中叫 ISO 11898,其传输速率为 125k ~ 1Mbps,传输距离 < 40m。低速 CAN 叫 ISO 11519,传输速率为10k ~ 125 kbps, 传输距离 < 1 km。可以看出高速 CAN传出快,但是距离较短,低速CAN传速慢,但是距离很远,这个可以根据应用场景选择。当然本课程侧重学习的是高速 CAN ,这个应用广一些。低速CAN也有涉及,所以着重学习高速 CAN即可。
-
CAN总线是异步的,无需时钟线,通讯速率由设备各自约定。这点和串口非常类似。
-
CAN总线是半双工的,不可以同时发送和接收。CAN总线可挂载多设备,每个设备都可以占用CAN总线来发送自己的数据,多设备同时发送数据时会通过仲裁判断先后顺序。也就是让大家排好队,消息都是可以发出去的,这个后续还会详细介绍。
-
11位 /29位 报文 ID ,用于区分消息功能,同时决定优先级。CAN总线是通过发送方广播自己的消息来实现多设备互相通信。每个设备都可以广播消息,那自然,每个消息也最好都加一个 ID,用于区分功能。否则谁知道每个消息都什么意思呢,对吧?
报文 ID 有11位的,叫标准格式,后来又扩增至29位,叫扩展格式。同时,报文 ID 不仅可以区分消息功能,当不同消息想要同时占用总线发送时,报文 ID 还决定优先级, ID 号小的优先发送,这是报文 ID 的作用。
-
CAN总线的一个数据帧可以配置 1~ 8 字节的有效载荷。这个类比串口,串口一次只能发一个字节,而CAN总线比较强大,它最大一次可以发 8 个字节,并且可以灵活指定数据长度,1~8字节随意配展。
-
CAN 总线可以实现广播式和请求式两种传输方式。广播式传输方式就是一个设备发送数据,其他所有设备都能收到,然后接收方根据报文 ID, 来决定用不用这个数据。大概的场景就是,发送方说:管你们要不要,我反正把数据发出去了,你们谁要谁拿走,这是广播式,也是CAN总线最常用的方式,我们主要学习广播式即可。
除了广播式,CAN总线还可以有请求式,请求式的场景是数据发送方不会主动广播自己的数据,而是只有收到接收方发出的请求,发送方才会发数据,这样一个数据的传输就需要先请求再接收,一来一回两个过程,这是请求式。
-
CAN总线的设计,还包括应答、 CRC 校验、位填充、位同步、错误处理等诸多特性,这里简介大家有个印象就行,接下来再慢慢细说。