can学习笔记(一)

部分摘录自:https://zhuanlan.zhihu.com/p/30247549

CAN总线标准数据帧的结构

 

 在实际应用中,CAN总线的一个帧主要由帧信息,帧ID和帧数据组成。

帧信息:四类,标准数据帧(汽油车、电机)、标准远程帧(少见)、扩展数据帧(广大柴油车、部分汽油车)、扩展远程帧(少见)

有童鞋经常会问到CAN2.0A和CAN2.0B是啥,2.0A是仅支持标准帧的意思,帧ID最高11位,也即0x000-0x7FF。2.0B是支持标准帧加扩展帧的意思,帧ID最高29位,也即0x0000 0000-0x1FFF FFFF。要注意,CAN2.0B已经包含了CAN2.0A,他们俩是包含与被包含的关系。

帧ID是什么?通俗讲是CAN的一种“地址”。CAN有个特点是竞争机制,帧ID越小越有占用总线资源的权利,越会优先发送。举个例子,灯光信号帧ID 0x555,发动机温度传感器帧ID 0x111,那么当两个信号同时发出时,发动机的信号会优先发送,灯光在后面排队。通常在一个CAN系统中,不同的设备,发出CAN信号的帧ID都是不一样的,或者说,CAN信号的每个帧ID都有一个固定的用途。如果一组CAN信号的帧ID,它们的用途都被确定下来,并在一个文档中得到了解释,那么我们管这个叫CAN总线的应用层协议,或者高层协议。常见的有ISO15765,SAE J1939,CANopen(电机和挖沟机控制器用)。在车辆行业中,如果对车辆CAN总线上的每个帧ID及每个帧数据都做出了标准的解释,形成了文件的话,我们叫这个文件为DBC文件。设计CAN节点时我们应该注意,不要给不同的节点设置相同的帧ID,这样会导致仲裁错误,进而导致接收不到某个CAN节点的数据。为什么CAN节点ID不能相同?

11位和29位是什么意思呢?11位指的是标准帧的帧ID范围是0x000-0x7FF(0x是十六进制的意思),7FF翻译成二进制是111 1111 1111,对吧,十一个“1”。同理,29位指扩展帧的帧ID范围是0x0000 0000-0x1FFF FFFF,1FFF FFFF翻译成二进制是29个1。大致明白了吧。29位的分配ID能力要比11位的强,11位能够表示的信息总量小一点。

帧数据很简单了,说下特点吧。与串口相比,CAN的帧数据只有8个字节,即64个位,不会再多了。当然,CAN FD作为新型总线解决了仅有8字节这个问题。有兴趣大家可以了解下CAN FD。

波特率,要注意常见的CAN波特率大多都是整数。常见的车辆波特率有500K,250K,125K,100K。波特率和收音机频率一样,如果两个CAN设备的通信波特率不一致的话,是不能进行通讯的。如果你需要设计CAN总线节点,波特率的设置是一个难点,应认真仔细查阅MCU关于CAN控制器部分的datasheet。初步了解可查看以下链接:非标准的CAN波特率怎么计算

 

 

终端电阻,CAN和RS485一样,要在终端减少差分信号的反射。我记得最经典的一张图是这么画的,水流在试管(平躺)的尾部受阻,水也就涌了回来。差分信号也是如此,你不在两个终端加电阻,信号会反弹回来影响通讯。终端电阻在CAN总线上要有两个,阻值为120欧姆,并联,最远的两端一边一个。多了不行少了也不行。你不确定的话,用万用表量一下,CANH和CANL之间60欧姆左右最好。如果有多个节点的话,终端电阻应适当加大。

为什么添加终端电阻可以参阅:小电阻之大作用——CAN终端电阻

 

好的,现在你应该已经明白,帧ID、帧信息和帧数据都是什么,知道CAN总线波特率是什么,终端电阻是什么,重要的是,你收到一个陌生设备发出的CAN总线数据了。你成功的迈出了学习CAN总线最重要的一步。如果你连接不上你的车或其他CAN设备,那属于连接问题,请参阅指导文档

综上,CAN总线是很有发展的。更多资料在下方。

ZLG致远电子:【解惑】CAN报文到底有多少位?

ZLG致远电子:CAN-bus应用笔记:节点篇

 

 

附:相关英文缩写含义

标识符扩展位,IDE,Identifier Extension。

数据长度编码,DLC,Data Length Code。

应答,ACK,Acknowledgement。

循环冗余校验,CRC。

替代远程请求位,SRR,Substitute Remote Request。

远程发送请求,RTR,Remote Transmission Request

posted @ 2020-10-09 17:00  wdliming  阅读(1571)  评论(0编辑  收藏  举报