采用CY7C646xx系列实现USB接口系统的设计

接口/总线/驱动

1138人已加入

描述

1、 USB简介

UBS(Universal Serial Bus)是一种标准的计算机与外设的连接接口,1995年问世,并由Compaq,Digital Equipment Corp.(现属Compaq),IBM,Intel,Microsoft,NEC及Northern Telecom七家计算机与通信工业领域的领先公司组成的联盟定义和推广。1996年,该联盟公布了USB 1.1规范。其后,随着USB的完善和应用的需求,促进了高速USB2.0规范在1999年发布。目前已经成为外设的流行接口选择。

USB具有诸多特性和特点。USB统一了各种接口设备的连接头,如通信接口、打印机接口、显示器接口、音响输入/输出设备、存储设备等都采用相同的USB接口规范;USB即插即用,能自动检测与配置系统的资源;USB完全支持“热插拔”,在开机的状态下,可以插入和拔离USB设备;USB接口规范1.1所支持的传输速度可达12 Mb/s(USBl.1),USB2.0规范支持的传输速度达到480 Mb/s;USB支持斗种不同传输速度和不同传输质量的数据传输方式,即批量传输方式、中断传输方式、控制传输方式和同步传输方式,能够满足不同设备的不同需求;USB连接设备最多可达127个;USB采用单一专用的接口型号,所有的USB设备的接口型号完全统一,并且使用USB集线器来增加扩充的连接端口白的数目等。

2、 CY7C646xx系列

CY7C646xx系列是Cypress公司开发的全速的USB接口系列中的一种,该系列针对USB外围设备设计,除了具有典型的USB特性之外,还具有三个关键特性:

1)该系列提供“软”的应用方案,即基于片内RAM,支持即时动态固件(Firmware)下载功能,允许无限制的扩充和更新;

2)该系列能够达到USBl.1协议的传输速度要求,向用户提供足够的端口、缓冲区和传输速度;

3)该系列对USB的底层协议实现高度硬件集成,简化了硬件固件代码的编程,加速了USB通信的掌握过程,更易于开发,其内部结构框图如图1所示。

usb

该系列通过USB总线(包括+5V、地、D+、D-)和计算机相连;转发器固化到芯片内部;串行接口引擎(亦称USB核)具有完整的USB设备功能,完全能够响应主机对设备的标准请求,具有3种USB配置,每种配置1个或16个端点。完全支持4种标准的USB数据传输类型(控制传输、批量传输、中断传输和同步传输);芯片内部的程序数据随机存储器(RAM)具有8 KB的容量;芯片内嵌入增强的8051微处理器。具有所有的8051资源,即5个I/O口,2个通用异步转发器(UART),3个计数器/定时器,扩展的中断系统等;芯片利用从属FIFO或者通用可编程接口(CPIF)和外部逻辑(诸如DSP等)进行数据传输。

3、 USB接口系统的结构

USB接口的结构如图2所示。计算机采用Windows操作系统,用户程序通过设备驱动程序访问目标板。在目标板端上,CY7C646xx把TMS320VC33型数字信号处垣器和计算机通过USB总线建立通信链路,用CPLD进行目标板的控制。TMS320VC33通过CY7C646xx内置的从属FIFO和CY7C646xx进行数据交换。

usb

在本方案中,CY7C646xx采用无EEPROM的列举方式,即当目标板插入USB端口时,操作系统进行USB常规描述符请求,CY7C646xx将内置的PID、VID和DID回复主机请求;主机动态加载“固件下载驱动程序”,由该驱动程序将8051程序代码和数据下载至CYTC646xx内的RAM中,实现“软”开发目的;该驱动程序重置启动8051,重新列举设备,下载至RAM中的程序回复主机的USB描述符请求,主机加载“数据通信驱动程序”,完成USB设备的安装。应用程序通过“数据通信驱动程序”和CY7C646xx建立通信,完成数据传输。

4、 驱动程序的编写

USB设备驱动程序采用一种新的驱动模型--WDM(windows driver model)。WDM通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。可以应用Cypress公司提供编写CY7C646xx系列驱动程序框架源代码进行相应的修改和添加,生成所需要的驱动程序。

4.1 固件下载驱动程序

利用代码转换工具hex2c.exe,将生成的8051固件代码(hex文件)转换为C文件;将C文件中的相应代码拷贝到所提供的源代码程序之一的firmware.c相应部分;利用WindowsDDK工具将各个源文件编译成.sys文件。

修改相应的INF文件,将“%USB\VID_0547&PID_1004.DeviceDesc%=EZUSBDev.Dev,USB\VID_&PID_‘中的VID及PID修改为相应的”预设USB设备“的相应VID和PID,在本应用中,VID.为0547,PID为2235;紧接在此语句之后应加入相同的语句,PID和VID应为所下载的固件代码所能提供的PID和VID,保证外设第二次列举后能根据此PID和VID找到相应的支持主机和电路通信的驱动程序。

4.2 支持主机和电路通信的驱动程序

由Cypress公司提供的GPD(General Purpose Driver)模板供用户修改使用。它提供一个上层的程序代码来实现底层的驱动程序的编写,能够完成USB设备的标准请求及Cypress公司的该系列电路所特定的请求和数据的传输。该GPD所提供的接口函数具有通用性,包括打开、关闭设备及USB的I/O操作等。本应用主要采用上述两类接口程序,在没有改变所提供的EZUSB.SYS的驱动程序的情况下,实现主机和外设的数据通信。

5 、固件程序的编写

固件程序指的是需要下载到CY7C646xx内RAM中的8051程序代码和数据。需要完成的功能包括初始化CY7C646xx内部的所有用到的寄存器使之与外部电路相配合;对主机的USB标准请求的响应;CY7C646xx的电子仿真实际脱离与重新连接至USB接口的实现;设备休眠状态的启动和终止;完成读取OUT端点和转发至内部从属”写FIFO“及读取内部从属”读FIFO“的数据和转发至IN端点等功能。

该应用采用Keil51编译环境,用C语言完成固件源代码的编写。采用标准的结构框架,修改或者添加自己的代码,完成所需要的任务。

需要注意,如果开发者没有使用片外接存储器,需将Keil51编译环境的L51 Location选项中的Code(指令码部分)始于0x0080,而且xdata(数据部分)始于0xl000,以保证在同一个RAM中指令代码和数据不混迭。

6 、计算机端应用程序的编写

应用程序与设备进行通信的通用函数包括打开关闭设备、传输数据等:

6.1 打开和关闭设备

该应用程序基于Ezusb.sys驱动程序,利用VisualC++针对该电路进行操作,完成数据的传输。

打开设备: HANDLE hDevice=CreateFile (DeviceName,

GENERIC_WRITEIGENERIC_READ,FILE_SHARE_WRITE︱FILE_SHARE_READ,

NULL,OPEN_EXISTING,0,NULL);

程序打开设备”DeviceName’‘的方式为通用读写方式,文件共享读写。

关闭设备:CloseHandle (hDevice)。

6.2 数据传输

其代码为BOOL bResult = DeviceloControl (hDevice,direction,&Control,sizeof xxxx_TRANSFER_CONTROL),buffer,length, (unsigned long*)&nBytes,NULL),其中,hDevice为设备句柄;direction为数据传输的方向;Control为4种USB数据传输的方式选择;size(xxxx_TRANSFER_CONTROL)为数据格式所需存储空间的大小;buffer为所传输数据的缓冲区地址指针;nBytes为传输完成后实际传输的数据个数:数据传输格式为USB设备的统一规范,可参照Windows DDK中的相应文件。

6.3 数据传输的通信协议

每个数据包由包头和数据或者只由包头组成,最大的数据长度为64字节,由于本应用所采用的该系列的80引脚的CY7C64603没有“数据空”对外标志,所以,外部电路读写逻辑每次渎写64字节。传输的字节不足64时由固件补零:·数据包格式如图3所示。

usb

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分