良许Linux教程网 干货合集 通讯之CAN总线入门

通讯之CAN总线入门

前言

在前文中,我们已经介绍了几种总线协议,然而,如果要在汽车上实际应用一种总线协议来进行通讯,我们会面临一个挑战:选择哪一种?

答案却并不简单:都不行

这是因为在汽车中,许多系统都需要实时控制,同时数据的传输必须是可靠的。即使在恶劣的环境下,这些系统也必须能够正常运行。

image-20240418210852897
image-20240418210852897

ECU


如何传输数据?

现在将车上的每个设备用一条总线连接起来

image-20240418210856641
image-20240418210856641

要想CAN通讯,就必须要专门的CAN收发器,经过CAN收发器,普通信号就会转化成差分信号(差分信号由两根线表示)

image-20240418210859992
image-20240418210859992

如果输入0,CAN收发器的两根线分别输出3.5V和1.5V(压差为2V)

如果输入1,CAN收发器的两根线都输出2.5V(压差为0V)

image-20240418210903035
image-20240418210903035

为什么要这样表示数据?

想象一下,如果这条线是0V,受到了干扰,电压就会波动

image-20240418210907526
image-20240418210907526
image-20240418210909721
image-20240418210909721

如果是两条线缠绕在一起,用差分信号来表示数据的话,即使受到了干扰,也是两条线一起受到干扰,依旧存在压差

image-20240418210916466
image-20240418210916466

CAN数据格式

这是一帧完整的数据

最开始是起始位(始终为0)

然后是11位的识别码

image-20240418210919912
image-20240418210919912

每一个设备都有唯一的11位识别码

image-20240418210922777
image-20240418210922777

紧接着是RTR位用来区分数据帧(0)或远程请求帧(1)

image-20240418210925635
image-20240418210925635

接下来是6位控制码

image-20240418210928524
image-20240418210928524

其中第一位的IDE位是用来区分是标准帧还是拓展帧(标准帧有11位的识别码,IDE位为0;而拓展码有29位的识别码,IDE位为1)

image-20240418210931450
image-20240418210931450

下面是预留位,它是逻辑0

image-20240418210936097
image-20240418210936097

剩下的4位为DLC位,表示数据长度

每一个数值对应每一个字节(比如如图数值为8,对应数据长度为8个字节)

image-20240418210944003
image-20240418210944003

接下来是16位的CRC循环冗余校验位,它是为了确保收到的数据的准确性

首先是15位CRC校验位,如果和接收到的CRC校验位不一致,就会重新再重发一次

image-20240418210946832
image-20240418210946832

最后是CRC界定位,目的是为了与后面的数据区分开来

image-20240418210949566
image-20240418210949566

然后是2位ACK码

第一位是ACK确认槽(发送端是1,接收端就是0)用来表示应答

第2位是ACK界定位(始终为1),目的也是为了和后面的数据区分开来,

image-20240418210952265
image-20240418210952265

最后是7位结束位(时钟为1)

如果用用差分信号表示,电平是这样的,如图所示

image-20240418210955998
image-20240418210955998

如果此时总线上同时有2个设备发出控制信号,究竟优先执行哪一个设备的信号呢?

image-20240418210959289
image-20240418210959289

这就得看11位的识别码了,它不仅指定了哪个设备,还表示了优先级

image-20240418211003198
image-20240418211003198

当总线同时为1或0,总线会被置为0(即优先执行电平0)

总结

了解完了CAN总线,或许会有一个疑惑点?

CAN总线和RS485是不是有点相似,对吧?

虽然的确有些相似之处,但CAN总线是专门用于汽车领域的,就比如数据可靠性,CAN总线检测到数据不一致,就会重新发送,而485就发一次,不管是不是正确的数据

相对485不止一个优点,碍于文字,就不过多叙述了

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部