基础概念
CAN(Controller Area Network),控制器局域网络,是一种多主的串行通信协议。
CAN 总线使用双绞线进行差分信号传输,抗干扰能力强。
异步、串行、半双工。

高速 CAN 为闭环网络,总线两端需接120 欧姆的终端电阻,作用:
用于匹配阻抗,减少信号回波反射。
无状态下“收紧”两根差分线,使值默认为1。

低速 CAN 为开环网络,线上要接 2.2k 电阻。

电平定义
电压差为 CAN_H - CAN_L
(1)高速 CAN
显性电平 0:电压差 2 V
隐性电平 1:电压差 0 V

(2)低速 CAN
显性电平 0:电压差 3 V
隐性电平 1:电压差 -1.5 V

必须掌握的帧格式
数据帧:传输数据。
遥控帧:请求别人发送数据给自己。
数据帧

标准格式:
拓展格式和标准格式的区别:
多了 SRR 位。SRR 只用于仲裁,无其他功能。值为 1,因此标准格式的优先级大于拓展格式。
IDE 默认值为 1,表示是拓展格式。
ID 拓展了 18 位,加上原来的 11 位,共 29 位。
多了 R1 保留位,值为 0,暂时用不到,为后续协议升级留下空间。
遥控帧
不传输数据,仅请求数据。
RTR 位为 1
DLC 字段表示请求的数据长度
无 DATA 数据域
了解既可的帧格式
为什么说这些帧格式了解既可呢,因为我们不是做硬件的。
这些由硬件自动完成,软件无法控制,也不需要控制,这上面没有我们所需要的信息。
这些帧格式用于调节 CAN 总线数据传输。
错误帧:用于当检测出错误时向其它单元通知错误的帧。 (硬件自动完成)
过载帧:当一个节点正忙于处理接收的信息,可以通知其它节点暂缓发送新报文。(硬件自动完成)
帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧(硬件自动完成)
错误帧
过载帧
帧间隔
CAN 总线仲裁
ID 小的报文优先级高,因为先拉低。
同步机制
没有时钟线,接收方该如何精准的采样。
可能存在时钟误差,累积误差,造成读到的数据都是错误的。
采样点的初始位置没对齐。
存在的问题:
由于 CAN 是异步通信,没有时钟线,设备的时钟并不是精准的。
问题1:
问题2:
解决问题1: 使用【硬同步】,1帧数据只同步一次。
解决问题2使用【再同步】