CAN现场总线系统的设计与应用第5章带有SPI接口的独立CAN控制器MCP2515MCP2515简介MCP2515是Microchip生产的一款独立CAN控制器,完全支持CANV2.0B技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。MCP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器,减少了单片机的开销。MCP2515通过SPI总线与单片机的的连接。本章主要介绍MCP2515独立CAN控制器的外围引脚,内部寄存器和相关的SPI指令,并介绍基于PIC16F877A单片机和MCP2515独立CAN控制器的CAN节点的开发和MCP2515的初始化、发送、接收程序的编写CAN独立控制器MCP2515特性完全支持CAN总线V2.0A和V2.0B技术规范0~8字节报文长度;标准和扩展数据帧;可编程位传输速率可达lMbps;支持远程帧:两个接收缓冲器,可优先储存报文;6个完全验收滤波器;2个完全验收屏蔽滤波器;3个发送缓冲器,具有优先级设定以及发送中止功能用于自检的环回模式。CAN独立控制器MCP2515特性硬件特性高速SPl接口;支持0.0和I.1SPI模式;带有可编程预分频器的时钟输出引脚;带有可选择使能设定的,中断输出引脚:“缓冲器满”输出引脚可配置为各接收缓冲器的中断引脚或通用数宁输出引脚。“请求发送”输入引脚可配置为发送缓冲器的控制引脚,用以请求立即发送报文或配置为通用数字输出引脚;.低功耗休眠工作模式。MCP2515控制器概述MCP2515控制器概述CAN模块的功能是处理所有CAN总线上的报文接收和发送。控制逻辑通过与其它模块连接,控制逻辑模块控制MCP2515的设置和运行,以便传输信息与控制。单片机通过SPI接口与MCP2515连接。使用标准的SPI读/写指令以及专门的SPI命令来读/写所有的寄存器和完成相应的控制操作。MCP2515引脚介绍MCP2515引脚介绍MCP2515引脚介绍发送/接收缓冲器MCP2510具有3个发送缓冲器和2个接收缓冲器,2个验收屏蔽寄存器(分别对应不同的接收缓冲器),以及6个验收过滤寄存器。CAN报文帧标准数据帧CAN报文帧扩展数据帧仲裁字段的前11位为29位标识符的最有效位(基本ID)。紧随这11位的是替换远程请求(SRR)位,定义为隐性状态。SRR位之后是IDE位,该位隐性时表示这是扩展的CAN帧。CAN报文帧远程帧错误帧主动错误帧消极错误帧过载帧与主动错误帧格式一样,但是其只出现在数据帧、远程帧之间。帧空间寄存器映射表CANCTRL控制寄存器REQOP2:0:请求工作模式的位000=设定为正常工作模式001=设定为休眠模式010=设定为环回模式011=设定为仅监听模式100=设定为配置模式REQOP位不应设置为其他值,因为这些值都是无效的。注:上电时,REQOP=b’111’CANCTRL控制寄存器ABAT:中止所有当前报文发送的位1=请求中止所有当前报文发送的缓冲器0=终止对所有报文发送中止的请求OSM:单触发模式位1=使能。报文仅尝试发送一次0=禁止。如有需要,报文会重新发送。CLKEN:CLKOUT引脚使能位1=CLKOUT引脚使能0=CLKOUT引脚禁止(引脚处于高阻态)CLKPRE1:0:CLKOUT引脚预分频比位00=FCLKOUT=系统时钟频率/101=FCLKOUT=系统时钟频率/210=FCLKOUT=系统时钟频率/411=FCLKOUT=系统时钟频率/8CANSTAT状态寄存器OPMOD:工作模式位2:0000=器件处于正常工作模式001=器件处于休眠模式010=器件处于环回模式011=器件处于仅监听模式100=器件处于配置模式CANSTAT状态寄存器ICOD:中断标志代码位2:0000=无中断001=出错中断010=唤醒中断011=TXB0中断100=TXB1中断101=TXB2中断110=RXB0中断111=RXB1中断工作模式配置模式复位后进入配置模式,所有错误计数器被清零正常模式睡眠模式SPI口仍工作,允许访问任何寄存器;唤醒后处于监听模式监听模式错误计数器被复位并设置为无效环回模式自收发,多用于调试配置模式MCP2515在正常运行之前必须进行初始化。只有在配置模式下,才能对器件进行初始化。在上电或复位时器件会自动进入配置模式,或通过CANTRL.REQOP位设置成“100”也可使器件从任何模式进入配置模式。当进入配置模式时,所有错误计数器都被清零。只有在配置模式下,才能对以下寄存器进行修改CNF1、CNF2和CNF3TXRTSCTRL验收过滤寄存器验收屏蔽寄存器休眠模式MCP2515具有内部休眠模式,使器件功耗最少。即使MCP2515处于休眠模式,SPI接口仍然保持正常的读操作,以允许访问器件内的所有寄存器。当处于内部休眠模式时,唤醒中断仍然工作(如果被使能)。因此,可将MCU置于休眠模式,在检测到总线上有活动时,就唤醒MCP2515。处于休眠模式时,MCP2515内部振荡器停止工作。当总线发生活动或MCU通过SPI接口将CANINTF.WAKIF位置1来“产生”唤醒尝试(CANINTE.WAKIE位也必须置1以便产生唤醒中断)时,将唤醒MCP2515。当MCP2515处于休眠模式时,TXCAN引脚保持隐性状态。复位MCP2515有两种复位方式:硬件复位——RESET引脚为低电平。SPI复位——通过SPI命令复位。振荡器错误检测当产生CRC错误,确认(应答)错误,格式错误和填充错误时,除了改变错误寄存器的值以外,报文将重新发送。在总裁阶段不进行位错误检修。当发现位错误时,将根据节点的状态产生相应的错误帧,主动错误帧将破坏数据帧和远程帧的发送。节点错误状态主动错误。被动错误。总线关闭(仅发送器)错误相关寄存器TEC——发送错误计数器REC——接收错误计数器EFLG——错误标志寄存器EFLG寄存器RX1OVR:接收缓冲器1溢出标志位RX0OVR:接收缓冲器0溢出标志位TXBO:总线关闭错误标志位当TEC达到255时,该位置1;-当成功接收到总线恢复序列时复位TXEP:发送被动错误标志位RXEP:接收被动错误标志位TXWAR:发送错误警告标志位RXWAR:接收错误警告标志位bit0EWARN:错误警告标志位当TEC或REC大于等于96时(TXWAR或RXWAR=1)时,该位置1当TEC和REC同时小于96时复位中断MCP2515有八个中断源。CANINTE寄存器包含了使能各中断源的中断使能位。CANINTF寄存器包含了各中断源的中断标志位。当发生中断时,INT引脚将被MCP2515拉为低电平,并保持低电平状态直至MCU清除中断。中断只有在引起相应中断的条件消失后,才会被清除。建议在对CANINTF寄存器中的标志位进行复位操作时,采用位修改命令而不要使用一般的写操。这是为了避免在写命令执行过程中无意间修改了标志位,进而导致中断丢失。CANSTAT.ICOD(中断代码)位的编码反映等待处理的中断源。如果同时发生多个中断,INT引脚将保持低电平状态直至MCU复位所有中断。CANINTF——中断标志寄存器1=有等待处理的中断(必须由MCU清零才可使中断复位)0=无等待处理的中断MERRF:报文错误中断标志位WAKIF:唤醒中断标志位ERRIF:错误中断标志位(EFLG寄存器中有多个中断源)TX2IF:发送缓冲器2空中断标志位TX1IF:发送缓冲器1空中断标志位TX0IF:发送缓冲器0空中断标志位RX1IF:接收缓冲器1满中断标志位RX0IF:接收缓冲器0满中断标志位CANINTE——中断使能寄存器1=报文接收或发送期间发生错误时中断0=禁止MERRE:报文错误中断使能位bit6WAKIE:唤醒中断使能位ERRIE:错误中断使能位(EFLG寄存器中有多个中断源)TX2IE:发送缓冲器2空中断使能位TX1IE:发送缓冲器1空中断使能位TX0IE:发送缓冲器0空中断使能位RX1IE:接收缓冲器1满中断使能位RX0IE:接收缓冲器0满中断使能位位定时位定时位定时CONF1CONF2CONF3报文接收报文接收报文接收缓冲MCP2515具有两个全接收缓冲器。每个接收缓冲器配备有多个验收滤波器。除上述专用接收缓冲器外,MCP2515还具有单独的报文集成缓冲器(MAB),可作为第三个接收缓冲器。MAB对接收到的报文进行组合,并将满足验收滤波器条件的报文传送至RXBn缓冲器。接收优先级RXB0是具有较高优先级的缓冲器。接收到的报文首先在RXB0中进行屏蔽滤波。RXB1是优先级较低的缓冲器。报文除了首先在RB0中进行屏蔽滤波外,由于RB0的验收滤波寄存器数量较少,因此RB0接受匹配条件更为严格,表明RB0具有较高的优先级。报文接收滚存对RXB0CTRL寄存器进行配置,如果RXB0已包含一条有效报文并且接收到另一条有效报文,不会发生溢出错误,新的报文会滚存到RXB1而不管RXB1是何种验收标准。接收标志/中断当报文传送至某一接收缓冲器时,与该接收缓冲器对应的CANINTF.RXnIF位将置1。一旦缓冲器中的报文处理完毕,MCU就必须将该位清零以接收下一条报文。该控制位提供的锁定功能确保MCU尚未处理完上一条报文前,MCP2515不会将新的报文载入接收缓冲器。报文接收报文接收起始帧信号使能之后,一旦RXCAN引脚检测到任一CAN报文开始,起始帧信号便会在SOF引脚上产生。RXCAN引脚监控空闲总线上出现的从隐性位到显性位的变化边沿。如果显性条件始终保持直至采样点发生,MCP2515视之为SOF信号并产生一个SOF脉冲。如果显性条件没有保持到采样点便发生,MCP2515视之为总线干扰,不产生SOF信号。对于单触发工作模式,SOF信号的一个用途是用于TTCAN(是CAN总线的一种高层协议,其通信是基于时间触发的,适用于安全相关的场合)系统。另外,通过监控RXCAN引脚和SOF引脚,MCU能够检测到总线上出现的小干扰,从而在它们影响CAN通讯之前发现早期总线物理故障。报文接收多滤波器匹配如果接收报文符合一个以上滤波寄存器的接受条件,FILHIT位中的二进制代码将反映其中编号最小的滤波寄存器。例如,如果滤波器RXF2和RXF4同时与接收报文匹配,FILHIT中将装载RXF2编码值。编号较小的验收滤波寄存器有较高的优先级。接收报文将按照编号升序依次与滤波寄存器进行匹配比较。这意味着RXB0的优先级比RXB1高。报文接收报文发送发送缓冲器MCP2515采用三个发送缓冲器。发送优先级具有较高优先级的发送缓冲器将首先发送。如果两个缓冲器的优先级相同,则编号较高的发送缓冲器将优先发送。TXnRTS引脚TXnRTS为输入引脚,可配置为:请求发送输入引脚,作为启动任一发送缓冲器中报文发送的备用方法标准数字输入引脚报文发送发送启动通过将TXBnCTRL.TXREQ位置1,可以启动相应缓冲器的报文发送。它可以按如下方式设定:*利用SPI写命令写寄存器*发送SPIRTS命令*将要发送报文的发送缓冲器的TXnRTS引脚置为低电平通过SPI接口启动报文发送后,可以同时将TXREQ位和TXP优先级控制位置1。当TXBnCTRL.TXREQ位置1后,TXBnCTRL.ABTF、TXBnCTRL.MLOA和TXBnCTRL.TXERR位都将被自动清零。报文发送发送中止清除与特定发送缓冲器对应的TXBnCTRL.TXREQ位来中止某条报文的发送。也可通过设置CANCTRL.ABAT位以中止所有等待发送的报文。如果CANCTRL.ABAT位被置位则所有报文中止发送。若用户要继续报文发送,则必须对该位进行复位。只有通过设定CANCTRL.ABAT位中止报文发送时,TXBnCTRL.ABTF标志才将被置位。通过复位TXBnCTRL.TXREQ来中止报文发送