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.理解过滤器
每个筛选器组由两个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,其它则无法通过;
配合程序代码来看,过滤器的作用是过滤一些不想要的报文,如果掩码设置成0x00000000,就是全部报文都接收,任何ID都不关心。
当CAN总线网络中有多个CAN节点设备时,某一CAN设备发出数据帧,总线上所有设备(无过滤时)都获取该数据帧中仲裁段中的ID,如果是自己关注ID的数据,则获取数据段的内容,完成数据的传输。