`

USB基础知识

阅读更多
http://hankchan.iteye.com/blog/168633

作者:陈鹏   2005-09-28
网址: http://blog.csdn.net/feifei1018/
    
USB 介绍
1994年,一个由四个行业伙伴(Compaq、Intel、Microsoft 和 NEC)组成的联盟开始制定 USB 协议。该协议最初的目的是将 PC 与电话相连并提供容易扩展和重新配置的 I/O 接口。1996年 1月,发表了 USB 规范的第一个版本,1998年 9月发表了后续版本(版本 1.1)。这个规范允许 127台设备同时连接到一起,总的通信带宽限制为 12 Mbps。后来,又有三个成员(Hewlett-Packard、Lucent 和 Philips)加入了这个联盟。2000年 4月,发表了 USB 规范的 2.0版本,它支持高达 480 Mbps 的传输率。今天,USB 在高速(视频、图像、储存)和全速(音频、宽带、麦克风)数据传输应用中起了关键作用。它还使各种低速设备(键盘、鼠标、游戏外设、虚拟现实外设)连接到 PC 上。
USB 协议有严格的层次结构。在所有 USB 系统中,只有一个主设备,到主计算机的的 USB 接口称为 主控器(host controller)。主控器有两个标准――开放主控器接口(Compaq 的 Open Host Controller Interface,OHCI)和通用主控器接口(Intel 的 Universal Host Controller Interface,UHCI)。这两个标准提供了同样的能力,并可用于所有的 USB 设备,UHCI 的硬件实现更简单一些,但是需要更复杂的设备驱动程序(因而 CPU 的负荷更大一些)。
USB 物理互连是分层的星形拓朴,最多有七层。一个 hub 是每个星形的中心,USB 主机被认为是 root hub。每一段连线都是 hub 与 USB 设备的点对点连接,后者可以是为系统提供更多附加点的另一个 hub,也可以是一个提供功能的某种设备。主机使用主/从协议与 USB 设备通信。这种方式解决了包冲突的问题,但是同时也阻止了附加的设备彼此建立直接通信。
所有传输的数据都是由主控器发起的。数据从主机流向设备称为 下行(downstream)或者 输出(out)传输,数据从设备流向主机称为 上行(upstream)或者 输入(in)传输。数据传输发生在主机和 USB 设备上特定的 端点(endpoint) 之间,主机与端点之间的数据链接称为 管道 (pipe)。一个给定的 USB 设备可以有许多个端点,主机与设备之间数据管道的数量与该设备上端点的数量相同。一个管道可以是单向或者是双向的,一个管道中的数据流与所有其他管道中的数据流无关。
USB 网络中的通信可以使用下面四种数据传输类型中的任意一种:
控制传输:这些是一些短的数据包,用于设备控制和配置,特别是在设备附加到主机上时。
批量传输:这些是数量相对大的数据包。像扫描仪或者 SCSI 适配器这样的设备使用这种传输类型。
中断传输:这些是定期轮询的数据包。主控器会以特定的间隔自动发出一个中断。
等时传输:这些是实时的数据流,它们对带宽的要求高于可靠性要求。音频和视频设备一般使用这种传输类型。
像串行端口一样,计算机上每一个 USB 端口都由 USB 控制器指定了一个惟一的标识数字(端口 ID)。当 USB 设备附加到 USB 端口上时,就将这个惟一端口 ID 分配给这台设备,并且 USB 控制器会读取 设备描述符。设备描述符包括适用于该设备的全局信息、以及设备的 配置信息。配置定义了一台 USB 设备的功能和 I/O 行为。一台 USB 设备可以有一个或者多个配置,这由它们相应的配置描述符所描述。每一个配置都有一个或者多个 接口,它可以视为一个物理通信渠道;每一个接口有零个或者多个端点,它可以是数据提供者或者数据消费者,或者同时具有这两种身份。接口由接口描述符描述,端点由端点描述符描述。并且一台 USB 设备可能还有字符串描述符以提供像厂商名、设备名或者序列号这样的附加信息。
USB 设备、USB 驱动、USB 应用程序

1.USB 设备硬件部分
  a.这个硬件的标识是用的 Vender ID 和 Product ID, 即“厂家标识”和“产品标识”
  b.这个硬件规定了各个 End Point (端点) 的性质, 读/写 及 类型 (Control/Interrupt/Bulk/Isochronous)
  c.这个硬件的固件里面有 DeviceIoControl 的实现部分, 规定了这个函数的具体参数和动作
2.USB 设备驱动
①硬件接口
  a.需要识别 Vender ID 和 Product ID
  b.对每个 EndPoint 的每个 I/O 分配一个 Pipe, 并且起一个名字作为软件接口
  c.做 DeviceIoControl 的接口
②软件接口
  a.GUID, 驱动程序的标识, 每个驱动程序使用不同的 GUID, GUID 是识别驱动的, 与硬件无关 (驱动程序升级版本 GUID 不能修改)
  b.硬件接口里面的 b: Pipe 名字是软件接口, 这个 Pipe 名字纯粹由驱动定义的, 和硬件无关, 升级驱动不能改 Pipe 的名字
  c.硬件接口里面的 c 的各个参数也是软件的接口, 这些参数是由硬件带来的, 不是驱动规定的, 当然也可以在驱动里面转义, 隐藏设备的真实情况
③这个驱动程序是用 WinDDK 编译的, 可以用文本编辑器或其他开发工具的编辑器编程序代码, 然后调用 WinDDK 编译
3.读写 USB 口的程序
①与驱动的接口
  a.利用驱动程序里面的 GUID 找出设备的文件名, 用 CreateFile 函数打开设备。我前面的程序里面的 OpenUsbDevice 就是这个作用
  b.通过 a.得到的设备文件名和驱动程序里面的 Pipe 名打开 Pipe, 访问这个 Pipe 对应的 USB 端点 (读写数据)
  c.使用 a.的 CreateFile 得到的句柄, 通过 DeviceIoControl 实现设备规定的动作
②有关需要的资料
  a.Vender ID, Product ID 和 GUID 一般在驱动程序的 .inf 文件里面能看到, 如果找不到就需要和厂家联系
  b.Pipe 的名字是驱动程序规定的, 需要有驱动程序的资料才能知道
  c.DeviceIoControl 的参数需要有驱动程序的资料或者硬件资料才能知道
③这个程序一般用 C/C++ 直接编写, 如果使用其他语言(VB/PB等)需要调用 C/C++ 编的 DLL


其他相关内容:

USB 驱动程序可以到注册表里面找到:
"HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Enum\\USB\\Vid_厂家标识&Pid_产品标识\\驱动程序"

里面的 ClassGUID 就是驱动程序的 GUID 标识, 例如 {36FC9E60-C465-11CF-8056-444553540000}
相当于程序的: DEFINE_GUID(USB_DRIVER_GUID, 0x36FC9E60,0xC465,0x11CF,0x80,0x56,0x44,0x45,0x53,0x54,0x00,0x00);
另外在这个注册表键里面还可找到有关设备的其他描述, 例如 DeviceDesc = "USB Mass Storage Device" 等
参考文章:
C++ 爱好者 - 网友留言 - 回复内容  http://www.cppfans.com/forum/guestbkans.asp?id=1231
在 Java 应用程序中访问 USB 设备 http://www-128.ibm.com/developerworks/cn/java/j-usb/

分享到:
评论

相关推荐

    USB基础知识概论

    在了解了USB基础知识后,我们能够更好地理解USB技术的工作原理及其在现代计算机系统中的应用。无论是作为硬件开发者、软件工程师还是系统管理员,掌握USB协议的知识对于设计、开发和维护基于USB的计算机系统都是十分...

    usb基础知识8问使得你快速了解USB基础知识

    USB 基础知识概述 USB(Universal Serial Bus)是一种常见的计算机接口,允许设备之间进行数据交换。下面是 USB 基础知识的概述: 一、USB 传输线结构 USB 传输线结构由地线、电源线、D+、D-四条线构成,D+和D-是...

    USB基础知识概论 v0.8

    ### USB基础知识概论 #### 1. USB的来龙去脉 ##### 1.1. USB是什么 USB(Universal Serial Bus)即通用串行总线,是一种常用的接口标准和技术规范,用于规范计算机与外部设备之间的连接和通信。USB的设计目标是...

    usb基础知识,比较简单

    ### USB基础知识详解 #### 一、USB概述 USB(Universal Serial Bus)即通用串行总线,是一项重要的技术标准,用于连接计算机系统与其外围设备。它最初由Intel、Microsoft、NEC、IBM、DEC等公司在1996年提出,并在...

    USB基础知识概论.mht

    USB基础知识,浅显易懂,内容丰富,是usb开发的新手入门首选。 本文主要介绍了USB协议的基础知识,包括USB协议的来龙去脉,OHCI/UHCI/EHCI/xHCI之间的区别和联系,USB的firmware,以及USB 2.0协议的概览,USB的枚举...

    USB开发学习的基础知识

    USB开发是创建支持USB通信的硬件和软件的过程,对于电子工程师、嵌入式开发者以及软件开发者来说,理解USB基础知识至关重要。下面将详细介绍USB开发学习中的关键知识点。 1. USB架构: USB架构由主机(Host)、...

    STM32F407-USBH-FS-CDC与广和通4G模块USB通信,USB基础知识与驱动移植说明

    适合人群:使用STM32F407与4G模块进行USB通信的开发人员 主要内容: USB基本概念与相关说明 USB驱动源码、参考资料来源与相关说明 ST官方USB-HOST-CDC主机库驱动移植 USB-CDC主机传输速度提升相关说明 其他测试验证...

    usb基础知识及通讯协议

    SerialBus 或者 USB 混淆)。大多数计算机包含两个基于 RS232 的串口。串口同时 也是仪器仪表设备通用的通信协议 ; 很多 GPIB 兼容的设备也带有 RS-232 口 。 同时 , 串口通信协议也可以用于获取远程采集设备的...

    USB协议基础知识,做USB通讯的入门必备

    #### 一、USB基础知识概述 USB(Universal Serial Bus)即通用串行总线,是一种广泛应用于个人计算机和移动设备等领域的标准接口。它支持热插拔和即插即用功能,使得用户能够方便地连接各种外设。USB通信涉及多个...

    USB基础知识精华大盘点

    USB协议的浓缩精华! 学习USB开发时, 先看看这, 再看枯燥的USB协议时, 你会感觉很轻松的!

    usb_demo usb_demo usb_demo

    1. USB基础知识: - USB版本:从最初的USB 1.0到USB 2.0、3.0、3.1、3.2,以及最新的USB 4,速度不断提升,传输速率分别达到12Mbps、480Mbps、5Gbps、10Gbps、20Gbps和40Gbps。 - USB类型:包括Type-A、Type-B、...

    USB基础入门

    #### 一、USB基础知识概述 USB(Universal Serial Bus,通用串行总线)是一种广泛应用于个人计算机与外部设备之间的一种高速通信接口标准。它旨在简化计算机与外部设备之间的连接,提高数据传输速度,并支持热插拔...

    USB 基础.doc

    ### USB基础知识详解与应用分析 #### 一、USB概述 USB (Universal Serial Bus) 是一种通用串行总线标准,用于规范计算机与外部设备之间的连接和通信。它最初由英特尔、康柏、IBM、微软等公司在1994年底联合提出。...

    圈圈教你玩USB(第二版) 扫描版+光盘镜像资料

    《圈圈教你玩USB(第二版)》是一本专注于USB技术的入门教程,它提供了全面且易懂的USB基础知识,适合对USB技术感兴趣的初学者。这本书的扫描版包含PDF格式,便于电子阅读和检索,同时附带的光盘资源则为学习者提供了...

    圈圈教你玩USB.pdf(第二版光盘资料)

    1. **USB基础知识**:介绍USB架构,包括主机(Host)、设备(Device)、集线器(Hub)的角色及其相互关系,以及USB的版本(如USB 1.1、2.0、3.0、3.1等)和它们的传输速度差异。 2. **USB设备类**:讲解不同类型的...

Global site tag (gtag.js) - Google Analytics