IRP是由操作系统定义的,而USB传输和总线操作是USB规范定义的。为了进一步说明USB传输,我们引出帧frame的概念。 帧:USB总线将1ms定义为一帧,每帧以一个SOF包为起始,在这1ms里USB进行一系列的总线操作。引入帧的概念主要是为了支持和时间有关的总线操作。 为了满足不同外设和用户的需要,USB提供了四种传输方式:控制传输,同步传输,中断传输,批传输。他们在数据格式,传输方向,数据包容量限制,总线访问限制等方面有着各自不同的特征:
控制传输(Control Transfer)
1.通常用于配置/命令/状态等情形
2.其中的配置操作setup和状态操作status的数据包具备USB定义的结构。因此控制传输只能通过消息管道进行
3.支持双向传输
4.对于高速设备,允许数据包最大容量为81632或64字节。对于低速设备,只有8字节一种选择
5.端点不能指定总线访问的频率和占用总线的时间,USB系统软件会做出限制
6 具备数据传输,确保在必要时能够重试
同步传输(Isochronous Transfer)
1.是一种周期的连续的传输方式,通常用于和时间有密切关系的信息的传输
2.数据没有USB定义的结构数据流管道
3.单向传输。假如一个外设需要双向传输,则必须使用另一个端点
4.只能用于高速设备,数据包的最大容量能够从0到1023个字节
5.具备带宽确保,并且保持数据传输的速率恒定。每个同步管道每帧传输一个数据包
6.没有数据重发机制,需要具备一定的容错性
7.和中断方式一起占用总线的时间不得超过一帧的90%
中断传输(Interrupt Transfer)
1.用于非周期的自然发生的数据量很小的信息的传输,如键盘鼠标等
2.数据没有USB定义的结构数据流管道
3.只有输入这一种传输方式即外设到主机
4.对于高速设备允许数据包最大容量为小于或等于64字节,对于低速设备,只能小于或等于8字节
5.具备最大服务周期确保,即在规定时间内确保有一次数据传输
6.和同步方式一起占用总线的时间不得超过一帧的90%
7.具备数据传输确保在必要时能够重试
批传输(Bulk Transfer)
1.用于大量的对时间没有需要的数据传输
2.数据没有USB定义的结构数据流管道
3.单向传输,假如一个外设需要双向传输,则必须使用另一个端点
4.只能用于高速设备,允许数据包最大容量为81632或64字节
5.没有带宽的确保,只要有总线空闲就允许传输数据,优先级小于控制传输
6.具备数据传输,确保在必要时能够重试,以确保数据的准确性(To be continued)
USB接口技术(四)
USB总线协议
任何总线操作都能够归结为三种包的传输:任何操作都是从主机开始的,主机以预先排好的时序发出一个描述操作类型,方向外设地址,连同端点号(这将在以下部分给予解释)的包。我们称之为令牌包(Token Packet)。然后在令牌中指定的数据发送者发出一个数据包或指出他没有数据能够传输。而数据的目的地一般要以一个确认包(Handshake Packet)作出响应,以表明传输是否成功。
域的类型
同步域(SYNC field)。任何的包都起始于SYNC域,他被用于本地时钟和输入信号的同步。并且在长度上定义为8位。SYNC的最后两位作为一个记号,表明PID域(标识域)的开始。在以后的叙述中SYNC域将被省去。
标识域(Packet Identifier Field)。对于每个包PID都是紧跟着SYNC的。PID指明了包的类型及其格式。主机和任何的外设都必须对接收到的PID域进行解码。假如出现错误或解码为未定义的值,那么这个包就会被接收者忽略。假如外设接收到一个PID,他所指明的操作类型或方向不被支持,外设将不作出响应。
地址域(Address Field)。外设端点都是由地址域指明的。他包括两个子域外设地址和外设端点。外设必须解读这两个域。其中有任何一个不匹配,这个令牌就会被忽略。
外设地址域(ADDR)。指定了外设,他根据PID所说明的令牌的类型,指明了外设是数据包的发送者或接收者。ADDR共6位,因此最多能够有127个地址。一旦外设被复位或上电,外设的地址被缺省为0,这时必须在主机枚举过程中被赋予一个独一的地址。而0地址只能用于缺省值而不能分配作一般的地址。
端点域(ENDP)。有4位,他使设备能够拥有几个子通道,任何的设备必须支持一个控制端点0(endpoint 0)。低速的设备最多支持2个端点0和一个附加端点。高速设备能够支持最多16个端点。
帧号域(Frame Number Field)。这是个11位的域,指明了现在帧的排号。每过一帧(1ms),这个域的值加1,到达最大值XFF后,返回0。这个域只存在于每帧开始时的SOF令牌中,SOF令牌在下面将周详介绍。
数据域(Data Field)。范围是01023字节,而且必须是整数个字节。
CRC校验。包括令牌校验和数据校验。
包的类型
令牌包(Token Packed) 其中包括:IN(输入),OUT(输出),SETUP(配置)和SOF(Start of Frame帧起始)四种类型。
对于OUT和SETUP来说,ADDR和ENDP中所指明的端点将接收到主机发出的数据包,而对IN来说,所指定的端点将输出一个数据包。
Token和SOF在三个字节的时间内,以一个EOP(End of Packet)结束。假如一个包被解码为Token包,但是并没有在3个字节时间内以EOP结束,他就会被看作非法或被忽略。
数据包包括Data0和Data1两种类型。这两种包的定义是为了支持数据触发。同步数据包包含了PIDDATA和CRC三个域。
应答包(Handshake Packet)仅包含一个PID域。Handshake用来报告数据传输的状态,只有支持流控制的传输类型,控制中断和批传输才能返回Handshake。
本文来自ChinaUnix博客,假如查看原文请点:http://blog.chinaunix.net/u/12679/showart_515040.html
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




