CAN 波形帧内容解析分析

文章来源https://betheme.net/news/txtlist_i253682v.html?action=onClick

这里的CAN数据波形抓取的是两个STM32F103设备通过CAN通信一方发送另一方接收,CAN收发器使用的是TJA1051
(扩展帧发送数据ID=0x18DAF110 Data=0x06 0x08)

测量总线信号的波形如图1所示,这里示波器的探头接的是CAN_H,探头的夹子接的是参考地:
这里只测了CAN_H的波形,实际上CAN_L的波形与CAN_H的波形是反相的,形成差分信号。
在这里插入图片描述
测量接收端CAN_RX的波形如图2所示,这里示波器的探头接的是CAN_RX,探头的夹子接的是参考地,测量的是芯片CAN控制器出来的逻辑波形,还未经过CAN收发器转换:

在这里插入图片描述

CAN_TX和CAN_RX是CAN控制芯片的发送管脚(CAN_TX)和接收管脚(CAN_RX)。
完整的CAN电路是由CAN控制器和CAN收发器组成的,二者之间一般通过TTL电平的收发信号(CAN_RX、CAN_TX)连接,由CAN收发器将CAN_TX的TTL信号转换为CAN规范差分信号输出(CAN_H、CAN_L)、同时接收差分线上的实际信号并转换为TTL信号输出到CAN_RX管脚上。
CAN收发器与CAN控制器的CANTX和CANRX相连,对外引出CANH和CANL引脚,输出标准的CAN信号。

CAN总线上,信号表现为电压形式,通过CAN_H和CAN_L线上的电位差来表示CAN信号,分为显性电平(dominant)和隐性电平(recessive)两种类型。其中显性电平规定为逻辑0,隐性电平则为逻辑1。其具体定义可通过下图来理解。
在这里插入图片描述
根据上图的CAN_H信号和我们测量到的CAN_H信号对比,CAN_H的高电平对应显性电平逻辑0,CAN_L的低电平对应隐性电平逻辑1,那么图1对应的波形的逻辑数据为:
0 || 11000110110 || 11 || 101111000100010000 || 0[1]00 || 0010 || 0000[1]0110 || 0000[1]1000 || 101101101001000 || 101
SOF|| ID || SRR IDE|| ID扩展 || RTR r0 r1 || DLC|| data0 || data1 || CRC ||CRC界定符 ACK槽 ACK界定符

注意:当连续输出5个相同的位,则需要插入一个反码位 ,如连续输出5个0则需要插入一个1,但这个1在读数时要去掉,上面[1]就是需要忽略的

数据帧的构成图解如下(标准帧和扩展帧只有中间一部分不同):
在这里插入图片描述
注意我们这里抓的波形是扩展帧

解析信息:
29位ID
1 1000 1101 1010 1111 0001 0001 0000 从右到左每4位一个字段,即为0x18DAF110

DLC
0010
转换成十进制为2 表示这一帧中有两个数据,接下来的16个字节便表示2个数据

D1
0000[1]0110 = 0x06

D2
0000[1]1000 = 0x08

这样便解析出了我们需要的数据,这是和程序发送的数据一致的。

实测SOF的宽度是8us,因此可计算出波特率为125K,与实际程序设置的速率一致。

posted @ 2023-02-08 09:11  华夏九州  阅读(950)  评论(0编辑  收藏  举报