(一)CAN的帧格式:
1字节(Byte)等于8位(bit)。
CAN(Controller Area Network)帧格式是一种用于在汽车和工业环境中进行可靠通信的协议。CAN帧的基本格式如下:
1. 帧起始(Start of Frame, SOF):1位,标志帧的开始,总是显性位(0)。
2. 标识符(Identifier):11位(标准格式)或29位(扩展格式),用于标识帧的内容和优先级。标识符越小,优先级越高。
3. 远程传输请求(Remote Transmission Request, RTR):1位,用于区分数据帧(0)和远程帧(1)。
4. 控制字段(Control Field):6位,包含数据长度代码(DLC),指示数据字段的字节数(0-8字节)。
5. 数据字段(Data Field):0-8字节,包含实际传输的数据。
6. 循环冗余校验(Cyclic Redundancy Check, CRC):15位,用于错误检测,包括CRC序列和CRC界定符(1位隐性位)。
7. 确认字段(Acknowledgment Field, ACK):2位,包括ACK槽(发送节点发送隐性位,接收节点确认时发送显性位)和ACK界定符(1位隐性位)。
8. 帧结束(End of Frame, EOF):7位,标志帧的结束,总是隐性位(1)。
9. 间隔字段(Intermission Field):3位,用于分隔连续帧,总是隐性位(1)。
发送了一针 ID为0 数据域为00 11 22 33 44 55 66 77的数据,可以看出逻辑分析是可以根据CAN H 或者 CAN L 之间一段的信号来解析数据,但是需要我们设置正确的阈值电压,CAN L 解析出来的数据如下:
还有一个疑问,这个CRC校验是怎么算出来的呢?从CAN2.0的Spec了解到,CRC的计算的值从SOF开始,到数据字段(Data Field),多项式:
P(x) = x15+ x14+ x10+ x8+ x7+ x4+ x3+ 1
通过在线CRC计算网站,输入我们的数据,计算CRC的值:
1.扩展帧相比与标准帧的数据发送都是8字节,优势在哪里?
-
标准帧:使用11位的标识符。
-
扩展帧:使用29位的标识符(11位基础标识符 + 18位扩展标识符)。
-
优势:扩展帧的29位标识符提供了更大的地址空间,允许更多的唯一标识符。这对于复杂的系统或需要大量节点的网络非常有用。
2.CAN的远程传输请求(Remote Transmission Request, RTR):1位,用于区分数据帧(0)和远程帧(1)。 控制字段(Control Field):6位,包含数据长度代码(DLC),指示数据字段的字节数(0-8字节)。是由用户提供的,还是默认自定义的,作用是什么?
远程传输请求(RTR)
-
定义:RTR位用于区分数据帧和远程帧。
-
数据帧:RTR位为0,表示该帧包含数据。
-
远程帧:RTR位为1,表示该帧不包含数据,而是请求另一个节点发送特定的数据帧。
-
-
提供方式:RTR位是由用户或应用程序在构造CAN帧时指定的。用户根据通信需求决定是发送数据帧还是远程帧。
控制字段(Control Field)
-
定义:控制字段包含数据长度代码(DLC),用于指示数据字段的字节数(0-8字节)。
-
提供方式:DLC是由用户或应用程序在构造CAN帧时指定的。用户根据要发送的数据长度设置DLC值。
-
作用:
-
数据长度指示:DLC告诉接收方数据字段中有多少字节的数据。这对于正确解析和处理数据帧至关重要。
-
帧类型指示:控制字段还包含其他信息,如帧类型(标准帧或扩展帧)。
-
(二)逻辑分析仪测量CAN的方法:
连接 1 通道至 CAN_L,黑色信号线为接地信号线,连接收发器的 GND。
因为在电路设计中一般都会对总线端的电源做隔离,所以在测 CAN 时,两个探头分别接 CAN_H 和 CAN_L 信号,但是探头接地夹需要接总线端的参考地,一般是 CAN 收发器芯片的 GND 引脚,不要接到 MCU 的 GND 上去了。
逻辑分析仪接在CAN芯片左右端问题:
接线:单片机的CAN_TX(PB6)接到逻辑分析仪的任意一个通道上,GND和单片机共地。注意,依据手册,不能直接把逻辑分析接到CAN驱动芯片输出的CAN_H和CAN_L上。
解码成功后对波形展开,配合协议列表显示,可以知道我们对地址为”0x100″的设备发送了“01 23 45 67 89 AB CD EF”等数据。
CAN有专门的CAN解码装置:
开发板CANH----> CAN卡H 开发板CANL----> CAN卡L
逻辑分析仪抓取can,稍微不一样,逻辑分析仪主要是一个GND和通道,按如下方式接。
通道0的通道0--->接开发板CANL 通道0的GND--->接开发板GND
需要注意的是:2V电平设置 波特率和采集频率 主要是阈值电平,默认是1V,要设置2.0V
图片参考自:
【DSView逻辑分析抓取波形CAN步骤-硬件连接-数据解析-底层波形认识CAN-工具使用】-CSDN博客
使用逻辑分析仪抓取CAN总线数据_逻辑分析仪采集can数据-CSDN博客
(三)CAN的电平标准:
下面是只测量CAN_L数据线,逻辑电平标准:
采样频率一般高于被测信号频率的10倍才能更好还原信号:
触发阈值一定设置正确,否则不能很好分辨逻辑1和逻辑0:
下面试CAN解码出来的数据:
(四)CAN终端电阻的新加法:
CAN通信时,终端电阻比较常见的方案是用120欧姆,但是还有一种方案是用2个62欧姆电阻串联,同时在两个电阻中间用一个4.7nF电容接地。
1、CAN总线上不接终端电阻:
2、CAN总线上接120欧姆终端电阻:
3、CAN总线上接2个串联的62欧姆终端电阻,并且在两个电阻中间用4.7nF电容接地:
通过以上波形对比分析可以得出如下结论:
CAN总线上不接终端电阻时,CAN波形严重失真;当CAN总线上接120欧姆终端电阻时,CAN_H和CAN_L存在明显的噪声波动;CAN总线上接2个串联的62欧姆终端电阻,并且在两个电阻中间用4.7nF电容接地时,对CAN信号质量改善明显。
原文链接:https://blog.csdn.net/weixin_43244476/article/details/134693877