用VC实现与USB驱动程序的通信
- 格式:pdf
- 大小:398.16 KB
- 文档页数:4
通信原理课程设计课题:基于VC的USB接口通信程序设计学号:XXX姓名:XXX目录1. 课程设计背景 (3)2. 课程设计目的及意义 (3)3. 课程设计知识概要......................................错误!未定义书签。
3.1 USB接口技术简介...............................错误!未定义书签。
3.2 USB通信参考模型 (4)3.3 USB接口的通讯原理 (5)3.3.1 USB设备的接入 (5)3.3.2 USB设备的识别 (6)4.课程设计步骤及内容 (6)4.1 USB接口芯片 (6)4.2 USB的固件和驱动程序设计 (7)4.2.1固件 .........................................错误!未定义书签。
4.2.2 USB设备驱动程序........................错误!未定义书签。
4.2.2.1 USB应用程序接口 (9)4.2.2.2 USB中断服务程序 (9)4.2.2.3 USB标准事件处理程序 (10)4.3 客户应用软件 (10)4.3.1 查找、打开USB设备 (11)4.3.2 线程(Thread) (11)4.4 实例............................................ 1错误!未定义书签。
5. 课程设计总结 (13)一、课题设计背景随着信息技术的迅速发展,数据采集和处理技术广泛应用于雷达、通信、遥测、遥感等领域。
而在早期的计算机系统上通常使用串口或并口来发送数据,每个接口都需要占用计算机内部很多的资源,传统的接口一般采用PCI总线或R S-232串行总线。
PCI总线有较高的传输速率,可达132 Mbit/s,也可以即插即用,但是它们的扩充槽有限且插拔不方便;RS-232串行总线连接比较方便,但是传输速率太慢,不易用于高速传送数据和传送大量数据。
用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(通用串行总线)。
我在做usb上位机驱动过程中做的笔记驱动程序安装成功后,应用程序的设计VC6+DDK xp+DS3.2驱动程序安装好后,应用程序要通过安装的驱动程序与设备的通信,但是应用程序怎么才能找到对应用的驱动程序呢?通过设备的GUID找到设备路径。
在windows操作系统环境下,设备通常被当作特殊文件处理。
要打开设备,就要知道该设备的路径,要找到设备的路径,要使用GUID来查找。
设备在安装时,windows安装器和相应设备的驱动程序负责将相应的设备与对应的GUID联系起来,并将GUID写入注册表,这样通过GUID(接口类GUID)就可以找到对应设备。
对于HID设备,因为它的驱动已经集成在操作系统中,在同一系统中GUID是一样的,但通常这个值在不同的系统下也许会不一样所以一般不直接使用这个GUID,而是使用一个API函数来获取(函数是void _stdcall HidD_GetHidGuid(Out LPGUID HidGuid)). 而我们自己做的嵌入式设备,因为驱动是自己写的,所以GUID肯定不一样,而且这个GUID不会因为设备用在不同的操作系统上而改变,因为这个GUID在生成设备驱动的时候已经生成,就对应这个设备了,这个设备类GUID可以在每个驱动的interface.h文件中看到。
我们就是要用这个文件中的GUID宏定义来查找已连接上设备,把系统中查到的设备列举出来,然后检查它的VID,PID以及设备版本号,看是不是要访问的设备,如果是,就可以对设备进行各种操作了,不是的话就循环下一个设备,直到找到或遍历完为止。
1.下面这个函数用来获取所有与ClassGuid指定的GUID相同的设备,当然对于HID设备在同一个pc机上可能会检测到多个,但是我们自己做的嵌入式设备,一般都是一个,要找到我们要的设备通过VID,PID以及设备版本号。
该函数返回HDEVINFO句柄,这个句柄指向ClassGuid指定的所有设备的一个信息集合。
摘要:详细介绍了usb接口的特点以及接口通信流程,研究在microsoft visual studio 2008环境下,运用visual c #调用windows api 函数方法进行usb接口通信程序设计的一般方法。
关键字:c#usb通信接口中图分类号:tp311.1 文献标识码:a 文章编号:1007-9416(2010)08-0090-021 hid、usb介绍hid(human interface device)类设备即人机接口设备,是usb设备类型中的一种,是直接与人交互的设备,如键盘、鼠标等。
hid类设备并不一定是标准的外设类型,只要交换的数据格式存储在报文的结构中,并且设备固件支持报文的格式,则任何工作在该限制之内的设备均可称为hid设备,如电压计、温度计、读卡器等。
hid设备与主机交换数据使用“报表”结构,报表格式富有弹性,可以处理任何类型的数据;一个报表可以使用多个事务,每笔事务可以携带小量和中量的数据,高速设备每笔事务最大是1024 b;主机定时轮询设备,设备可以为预期的时间传送信息给主机,hid设备除了传送数据给主机外,也会从主机接收数据。
usb协议定义和支持音频设备类、通信设备类、显示设备类、人机接口设备类(hid)和海量存储设备类等设备类型。
hid是windows完全支持的第一批usb设备类型,在运行win 98以上版本的pc机上,应用程序可以与使用操作系统内置驱动的hid类设备通信。
因此,基于hid类设计的usb设备易于设置和运行。
2 usb人机通信开发方法hid运行在windows98以上版本操作系统的pc机中,系统除了提供通用的usb设备的底层驱动以外,还单独提供了一些hid设备的完整驱动,应用程序可以很容易的与操作系统内部的hid通讯。
这样使得符合hid类的usb设备很容易开发与运行。
也就是说,我们如果想实现一个usb的hid类设备,不需要在windows下开发自己的驱动程序。
第10章 上位机程序开发在USB设备开发中,上位机程序是用于与用户进行接口的。
上位机程序通过USB设备驱动程序和外部的USB硬件进行通信,USB固件程序执行所用的硬件操作。
一般来说,根据选择开发平台的不同,可以使用Visual C++、Visual C#和LabVIEW等开发上位机程序。
本章首先介绍了Visual C++中控制USB设备的相关函数,接着介绍了Visual C#中读写USB设备的主意函数,最后介绍了在LabVIEW中如何读写USB设备。
本章内容包括:Visual C++读写USB设备;Visual C#读写USB设备;LabVIEW读写USB设备。
10.1 Visual C++读写USB设备在USB设备开发过程中,上位机程序可以采用广泛应用的Visual C++来实现。
对于Cypress公司的EZ-USB系列芯片,其提供了全面的CY3684开发包。
在该开发包中,可以使用CYIOCTL控制函数类和CyAPI控制函数类来实现Visual C++环境下对USB设备的读写。
10.1.1 CYIOCTL控制函数类CYIOCTL控制函数类为Cypress公司的EZ-USB FX2LP系列USB接口芯片,提供了简单的控制接口。
在使用Cypress公司提供的驱动程序基础上,只需在主机Visual C++程序中加入头文件cyioctl.h,然后便可以调用相应的控制函数。
为了能够使用这些函数,主机程序必须首先获得USB设备的控制句柄。
可以通过以下的代码在程序中获得连接到主机的USB设备句柄。
CCyUSBDevice *USBDevice = new CCyUSBDevice(); //USB设备HANDLE hDevice = USBDevice->DeviceHandle(); //打开设备句柄其中,hDevice即为获得的USB设备句柄。
在退出程序的时候,需要释放该USB设备句柄,使用如下的语句即可:delete USBDevice;在主程序获得USB设备的控制句柄后,便可以调用CYIOCTL控制函数类提供的接口控制函数,下面分别进行介绍。
基于VC的USB接口通信程序设计随着信息技术的快速进展,数据采集和处理技术广泛应用于雷达、通信、遥测、遥感等领域。
而在早期的计算机系统上通常用法串口或并口来发送数据,每个接口都需要占用计算机内部无数的资源,传统的接口普通采纳PCI或RS-232串行总线。
PCI总线有较高的传输速率,可达132 Mbit /s,也可以即插即用,但是它们的扩充槽有限且插拔不便利;RS-232串行总线衔接比较便利,但是传输速率太慢,不易用于高速传送数据和传送大量数据。
(通用串行总线)集中了PCI和RS-232串行总线的优点,具有便利的即插即用和热插拔特性以及较高的传输速率,因此,将USB 技术应用于数据采集是十分合适的,可以达到数据采集系统的高速度处理。
目前,USB已经推出了其协议的2.0版本,速率高达480 Mbit/s。
本文研发了一套基于USB接口的数据采集系统,囫囵系统的设计涉及到硬件、设备固件(Firmware)、USB设备驱动程序及客户应用软件。
下面分离加以解释。
2 USB接口芯片本文介绍的USB数据采集系统采纳了公司EZ-USBFX2系列的CY7C68013-128AC芯片,它同时集成了8051微控制器和USB2.0,在提高集成度的同时也加快了数据传输的速度。
在系统中,CY7C68013-128AC既是数据采集控制器又是USB控制器,EZ-USBFX2系列有3种型号:CY7C68013-56PVC、CY7C68013-100AC、CY7C68013-128AC。
该系列的芯片都是针对USB2.0的,并且与USB1.1兼容。
其中,CY7C68013-128AC是128脚,TPQF封装,功能十分完美,与另外两种相比,主要是增强了16位地址总线和8位数据总线以及更多的IO口,因此,CY7C68013-128AC的可扩展性最好。
图1是该芯片的内部结构图。
3 USB的固件和驱动程序设计3.1 固件固件是储存在程序内存中的代码,它使得USB接口芯片与主机和外设第1页共6页。
c++编写libusblibusb 是一个跨平台的 USB 库,用于在 C++ 中进行 USB 设备的通信和控制。
使用libusb 库,你可以编写 C++ 应用程序来与各种 USB 设备进行交互,包括从设备读取数据、向设备写入数据、获取设备信息等。
要在 C++ 中使用 libusb,你需要完成以下步骤:1. 安装 libusb 库:首先,你需要安装 libusb 库。
你可以从 libusb 的官方网站下载源代码,并按照说明进行编译和安装。
或者,你可以使用你的操作系统的包管理器来安装libusb,例如在 Linux 上使用 `apt` 或 `yum`。
2. 包含头文件:在你的 C++ 代码中,你需要包含 libusb 的头文件。
通常,你可以使用以下语句来包含头文件:```cpp#include <libusb-1.0/libusb.h>```3. 初始化 libusb:在使用 libusb 之前,你需要初始化 libusb 库。
这可以通过调用`libusb_init()` 函数来完成。
```cpplibusb_init(NULL);```4. 查找设备:使用 `libusb_find_devices()` 函数来查找连接到计算机上的 USB 设备。
你可以提供特定的 USB 设备描述符或使用通配符来匹配多个设备。
```cpplibusb_device** devices;int device_count = libusb_find_devices(NULL, NULL);```5. 打开设备:找到要与之交互的设备后,使用 `libusb_open()` 函数打开设备。
```cpplibusb_device* device = libusb_open(devices[0], 0);```6. 配置设备:在与设备进行通信之前,你可能需要配置设备的某些设置,例如设置设备的接口、端点等。
这可以通过调用 `libusb_config_descriptor()` 函数获取设备的配置描述符,并使用相应的函数进行设置。
摘要:本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。
在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。
依据不同的条件实现对串口的灵活编程控制是我们所需要的。
在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。
串行通信程序开发环境为 VC++ 6.0。
Windows下串行通信与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。
串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。
与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTAT,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。
以下将结合实例,给出实现串行通信的三种方法。
实现串行通信的三种方法方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。
此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。
VC编程实现与USB设备通信
内容摘要:
本文旨在探讨基于VC的USB设备通信实现。
从基本的概念出发,介绍了USB设备通信的概念,原理以及大致过程;进而深入讨论了基于VC +WIN32API的USB设备通信实现,包括设备上线和识别,数据发送和接收,以及数据处理和编程封装;最后总结了提出了基于VC的USB设备通信实现的讨论方向。
关键词:VC;USB设备;通信;实现
1. 引言
2. USB设备通信概述
Universal Serial Bus,简称USB,是一种计算机通信技术,它可以将多台设备连接到一台电脑,它由系统总线(System Bus)、设备总线(Device Bus)和并行总线(Parallel Bus)三部分组成。
USB2.0传输带宽摘要:针对USB2.0高速数据传输在实际应用中存在的具体问题,深入分析了诸如协议开销、带宽分配、工作环境、主机硬件结构和操作系统配置、设备驱动程序等影响速度提高的种种因素。
同时重点阐述了USB2.0设备接口中端点FIFO通道和GPIF通用可编程接口的关键作用。
并利用USB2.0控制芯片EZ-USB FX2进行了不同模式下数据传输的实验.最后在此基础上指出解决高速数据传输问题的几条对策。
1 引言USB(Universal Serial Bus,通用串行总线)是计算机与其外设连接的一种新型接口技术。
尽管在2000年4月27日发布的USB2.0规范中最高传输速度已经达到了480 Mbps(即60 MB/s)。
但是很多USB2.0设备在实际工作时的数据传输速度却与此相差甚远。
本文作者曾为此利用测试软件BusHound对诸如闪存盘、mp3、移动硬盘等典型USB2.0设备进行速度测试,其结果由表1给出。
由于USB2.0的实际数据传输速度与PC主机和USB设备的诸多因素有关,且其中任一个因素都有可能成为影响数据传输速度的瓶颈。
因此对此进一步地深入探讨是很有必要的。
2 影响USB2.0数据传输速度的因素分析(1)USB通信协议的开销在USB数据通信的过程中,总线上传输的并不只是真正需要的数据信息,还要包括诸如同步信号、类型标识、校验码、握手信号等各种协议信息。
因此实际数据传输的速率根本没有可能达到总线传输的极限速度480 Mbps。
且对不同的传输类型,存在不同的协议开销。
如在USB1.1协议下规定的每毫秒1帧中,对一个设备的中断传输只能进行一次,考虑中断传输的数据包为64Byte,故可算出这种传输的最大速度只有64 kB/s。
对USB2.0的情况,由于采用了微帧结构,每帧分为8个微帧,且中断传输在每个微帧下可以传输3个数据包,而每包的数据也增加到1024个字节,故可以算出USB2.0的中断传输的最大速度提高到8×3×1024 B/ms=24 MB/s。