竭诚为您提供优质文档/双击可除usb的协议篇一:usb接口协议usb接口协议简介b以及协议简介usb(universalserialbus)是近年来应用在pc领域的新型接口技术,它是由一些pc大厂商如microsoft、intel 等为了解决日益增加的pc外设与有限的主板插槽和端口之间的矛盾而制定的一种通用串行接口。
数据通信协议部分是usb的核心内容。
主要包括:以差模串行信号为载体传送二进制代码来传输信号;数据包作为最基本的完整信息单元,包含一系列数据信息。
数据包可以分解为更小的单元—域;以包为基础,构成usb的三种事务。
进而,组合不同的传输类型,传输各种类型的数据,实现usb 的各种功能。
b通信机制为了细化usb的通信机制,usb协议的开发者采用了分层的概念,每一层传输的数据结构对其他逻辑层是透明的,usb设备和usb主机通信的逻辑结构和每层的逻辑通道。
在hsot端,应用软件(clientsw)不能直接访问usb总线,而必须通过usb系统软件和usb主机控制器来访问usb总线,在usb总线上和usb设备进行通讯。
从逻辑上可以分为功能层、设备层和总线接口层三个层次。
其中功能层完成功能级的描述、定义和行为;设备级则完成从功能级到传输级的转换,把一次功能级的行为转换为一次一次的基本传输;usb 总线接口层则处理总线上的bit流,完成数据传输的物理层实现和总线管理。
途中黑色箭头代表真实的数据流,灰色箭头代表逻辑上的通讯。
如图所示:主机物理设备逻辑上的数据流实际数据流以usb摄像头设备为例,视频播放软件想通过usb总线得到usb摄像头捕捉的视频数据,这就相当于在功能层上。
应用软件是视频播放软件,功能硬件是usb摄像头。
而这些数据的读取需要usb设备层提供的服务,在这一层上,主要是usb设备的驱动调度主机控制器控制器向usb摄像头发出读请求。
每个usb设备会有多个管道,使用哪个管道,传输的大小都需要指定。
这个层次的usb系统软件就是usb摄像头的驱动程序。
而在usb设备一端一般会有小单片机或者处理芯片负责响应这种读请求,而这一层的传输又依赖于usb 总线接口层的服务。
在这一层,完全是usb的物理协议,包括如何分成更小的包(packages)传输,如何保证每次包传输不丢失数据等。
b传输的数据格式其他传输协议一样,在物理层,usb当然也是通过二进制数据进行传输的,首先二进制数据构成域(有七种),域再构成包,包再构成事务(in、out、setup),事务最后构成传输。
3.1域:是usb数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型:3.1.1同步域(sync)八位,值固定为00000001,用于本地时钟和输入同步。
3.1.2标识域(pid)由四位标识符+四位标识符反码构成,表明包的类型和格式,这是个很重要的部分,这里能够计算出,usb的标识码有16种。
3.1.3地址域(addR)七位地址,代表了设备在主机上的地址,地址0000000被命名为零地址,是任何一个设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此能够知道为什么一个usb主机只能接127个设备的原因。
3.1.4端点域(endp)四位,由此可知一个usb设备有的端点数量最大为16个。
3.1.5帧号域(FRam)11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义。
3.1.6数据域(data)长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度。
3.1.7校验域(cRc)对令牌包和数据包(对于包的分类请看下面)中非pid 域进行校验的一种方法,cRc校验在通讯中应用很泛,是一种很好的校验方法。
3.2包由域构成的包有四种类型,分别是令牌包、数据包、握手包和特别包。
3.2.1令牌包可分为输入包、输出包、配置包和帧起始包(注意这里的输入包是用于配置输入命令的,输出包是用来配置输出命令的,而不是放据数的)。
其中输入包、输出包和配置包的格式都是相同的:sync+pid+addR+endp+cRc5(五位的校验码)(上面的缩写解释请看上面域的介绍,pid码即产品识别码)。
帧起始包的格式:sync+pid+11位FRam+cRc5(五位的校验码)3.2.2数据包分为data0包和data1包,当usb发送数据的时候,当一次发送的数据长度大于相应端点的容量时,就需要把数据包分为好几个包,分批发送,data0包和data1包交替发送,即假如第一个数据包是data0,那第二个数据包就是data1。
但也有例外情况,在同步传输中(四类传输类型中之一),任何的数据包都是为data0,格式如下:sync+pid+0~1023字节+cRc16(16位的校验码)3.2.3握手包结构最为简单的包,格式如下sync+pid3.2.4特别包这里不做解释3.3事务分别有in事务、out事务和setup事务三大事务,每一种事务都由令牌包、数据包、握手包三个阶段构成,这里用阶段的意思是因为这些包的发送是有一定的时间先后顺序的,事务的三个阶段如下:1、令牌包阶段:启动一个输入、输出或配置的事务2、数据包阶段:按输入、输出发送相应的数据3、握手包阶段:返回数据接收情况,在同步传输的in和out事务中没有这个阶段,这是比较特别的。
事务的三种类型如下(以下按三个阶段来说明一个事务):3.3.1in事务令牌包阶段——主机发送一个pid为in的输入包给设备,通知设备要往主机发送数据;数据包阶段——设备根据情况会作出三种反应(要注意:数据包阶段也不总是传送数据的,根据传输情况还会提前进入握手包阶段)1)设备端点正常,设备往入主机里面发出数据包(data0和data1交替);2)设备正在忙,无法往主机发出数据包就发送nak无效包,in事务提前结束,到了下一个in事务才继续;3)相应设备端点被禁止,发送错误包stall包,事务也就提前结束了,总线进入空闲状态。
握手包阶段——主机正确接收到数据之后就会向设备发送ack包。
3.3.2out事务令牌包阶段——主机发送一个pid为out的输出包给设备,通知设备要接收数据;数据包阶段——比较简单,就是主机会设备送数据,data0和data1交替握手包阶段——设备根据情况会作出三种反应1)设备端点接收正确,设备往入主机返回ack,通知主机能够发送新的数据,假如数据包发生了cRc校验错误,将不返回任何握手信息;2)设备正在忙,无法往主机发出数据包就发送nak无效包,通知主机再次发送数据;3)相应设备端点被禁止,发送错误包stall包,事务提前结束,总线直接进入空闲状态。
3.3.3setup事务令牌包阶段——主机发送一个pid为setup的输出包给设备,通知设备要接收数据;数据包阶段——比较简单,就是主机会设备送数据,注意,这里只有一个固定为8个字节的data0包,这8个字节的内容就是标准的usb设备请求命令(共有11条,具体请看问题七)握手包阶段——设备接收到主机的命令信息后,返回ack,此后总线进入空闲状态,并准备下一个传输(在setup 事务后通常是个in或out事务构成的传输)3.3.4ping事务处理主要应用于高速数据传输中,只包含令牌包和握手包阶段,步骤如下:usb主机向usb设备发送ping令牌包,表示一个ping事务的开始;usb正确接收到该命令包,然后usb 设备向usb主机返回各种握手包进行响应3.4传输传输由out、in、setup事务其中的事务构成,传输有四种类型,中断传输、批量传输、同步传输、控制传输,其中中断传输和批量转输的结构相同,同步传输有最简单的结构,而控制传输是最重要的也是最复杂的传输3.4.1中断传输由out事务和in事务构成,用于键盘、鼠标等hid设备的数据传输中3.4.2批量传输由out事务和in事务构成,用于大容量数据传输,没有固定的传输速率,也不占用带宽,篇二:usbhid协议中文版——usb接口hid设备第8章usb接口hid设备hid(humaninterfacedevice,人机接口设备)是usb 设备中常用的设备类型,是直接与人交互的usb设备,例如键盘、鼠标与游戏杆等。
在usb设备中,hid设备的成本较低。
另外,hid设备并不一定要有人机交互功能,只要符合hid类别规范的设备都是hid设备。
wndows操作系统最先支持的hid设备。
在windows98以及后来的版本中内置有hid设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。
在设计一个usb接口的计算机外部设备时,如果hid类型的设备可以满足需要,可以将其设计为hid类型设备,这样可以省去比较复杂的usb驱动程序的编写,直接利用windows操作系统对标准的hid类型usb设备的支持。
8.1hid设备简介8.1.1hid设备的特点交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持hld报表的格式。
主机通过控制和中断传输中的传送和请求报表来传送和接收数据。
报表的格式非常灵活。
每一笔事务可以携带小量或中量的数据。
低速设备每一笔事务最大是8b,全速设备每一笔事务最大是64b,高速设备每一笔事务最大是1024b。
一个报表可以使用多笔事务。
设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。
所以主机会定时轮询设备,以取得最新的数据。
hid设备的最大传输速度有限制。
主机可以保证低速的中断端点每10ms内最多1笔事务,每一秒最多是800b。
保证全速端点每lms一笔事务,每一秒最多是64000b。
保证高速端点每125us三笔事务,每一秒最多是24.576mb。
hid设备没有保证的传输速率。
如果设备是设置在10ms 的时距,事务之间的时间可能等于或小于10ms。
除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。
这是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。
hid设备除了传送数据给主机外,它也会从主机接收数据。
只要能够符合hld类别规范的设备都可以是hid设备。
设备除了hld接口之外,它可能同时还包含有其他的usb 接口。
例如影像显示设备可能使用hid接口来做亮度、对比度的软件控制,而使用传统的影像接口来传送要显示的数据。
usb扩音器可以使用实时传输来播放语音,同时使用hid接口来控制音量、低音等。
hid类别设备的规范文件主要是以下两份:deviceclassdefinitionforhumaninterfacedeviceshidusa getables其中前者是hid的基本规范文件,后者可以是前者的附件,为开发人员提供实际的控制类型的描述。
文件是用来定义让主机了解以及使用hid数据的数值。