打印
[MCU]

众拳【STM8入门】第27讲 STM8 CAN总线工作原理

[复制链接]
1977|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第27讲.STM8 CAN总线工作原理.pdf (536.08 KB)
众拳【剑齿虎STM8】开发板学习笔记分享
27讲   STM8 CAN总线工作原理
27.1 控制器局域网(beCAN)   
它支持CAN协议2.0A2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。。
27.1.1  特点
发送
3个发送邮箱
● 发送报文的优先级特性可用标识符或命令请求配置
● 记录发送SOF时刻的时间戳
接收
8位,11位和29ID
1个接收FIFO(可容纳3条信息)
● 邮箱占用唯一的地址空间,便于提高软件效率
FMIfilter match index,过滤器匹配序号)与消息存储在一起
● 可设置的FIFO过载
● 记录接收SOF时刻的时间戳
时间触发通信模式
● 禁止自动重传模式
16位自由运行定时器
可配置定时器精度
● 可在最后两个数据发送时间戳
管理
● 中断可屏
● 邮箱占用唯一的地址空间,便于提高软件效率
27.1.2  总体描述
    在当今的CAN应用中,CAN网络的节点在不断增加,并且多个CAN常常通过网关连接起来,因此整个CAN网中的报文数量(每个节点都需要处理)急剧增加。除了应用层报文外,网络管理和诊断报文也被引入。
● 需要一个增强的过滤机制来处理各种类型的报文此外,应用层任务需要更多CPU时间,因此报文接收所需的实时响应程度需要减轻。
● 采用接收FIFO方式,从而允许CPU花很长时间处理应用层任务而不会丢失报文。构筑在底层CAN驱动程序上的高层协议软件,要求跟CAN控制器之间有高效的接口。
● 所有邮箱和报文以16个字节为一页映射到同一个地址,通过页面选择寄存器选择页面。
27.1.3  beCAN功能框图
27.1  beCAN功能框图
27.1.4  beCAN工作模式
    beCAN有3个主要的工作模式:初始化模式、正常模式和 睡眠模式。在硬件复位后,beCAN工作在睡眠模式以减少功耗。软件通过对CAN_MCR寄存器的INRQ或SLEEP位置’1’,可以请求beCAN进入初始化或睡眠模式。一旦进入了初始化或睡眠模式,beCAN就对CAN_MSR寄存器的INAK或SLAK位置’1’来进行确认。当INAK和SLAK位都为’0’时,beCAN就处于正常模式。在进入正常模式前,beCAN必须跟CAN总线取得同步;为取得同步,beCAN要等待直到CAN总线处于空闲状态,即在CANRX引脚上监测到11个连续的隐性位。
27.1.5  beCAN测试模式
可通过对CAN_DGR寄存器的SILM和/或LBKM位置’1’,来选择测试模式。这2位只能在初始化模式下修改。若已经在某一种测试模式时,可通过软件对CAN_MCR寄存器的INRQ位清’0’,以进入正常模式。
1、静默模式
    通过对CAN_DGR寄存器的SILM位置’1’,来选择静默模式。
    在静默模式下,beCAN可以正常地接收数据帧和远程帧,但只能发出隐性位,而不能真正发送报文。如果beCAN需要发出显性位(确认位、过载标志、主动错误标志),那么这样的 位在输测试模式显性内部被接回来从而因此,静默模可以被CAN内核检测到,同时CAN总线不会受到影响而仍然维持在隐性位状态。式通常用于分析CAN总线的阻塞,而不会对总线造成影响――显性位的传不会真正发送到总线上。
2、环回模式
R寄存器的LBKM位置’1’,来选择环回模式。在环回模式下,beCAN把发送的报环回模式过对CAN_DG文当作接收的报文并保存(如果可以通过接收过滤)在FIFO里。
环回模式可用于自测试。为了避免外部的影响,在环回模式下CAN内核忽略确认错误(在数据/远程帧的确认位时刻,不检测是否有显性位)。在环回模式下,beCAN在内部把Tx输出回馈到Rx输入上,而完全忽略CANRX引脚的实际状态。发送的报文可以在CANTX引脚上检测到。
3、环回静默模式
    通过对CAN_BTR寄存器的LBKM和SILM位同时置’1’,可以选择环回静默模式。该模式可用于“热自测试”,即可以象环回模式那样测试整个CAN系统。在环回静默模式下,CANRX引脚与CAN总线断开,同时CANTX引脚输出隐性位状态。   
27.1.6  CAN发送流程
    发送报文的流程为:应用程序选择1个 空发送邮箱;设置标识符、数据长度代码(DLC)数据;然后对CAN_MCSR寄存器的TXRQ位置’1’,来请求发送。一旦邮箱不再为空箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上进入 挂号状态,等待成为最邮箱,参见发送优先级 。当邮箱成为最高优先级的邮箱,其状态就变为预定发送状态。当总线进入空闲状态,预定发送邮箱中的报文就马上被发送(进入发送状态)。一旦邮箱中的报文被成功发送后,它就变为空邮箱;硬件相应地将CAN_TSR寄存器的RQCP位和TXOK位置1,来表明发送成功。
    如果发送失败,失败是由于仲裁丢失的原因造成的,硬件将CAN_MCSR寄存器的ALST位置’1’;失败是由于发送出错的原因造成的,硬件将TERR位置’1’。
27.2  发送邮箱状态
27.1.7  CAN接收流程
接收到的报文,被存储在3级深度的邮箱FIFO中。FIFO完全由硬件来管理,从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过访问FIFO的输出邮箱,来读取FIFO中最先收到的报文。
27.3  接收FIFO状态
27.1.8  位时序
位时间特性逻辑通过采样来监视串行的CAN总线,并且通过跟帧起始位的边沿进行同步,及通过跟后面的边沿进行重新同步,来调整其采样点。
可以将位时间分为如下3段简单描述位时间的操作方式:
●  同步段(SYNC_SEG):通常一个预期的位变化发生在该时间段内。其时间长度固定为1个时间单元(1 x t CAN )
●  时间段1(BS1):定义采样点的位置。它包含CAN标准里的PROP_SEGPHASE_SEG1。其持续时间可以编程为116个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。
●  时间段2(BS2):定义发送点的位置。它代表CAN标准里的PHASE_SEG2。其持续时间可以编程为18个时间单元,但也可以被自动缩短以补偿相位的负向漂移。重新同步跳跃宽度(SJW)定义了,在每位段中可以延长或缩短多少个时间单元的上限。其持续时间可以编程为14个时间单元。
27.4  位时序计算公式
27.1.7  标识符过滤
    CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符的值决定软件是否需要该报文。如果需要,就拷贝到RAM里。如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,beCAN为应用程序提供了6个可配置的、位宽可变的过滤器组(0~5),用于只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件进行过滤,从而占用一定的CPU资源。每个过滤器组包含88位寄存器:CAN_FxR[8:1]
● 屏蔽位模式
  在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。
● 标识符列表模式
在标识符列表模式下,屏蔽寄存器当作标识符寄存器用。因此,使用2个标识符来代替上面的标识符加屏蔽位的方式。接收报文标识符的每一位都必须跟过滤器标识符相同。
一、可变的位宽
每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可以提供:
─  1 32 位过滤器,包括:STDID[10:0]/EXTID[28:18]IDEEXID[17:0]RTR 位;
─  2 16 位过滤器,包括:STDID[10:0]/ EXTID[28:18]IDE RTR 位;
─  4 8 位过滤器,包括:STDID[10:3]/ EXTID[28:21],其他位可以不用关心;
─  1 16 位过滤器和 2 8 位过滤器,具体的过滤器描述如上 16 位和 8 位过滤器描述。
FMLx位定义该寄存器组的低半组(CAN_FxR1-4寄存器)的模式,
FMHx位定义该寄存器组的高半组(CAN_FxR5-8寄存器)的模式,
二、可变的位宽
27.5  32位过滤器组设置(CAN_FCRx寄存器的FSCx位为11b)
FMHx=0 高位寄存器工作在屏蔽位模式,FMLx =0 低位寄存器工作在屏蔽位模式。
FMHx=1 高位寄存器工作在标识符列表模式,FMLx =1 低位寄存器工作在标识符列表模式。
FMLx和FMHx位必须拥有相同的值以确保4个屏蔽位/标识符过滤器位处于相同的模式。
27.6  16位过滤器组设置(CAN_FCRx寄存器的FSCx位为10b)
FMHx=0 高位寄存器工作在屏蔽位模式,FMLx =0 低位寄存器工作在屏蔽位模式。
FMHx=1 高位寄存器工作在标识符列表模式,FMLx =1 低位寄存器工作在标识符列表模式。
27.7  16/8位过滤器组设置(CAN_FCRx寄存器的FSCx位为01b)
FMHx=0 高位寄存器工作在屏蔽位模式,FMLx =0 低位寄存器工作在屏蔽位模式。
FMHx=1 高位寄存器工作在标识符列表模式,FMLx =1 低位寄存器工作在标识符列表模式。
27.8  8位过滤器组设置(CAN_FCRx寄存器的FSCx位为00b)


相关帖子

沙发
刘洋讲单片机|  楼主 | 2017-1-14 09:58 | 只看该作者
三、标识符过滤注意事项
(1).在 32 位的配置中,FMLx和FMHx位必须拥有相同的值以确保4个屏蔽位/标识符过滤器位处于相同的模式。

(2).当接收到标准标识符(IDE位为0),32位或16位过滤器的扩展部分不必比较。
(3).为了过滤出一组标识符,应该设置屏蔽位/标识符过滤器组工作为屏蔽位模式。 为了过滤出一个标识符,应该设置屏蔽位/标识符过滤器组工作为标识符列表模式。
(4).应用程序不用的过滤器组,应该保持在禁用状态。
(5).过滤器组中的每个过滤器,都被编号为(叫做过滤器号)从0开始,到某个最大数值——取决于6个过滤器组的模式和位宽的设置。
四、标识符过滤注意事项
根据过滤器的不同配置,有可能一个报文标识符能通过多个过滤器的过滤;在这种情况下,存放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定:
(1). 32位位宽的过滤器优先级高于16位位宽的过滤器,而16位位宽的过滤器优先级高于8位位宽的过滤器;
(2). 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式;
(3). 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

499

帖子

66

粉丝