位置:51电子网 » 技术资料 » 接口电路

基于VC的USB接口通信程序设计

发布时间:2008/8/23 0:00:00 访问次数:683

  0 引言

  随着信息技术的迅速发展,数据采集和处理技术广泛应用于雷达、通信、遥测、遥感等领域。而在早期的计算机系统上通常使用串口或并口来发送数据,每个接口都需要占用计算机内部很多的资源,传统的接口一般采用pci总线或rs-232串行总线。pci总线有较高的传输速率,可达132 mbit/s,也可以即插即用,但是它们的扩充槽有限且插拔不方便;rs-232串行总线连接比较方便,但是传输速率太慢,不易用于高速传送数据和传送大量数据。usb(通用串行总线)集中了pci和rs-232串行总线的优点,具有方便的即插即用和热插拔特性以及较高的传输速率,因此,将usb技术应用于数据采集是非常合适的,可以达到数据采集系统的高速度处理。目前,usb已经推出了其协议的2.0版本,速率高达480 mbit/s。

  本文研发了一套基于usb接口的数据采集系统,整个系统的设计涉及到硬件、设备固件(firmware)、usb设备驱动程序及客户应用软件。下面分别加以说明。

  1 usb接口芯片

  本文介绍的usb数据采集系统采用了cypress公司ez-usb fx2系列的cy7c68013-128ac芯片,它同时集成了8051微控制器和usb2.0收发器,在提高集成度的同时也加快了数据传输的速度。在系统中,cy7c68013-128ac既是数据采集控制器又是usb控制器,ez-usb fx2系列有3种型号:cy7c68013-56pvc、cy7c68013-100ac、cy7c68013-128ac。该系列的芯片都是针对usb2.0的,并且与usb1.1兼容。其中,cy7c68013-128ac是128脚,tpqf封装,功能非常完善,与另外两种相比,主要是增加了16位地址总线和8位数据总线以及更多的io口,因此,cy7c68013-128ac的可扩展性最好。图1是该芯片的内部结构图。

  2 usb的固件和驱动程序设计

  2.1固件

  固件是储存在程序内存中的代码,它使得usb接口芯片与主机和外设中其他电路能够通信。cypress公司给出了一个固件库和固件框架(frame works),均是用keil c51开发的。固件库提供了一些常量、数据结构、宏、函数来简化用户对芯片的使用;固件框架实现了初始化芯片、处理usb标准设备请求以及挂起状态下的电源管理等功能。该框架不添加任何代码,编码后产生的.hex文件载入芯片就能与主机进行基本的usb通信,只是不能完成特定的任务。对于用户而言,主要的工作就是选择适当的传输方式,添加需要使用的端点(endpoint),考虑到本系统要求实现一定数量数据的快速采集,并要迅速地将采集到的数据传输和进行分析处理,并且对数据的完整性要求较高,我们采用了块传输方式(bulk transfers),在td-init()函数中添加初始化代码,亦即选择块传输方式和选择端点2、6分别为输出、输入端口,在td-poll()函数中添加功能代码,以实现发送和接收数据功能,关键代码分别如下:

  2.2 usb设备驱动程序

  usb设备驱动程序主要是使操作系统能够识别usb设备,建立起主机端与设备端之间的通信,它们之间的通信是通过windows提供的api函数实现的,这些函数可以控制显示器、处理信息、访问存储器、读写磁盘和其他设备。

  
图2是usb设备驱动程序的整体结构图。

  

  usb设备驱动的整体结构包括如下5个主要部分:usb应用程序接口、usb设备驱动函数、usb中断服务程序、usb回调接口程序、usb标准事件处理程序。
2.2.1 usb应用程序接口

  usb应用程序接口主要功能是对usb驱动器进行软硬件初始化、打开端口、关闭端口、读端口、写端口和端口控制操作。当设备驱动器装入系统设备表时,i/o系统就调用该应用程序接口。

  usb应用程序接口的一个例程主要包含:

  a)对usb端口安装、初始化和硬件配置(usb_init())。初始化步骤为:将usb设备驱动器安装到i/o系统设备表中,获取usb控制器使用的中断号,初始化usb驱动器数据结构与usb端口状态寄存器,启动usb标准事件处理程序。

  b)打开usb端口(usb_open())。usb_open函数允许应用程序打开一个usb端口和选择dma数据传输方式。

  c)关闭usb端口(usb_close())。usb_close函数允许应用程序关闭一个端口,并关闭dma通道。

  d)对usb端口进行读操作(usb_read())。usb_read函数允许应用程序从输出端口或控制端口读取一定量的数据。

  e)对usb端口进行写操作(usb_write())。usb_write函数与usb_read函数功能类似,允许应用程序写数据到输入端口或控制端口。

  f)对usb设备进行i/o控制操作(usb_ioctl())。

  2.2.2 usb中断服务程序

  usb控制器产生单一中断,多个端口共享。每个端口产生ack、nack/error中断;输

  0 引言

  随着信息技术的迅速发展,数据采集和处理技术广泛应用于雷达、通信、遥测、遥感等领域。而在早期的计算机系统上通常使用串口或并口来发送数据,每个接口都需要占用计算机内部很多的资源,传统的接口一般采用pci总线或rs-232串行总线。pci总线有较高的传输速率,可达132 mbit/s,也可以即插即用,但是它们的扩充槽有限且插拔不方便;rs-232串行总线连接比较方便,但是传输速率太慢,不易用于高速传送数据和传送大量数据。usb(通用串行总线)集中了pci和rs-232串行总线的优点,具有方便的即插即用和热插拔特性以及较高的传输速率,因此,将usb技术应用于数据采集是非常合适的,可以达到数据采集系统的高速度处理。目前,usb已经推出了其协议的2.0版本,速率高达480 mbit/s。

  本文研发了一套基于usb接口的数据采集系统,整个系统的设计涉及到硬件、设备固件(firmware)、usb设备驱动程序及客户应用软件。下面分别加以说明。

  1 usb接口芯片

  本文介绍的usb数据采集系统采用了cypress公司ez-usb fx2系列的cy7c68013-128ac芯片,它同时集成了8051微控制器和usb2.0收发器,在提高集成度的同时也加快了数据传输的速度。在系统中,cy7c68013-128ac既是数据采集控制器又是usb控制器,ez-usb fx2系列有3种型号:cy7c68013-56pvc、cy7c68013-100ac、cy7c68013-128ac。该系列的芯片都是针对usb2.0的,并且与usb1.1兼容。其中,cy7c68013-128ac是128脚,tpqf封装,功能非常完善,与另外两种相比,主要是增加了16位地址总线和8位数据总线以及更多的io口,因此,cy7c68013-128ac的可扩展性最好。图1是该芯片的内部结构图。

  2 usb的固件和驱动程序设计

  2.1固件

  固件是储存在程序内存中的代码,它使得usb接口芯片与主机和外设中其他电路能够通信。cypress公司给出了一个固件库和固件框架(frame works),均是用keil c51开发的。固件库提供了一些常量、数据结构、宏、函数来简化用户对芯片的使用;固件框架实现了初始化芯片、处理usb标准设备请求以及挂起状态下的电源管理等功能。该框架不添加任何代码,编码后产生的.hex文件载入芯片就能与主机进行基本的usb通信,只是不能完成特定的任务。对于用户而言,主要的工作就是选择适当的传输方式,添加需要使用的端点(endpoint),考虑到本系统要求实现一定数量数据的快速采集,并要迅速地将采集到的数据传输和进行分析处理,并且对数据的完整性要求较高,我们采用了块传输方式(bulk transfers),在td-init()函数中添加初始化代码,亦即选择块传输方式和选择端点2、6分别为输出、输入端口,在td-poll()函数中添加功能代码,以实现发送和接收数据功能,关键代码分别如下:

  2.2 usb设备驱动程序

  usb设备驱动程序主要是使操作系统能够识别usb设备,建立起主机端与设备端之间的通信,它们之间的通信是通过windows提供的api函数实现的,这些函数可以控制显示器、处理信息、访问存储器、读写磁盘和其他设备。

  
图2是usb设备驱动程序的整体结构图。

  

  usb设备驱动的整体结构包括如下5个主要部分:usb应用程序接口、usb设备驱动函数、usb中断服务程序、usb回调接口程序、usb标准事件处理程序。
2.2.1 usb应用程序接口

  usb应用程序接口主要功能是对usb驱动器进行软硬件初始化、打开端口、关闭端口、读端口、写端口和端口控制操作。当设备驱动器装入系统设备表时,i/o系统就调用该应用程序接口。

  usb应用程序接口的一个例程主要包含:

  a)对usb端口安装、初始化和硬件配置(usb_init())。初始化步骤为:将usb设备驱动器安装到i/o系统设备表中,获取usb控制器使用的中断号,初始化usb驱动器数据结构与usb端口状态寄存器,启动usb标准事件处理程序。

  b)打开usb端口(usb_open())。usb_open函数允许应用程序打开一个usb端口和选择dma数据传输方式。

  c)关闭usb端口(usb_close())。usb_close函数允许应用程序关闭一个端口,并关闭dma通道。

  d)对usb端口进行读操作(usb_read())。usb_read函数允许应用程序从输出端口或控制端口读取一定量的数据。

  e)对usb端口进行写操作(usb_write())。usb_write函数与usb_read函数功能类似,允许应用程序写数据到输入端口或控制端口。

  f)对usb设备进行i/o控制操作(usb_ioctl())。

  2.2.2 usb中断服务程序

  usb控制器产生单一中断,多个端口共享。每个端口产生ack、nack/error中断;输

相关IC型号

Warning: Undefined variable $stockkeys in G:\website_51dzw\www.51dzw.com\code\tech\view.php on line 152

热门点击

 

推荐技术资料

耳机放大器
    为了在听音乐时不影响家人,我萌生了做一台耳机放大器的想... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式