CAN总线基础

学习笔记系列之CAN总线。 基础知识已经学习过很多次了,可是时间久了对于一些细节的记忆就会模糊不清,每次资料看别人的总结还不如自己也总结一下,之后看自己的笔记就好了。 CAN (Controller Area Network) 在1980年由Bosch提出并于1994年进行了标准化(ISO 11891-1)。时至今日,CAN依旧在汽车动力总成,底盘等领域有着广泛的应用。CAN可以提供非常可靠的数据传输,以及满足很多情况下对于实时性的要求。 CAN标准可以再细分为高速和低速两种不同的子协议,主要区别在于物理层的电压不同从而最大传输速率有区别,低速CAN(CAN Low Speed)遵循 ISO 11891-3 标准,最高传输速率为 125 kbit/s. 高速CAN(CAN High Speed)遵循 ISO 11898-2 标准,最高传输速率为 1Mbit/s。通常我们汽车领域用高速CAN并且设置速率为 500 kbit/s,同时低速CAN也有特有的优势,比如说抗干扰能力强。 下边这张图对比了我们熟知的OSI七层模型和CAN 模型的对比。 通常情况下,CAN协议通过硬件控制器(CAN controller)的形式实现,物理信号的收发通过CAN收发器(CAN Transceiver)进行。通常选择非屏蔽双绞线来连接CAN收发器,传输距离不超过40米,并且在两端需要连接两个120 欧姆的电阻(仅高速CAN,低速CAN不做要求),以防止信号反射造成干扰。协议还规定了,一条CAN总线最多连接32个节点。 由于不同信号有着不同的传输频率的需求比如有的传输周期是10毫秒有的是100毫秒,所以也就催生了CAN控制器(CAN Controller)分为带储存(缓存)型和不带缓存型两种。不过对于上层控制器来说,一致都是将CAN控制器当作一个“储存芯片”对待,从中读出和写入数据。 双绞线可以有效地降低电磁干扰,在CAN总线(CAN Bus)中这两条线分别被称作 CAN high line (CANH) 和 CAN low line (CANL). 在网络物理层基于差分电压传输,这种模式可以有效消除电机,点火系统等开关造成干扰电压冲击带来的影响。 对于高速CAN,协议定义差分电压0伏代表逻辑1,并被称为隐性; 差分电压2伏代表逻辑0,被称为显性。有点绕,但是一定要记清楚! 关于高速CAN和低速CAN差分电压的规定如下图:   以高速CAN为例子,理解为何差分为2逻辑为1,是显性;而差分为0逻辑为0,是隐性,可以结合下午CAN收发器(CAN Transceiver) 物理实现来理解: 同时显性会覆盖隐性,也就是说,当同一时刻不同的节点有发送显性也有发送隐性,那么在总线上会展示成为显性,只有当所有的节点都发送隐性的时候,总线才会展示成隐性。我是这样记忆的,假设我们有多个TxD,只有所有的Driver都发送逻辑1:隐性,也就是所有上边和下边的三极管都是断开状态(Driver输出0),那么对于Receiver才能测出差分电压为0,单反有一个TxD发送了逻辑0,就是有一对上下三极管是接通状态(Driver输出1),那么CANH和CANL就分别接到了VCC和GND,那么Receiver检测的差分电压就是2V。当然现实情况会有一定的误差,CAN协议规定当差分电压大于0.9伏才能被认为是显性(逻辑1),差分电压小于0.5V才能被认为是隐形(逻辑0)。 对于低速CAN,协议规定差分信号是5V代表逻辑1,差分信号是2V代表逻辑0. 根据CAN协议逻辑,可以看出显性和隐性是AND逻辑。就是说有一个发逻辑0(显性),结果就是逻辑0(显性)