基于DSP的CAN—USB通信系统的设计与实现

2014-03-21 12:23郭阳宽祝连庆那云孟晓辰
仪表技术与传感器 2014年5期
关键词:固件端点寄存器

张 君,郭阳宽,祝连庆,那云,孟晓辰

(北京信息科技大学仪器科学与光电工程学院,北京 100192)

0 引言

CAN总线具有传输距离远、传输速率高、抗干扰能力强、易于组网、成本低等优点[1]。目前CAN总线与PC连接普遍采用RS232、RS485和ISA等传统接口技术,它们存在着传输速度慢、功耗高、安装复杂等缺点。USB接口技术以其传输速度快、集成化程度高、支持热插拔、即插即用、无需外接电源和连接简单等优点得到了广泛的应用[2]。因此,使用USB作为CAN总线与PC连接的接口,将极大提高通信的速度和通信的可靠性。DSP具有成本低、功耗低、处理消息速度快等优点,在通信和工业产品中得到了广泛的应用。用DSP作为USB与CAN之间的微处理器,可以完成信息的实时读取、处理和传输的功能。

1 系统硬件设计

1.1总体结构

如图1所示,系统主要由USB总线接口、微处理器TMS320F2812和 CAN总线接口组成。

图1系统框图

其中USB总线接口负责PC和微处理器TMS320F2812之间消息的交换;CAN总线接口负责CAN节点与微处理器TMS320F2812之间消息的交换;微处理器TMS320F2812用于将USB总线接口和CAN总线接口连接起来,实现对USB与CAN总线上消息的读取,处理和传输的功能。

1.2USB总线接口的硬件设计

USB总线接口的硬件电路连接框图如图2所示,主要由USB接口芯片CY7C68013和微处理器TMS320F2812构成。CY7C68013内部集成了USB2.0收发器、SIE、增强的8051微控制器和可编程的外围接口。工作在48MHz晶振下时,指令执行的速度远快于标准的8051单片机。设计采用CY7C68013的SLAVE FIFO模式,在此模式下,CY7C68013内部CPU不参与消息的传输,而是由外部的微处理器直接控制CY7C68013 中FIFO消息的读写。微处理器TMS320F2812作为控制核心,产生USB的片选信号、端点选择和读写信号控制CY7C68013进行消息传输。

图2 硬件电路连接框图

在图2中,CY7C68013经过16位双向数据总线FD连接至TMS320F2812,通过SLOE引脚控制输出。FIFOADR[1:0]引脚用于选择4个FIFO端点缓冲区中的一个与XD总线连接。SLRD和SLWR分别是FIFO的读写选通信号。FLAGA-C用于表示CY7C68013芯片内部数据缓冲区的状态,其直接与DSP的IO引脚相连。

1.3CAN总线接口的硬件设计

TMS320F2812芯片上集成了一个完整的增强型CAN控制器,即eCAN,其为CPU提供了完整的CAN2.0B协议,因此,设计电路时不必外接控制器就可以实现CAN总线的底层协议[3]。TMS320F2812内部CAN控制器只有通过CAN收发器才能与外部进行通信,因此采用外接PCA82C250作为CAN的收发器。PCA82C250是CAN协议控制器和物理总线间的接口,该器件对总线提供差动发送能力,对CAN控制器提供差动接收能力,负担着节点逻辑电平和CAN总线差动电平之间的电平转换任务。PCA82C250可以增大通信距离,提高系统的瞬间抗干扰能力,保护总线,降低射频干扰实现热防护[4]。基于TMS320F2812的CAN总线接口硬件电路如图3所示。

图3 CAN总线接口硬件电路图

在图3中,引脚CANRX,CANTX分别是DSP内部CAN控制器模块的接收、发送引脚,其直接与PCA82C250的RXD和TXD引脚相连。CANH和CANL为差分输出,2个引脚分别通过1个限流电阻与CAN总线相连,该限流电阻可以克服长线效应,减小通信介质中信号的反射。引脚RS用于工作模式的选择。通过外接1个22 kΩ的斜率电阻,使系统工作在斜率模式下,该模式允许使用非屏蔽双绞线或平行线作为总线,可降低射频干扰。

2 系统软件设计

系统软件设计主要包括CY7C68013固件程序的设计、CAN程序的设计以及应用程序的设计。

2.1固件程序设计

固件程序是指存储在USB接口芯片内部,用于辅助设备完成预期功能的程序。该程序主要完成USB接口芯片内部的初始化,处理主机的设备请求,以及完成外围电路的控制等[5]。Cypress公司为CY7C68013的固件开发提供了固件程序框架和相关的库文件,为了实现特定的功能,只需要在TD_Init()、TD_Poll()等函数中配置需要使用的端点,选择合适的传输方式,添加实现功能的代码等[6]。

系统上电后,固件程序首先初始化内部的状态变量,然后调用初始化函数TD_Init(),当程序从此函数返回后,固件程序就会设置USB接口成为未配置的状态并且使能中断,接下来,在1 s的间隔内重新列举设备,并直到端点0接收到设置封包为止。一旦设置封包被检测到,固件程序将开始交互的任务调度[6]。为使系统能够快速、可靠地传输消息,采用自动批量传输。将端点2设置为OUT型,负责传输PC的消息;将端点6设置为IN型,负责接收CAN总线上的消息。以下是在Keil C51环境下编写的以C语言为基础的固件程序的主要代码。

void TD_Init(void)

{IFCONFIG |= 0xCB;//异步从FIFO模式,使用内部的48MHz的时钟频率

……..

//初始化端点2的输出的程序段

EP2CFG = 0xA2;

EP2FIFOCFG=0x10;

// 初始化端点6的输入的程序段

EP6CFG = 0xE2;

EP6FIFOCFG=0x0C;

……..

//FLAGA标志端点2的空,FLAGB标志端点6的满

PINFLAGSAB=0xE8;

}

2.2CAN程序设计

系统CAN总线通信工作原理为:在程序初始化中,根据系统要求对CAN寄存器进行初始化;DSP对CAN总线通信的管理包括发送信息和接收信息。 TMS320F2812中的eCAN模块主要由CAN协议内核和消息控制器构成。CAN协议内核主要完成消息解码,并向接收缓冲发送解码后的消息,同时根据CAN协议向总线发送消息,消息控制器决定接收到的消息的取舍[7]。对具体系统的总线通信软件部分的设计包括应用层协议制定和实施,明确各节点的功能以及相互交互的数据,规定每位数据的确切含义以及要做的响应处理[5]。因此,在软件设计中,主要完成3部分程序的设计:初始化程序、发送消息程序以及接收消息程序。

2.2.1初始化程序设计

CAN模块初始化包括:时钟使能,引脚定义,波特率设定等。首先,关闭看门狗,通过配置PLLCR、PCLKCR寄存器,对时钟和频率进行设置;其次,配置DSP寄存器GPMFUX的位6和位7,使CANTX和CANRX引脚作为CAN的通信接口引脚;然后,配置与波特率相关的3个寄存器(SCSR1、BCR1和BCR2);最后,对中断进行设置,主要包括邮箱中断屏蔽寄存器CANMIM以及邮箱中断级别设置寄存器CANMIL的配置。只有当CAN总线控制器进入复位模式时,才能进行初始化,而当初始化完成后,控制器的复位标志必须清除。

2.2.2发送消息和接收消息程序设计

CAN总线采用“载波检测,多主掌控、冲突避免(CSMA/CA)”的通信模式,以报文为单位进行消息传输[7]。发送消息的过程如图4所示。发送消息时,需要初始化发送邮箱,主要包括设置邮箱使能寄存器CANME,邮箱数据方向寄存器CANMD,通过寄存器MBOXn.MSGID(n=0-31)设置发送邮箱的ID,初始化后,向消息寄存器中写入要发送的消息,然后设置发送邮箱的TRS位为1,请求发送信息,等待传输响应位TA=1,表示成功发送消息,最后清除发送响应标志位,等待下次发送信息。

接收消息的过程如图5所示。接收消息时,同样需要初始化相应的接收邮箱,完成初始化后,如果接收邮箱的ID与CAN接口发送来的消息的ID匹配,并成功接收,则接收邮箱挂起寄存器RMP的相应位被置1,当CPU读取完接收邮箱中的消息后,接收邮箱挂起寄存器的标志位被清除,等待下一条消息的接收。

图4 发送消息流程图

图5 接收消息流程图

2.3应用程序设计

系统中,TMS320F2812实现2个功能:实现USB与CAN之间双向的消息传输;完成CAN控制器的初始化和输出USB控制器所需要的信号。

图6为消息由USB发向CAN的软件流程图。DSP采用查询方式接收USB传来的消息,当USB芯片端点2不为空时,DSP就将该端点缓冲区的消息读进来进行处理,否则一直等待。经过处理后的消息放入到发送邮箱的缓冲区中,由CAN收发器发送给相应的CAN节点。图7为消息由CAN发向USB的软件流程图。DSP通过中断方式接收CAN总线上的消息,当中断发生时,DSP响应中断,把存储在接收邮箱缓冲区中的消息读取出来,经过处理后,发送给USB芯片端点6。当USB芯片端点6不满时,DSP就将消息放入端点6的缓冲区中,从而传送给上位机,否则一直等待。

图6 USB至CAN流程图

图7 CAN至USB流程图

3 通信测试

系统测试如图8所示。利用CAN调试器作为CAN总线接口的节点,与PCA82C250实时通信。PC通过Cypress USB Console界面向CAN节点发送消息并接收来自该节点的消息。USB接口工作在高速模式下,负责PC与DSP之间消息的传输。CAN收发器负责DSP与CAN节点之间消息的传输。首先,在固件程序中设置端点2是输出,端点6是输入。DSP中设置0号邮箱是发送,16号邮箱是接收。其次,通过USB界面把固件程序下载到CY7C68013中,并选择CAN调试器的传输速率为800 kbit/s.

图8系统测试方框图

图9USB Console发送消息界面

图10CAN调试器接收消息界面

图11CAN调试器发送消息界面

图12USB Console接收消息界面

4 结束语

经过多次测试,当USB控制器工作在高速模式,CAN收发器工作在800 kbit/s的传输速率下,PC和CAN调试器均准确的收到消息。系统将USB的快速传输消息的特点和CAN总线通信的高性能、高可靠性的优点结合起来,通过硬件电路的设计以及相关程序的编写,实现消息快速、可靠的传输。

参考文献:

[1]饶运涛,邹继军,王进宏,等.现场总线CAN 原理与应用技术.北京:北京航空航天大学出版社,2007.

[2]刘吉名,裘东兴.基于CY7C68013的USB2.0数据传输模块设计.电子测量技术,2008(3):94-96.

[3]李洪波.基于DSP的CAN总线节点的研究与通信实现.哈尔滨理工大学学报,2005,2(10):72-75.

[4]佟俐,潘宏侠,胡田.基于TMS320F2812的CAN总线通信系统.仪表技术与传感器,2008(10):36-38.

[5]黄艳芳,赵晶.基于CAN-USB总线的机车滚动轴承检测系统的设计.电子测量技术,2009,4(32):12-16.

[6]孟浩.基于EZ-USB FX2的CMOS图像采集系统设计与实现.仪器仪表学报,2007,4(28):333-334.

[7]蔡昌新.eCAN接口的设计与实现.长江大学学报(自科科学版),2007,理工卷(2):93-95.

猜你喜欢
固件端点寄存器
非特征端点条件下PM函数的迭代根
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
不等式求解过程中端点的确定
移位寄存器及算术运算应用
基于SHA1的SCADA系统PLC固件完整性验证方法
基于UEFI固件的攻击验证技术研究*
基于固件的远程身份认证
基丁能虽匹配延拓法LMD端点效应处理
提取ROM固件中的APP