利用逻辑分析仪处理CAN协议数据

1.设置逻辑分析仪

采用的是正点原子的CAN程序。

通过CAN发送的数据,在数据帧的数据段里;发送时标识符ID表示发送优先级,接收时标识符ID用于判断是否接收对应消息(而非靠地址来进行选择)

设置合适的采样频率和软件定义的波特率500K

2.数据分析

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

取图中的一部分数据分析,从左往右看:

0|| 000 0[1]001 0010 0|| 000 1000 ||00 [1] 00 1110||0000 [1]1111 || [0] 000 10000||[1]0001 0001||...

SOF|| ID RTR||  IDE r0 DLC|| data0 || data1 || CRC ||CRC界定符 ACK槽 ACK界定符

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

数据帧的构成图解如下(标准帧和扩展帧只有中间一部分不同):

注意这里抓的波形是标准帧

解析信息:

(1)SOC:起始帧  “0”
(2)11位ID
        000 0001 0010 从右到左每4位一个字段,即为0x12

(3)RTR:"0" 

         IDE:"0"

         r0   :"0"

(4)DLC
        1000
        转换成十进制为8 表示这一帧中有8个数据,接下来的64个字节便表示8个数据

(5)      Data1
        00 [1] 00 1110 = 0x0E   十进制为14

          Data2
        0000 [1]1111 = 0x0F       十进制为15

         Data3
        [0] 000 10000 = 0x10       十进制为16

        Data4
        [0] 000 10000 = 0x11       十进制为17

 剩下的数据依次类推。。。

3.实验现象:

4.理解过滤器

        (1)STM32F103ZET6 只有 14 个(增强型)。
        

        每个筛选器组由两个32位寄存器CAN_FxR1和CAN_FxR2组成。根据不同的实际需求,筛选器支持设置筛选范围和筛选模式。

筛选范围可设置为32位和16位,两种方式筛选的范围有所差异:

  •     32位方式:筛选报文的STDID[10:0]、EXTID[17:0]、IDE、RTR;
  •     16位方式:筛选报文的STDID[10:0]、EXTID[17:15]、IDE、RTR;筛选模式可设置为列表模式和掩码模式,前者常用于筛选单个标识符,后者常用于筛选单组标识符:
  •     列表模式:此时两个寄存器都作为标识符寄存器,这两个标识符寄存器组成一个表,只有在此列表中的ID,才能通过筛选器,存入FIFO;
  •     掩码模式:此时两个寄存器作为标识符寄存器和掩码寄存器,根据掩码寄存器指定的哪些位与标识符寄存器匹配的ID,才能通过筛选器,存入FIFO;

        举个例子,如表 23.1.3 所示,ID为0xF,掩码为0x7FC。掩码位为1表示必须与ID一致,掩码位为0表示可不与ID一致,因此结果bit[1:0]为任意值,其它都需要与ID一致,则最后结果为11XX,即0xC~0xF之间的ID都可经过筛选器存入FIFO,其它则无法通过;

        结合上图举个例子,假设CAN总线上有ID为0至99的100个报文,现在只需要ID为0-5的报文,筛选器该如何设置?首先设置筛选器组0处于32位掩码模式,ID为0x0,掩码为0x7FC,结果将筛选出0x0-0x3。接着设置筛选器组1处于32位列表模式,列表两个ID分别设为0x04和0x05。最后ID为0x0~0x05的报文将通过筛选。
(2)正点原子的例子:
        
      在举个简单的例子,我们设置过滤器组 0 工作在: 1 32 为位过滤器 - 标识符屏蔽模式,然
后设置 CAN_F0R1=0XFFFF0000 CAN_F0R2=0XFF00FF00 。其中存放到 CAN_F0R1 的值就是
期望收到的 ID ,即我们希望收到的映像( STID+EXTID+IDE+RTR )最好是: 0XFFFF0000 。而
0XFF00FF00 就是设置我们需要必须关心的 ID ,表示收到的映像,其位 [31:24] 和位 [15:8] 16
个位的必须和 CAN_F0R1 中对应的位一模一样,而另外的 16 个位则不关心,可以一样,也可
以不一样,都认为是正确的 ID ,即收到的映像必须是 0XFFxx00xx ,才算是正确的( x 表示不
关心)。

         配合程序代码来看,过滤器的作用是过滤一些不想要的报文,如果掩码设置成0x00000000,就是全部报文都接收,任何ID都不关心。

        

        当CAN总线网络中有多个CAN节点设备时,某一CAN设备发出数据帧,总线上所有设备(无过滤时)都获取该数据帧中仲裁段中的ID,如果是自己关注ID的数据,则获取数据段的内容,完成数据的传输。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值