众拳【剑齿虎STM8】开发板学习笔记分享 第27讲 STM8 CAN总线工作原理 目 录 27.1 控制器局域网(beCAN) 它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。。 27.1.1 特点发送 ● 3个发送邮箱 ● 发送报文的优先级特性可用标识符或命令请求配置 ● 记录发送SOF时刻的时间戳 接收 ● 8位,11位和29位ID ● 1个接收FIFO(可容纳3条信息) ● 邮箱占用唯一的地址空间,便于提高软件效率 ● FMI(filter 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_SEG和PHASE_SEG1。其持续时间可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。 ● 时间段2(BS2):定义发送点的位置。它代表CAN标准里的PHASE_SEG2。其持续时间可以编程为1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。重新同步跳跃宽度(SJW)定义了,在每位段中可以延长或缩短多少个时间单元的上限。其持续时间可以编程为1到4个时间单元。 图27.4 位时序计算公式 27.1.7 标识符过滤 CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符的值决定软件是否需要该报文。如果需要,就拷贝到RAM里。如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,beCAN为应用程序提供了6个可配置的、位宽可变的过滤器组(0~5),用于只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件进行过滤,从而占用一定的CPU资源。每个过滤器组包含8个8位寄存器:CAN_FxR[8:1]。 ● 屏蔽位模式 在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。 ● 标识符列表模式 在标识符列表模式下,屏蔽寄存器当作标识符寄存器用。因此,使用2个标识符来代替上面的标识符加屏蔽位的方式。接收报文标识符的每一位都必须跟过滤器标识符相同。 一、可变的位宽 每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可以提供: ─ 1 个 32 位过滤器,包括:STDID[10:0]/EXTID[28:18]、IDE、EXID[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)
|