用VC++编写USB接口通讯程序
摘要:详细介绍Visual C++ 6.0环境下利用Windows API(Application Program Interface)函数来实现与符合HID设备类的USB接口通讯,并给出了通信程序的部分代码。
关键词:通用串行总线 人际接口设备 API VisualC++
1 引言
在USB出现之前,计算机的典型接口有并行口(打印口)、串行口、鼠标口、键盘口、显示器口、游戏口及各种卡式接口(如声卡、网卡)等,与这些接口对应的有各种不同的电缆。在传输速度方面,这些接口都存在速度偏低的
问题;在技术方面,这种设计容易产生I/O冲突。中断(IRQ)不够用,以及对于每一种新的外设都必须
设计新的接口卡等缺点。当今的
计算机外部设备,都在追求高速度和高通用型。USB接口适应了这种要求,并以其速度快,使用方便,成本低等优点,迅速得到了众多PC厂商和半导体厂商的大力支持,外设向USB过渡称为必然的趋势。
但如果主机PC不知道如何与USB外设通信,那么这个USB外设一点用处都没有,人机接口设备(HID)类是Windows完全支持的第一批USB设备类型中的一种。在运行Windows98或更高版本的PC机上,应用程序可以使用操作系统内置的驱动与HID通信,但与HID通信不像打开一个端口,设定几个参数,然后就可以读写数据那么简单。在应用程序能与HID交换数据之前,它先要找到设备,获取有关它的报告信息,为做到这些,应用程序必须通过访问通信API函数,使位于上层的应用程序与位于下层的设备驱动程序进行数据交换。应用程序可以使用任何能访问API函数的编程语言,C++是一种能访问API函数的功能强大的语言,本文将在VisualC++6.0环境下编写与USB设备通信的Windows程序。
2 USB简介
USB是由Intel,Compaq,Digital,IBM,Microsoft,NEC,Northern Telecom等七家世界著名的计算机和通信公司共同推出的新一代接口标准,全称为Universal Serial Bus(通用串行总线)。它是为了解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信标准,尤其当传输速率高达480Mbit/s的USB2.0规范面世后,USB应用更加广泛,它具有下属优点:
(1)适用于多种外设,使它不需要为不同的外设准备不同的接口和协议;
(2)Windows能自动检测到USB设备的热插拔,并自动配置;
(3)PC机上的IRQ线非常紧缺,而USB设备并不需要设置端口和IRQ,故无论从用户使用的方便性,或从对资源的占用方面看,USB都很有优秀;
(4)当接入一个USB设备时,全速USB接口可达12Mbit/s,考虑到状态,控制和出错信息,最大理论速度仍可达9.6Mbit/s,这是其他串行接口协议所不能比拟的,且USB也支持1.5Mbit/s的低速传输;
、
但是USB同样有缺点,诸如:协议复杂,编写设备驱动程序要考虑很多细节,以保证USB某些特性的透明性,但通过调用Win32的API函数与设备通信,或者说与内置的驱动程序通信,便没有必要去逐条理解复杂的协议。
3 VC++实现与USB接口通信的实例
Windows下,与USB外设的任何通信需通过设备驱动,该驱动知道如何与系统的USB驱动和访问设备的应用程序通信,Windows包含应用
程序与HID
通信需要的各种信息,不需要再安装设备驱动。Win32的应用程序接口(API)函数,使得设备驱动能与应用程序之间相互通信,应用程序也不需要为了和USB设备通信去了解复杂的USB协议。
下面用VisualC++编写应用程序调用API函数,从而简化了与硬件通信的过程。
3.1 建立工程
操作步骤如下:
(1)在VC++6.0
工作平台中打开File 菜单,选择New菜单命令,在对话框中选择Project选项,在左边
列表框选择MFC AppWizard(exe),在Project name 文本编辑框中输入项目名USBPort,在Location文本编辑框中输入项目路径,单击OK按钮,进入MFC A