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。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |