usb在江湖系列之一家族系统(3) 2010/12/18
来源:互联网 发布:可发说说的软件 编辑:程序博客网 时间:2024/05/17 22:33
3.4 令牌(token)
3.4.1 协议层的介绍
令牌是在前面枚举时引出的,有点命令的意思,可以理解为命令的标识,就是告诉对方这次的行为。在USB协议中,我们经常会说令牌包。那么什么是包呢?packet,是指一次数据传输所组织的整体形式。数据传输的基本单元是包。每个包是有一定结构的,包括起始符,结束符,包的id(身份证,包的标识),要传递的数据,以及CRC校验信息。SOF和EOF是包开始和结束的标志。
下面是各种USB数据传输过程中涉及到的包标识符PID:
可见除了令牌包,还有其他几种格式的包,每一种包分别负责不同场景下的传输。
a) 令牌包(定义了目标设备,终点号,传输方向),OUT IN SOFSETUP四种。
令牌包格式
SOF包格式
b)数据包 DATA0,DATA1
一般情况下有2种类型的数据包:DATA0和DATA1。设计成2种数据包PID是为了支持数据切换同步(Data ToggleSynchronization)。
数据包格式
3 握手应答包 ACK NAK STALL
握手包仅由PID构成。握手包用来报告数据事务的状态,表示数据成功接收,命令的接收或拒绝等信息。
ACK:用来表示成功接收,对于IN事务,ACK由主机返回,而对于OUT或者SETUP事务则由USB设备返回。
NAK:在IN事务过程中表示USB设备不会从主机接收数据,OUT事务中表示USB设备没有传输到主机的数据,NAK通常发生在USB设备并没有准备好和host做数据通讯的场景下。NAK只能有USB设备在IN、OUT事务中发出。
STALL:表示USB设备不支持该项请求或者不具备这个功能。
4 特殊包 PRE
还没有遇到过,略过。
3.4.2 现实中的packet
下面是使用工具抓到的USB设备枚举过程中的一个环节,这是获取设备描述符的一个完整过程。从下面这个过程可以直观的看到各种包的是如何配合的,一次行为的流程是什么样的。这个图中蕴含着大量的信息,最好滞留一下然后慢慢来欣赏她。
Packet包是传输的最小单位,几个packet组成一个transzaction,几个transzaction组成一个transfer。
比如host想获取设备描述符,这是一件完完整整的事情,就是一个transfer。首先要发送setup包(这是一个transzaction,其中又包含了几个packet),告诉设备要干什么,然后发送in包读取数据,最后发送握手信息。
同样是上面的获取设备描述符的过程,我们用transzaction来表示:
我们在用transfer来表示:
着重看一下packet那张图,理解一下通讯的整个过程。
这部分的详细内容在USB协议第八章有详细的讲解。
3.5 Setup包
枚举过程中使用最频繁的就是令牌包,而令牌包中最重要的就是Setup包,因为Setup是建立一次传输的开始,需要包含大量的信息,如传输方向、具体要做什么、地址信息、端点信息等等,都在Setup过程中告知USB设备。
那么我们看一下Setup包的格式,我们通常说的Setup包是指Setup这次数据传输过程中的数据部分。
下面是一次Setup传输:
Setup包指的就是下面这次data传输的数据部分:
Setup包是一个固定的数据格式,包含8个字节。
bmRequest Type:表明此次请求的特性,第二阶段控制传输方向。如果wLength域被设作0的话,表明没有数据传送阶段,那Direction位就会被忽略。同时指定了接收者,当接收者是接口或端点(endpoint)时,wIndex域指出是哪个接口或端点。
bRequest:说明进行的是哪种请求,注意这个位会在bmRequest Type的type不为0时有新的含义,这里我们只讨论type为0的标准请求。
标准的设备请求
关于这些请求的具体意思和使用方法可以参考标准的USB协议。
wValue:当前请求的参数。
wIndex:用来表明是哪一个接口或端点。下面是wIndex的格式:
Direction为0代表端点为OUT端点,1为IN端点。不过这个值目前基本没有到。端点为0时该值被忽略。
wLength:表示下个包的数据传输长度。传输方向由bmRequstType中的Direction位指出。wLength为0则表明无数据传输。在IN传输请求下,设备返回的数据长度不应多于wLength,但可以少于。在OUT请求下,wLength指出主机发出的确切数据量。如果主机发送了多于wLength的数据,设备做出的响应是没有定义的。设备千差万别,我们无法预知。USB协议为什么不加以定义呢?标准化这个行为。
关于USB的最基本的知识,我们先介绍到这里,这些东西在以后还会经常见面。结合上面那个获取设备描述符的抓图,进一步理解消化上面的知识点。
四 精彩人生的资本
当我们遇到机会时,才会感到自己能力的匮乏,后悔自己平时没有足够的积累。USB协议经过上面的准备,有能力进行各种情况下的数据传输了。他为我们准备了四种数据传输方式,分别应用在不同的环境下,技术的本质是服务,如果服务不好,迟早要被淘汰。所以做技术要考虑客户的感受。USB的四种传输基本上是够用的:控制传输(control)、批量传输(bulk)、中断传输(interrupt)、同步传输(iso)。
四种传输是usb立足江湖不可或缺的,不同的应用场合,设备可以使用不同的传输方式,也因此诞生了各式各样、丰富多彩的USB设备。
4.1 控制传输
控制就是命令,数据量短小精悍、目标明确。
控制传输只能在消息管道进行,因此传输的数据流必须依附于USB数据结构上。
1)数据格式
Setup包命令集
具有USB定义的格式
保证主机和设备之间正常通信
允许一些销售商对设备命令进行扩展
2)传输方向——双向(一般为端点0)
3)最大的包长度为64字节
4.2 批量传输
数据量大,还要求准确。打印机、U盘。
1)数据格式——无要求
2)传输方向——单向
3)包长度限制
低速设备不支持批量传输
全速设备:64字节
高速设备:512字节
4)支持错误检测和恢复
4.3 中断传输
鼠标、键盘,数据量不是很大,周期性的会有新数据。
1)用于定时查询设备是否有中断数据要传送
2)根据设备的要求进行周期性调度
全速设备最快每1ms、最慢每255ms发生一次
低速设备最快每10ms、最慢每255ms发生一次
高速设备最快每125us、最慢每4096ms发生一次
3)数据格式——无要求
4)传输方向——单向
5)包长度限制
低速设备:8字节
全速设备:64字节
高速设备:1024字节
6)支持错误检测和恢复
4.4 同步传输
数据的实时性,而非正确性,带宽要求很高啊。典型应用摄像头!
1)速率恒定,容错的传输
因错误使传输失败,不再重新发送数据
全速设备最大带宽的90%、高速设备最大带宽的80%可以分配给周期性传输(同步传输和中断传输)
2)数据格式——无要求(流管道)
3)传输方向——单向
4)服务周期——在相连的帧时隙中被定期调度
5)包长度限制
低速设备不支持同步传输
全速情况下,最大包值为1023字节
高速情况下,最大包值为1024字节
6)不支持错误检测和恢复
到此,我们对USB家族成员的看家本领有了初步的认识,在后面的使用过程中,会对他们进一步的了解,直到将这些东西了然于胸,不用特意感受他的存在。掌握知识点的最好方式是在使用过程中,所以有时我更喜欢“好读书不求甚解”这句话,因为在后面的使用过程中,以前没理解的可能会突然间就理解了。前前后后的知识点,互相照应,形成网状。
- usb在江湖系列之一家族系统(3) 2010/12/18
- usb在江湖系列之一家族系统(1) 2010/12/18
- usb在江湖系列之一家族系统(2) 2010/12/18
- USB入门系列之一----基本知识
- USB入门系列之一----基本知识
- USB入门系列之一----基础知识
- USB入门系列之一----基础知识
- USB入门系列之一----基本知识
- USB入门系列之一:USB概述
- USB架构概述之一USB系统描述
- 江湖系列
- [转]USB入门系列之一 —— USB概述
- USB入门系列之一 —— USB概述
- USB系列之一:列出你的USB设备
- USB入门系列之一 —— USB概述
- USB学习系列之一——USB简介
- USB入门系列之一 —— USB概述【转】
- USB学习系列之一——USB简介
- asp.net生成静态页面、伪静态、页面重定向
- Java 监听器
- 要考试了!
- VC6.0使用GDI+的方法及初始化
- ERP 概要分析(采购、销售与分销库存)
- usb在江湖系列之一家族系统(3) 2010/12/18
- 手工打造编译器之语义分析2
- awk {print $2}的讲解
- 笔试面试题记录
- “0”和“1”的艺术—程序的加密、解密和攻防对抗(Part 3)
- Spring3集成jbpm4.4
- weblogic Error 404--Not Found
- FI模块总结
- ArcSDE在IBM AIX 6.1下面的安装过程(单个SDE实例)