摘要:MCP2510是MT公司生产的一种带SPI接口的CAN控制器,主要用于简化CAN接口应用设计。文中介绍了MCP2510的特点、结构和基本工作原理,给出了其应用接口电路及SPI接口协议的软件实现方法。
关键词::MCP2510 CAN接口 MCU
1 概述
MCP2510是一种带有SPI接口的CAN控制器,它支持CAN技术规范V2.0A/B;并能够发送的接收标准的和扩展的信息帧,同时具有接收滤波和信息管理的功能。MCP2510通过SI接口与MCU进行数据传输,最高数据传输速率可达5Mb/s,MCU可通过MCP2510与CAN总线上的其它MCU单元通讯。MCP2510内含三个发送缓冲器、二个接收缓冲器。同时还具有灵活的中断管理能力,这些特点使得MCU对CAN总线的操作变得非常简便。
MCP2510的主要特点如下:
●支持CANV2.0A/B;
●具有SPI接口,支持SPI模式0,0和1,1;
●内含3个发送缓冲器和2个接收缓冲器,可对其优先权进行编程;
●具有6个接收滤波器,2个接收滤波器屏蔽;
●具有灵活的中断管理能力;
●采用低拉功耗CMOS工艺技术,其工作电压范围为3.0~5.5V;有效电流为5mA,维持电流为10μA;
●工作温度范围为-40~+125℃。
2 管理功能
MCP2510有PDIP、SOIC和TSSOP三种封装形式,有18个引脚。图1为18脚PDIP封装形式,有18个引脚。图1为18脚PDP封装MCP2510的引脚排列图。表1所列是各引脚功能的详细描述。
表1 MCP2510的引脚功能
| 引 脚 | 名 称 | 功 能 |
| 1 | TXCAN | 去CAN总线的发送输出引脚 |
| 2 | RXCAN | 来自CAN总线的接收输入引脚 |
| 3 | CLKOUT | 具有可编程预分频的时钟输出引脚 |
| 4 5 6 | TX0RTS TX1RTS TX2RTS | 发送缓冲器发送请求端,或作数字输入端 |
| 7 8 | OSC2 OSC1 | 振荡器输出端、输入端 |
| 9 | Vss | 地端 |
| 10 11 | RX1BF RX0BF | 接收缓冲器中断引脚,或作数字输出端 |
| 12 | INT | 中断输出引脚 |
| 13 | SCK | SPI接口的时钟输入端 |
| 14 | SI | SPI接口的数据输入端 |
| 15 | SO | SPI接口的数据输出端 |
| 16 | CS | SPI接口的片选输入端 |
| 17 | RESET | 复位端 |
| 18 | VDD | 电源端 |
3 结构及工作原理
图2是MCP2510的内部结构框图,其中CAN协议机负责与CAN总线的接口,SPI接口逻辑用于实现同MCU的通讯,而寄存、缓冲器组与控制逻辑则用来完成各种方式的设定和操作控制。现结合其工作过程将各部分的功能、原理作一介绍。
3.1 收发操作
MCP2510的发送操作通过三个发送缓冲器来实现。这三个发送缓冲器各占据14个字节的SRAM。第一字节是控制寄存器TXBNCTRL,该寄存器里的内容设定了信息发送的条件,且给出了信息的发送状态;第二至第六字节用来存放标准的和扩展的标识符以及仲裁信息;最后八个字节则用来存放待发送的数据信息。在进行发送前,必须先对这些寄存器进行初始化。
3.2 中断管理
MCP2510有8个中断源,包括发送中断、接收中断、错误中断及总线唤醒中断等。利用中断使能寄存器CANINTE和中断屏蔽寄存器CANINTF可以方便地实现对各种中断的有效管理。当有中断发生时,INT引脚变为低电平并保持在低电平,直到MCU清除中断为止。
3.3 错误检测
CAN协议具有CRCF错误、应答错误、形式错误、位错误和填充错误等检测功能。MCP2510内含接收出错计数器(REC)和发送出错计数器(TEC)两个错误计数器。因而对于网络中的任何一个节点来说,都有可能因为错误计数器的数值不同而使其处于错误-激活、错误-认可和总线-脱离三种状态之一。
4 应用实例
笔者利用MCP2510和CAN总线收发器82C250构成了一个CAN总线分布式温湿度测控网络。该系统包括一个主控制器和多个节点控制器(温湿度测控单元),这种网络拓扑结构采用了总线式结构,且结构简单、成本低,采用无源抽头连接。因而系统的可靠性较高。其信息传输采用CAN通信协议,通信介质采用双绞线。由于CAN总线是基于发送报文的编码,它不对CAN控制节点进行编码,故系统的可扩充性比较好,同时增删CAN总线上的控制节点不会对系统的其余节点造成任何影响。
节点控制器的MCU可选用具有SPI接口的微处理器,也可采用不带SPI接口的微处理器。本系统采用的是不带SPI接口的89C2051微处理器,89C2051可通过4条普通的I/O线与CAN控制器的SPI接口直接相连,并可用软件算法来实现SPI接口协议。CAN总线收发器82C250则作为MCP2510与物理总线的接口。如果需要进一步提高系统的抗干扰能力,可在MCP2510和82C250之间再加一个光电隔离器。MCP2510与MCU和CAN收发器的实际接收如图3所示。

5 SPI接口协议的软件实现
在使用CAN控制器MCP2510时,需要对MCP2510进行初始化以及对CAN总线上的数据进行收发操作。与其它CAN控制不同的是,读、写MCP2510的发送和接收缓冲器必须通过SPI接口协议的读写命令来实现。SPI写命令时序如图4所示。写指令首先被发送到MCP2510的SI引脚,并在SCK的上升沿锁存每个数据位,然后发送地址和数据。执行完毕指令后,数据被写进指定的地址单元中,再通过SPI接口协议的写命令来设置发送位以启动发送。
SPI接口协议的读命令时序图如图5所示。操作时,首先将读指令和地址发送到MCP2510的SI引脚,并在SCK的上升沿锁存每个数据位。同时把存贮在这个地址单元中的数据在SCK的下降沿输出到SO引脚。当执行读写操作时,CS引脚应始终保持在低电平。

用软件编程实现SPI接口协议的汇编语言程序如下:
SPI接口写子程序:
MES_WRITE:CLR C ;清除进位标志C
MOV R3,#8 ;置循环次数R3为8
WRIT1:CLR SCK ;置SCK为低电平
NOP
RLC A ;A中存放写指令或地址、数据,带进位标志左移一位
MOV SI,C ;A中的最高位送SI
NOP
SETB SCK ;置SCK为高电平,此时A中的最高数据被锁存
NOP
DJNZ R3,WRIT1 ;循环8次
RET
SPI接口读子程序:
MES_READ:CLR ACC ;清除A中内容
CLR C ;清除进位标志C
MOV R6,#8 ;置循环次数R6为8
READ1:CLR SCK ;置SCK为低电平
NOP
MOV C,SO ;SO线输出的数据送给进位标志C
RLC A ;A带进位标志左移一位
SETB SCK;置SCK为高电平
NOP
DJNZ R6,READ1;循环8次后,SO线输出的数据送到A
RET
