(转)USB (Universal Serial Bus)

全文地址:http://vlewang.blog.163.com/blog/static/105878151201032804347546/

USB(通用串行总线)是用于将适用USB的外围设备连接到主机的外部总线结构,其主要是用在中速和低速的外设,。USB是通过PCI总线和PC的内部系统数据线连接,实现数据的传输,。USB同时又是一种通信协议,他支持主系统(host)和USB的外围设(device)之间的数据传输。

USB的动机
1
连接PC与电话,

PC具有很强的运算能力,而电话提供最为广泛的通信互连,运算与通信成为计算机应用的基础,而计算机与通信是两个相对独立发展的产业,USB旨在提供可以广泛应用于PC,到电话的互连的普遍性的连接。
2 Plug-and-Play

从用户端来看,PC的串行口,并行口和键盘鼠标端口都不能Plug-and-Play,USB则提供真正的Plug-and-Play。
3 端口扩展

PC的已有的串行/并行口等端口只适用于一两种的外设,并且不易扩展,USB提供双向,低成本,低速到中速(USB 2.0可达480Mb/s)的通用外设总线,适用于连接各种各样的外设,并且易于扩展。

USB的拓朴结构

在USB的网络协议中,每个USB的系统有且只有一个host,它负责管理整个USB系统,包括USB Device的连接与删除,Host与USB Device的通信,总路线的控制等等,Host端有一个Root Hub,可提供一个或多个USB下行端口,每个端口可以连接一个USB Hub或一个USB Device。USB Hub,是用于USB 端口扩展的,即USB Hub可以将一个USB端口扩展为多个端口,图1中的每个Func(Function)就是一个USB Device,如USB键盘,USB鼠标,USB MODEM,USB硬盘等等,Compound Device是指带一个Hub和一个或多个不可删除的USB Device的复合设备,一个USB系统可连接多达127个Function。

USB

的系统有且只有一个host,而PC端的USB都是Host,所以将两台PC的USB
口通过A-A USB电缆连接起来,是不能实现通信,如果将两个host连起来通信,这样一来的一个USB的系统有了两个的host,与它的网络协议冲突,Anchorchip,Prolific,等厂家
有USB到USB的设备控制器,可以实现两个USB Host的相连

USB设备

USB的设备可以接在PC上的任意的USB接口上,而使用Hub还可以扩展使更多的USB设备连接到系统中,USB的Hub有一个上行的端口(到host),有多个的下行端口(连接其它的设备),从而可以使整个的系统可以扩展的连接127个外设,其中Hub也算外设。对于USB系统来说,USB的host永远在PC边,所有的其他连接到host都称为设备,在设备与设备之间是无法实现直线通信的,只有通过host的管理与调节才能够实现数据的互相传送,在系统中,通常会有一个根Hub,这个Hub一般有两个下行的端口。

USB的设备类型(device class)
      虽然USB设备都会表现USB的一些基本的特征,但是USB的设备还是可以分成多个不同类型,同类型的设备可以拥有一些共同的行为特征和工作协议,从而使设备的驱动程序的书写变得简单一些,下表中就给出一些基本的USB的设备类型分类

设备举例

音频(audio)

USB_DEVICE_CLASS_AUDIO

MODEM

HID

USB_DEVICE_CLASS_HUMAN_INTERFACE

摄相机.扫描仪

显示

USB_DEVICE_CLASS_MONITOR

动力回馈式

游戏操纵杆

电源

USB_DEVICE_CLASS_POWER

Bulk存储器

USB_DEVICE_CLASS_STORAGE

的优点
1USB为所有的USB外设提供了单一的,易于使用的标准的连接类型,这样一来就简化了USB,外设的设计,同时也简化了用户在判断哪个插头对应哪个插槽时的任务,实现了单一的数据通用接口。
2整个的USB的系统只有一个端口和一个中断,节省了系统资源。
3USB支持热插拔(hot plug)和PNP(Plug-and-Play),也就是说在不关闭PC,的情况下可以安全的插上和断开USB设备,计算机系统动态地检测外设的插拔,并且动态地加载驱动程序,其他普通的外围连接标准,如SCSI设备等必须在关掉主机的情况下才能插拔外围设备。
4USB在设备供电方面提供了灵活性,USB直接连接到Hub或者是连接到Host的设备可以通过USB电缆供电,也可以通过电池或者其它的电力设备来供电,或使用两种供电方式的组合并且支持节约能源的挂机和唤醒模式。
5USB提供全速12Mbps的速率和低速1.5Mbps的速率来适应各种不同类型的外设。USB2.0还支持480Mbps的高速传输速率。
6为了适应各种不同类型外围设备的要求,USB提供了四种不同的数据传输类型:控制传输,Bulk,数据传输,中断数据传输和同步数据传输,同步数据传输可为音频和视频等实时设备的实时数据传输提供固定带宽。
7USB的端口具有很灵活的扩展性,一个USB端口串接上一个USB Hub就可以扩展为
多个USB端口。

传输方式
      USB,有四种的传输方式,控制(Control),同步(isochronous),中断(interrupt),大量(bulk)。如果你是从硬件开始来设计整个的系统,你还要正确选择传输的方式,而作为一个驱动程序的书写者,就只需要弄清楚他是采用的什么工作方式就行了,通常所有的传输方式下的主动权都在PC边,也就是host边。
1、控制(Control)方式传输,控制传输是双向传输,数据量通常较小,USB系统软件用来主要进行查询,配置和给USB设备发送通用的命令,控制传输方式可以包括,8,16,32和64字节的数据,这依赖于设备和传输速度,控制传输典型地用在主计算机和USB外设之间的端点(Endpoint)0之间的传输,但是指定供应商的控制传输可能用到其它的端点。
2、同步(isochronous)方式传输,同步传输提供了确定的带宽和间隔时间(latency),
它被用于时间严格并具有较强容错性的流数据传输,或者用于要求恒定的数据传输率的即时应用中,例如执行即时通话的网络电话应用时,使用同步传输模式是很好
的选择,同步数据要求确定的带宽值和确定的最大传输次数,对于同步传输来说,即时的数据传递比完美的精度和数据的完整性更重要一些。
3、中断(interrupt)方式传输,中断方式传输主要用于定时查询设备是否有中断数据要传输设备的端点模式器的结构决定了它的查询频率,从1到255ms之间,这种传输方式典型的应用在少量的分散的,不可预测数据的传输,键盘,操纵杆和鼠标就属于这一类型中断方式传输是单向的并且对于host,来说只有输入的方式。
4、大量(bulk)传输,主要应用在数据大量传输传输和接受数据上,同时又没有带宽和间隔时间要求的情况下,要求保证传输,打印机和扫描仪属于这种类型,这种类型的设备适合于传输非常慢和大量被延迟的传输,可以等到所有其它类型的数据的传输完成之后再传输和接收数据。

USB将其有效的带宽分成各个不同的帧(frame),每帧通常是1ms时间长,每个设备每帧只能传输一个同步的传输包,在完成了系统的配置信息和连接之后,USB的host就会对不同的传输点和传输方式做一个统筹安排,用来适应整个的USB的带宽,通常情况下,同步方式和中断方式的传输会占据整个带宽的90%,剩下的就安排给控制方式传输数据

数据交换,Transactions

一个transaction是在host和设备(device)之间的不连续相互数据交换,通常由host开始交换,交换的开始是由Token的包开始的,接下来是双方向上的数据包,在数据包传送完之后,就会由设备(device)返回一个握手(handshake)包,USB系统通过IN,OUT和SETUP的包来指定USB地址和endpoint(最多是128个0,通常被用来用做缺省的传送配置信息的)。并且这些被指定的设备必须通过上面形式的包来回应这种形式的指定,每个SETUP的包包含8个byte的数据,数据用来指示传送的数据类型,对于DATA数据包来说,设置两种类型的数据包是为了能够在传送数据的时候做到更加的精确,ACK handshake的包用来指示数据传送的正确性,而STALL handshake则表示数据包在传送的过程中出了故障并且请示host重新发数据或者清除这次传送,PRE格式的包主要是用在在一个USB的系统中如果存在不同速率的设备的时候,将不同于总线速度的设备中就会回应一个PRE的包从而会忽略该设备,各种不同类型的包的大小是不同的,DATA的数据包最大是1023bytes。

USB,设备的开发
1
从Http://www.usb.org/developer处得到USB的Specification,阅读相关内容,同时可参考The USB Handbook by Jaff Kosar、Developing USB Peripherals by Wooi Ming Tan等参考书。
2需要一台支持USB的PC,如果要开发WDM驱动程序则需要一台有以下配置的PC:
                    Windows NT 4.0
                    Windows NT DDK
                    USB DDK
                    Win 32 DDK
                    Visual C++
      先装VC,然后DDK,然后Nemega公司的DriverStudio或是WinDriver(开发工具)。
3编写USB Device的规格书。
4无论如何,不要做无谓的重复,可以购买相应的评估板和评估软件,并找到尽可能多的实例源程序代码,然后需要有你所选的MCU,的程序编译器。
5申请成为USB论坛(USB forum)的成员(每年大约需要支付$2500),同时就可以获得一个Vendor ID,也可以向他们购买Vendor ID,每个Vendor ID的零售价格是$200,不过USB论坛的成员可以在USB相关的支持方面可以得到许多的好处。
6购买其它在开发中要用到的设备,如总线分析仪,USB Hubs,竞争者的相应USB设备以及USB鼠标USB键盘等。
7编写或改写USB驱动程序,MCU固件程序和客户程序代码。
8参加USB遵从试验,在不同的系统与配置验证你的USB设备。

驱动程序编写
      USB,的驱动程序和以往的直接跟硬件打交道的WIN95的VXD的方式的驱动程序不同,它应该是WDM类型的,Windows下的USB软件总体框图如图2

USB基础介绍的更多相关文章

  1. 高通camera结构(摄像头基础介绍)

    摄像头基础介绍 一.摄像头结构和工作原理. 拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电脑中进 ...

  2. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  3. C++ 迭代器 基础介绍

    C++ 迭代器 基础介绍 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定 ...

  4. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  5. Node.js 基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  6. 1、git基础介绍及远程/本地仓库、分支

    1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...

  7. git基础介绍

    git基础介绍 这是git操作的基础篇,是以前的写的操作文档,就没有进行手打,直接把图片贴进来了,你们担待哈,有不正确的地方可以指正出来,我将在第一时间去修改,多谢哈! 一.文件状态:git系统的文件 ...

  8. OSPF基础介绍

    OSPF基础介绍 一.RIP的缺陷 1.以跳数评估的路由并非最优路径 2.最大跳数16导致网络尺度小 3.收敛速度慢 4.更新发送全部路由表浪费网络资源 二.OSPF基本原理 1.什么是OSPF a& ...

  9. iOS系统及客户端软件测试的基础介绍

    iOS系统及客户端软件测试的基础介绍 iOS现在的最新版本iOS5是10月12号推出,当前版本是4.3.5 先是硬件部分,采用iOS系统的是iPad,iPhone,iTouch这三种设备,其中iPho ...

随机推荐

  1. 小程序 setData() 方法

    setData() 参数格式 字段 类型 必填 描述 最低版本 data Object 是 这次要改变的数据   callback Function 否 回调函数 1.5.0 callback 是一个 ...

  2. Kafka及Spring Cloud Stream

    安装 下载kafka http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz kafka最为重要三个配置依次为:broke ...

  3. 【数据库_Postgresql】数据库主键自增长之加序列和不加序列2种方法

    将表的主键进行序列增加之后可以在数据库层面自动主键id增长 方法如下:先建序列,然后建表关联id主键,然后添加语句,不用考虑id主键 DROP SEQUENCE IF EXISTS "pub ...

  4. Qt消息机制和事件

    Qt消息机制和事件 1 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应 ...

  5. 【BZOJ2460】元素(贪心,线性基)

    [BZOJ2460]元素(贪心,线性基) 题面 BZOJ Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到 ...

  6. BIOS和CMOS的区别

    原文链接:https://www.cnblogs.com/boltkiller/articles/5732424.html 在日常操作和维护计算机的过程中,常常可以听到有关BIOS设置和CMOS设置的 ...

  7. 2017 Multi-University Training Contest - 1

    hdu 6033 pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #inc ...

  8. JNI实现JAVA和C++互相调用

    SDK.h #ifndef SDK_H #define SDK_H #include "AsyncProxy.h" #include "Module.h" #i ...

  9. Java enum的用法详解 (转)

    用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...

  10. NOIP 2000 方格取数

    https://www.luogu.org/problem/show?pid=1004 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0. ...