CAN(Controller Area Network)总线简介

本文的主要作用为学习。

一、CAN介绍

CAN总线诞生之初主要是用在汽车中的各模块之间或和汽车主控之间进行通信的,它的连接方式如下。

CAN通信的核心电子设备为ECU,CAN总线上一般挂载有许多的ECU相互之间可以进行通信连接,通过这种连接方式可以大大节省各器件通信时所需要用到的铜线,可以看看下方的对比。

不使用CAN总线:

使用CAN总线:

二、 ECU单元

ECU单元是汽车中最小的控制模块,其基本的组成如下。

我们在使用CAN协议时需要用到特定的CAN收发芯片。

单片机输出的高低电平经过CAN收发芯片处理后转变为差分信号,差分信号有很好的抗干扰能力。

三、CAN差分信号详解

 差分信号使用两根线代表一个信号,以下为差分信号的逻辑0和逻辑1的表示方法。

 当差分信号为逻辑0时两根线的电压一个为3.5V一个为1.5V压差为2V。

 当差分信号为逻辑1时两根线的电压均为2.5V压差为0。

信号传输到 CAN收发芯片后会经过解析变成单片机的逻辑电平传输给单片机。

这样的好处在于,当信号线受到干扰时通常两根线的电平会同时发生变化,效果如下:

可以看到当被干扰时我们还是可以保持压差2.5V或0V不变,在这种抗干扰的影响下,CAN的最远传输距离可以达到1000米

四、CAN通信协议详解

首先我们先看一帧完整的CAN通信的数据。

①首先是起始位,can以一个0为标准起始位。

②下面是识别码,识别码的主要作用是区分设备,我们在CAN总线上挂在有多个ECU设备,每个设备有自己标准的识别码,如下图所示。

③RTR位用来区分数据帧和远程请求帧,如果是数据帧则为0,如果是远程请求帧则为1。

④IDE位用于区分当前的CAN是不是标准帧,以下为标准帧和拓展帧的区别,可以看到拓展帧时其识别码的数量大大提高。

⑤ IDE后面的一位是预留位。

⑥DLC位为数据长度代码,一共四位,设定的数据范围为0~8。当为0时代表后面的数据只有一个字节,当为8时代表后面的数据有8个字节16位。

⑦为传输的数据。

⑧16位为CRC码(循环冗余校验位),前面的15位为CRC的校验码,接收端在受到数据后会计算其CRC校验码,如果算出来的数值和数据传输的数值不相同的话则认定该数据在传输时发生了错误,是无效的。第16位为CRC的界定符通常为逻辑1,主要用来隔离后面的数据。

 ⑨是两位SCK码,第一位是ACK确认槽,发送端一般发送为逻辑1,接收端一般发送逻辑0来表示应答,后面的一位为ACK的界定位,一定为逻辑1,隔开后面的数据。

⑩7位为结束位,均为逻辑1。

五、补充说明

我们可以看到总线上有非常多的ECU模块,如果出现两个模块同时传输数据时应该如何反应呢。

在CAN总线中有一种优先的机制,是看它们的识别位,当一个模块首先发出逻辑0的显性电平时,会覆盖掉逻辑为1的隐形电平,那么发出逻辑1的隐性电平的模块就停止向外发出数据了。这样就解决了同时发送数据的尴尬问题。

这里只是说明了简单的数据帧的发送方式,在实际使用时会有

  • 数据帧
  • 遥控帧
  • 错误帧
  • 过载帧
  • 帧间隔

这几种通信方式,展开讲内容非常多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值