2515 [MCP2515在ARM7的CAN口扩展中的应用]
摘要:ARM7嵌入式平台采用ATMEL公司的AT91SAM7X256芯片,它内部只集成了一个CAN总线控制器。本文介绍了一种新型的CAN通信控制器MCP2515,给出其在ARM7平台的CAN总线扩展中的应用实例。硬件设计给出了电路原理图,软件设计给出了测试程序主要代码。具有两路CAN的ARM7平台可用于卫星故障复现嵌入式硬件系统中。
关键词:ARM7;MCP2515;CAN总线;SN65HVD230
中图分类号:V524.3 文献标识码:A
The MCP2515 Application in CAN BUS Expansion of ARM7
WANG Shuang
(School of Astronautics of Beihang University, Beijing 100191, China)
Abstract:The embedded platform of ARM7 makes use of AT91SAM7X256, which is produced by ATMEL and only has one CAN BUS controller. This article introduces a new-style CAN BUS controller MCP2515, and presents an application in CAN BUS expansion of ARM7. In this article, the schematic circuit diagram and main code of testing program have been presented. The ARM7 platform possessing two CAN Buses can be applied to the embedded hardware system of satellite fault reappearance.
Key words:ARM7;MCP2515;CAN BUS;SN65HVD230
CAN(Controller Area Network),即“局域网控制器”的意思。CAN属于总线式串行通信网络,与一般的通信总线相比,CAN总线的数据通信具有可靠性、实时性和灵活性等突出的性能[1]。本文介绍了一种新型的CAN通信控制器MCP2515,给出其在ARM7平台的CAN总线扩展中的应用。具有两路CAN的ARM7平台可用于卫星故障复现嵌入式硬件系统中,一路CAN用于数据传输,另一路CAN用于数据归档。
1MCP2515芯片简介[2]
1.1 功能介绍
MCP2515芯片可以构建CAN接口,该CAN控制器支持CAN2.0B协议,可以工作在2.7 V ~ 5.5 V的电压下,传输速率最高可达10 Mbit/s。该器件能发送和接收标准和扩展数据帧以及远程帧。MCP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCP2515与MCU的连接是通过业界标准串行外设接口((SPI)来实现的。
1.2 内部结构
MCP2515主要由三个部分组成:CAN模块、控制逻辑和SPI协议模块。CAN模块包括CAN 协议引擎、验收滤波寄存器、验收屏蔽寄存器、发送和接收缓冲器,用于处理所有CAN总线上的报文接收和发送。通过与其他模块连接,控制逻辑模块控制MCP2515的设置和运行,以便传输信息和控制。SPI协议模块,主要负责与MCU的数据传输。
2MCP2515在ARM7平台的
CAN总线扩展中的应用实例
2.1 MCP2515在CAN总线扩展中的硬件设计
AT91SAM7X256内部集成了一个CAN总线控制器[3],采用SN65HVD230作为收发器,将ARM7的TTL电平转化为CAN总线的差分电压信号[4]。另外通过MCP2515扩展一个CAN总线接口, 这样可构成两路CAN,以满足系统的需要。ARM7平台双CAN接口如图1。
绘制原理图和PCB图,首先要了解MCP2515各引脚功能(见表1)。
ARM7平台的输入电压为12 V,而MCP2515、AT91SAM7X256等需用3.3 V电压。这时,我们需要添加相应的线性稳压器LM1084IS-3.3,把12 V电压转变成3.3 V[5]。LM1084IS-3.3两端接一些电容,起到滤波和去耦的作用。
MCP2515的两个引脚和可配置为缓冲器满中断引脚,分别用来指示有效报文载入RXB0和RXB1。电路图中,这两个引脚分别连接一个LED指示灯,然后拉高。当一个接收缓冲器CANINTF.RXnIF位变为高电平,表明有效报文载入接收缓冲器,相应的引脚将变成低电平。此时LED指示灯被点亮。一旦缓冲器中的报文处理完毕,CANINTF.RXnIF位被MCU清零,相应的中断引脚进入逻辑高电平,直到下一条报文载入接收缓冲器。这样,LED指示灯就会熄灭。MCP2515不断的接收报文,LED灯不停地闪烁。引脚和AT91SAM7X256的FIQ相连,并被拉高。这样,AT91SAM7X256为MCP2515产生复位信号。这里用12.00MHZ的晶振驱动MCP2515。PCB布线时,晶振两端的电容要相应靠近晶振两边,晶振也要位于MCP2515的7、8引脚附近。
差分信号对外部干扰能够起到很强的抗干扰能力。MCP2515的TTL电平通过SN65HVD230,转化为CAN总线的差分电压信号。PCB布线时,差分信号被安排成“密近平行线”。CAN总线末端需要接一个120 Ω的匹配电阻,当总线上已有其它部件提供终端电阻时,可以通过跳线选择不接这个电阻。RS引脚接地,SN65HVD230处于高速率状态。
当AT91SAM7X256给MCP2515发送数据时,先打开SPI0_SPCK时钟发送写命令,再通过SPI0_MOSI管脚将数据送给MCP2515的接收脚;当MCP2515给AT91SAM7X256发数据时,首先由提供给AT91SAM7X256一个中断, AT91SAM7X256收到中断信号后便开启SPI0_SPCK时钟, 发送读命令,开始接收MCP2515发送管脚发送的数据。
ARM7平台焊接出来的实物见图3。
2.2 MCP2515在CAN总线扩展中的软件设计
ARM7平台焊接出来后,需要测试MCP2515扩展出来的CAN口能否正常通信。通过H-JTAG工具,我们把嵌入式程序下载到芯片AT91SAM7X256中。然后在串口调试助手中,观看是否有正确的打印信息。打印信息正确,表明MCP2515扩展出来的CAN通道通信正常。下面详细介绍了本程序的设计思路。
MCP2515提供了状态查询以及中断两种数据操作模式,在本程序中MCP2515采用中断模式进行CAN总线数据的接收和发送。
CAN的软件就是对MCP2515接口芯片的操作,其中包括寄存器的基本操作和提供给应用层的接口函数。跟CAN相关的操作主要在三个文件中,MCP2515.h给出了函数的声明和寄存器地址;SPI_CAN.c定义了相关的操作函数;SPI_CAN_NET.h给出了另外一些函数的声明和CAN信息结构体。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 对于应用层来说主要包括四个部分:初始化MCP2515、CAN报文的读取、处理接收到的CAN报文、CAN接收中断。CAN初始化子函数设置传输波特率,初始化接收邮箱,设置接收中断。注意在打开MCP2515的CAN消息接收中断的同时还必须打开CPU的外部中断,这样当MCP2515接收到CAN消息时,可以通过INT引脚触发CPU的外部中断,使CPU进入CAN接收中断服务子程序。这里的CAN配置为500K波特率,无验收滤波,只使能接收完成中断,关闭发送完成中断。具体的程序如下所示。
MCP2515完成自身SPI接口初始化,配置SPI通讯的速度和采集的时间沿:
SPI_Initial();
MCP2515_UNSELECT();
复位MCP2515,MCP2515进入配置模式,检查是否成功进入配置模式:
mcp2515_reset();
mcp2515_setRegister (MCP_CANCTRL,MODE_CONFIG);
res = 0x80 & mcp2515_readRegister(MCP_CANCTRL);
if ( res == 0 )
return MCP2515_FAIL;
else
res = MCP2515_OK ;
设置波特率,使能接收中断:
mcp2515_configRate();
mcp2515_setRegister( MCP_CANINTE, 3 );
接收邮箱初始化:
mcp2515_setRegister( MCP_RXB0CTRL, (1> 3 );
mcp2515_setRegister(MCP_TXB0SIDL,(ucID & 0x07) 本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文
