基于MCP2515的CAN总线通信单元设计

2015-11-09 21:22丁雪静许永辉
现代电子技术 2015年21期
关键词:CAN总线

丁雪静+++许永辉

摘 要: CAN总线接口芯片MCP2515采用SPI接口,具有体积小、低功耗、功能完善、使用方便等特点。为了实现基于该接口芯片的CAN总线通信单元设计,采用DSP+FPGA架构,在FPGA内部实现SPI接口逻辑和MCP2515指令转换逻辑,以完成不同的SPI指令,在DSP中接收上位机指令和完成对MCP2515的控制。实际测试结果表明,该通信单元设计合理,运行稳定,满足了实际需求。

关键词: CAN总线; MCP2515; SPI; DSP

中图分类号: TN915?34 文献标识码: A 文章编号: 1004?373X(2015)21?0060?04

Design of CAN bus communication unit based on MCP2515

DING Xuejing, XU Yonghui

(Department of Automatic Test and Control, Harbin Institute of Technology, Harbin 150001, China)

Abstract: The CAN bus interface chip MCP2515 with SPI interface has the characteristics of small volume, low power consumption, perfect function and convenient use. To realize the design of CAN bus communication unit based on this interface chip, the DSP + FPGA framework is adopted in this design. The SPI interface logic and MCP2515 instruction transformation logic are achieved in FPGA to accomplish the different SPI commands. The upper computer instructions are received and the control to MCP2515 is finished in DSP. The practical test results show that the communication unit has reasonable design and stable operation, which meets the actual needs.

Keywords: CAN bus; MCP2515; SPI; DSP

CAN作为一种性能可靠的串行通信协议,主要应用于工业自动化、医疗设备和工业设备等方面领域。MCP2515[1]是一款独立控制器局域网协议控制器,该控制器完全支持CAN V2.0B技术规范,通信速率最大为1 Mb/s,能够发送和接收标准和扩展的数据帧及远程帧等多种帧格式。同时拥有2个接收缓冲器,可优先存储报文,6个29位验收滤波寄存器,2个29位验收屏蔽寄存器,3个发送缓冲器,具有优先级设定及发送终止功能,并且该器件具有体积小,采用低功耗CMOS技术等特点。基于MCP2515的功能特点,本文介绍了基于该控制器的CAN总线通信单元设计。

1 CAN通信单元总体设计

为实现CAN通信,并对其进行实时的程控,本模块利用LabWindows/CVI作为上位机,设计用户控制面板,进行不同CAN节点之间的数据交互以及波特率设置等。同时,采用DSP+FPGA架构进行CAN通信单元设计,MCP2515通过SPI接口与FPGA进行连接,并在FPGA内部进行SPI接口逻辑和指令转换逻辑设计,在DSP中接收上位机命令和对MCP2515的控制。在电路设计时,利用TJA1050作为高速CAN收发器,由此,完成CAN总线通信单元的整体设计,如图1所示。

2 CAN通信单元硬件设计

根据CAN通信原理[2],设计了硬件电路图。在电路设计中,采用由无源陶瓷振荡器、起振电容、反馈电阻等构成皮尔斯(Pierce)式振荡电路,晶振频率取16 MHz,与此对应的起振电容的推荐值为22 pF。采用TJA1050作为CAN收发器[3],该器件采用了SOI技术可以有效降低电磁辐射,并且具有瞬态保护和热保护功能,具有较强的抗电磁干扰能力。考虑到该通信单元工作场合的电磁环境恶劣,同时可能存在潜在的共模电压干扰,因此在CAN控制器和收发器增加了信号隔离电路,此外,对CAN收发器的供电电压也做了隔离处理。

CAN通信接收通道和发送通道分别采用HCPL0631和HCPL063L高速光耦隔离器进行信号隔离,消除CAN总线节点之间的电磁干扰。本设计采用Altium Designer Winter 09进行原理图设计和PCB设计。

2.1 CAN控制器MCP2515

MCP2515是一款独立的CAN控制器,该器件由3部分构成:CAN通信协议模块;CAN通信控制逻辑模块;SPI接口协议模块。下面分别对3个部分进行简单的介绍。

(1) CAN通信协议模块:该模块主要用于CAN总线报文的接收和发送。在报文发送时,先将报文载入报文缓冲器和控制寄存器中,MCU通过SPI接口设置控制寄存器中的数据帧格式位、数据长度位等内容完成CAN数据帧发送设置,使用发送使能引脚启动报文发送。在报文接收时,MCU通过SPI接口读取CAN通信协议模块寄存器组中的通信状态信息和报文滤波信息,确定CAN总线是否有报文和报文是否送入接收缓冲器中。

(2) CAN通信控制逻辑模块:通过与其他模块连接,进而控制MCP2515的设置和运行,以便传输信息与控制。

(3) SPI接口协议模块:MCU通过SPI接口与MCP2515实现数据传输,使用标准的SPI读/写指令以及MCP2515的SPI数据通信协议实现对芯片寄存器的读/写。CAN通信的所有指令和数据均通过SPI接口进行传输,指令包含该芯片的复位指令、读指令、写指令、读RX缓冲器指令、装载TX缓冲器指令以及位修改指令。通过以上指令实现MCP2515的初始化、数据发送以及数据接收等功能。

2.2 CAN收发器TJA1050

本设计采用NXP公司的TJA1050芯片[4]作为CAN收发器。作为CAN控制器和CAN总线之间的物理接口,既可以将CAN控制器输出信号TXCAN转换为差分信号对发(CANH和CANL)送至总线上,也可以将CAN总线上的差分信号对转换成CAN控制器信号RXCAN。TJA1050最高传输速率为1 Mb/s,并具有静音模式,在发送禁止时,不会对总线上其他节点带来影响,并且具有较高的抗电磁干扰能力。

3 CAN通信单元逻辑设计

本设计采用Altera公司的Cyclone Ⅲ系列的EP3C55 FPGA进行通信单元控制逻辑设计[5?6]。通过DSP的EMIF接口,将相应控制信号和DSP数据写入FPGA,并通过地址线进行译码。当译码信号cs_daL有效时,锁存至寄存器buf的低16位;当cs_daH有效时,锁存至寄存器buf的高16位;当cs_num有效时,锁存串行数据位数;当cs_RD有效时,并且DSP控制信号OE同时有效时,将接收FIFO中的值送至DSP的数据线上。该通信逻辑单元同时包含指令解析模块,该模块对锁存的32位数据和指令长度进行判断,若长度为8,则为复位指令,只将buf[7:0]该 8位数据依次送给send信号;若长度为24,并且buf[16]等于1,则为读指令,只将buf[23:8]该16位发送至send信号,并在后8个SCK信号之后,将SO信号锁存至接收寄存器,进而存入接收FIFO中;如果buf[16]等于0,则为写指令,将buf[23:0]该24位数据送给send信号;若长度为32,则为位修改指令,将buf[31:0]所有的32位信号均送至send信号。SPI逻辑模块将指令、相应寄存器地址和数据输出至外部电路MCP2515器件的相应引脚,根据SPI时序图进行时序设计,当CS信号为低电平并且SCK有效时,将指令、MCP2515内部寄存器地址、需要发送的数据通过SI引脚依次串行输出,并将CAN总线上的数据发送至MCP2515中的缓存寄存器,通过SO引脚输送至FPGA的接收FIFO中,逻辑设计如图2所示。

4 CAN通信单元程序设计

4.1 DSP软件设计

软件部分采用CCStudio v3.3进行编程设计,对于CAN通信模块软件设计分为3个基本部分:MCP2515的初始化设置、数据的发送和数据的接收。这3部分是CAN通信控制逻辑的基本内容,通过以上3部分可以实现CAN总线的数据发送和读取。下面对这3个部分进行简单的介绍。

4.1.1 MCP2515初始化

MCP2515在运行之前需进行初始化,在初始化之前必须进行MCP2515复位设置,以便于将MCP2515内部寄存器恢复到默认值。由于只有在配置模式下,才能够对MC2515进行初始化,故需将MCP2515设置在配置模式下,在进入模式的配置之后,正式进入初始化设置,其中初始化主要包含波特率设置、中断寄存器设置、验收屏蔽寄存器设置、验收滤波寄存器设置。在完成以上功能设置后,还需将MCP2515设置为正常模式,在正常模式下,方可进行正常的数据接收和发送。图3为MCP2515初始化流程。

4.1.2 MCP2515数据发送

在进行数据发送时,只需要按照特定的帧格式将数据进行组合,并送入MCP2515发送缓冲区,并根据设定的优先级,启动发送命令即可。本设计利用SPI写命令写寄存器启动发送。同时对于报文发送是否成功进行判断,如果发送成功,将TxBnCTRL.TXREQ位进行清零,否则判断报文发送失败是由于报文出错还是仲裁失败引起的。图4即为报文发送流程图。

4.1.3 MCP2515数据接收

图5为报文接收流程图。在进行数据接收时,首先进行起始帧检测,在检测到起始帧的情况下,将报文载入报文集成缓冲器(MAB)中,之后判断收到的报文是否有效。如果报文无效,即产生错位帧,否则继续判断报文是否符合接收缓冲器RXB0条件或者接收缓冲器RXB1条件。当符合接收缓冲器条件时,判断相应的缓冲器是否为空以及是否可以接收新的报文,对于缓冲器RXB0可设置滚存模式,即当RXB0数据存满时,如果继续接收新的报文,可将其滚存至RXB1中,当RXB0或RXB1接收报文时,将产生中断,置相应缓冲中的满中断标志位CANINTE.RXxIF为1,并通过设置RXBxCTRL.FLIGHT位使能报文接收的验收滤波寄存器编号。之后使能相应的缓冲器中断,最后判断是否打开中断。

4.2 上位机软件设计

上位机软件设计包含底层驱动程序设计和上位机应用软件设计,底层驱动程序用于实现对硬件控制,该程序利用VISA中的Driver Studio进行开发。在底层硬件的支持下,采用LabWindows/CVI进行用户界面设计。通过上位机软件可以方便用户实时对CAN总线通信进行控制,并且对数据帧、扩展帧格式、波特率等参数进行配置。图5为CAN通信模块测试软面板。其中分为3部分:通信配置、数据发送和数据接收。其中通信配置包含通道选择、波特率设置、数据位数选择、帧格式选择、ID设置、验证屏蔽寄存器设置、验证滤波寄存器设置;发送数据区可设置发送字节数,发送何种形式的报文设定,其中可发送特定报文、广播报文和远程报文等特殊报文;接收数据区用于接收CAN总线上的其他CAN节点发送来的报文,并且完成一次接收后,需清空接收数据区。同时,在进行CAN通信配置设定之前需进行MCP2515初始化设置。模块初始化即将所有通信配置进行初始化,使模块进入初始化状态。图6为上位机软件界面。

5 测试结果

为了验证CAN通信单元设计的正确性,即硬件电路设计无误,FPGA逻辑设计正确、DSP程序正确运行、驱动程序设计正确,以及上位机软件设计正确等方面。本设计采用周立功ZLG CANTest进行验证,经过100 000次循环测试,数据传输正确无误,表明该通信单元能够在设定的波特率下进行多种形式的报文发送和接收,图7即为测试结果。该结果表明,设计正确和CAN通信单元运行正常。

6 结 语

本文介绍了一种基于MCP2515的CAN总线通信单元设计方法。在硬件设计方面,利用MCP2515和TJA1050实现信号形式转换,采用FPGA+DSP架构,进行上位机命令接收和CAN通信逻辑设计,并实现SPI指令和数据解析。在软件设计方面,提供了帧格式和远程报文/广播报文/特定报文设置,以及对数据位和报文进行滤波、屏蔽功能设置。通过以上设置,可进行多种报文发送。测试证明,该通信单元可进行正常的报文接收和发送,通信可靠、运行稳定、符合技术要求。

参考文献

[1] Microchip Technology Inc. MCP2515 datasheet [R]. US: Microchip Technology Inc., 2005.

[2] 饶运涛,邹继军,郑勇芸.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2006.

[3] 侯明,杜弈.基于CAN总线的接口电路设计[J].通信技术,2008,41(7):138?140.

[4] Philips. TJA1050 datasheet [R]. Netherland: Philips, 1999.

[5] 王跃飞,侯亮,刘菲.基于FPGA的CAN网络实时管理系统设计[J].电子测量与仪器学报,2013,27(8):721?728.

[6] 李亚峰.基于Verilog HDL设计CAN控制器[D].北京:北京交通大学,2007.

猜你喜欢
CAN总线
论网络通信技术
CAN总线通信技术在电梯监控系统中的应用
基于CANoe的J1939协议在ECU通信中的应用