中断传输是为这样一类设备设计的,它们只传或收少量数据,而且并不经常进行传输,但它们有一个确定的服务周期,对中断传输有以下要求: •通道的最大服务期得到保证。 5.7.1 中断传输的数据格式 USB对中断通道上的数据流格式无要求。 5.7.2 中断传输的方向 中断通道是一种流通道,所以是单向的。端点描述信息指明了通道的数据流方向。 5.7.3 中断传输对包的长度的限制 中断通道的端点决定自己能接收和发送的最大数据区长度,高速设备允许最大不超过64字节(或更少)的数据区,而低速设备只允许不超过8个(或更少)字的数据区,这个数字不包括协议要求的附加信息。USB并不需求所有的包都到最大长度。如果不到的话,不用加字节填充。 所有的主机控制器都要示支持高速设备的64字节数据区和低速设备的8字节(或更少)的最大数据区,对超过最大值的数据区则不要求支持。 USB系统软件设置中断通道的最大数据区长度。在设备设置期间,这一信息将被使用,只有此设置有效,这个数值是不会改变的。在设置有效期间,USB系统软件根据此数值来看分给这个通道的总线时间是否充分。如果充分,则通道建立,否则不建立。与控制通道不同,USB系统不为中断通道调整总线时间。所以对给定的USB系统,要么支持此通道,要么不支持。实际传输的数据区长度由发送器决定,可以小于最大长度。 端点所发的数据区中的数据长度不能超过端点的w Max Packet Size的值。而设备可以通过中断传输来传比此值多的数据。客户软件可以通过中断传输的IRP来接收这批数据,这个中断传输要求多个总线处理事务来完成,且要求每个事务后都有IRP完成的信号。可以设置一个缓冲区,它的长度为w Max Packet Size的整数倍,再加上一个零头。对需要的多个总线事务来说,除最后一个外,前面的事务都传递w Max Packet Size长度的包,后一个传剩下的零头。这些总线处理事务都在为通道建立的服务周期内进行。 如果一个中断传输要传的数据不能放在一个数据区中,就分几个区,前几个区都是最大长度,最后一个包含剩下的长度。当出现以下情况时,认为中断传输结束: •已传的数据量恰好与期望的数据量同。 如果一个中断传输完成,那么主机控制器结束当前的IRP,并开始下一个IRP。如果数据区的长度比预料的长,当前IRP中止,并且只有等到出错条件被确认且清除后,才能开始后面的IRP。 5.7.4 中断传输对总线访问的限制 高速设备和低速设备均可使用中断传输。 USB要求不能有多于90%的顺时间用于阶段传输(同步传输或中断传输)。 线频率和帧的定时限制了一帧内能传的最大中断传输数。对任一USB系统来说,高速单字数据区少于108个,低速单字节数据区少于14个。由于实现上的原因,主机控制器不一定能够支持此理论上的上限。 表4-4列出了不同规格的高速中断传输的情况,以及一帧内可能的最大传输数。表4-5列的是对低速设备的相关情况。它们均不包括管理开销的字节。 表4-4 高速中断传输限制
中断通道的端点可以指明它要求的总线访问周期。高速设备要求的时间周期可以1ms到255ms,而低速设备从10ms到255ms。在设置期间,USB系统软件根据它们的要求来决定一个服务周期长度。USB提供的服务周期长度可能比设备要求的要短些,但不会少于最短的1ms。客户软件和设备只能够确定两次传输之间的时间长度不会比要求的周期时间长。但如果传输中出现错误,那么周期时间必然要越界。当客户软件有一个中断传输的IRP时,端点只是被选中。如果总线轮到此中断传输使用时,没有IRP处于待发状态,则端点没有机会在此时间传数据,一旦一个IRP出现了,它的数据在下一个轮到它的时间时被发出。 表4-5 低速中断传输限制
要在USB上进行中断传输,必须在每个周期对端口进行访问。主机无法知道何时一个端口准备好了一个中断传输,除非它访问这个端点,并同时请求一个中断传输,等待回答。如果端口无数据需要中断传输,就对其请求回送一个NAK信号。如果端口传输数据的会有中断情况发生,一定要用中断传输,以防中断产生时,客户软件误以为IRP结束。长度为0的数据净负荷区的传输是合法的,而且对某些实现是很有用的。 5.7.5 中断传输的数据顺序 中断传输可以利用0/1跳变位(toggle位)的机制,当成功的进行了一个传输,该位就跳变一次。 主机总是认为设备是遵守完备的握手协议和重发协议(参见第8章)。但如果无论传输成功否,设备都在Data1/Data 0间跳变 PID,就忽略主机发来的握手信号。但这时,客户软件会丢失一些包。因为有错误发生时,主机控制器会把设备发的下一个包当作上一个包的重发。 一旦在中断通道上检测到一个引起中止的条件,或收到设备发来的STALL握手信号,所有正等待的IRP都会中止。由软件通过独立的控制通道来消除中止条件。清除后,设备和主机都复位到Data 0的状态。如果总线上出现了一个影响传输的错误,则中断处理事务会停止。 |