一、CAN总线概念
CAN(Controller Area Network):控制器局域网网络,由德国博世汽车电子厂商开发出来。
- CAN使用差分信号,具有较强的抗干扰能力和传输稳定性。
- CAN属于多主通信,网络中所有的节点都可以作为主设备进行通信。
- CAN的网络扩展极其方便,CAN网络中扩展了新的通信单元,网络中旧的单元和硬件无需任何改变
- CAN具有较强的纠错能力,可以发现传输中出现的错误,并对错误节点进行隔离。
二、CAN的差分信号
模分信号是使用电平的绝对值来表示逻辑的差别。差分信号是使用两个电平的差值来表示逻辑值。
CAN传输使用两根数据线——CANH和CANL
高速ISO11898标准:
如果CANH(3.5V)和CANL(1.5V)的电压差 = 2V,此时表示逻辑0,叫做显性电平。
如果CANH(2.5V)和CANL(2.5V)的电压差 = 0V,此时表示逻辑1,叫做隐性电平。
三、CAN总线的通信协议
CAN使用5种通信帧,以数据帧为例来介绍帧结构。
数据帧的分析:
标准数据帧和扩展数据帧
D——显性电平 R——隐形电平
数据帧由7个部分组成
1、 帧起始
表示数据帧开始的段,1位显性电平。
2、仲裁段
用来实现帧的优先级和帧的过滤。标准格式和扩展格式的仲裁段不同
(1)标准帧:
标准数据帧的仲裁段由11位ID和1位RTR位组成。RTR用来区分数据帧(显性电平)和遥控帧(隐性电平)。
(2)扩展帧:
扩展数据帧由29位ID、1位RTR、1位SRR和1位IDE组成,RTR用来区分数据帧(显性电平)和遥控帧(隐性电平),SRR用来代替标准帧中的RTR位,SRR是隐性电平,相同ID的标准帧的优先级高于扩展帧。
IDE用来区分标准帧(显性电平)还是扩展帧(隐性电平)
报文的优先级
由总线通过ID仲裁来判断,当总线上同时出现显性电平和隐性电平时,最终显示为显性电平。当多个节点同时竞争总线占有权时,谁先出现隐性电平,谁将失去总线占有权,转为接收状态。
3、控制段
r0、r1为保留位,默认为显性电平
4位DLC表示数据段的长度(0~8)
4、数据段
长度0~8字节,先发高位,再发地位。
5、CRC段
CRC错误校验,由15位CRC校验码和1位CRC界定符组成。
校验出了错误信息,可利用错误帧请求重发,重发次数可设定。
6、ACK段
由1位ACK槽和1位ACK界定符组成,发送发的ACK槽是隐性电平,接收方取人受到正确的数据后以显性电平应答。
7、帧结束
7位隐性电平
四、CAN的位时序
由于CAN是没有时钟线的,所以这个目的是为了保证每传输一位的数据的时间是固定的,不会由于时钟误差和传输延迟等原因造成不同位传输的时间不一致。
CAN传输1位由四段组成:同步段、传播段、相位缓冲段1、相位缓冲段2,1位结束后会使用再同步补偿宽度(SJW)进行再补偿。
这样设计的原因是让发送方和接收方的时序保持一致(消除误差)。
1、同步段(SS)
同步段用于实现时序的调整,完成显性/隐性电平的转换,也就是准备该位要发送的电平。
2、传播时间段(PTS)
用于吸收网络上的物理延迟,物理延迟包括发送的延迟,接收的延迟和信号传播的延迟。
3、相位缓冲段(PBS)
对于电平转换未被包含的部分进行补偿,同时和SJW一起补偿各单位的时钟误差,电平的读取在该段完成。
4、再同步补偿宽度(SJW)
补偿前面同步的误差(二次补偿)。
小结:接收方的采样一定在PBS1和PBS2之间,由于SS和PTS误差的变动,PBS的补偿也会随着误差的变化而变化。实现传输1位时间的固定,SJW对PBS的补偿进行二次补偿。
1位时间 = 8 ~ 25Tq
SS = 1Tq
PTS = 1 ~ 8Tq
PBS = 2 ~ 8Tq
SJW = 1 ~ 4Tq