STM32之CAN---CANID过滤器分析

STM32之CAN---CANID过滤器分析
1 前⾔
在CAN协议⾥,报⽂的标识符不代表节点的地址,⽽是跟报⽂的内容相关的。因此,发送者以⼴播的形式把报⽂发送给所有的接收者。节点在接收报⽂时,根据标识符(CAN ID)的值决定软件是否需要该报⽂;如果需要,就拷贝到SRAM⾥;如果不需要,报⽂就被丢弃且⽆需软件的⼲预。
为满⾜这⼀需求,bxCAN为应⽤程序提供了14个位宽可变的、可配置的过滤器组(13~0),以便只接收那些软件需要的报⽂。硬件过滤的做法节省了CPU开销,否则就必须由软件过滤从⽽占⽤⼀定的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和
CAN_FxR1组成。
为了让⼤家了解STM32的bxCAN的接收过滤机制,⾸先⼤家需要了解⼏个概念。
2 ⼏个重要的概念
2.1 过滤器组
STM32总共提供14个过滤器组来处理CAN接收过滤问题,每个过滤器组包含两个32位寄存器CAN_FxR0和CAN_FxR1组成,在设置为屏蔽位模式下,其中⼀个作为标识符寄存器,另⼀个作为屏蔽码寄存器。过滤器组中的每个过滤器,编号(叫做过滤器号)从0开始,到某个最⼤数值(这时最⼤值并⾮13,⽽是取决于14个过滤器组的模式和位宽的设置,当全部配置为位宽为16,且为标识符列表模式时,最⼤编号为14*4-1=55)。
ifix2.2 过滤器的过滤模式
STM32提供两种过滤模式供⽤户设置:屏蔽位模式和标识符列表模式。
2.2.1 屏蔽位模式
为了过滤出⼀组标识符,应该设置过滤器组⼯作在屏蔽位模式。
在屏蔽位模式下,标识符寄存器和屏蔽寄存器⼀起,指定报⽂标识符的任何⼀位,应该按照“必须匹配”或“不⽤关⼼”处理。
2.2.2 标识符列表模式
为了过滤出⼀个标识符,应该设置过滤器组⼯作在标识符列表模式。
在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器⽤。因此,不是采⽤⼀个标识符加⼀个屏蔽位的⽅式,⽽是使⽤2个标识符寄存器。接收报⽂标识符的每⼀位都必须跟过滤器标识符相同。
2.3 过滤器的位宽
每个过滤器组的位宽都可以独⽴配置,以满⾜应⽤程序的不同需求。根据位宽的不同,每个过滤器组可提供:
●1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位
●2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位
2.3 过滤器组的过滤模式和位宽设置
过滤器组可以通过相应的CAN_FMR寄存器(CAN过滤器主控寄存器)配置。但是不是什么时候都可以直接配置,在配置⼀个过滤器组前,必须通过清除CAN_FAR寄存器(CAN过滤器激活寄存器)的FACT位,把它设置为禁⽤状态。然后才能设置或设置过滤器组的配置。
通过设置CAN_FS1R(CAN过滤器位宽寄存器)的相应FSCx位,可以配置⼀个过滤器组的位宽。
天堂硅谷
通过CAN_FM1R(CAN过滤器模式寄存器)的FBMx位,可以配置对应的屏蔽/标识符寄存器的标识符列表模式或屏蔽位模式。(见后续3.2节)
应⽤程序不⽤的过滤器组,应该保持在禁⽤状态。
关于过滤器配置,可参见下图:
图1
诠释生命
2.4 过滤器匹配序号
⼀旦收到的报⽂被存⼊FIFO,就可被应⽤程序访问。通常情况下,报⽂中的数据被拷贝到SRAM中;为了把数据拷贝到合适的位置,应⽤程序需要根据报⽂的标识符来辨别不同的数据。bxCAN提供了过滤器匹配序号,以简化这⼀辨别过程。
根据过滤器优先级规则,过滤器匹配序号和报⽂⼀起,被存⼊邮箱中。因此每个收到的报⽂,都有与它相关联的过滤器匹配序号。
过滤器匹配序号可以通过下⾯两种⽅式来使⽤:
● 把过滤器匹配序号跟⼀系列所期望的值进⾏⽐较
● 把过滤器匹配序号当作⼀个索引来访问⽬标地址
对于标识符列表模式下的过滤器(⾮屏蔽⽅式的过滤器),软件不需要直接跟标识符进⾏⽐较。
对于屏蔽位模式下的过滤器,软件只须对需要的那些屏蔽位(必须匹配的位)进⾏⽐较即可。
在给过滤器编号时,并不考虑过滤器组是否为激活状态。另外,每个FIFO各⾃对其关联的过滤器进⾏编号,如下图:
图2
2.5 过滤器优先级规则
根据过滤器的不同配置,有可能⼀个报⽂标识符能通过多个过滤器的过滤;在这种情况下,存放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定:
● 位宽为32位的过滤器,优先级⾼于位宽为16位的过滤器
● 对于位宽相同的过滤器,标识符列表模式的优先级⾼于屏蔽位模式
● 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号⼩的优先级⾼
如下图:
图3
如上图,在接收⼀个报⽂时,其标识符⾸先与配置在标识符列表模式下的过滤器相⽐较;如果匹配上,报⽂就被存放到相关联的FIFO中,并且所匹配的过滤器的序号(这时为4)被存⼊过滤器匹配序号中。如同例⼦中所显⽰,报⽂标识符跟#4标识符匹配,因此报⽂内容和FMI4被存⼊FIFO。
如果没有匹配,报⽂标识符接着与配置在屏蔽位模式下的过滤器进⾏⽐较。
如果报⽂标识符没有跟过滤器中的任何标识符相匹配,那么硬件就丢弃该报⽂,且不会对软件有任何打扰。
3 与过滤器相关的寄存器
3.1 CAN 过滤器主控寄存器 (CAN_FMR)
地址偏移量: 0x200
复位值: 0x2A1C 0E01
注: 该寄存器的⾮保留位完全由软件控制。
图4
位31:1保留位,强制为复位值。
位0FINIT : 过滤器初始化模式
针对所有过滤器组的初始化模式设置。0: 过滤器组⼯作在正常模式;
1: 过滤器组⼯作在初始化模式。
3.2 CAN 过滤器模式寄存器 (CAN_FM1R)
地址偏移量: 0x204
复位值: 0x0000 0000
注: 只有在设置CAN_FMR(FINIT=1),使过滤器处于初始化模式下,才能对该寄存器写⼊。
图5
位31:14保留位,硬件强制为0
位13:0FBMx : 过滤器模式
过滤器组x的⼯作模式。
0: 过滤器组x的2个32位寄存器⼯作在标识符屏蔽位模式;1: 过滤器组x的2个32位寄存器⼯作在标识符列表模式。
3.3 CAN 过滤器位宽寄存器 (CAN_FS1R)
地址偏移量: 0x20C
复位值: 0x0000 0000
注: 只有在设置CAN_FMR(FINIT=1),使过滤器处于初始化模式下,才能对该寄存器写⼊。
图6
位31:14保留位,硬件强制为0
位13:0FSCx : 过滤器位宽设置
过滤器组x(13~0)的位宽。0:过滤器位宽为2个16位;1:过滤器位宽为单个32位。
3.4 CAN 过滤器FIFO关联寄存器 (CAN_FFA1R)
地址偏移量: 0x214
复位值: 0x0000 0000
注: 只有在设置CAN_FMR(FINIT=1),使过滤器处于初始化模式下,才能对该寄存器写⼊。
图7
位31:14保留位,硬件强制为0。
位13:0FFAx : 过滤器位宽设置
报⽂在通过了某过滤器的过滤后,将被存放到其关联的FIFO中。0:过滤器被关联到FIFO0;
1:过滤器被关联到FIFO1。
3.5 CAN 过滤器激活寄存器 (CAN_FA1R)
地址偏移量: 0x21C
复位值: 0x0000 0000
匀速直线运动图7
31:14
保留位,硬件强制为0。
位13:0FACTx : 过滤器激活
软件对某位设置1来激活相应的过滤器。只有对FACTx位清0,或对CAN_FMR寄存器的FINIT位设置1后,才能修改相应的过滤器寄存器x(CAN_FxR[0:1])。
cit5000:过滤器被禁⽤;
2012cctv民族器乐电视大赛
1:过滤器被激活。
3.6 CAN 过滤器组x寄存器 (CAN_FiRx) (i=0..13,x=1..2)
地址偏移量:0x240h..0x2AC
复位值:未定义位
注: 共有14组过滤器:i=0..13。每组过滤器由2个32位的寄存器,CAN_FiR[2:1]组成。只有在CAN_FaxR寄存器(CAN过滤器激活寄
存器)相应的FACTx位清’0’,或CAN_FMR寄存器(CAN过滤器主控寄存器)的FINIT位为’1’时,才能修改相应的过滤器寄存器。                                                                                图8

本文发布于:2024-09-22 01:34:57,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/476356.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:过滤器   模式   标识符   寄存器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议