基于CY7C68013A芯片的USB键盘的设计

2012-07-17 07:37陈喜春
山西电子技术 2012年1期
关键词:枚举固件驱动程序

陈喜春

(石家庄机械化步兵学院军事模拟训练中心,河北石家庄050083)

USB接口具有传输速率高,体积小,可向外供电等特点,因此使得计算机与外部硬件设备之间的连接和使用都十分方便。目前,计算机的外围设备中,例如鼠标、键盘、打印机都开始采用USB接口实现。本文中,将介绍Cypress公司的USB接口芯片——CY7C68013A,并介绍基于 CY7C68013A实现的USB键盘。

1 CY7C68013A芯片简介

一个典型的USB应用系统由USB设备、USB主机和USB电缆组成,USB主机一般指具有USB接口的计算机,连接到主机USB端口的外部设备一般称为USB设备。

Cypress的EZ-USB FX2系列芯片是世界上第一款集成了USB2.0协议的微处理器,EZ-USB FX2LP系列是其低功耗版本,使用比较多的是CY7C68013A。

FX2LP芯片的内部主要包括高性能微处理器内核、USB2.0收发器、智能引擎(SIE)、增强 8051内核、16K的RAM,4K的FIFO、IO接口、数据总线、地址总线和通用可编程接口等。EZ-USB FX2LP的CPU采用的是增强型8051内核,指令集和标准的8051完全兼容,因此非常便于熟悉51单片机的用户使用。

根据内部资源和引脚数量的不同,CY7C68013A芯片一共提供了三种不同的封装。本文以CY7C68013A-56pin为例进行说明,该封装提供了PA、PB、PD共3个8位并行I/O端口。

2 开发环境的搭建

USB接口设备的开发比较复杂,需要涉及USB固件程序、USB驱动程序、上位机程序开发和电路板设计等诸多方面。

2.1 固件开发环境

USB功能设备的硬件功能主要由硬件上的微处理器来实现,微处理器是由芯片上的固件程序控制的。由于FX2LP的CPU采取了8051内核,因此,固件开发环境仍然可以使用51系列单片机的常用开发软件——Keil μVision。

2.2 Cypress开发包

Cypress公司为EZ-USB芯片提供了一个开发包,CY3684 EZ-USB FX2LP Development Kit,里面包含了典型的固件代码,用户可以参考使用。另外,该开发包还提供了通用USB驱动程序、典型的硬件电路、上位机操作函数说明等。

2.3 上位机开发环境

USB功能设备需要连接到计算机上使用,因此需要上位机的程序开发,一般可以使用微软的Visual Studio来实现。USB设备开发的上位机程序通过USB设备的驱动程序来和USB设备进行通信。

驱动程序的开发可以使用微软的DDK开发驱动程序,也可以使用Driver Studio软件。针对Cypress公司的EZ-USB系列芯片,也可以直接使用Cypress的通用驱动程序,这是一种更加简单的开发方式。

3 USB键盘的设计

3.1 电路设计

图1是CY7C68013A-56pin的典型连接。电压调整芯片将USB接口的5 V电压转换为芯片的工作电压3.3 V;类似51系列单片机,时钟振荡电路接入晶振和两个瓷片电容;SCL与SDL引脚接上拉电阻。

图1 CY7C68013A端口的连接关系

键盘设计十分简单,CY7C68013A-56pin有 PA、PB、PD三组24个IO端口,利用这些IO端口,就可设计常用的矩阵键盘,如图2所示,键的数目可达12*12个。和51单片机实现的键盘一样,固件程序需要对行和列进行扫描,采用轮询或中断的方式,对按下的键值进行判断。

另外,在制作电路板的时候,注意D+和D-的走线尽量的短而且相等,晶振尽量靠近芯片。

图2 键盘与CY7C68013A的连接

3.2 USB芯片的固件程序设计

EZ-USB FX2LP芯片采用的是一种软配置模式。也就是USB设备的各种驱动程序都保存在上位机,上电后,USB主机首先将程序下载到RAM中,然后从RAM开始执行。在这个过程中,有两次“枚举”:刚加电时,USB内核中没有固件,将被枚举为一个默认的USB设备;主机下载固件程序之后,在内核中执行固件程序,就会重新识别并枚举这个USB设备,这个过程被称为“重枚举”。在第一次枚举时,根据芯片有没有连接E2PROM,以及E2PROM中第一个字节的值,有不同的处理方式。当没有外接E2PROM时,将根据驱动程序中提供的VID,PID和DID,把主机上对应的固件程序下载到片内的RAM中,并执行固件代码。

USB固件程序是USB设备功能的核心,通过两次枚举,固件程序被下载到CY7C68013A的芯片里(程序也可以放在外接的EEPROM芯片里),用于配置芯片工作在需要的状态下。

固件程序使用Keil μVision来编写。可以参考Cypress的例程。大体步骤是:

(1)初始化休眠模式、远程唤醒等。

(2)初始化用户设备,主要是TD_Init()子程序。负责整个USB设备的初始化过程。

(3)定向描述符。

(4)把所用中断打开,并开启8051全局中断EA=1。由于EZ-USB设备启动需要重列举,因而需要通过设置和判断USBCS寄存器的RENUM和DISCON位来模拟设备物理上的断开和连接过程。

(5)用户外围设备控制功能的实现放在TD_Poll()子程序中,同时主循环中的SetupCommand()子程序用于接收、分析上位机的控制信号,响应上位机请求(标准请求和用户自定义请求)。

3.3 USB通用驱动程序的使用

USB设备的使用需要驱动程序的支持,Cypress提供了通用的USB驱动程序。

该驱动包括两部分:CyLoad.sys和CyUsb.sys,前者用于固件程序的下载,后者用于主机和固件程序的通信。这两个驱动程序提供的引导文件分别是CyLoad.inf和CyUSB.inf,用户可以直接使用,也可以根据需要进行改动。

为了在CyLoad.sys的帮助下实现固件的自动下载,固件程序CyLoad.HEX必须转换为适合自动下载的CyLoad.spt文件,并且与CyLoad.sys一起放在 CyLoad文件夹下,拷贝到系统system32目录下。在安装文件CyUSB.inf中设置的PID,VID必须和描述符中的一致,使得能够自动加载对应固件。

USB设备使用时,必须首先安装驱动程序,注意分别安装上面提到的下载驱动CyLoad.sys和通信驱动CyUsb.sys。安装驱动之后,可以使用Cypress提供的主机控制函数库CyAPI.lib开发主机程序,通过驱动程序和USB设备进行通信。

3.4 USB主机的应用程序设计

USB主机程序可以使用Cypress提供的CyAPI.lib库来进行编程。CyAPI.lib对应Cypress提供的驱动程序CyUsb.sys,为其提供了简单而且功能强大的C++编程接口,通过CyAPI.lib库提供的函数,可以对USB设备进行读写操作,这些函数主要是Open,Close和XferData。

本文以VC++6.0为例,描述创建USB设备应用程序的步骤。

(1) 新建工程,并将 CyAPI.h,CyAPI.lib,cyioctl.h 三个文件加载到项目中。

CyAPI.h 中定义了 CCyUSBDevice、CCyControlEndPoint等几个重要的类;而cyioctl.h中则定义了读取USB设备的几个重要的结构和宏。

(2)在相应的文件中(视、框架或者对话框,依具体情况),包含头文件 CyAPI.h 和 cyioctl.h。

然后定义USB设备全局变量和控制端点全局变量,并进行初始化:

三是创新技术。着力研发有益膳食平衡、降低营养损失、消除有毒残留的饮料加工新技术;着力研发自动化、智能化、信息化的饮料新装备、新检测技术、新零售模式;着力研发生态环保、清洁卫生、安全可靠、质量保障的饮料生产新工艺。以创新创造,大力提升中国饮料工业的整体竞争力。

CCyUSBDevice*USBDevice=new CCyUSBDevice();

CCyControlEndPoint* ept= USBDevice- >Control EndPt;

(3)在程序执行时,采用中断方式,或者轮询方式交换数据。以轮询方式为例,则在帧循环中加入如下代码:

if(USBDevice- >IsOpen())

{

ept- >Target=TGT_DEVICE;

ept- >ReqType=REQ_VENDOR;

ept- >ReqCode=0xA2;

ept- >Value=0;

ept- >Index=0;

PUCHAR buf=new UCHAR[6];

ZeroMemory(buf,6);

LONG buflen=6;

ept- > XferData(buf,buflen);

}

首先判断设备是否打开,然后指定操作码,ept->Xfer-Data()完成传输,实现从端口读数据,或者向端口写数据。数据传输的方向由ept->Direction来设置。

(4)结束程序时,关闭USBDevice。

USBDevice- >Close;

4 结论

EZ-USB FX2芯片实现USB系统,软硬件程序设计,相比较而言,简单、方便。本文介绍了设计USB系统的大体步骤,给出了USB键盘设计的实例。

上述系统和程序经过实际运行,工作稳定、可靠。

[1]薛园园,赵建领.USB应用开发实例详解[M].北京:人民邮电出版社,2009.

[2]钱峰.EZ-USB FX2单片机原理、编程及应用[M].北京:北京航空航天大学出版社,2006.

[3]Cypress Semiconductor.EZ-USB Technical Reference Manual[CP/DK].2006.3.

猜你喜欢
枚举固件驱动程序
基于理解性教学的信息技术教学案例研究
一种高效的概率图上Top-K极大团枚举算法
计算机硬件设备驱动程序分析
基于固件的远程身份认证
基于太阳影子定位枚举法模型的研究
提取ROM固件中的APP
一种通过USB接口的可靠固件升级技术
基于MPC8280的CPU单元与内部总线驱动程序设计
多路手机固件升级工具设计
USB开发中易混淆的概念剖析