"); //-->
通用串行总线规范定义了四种传输/端点类型,
控制权转让
中断传输
同步传输
批量传输
控制传输通常用于命令和状态操作。它们对于设置一个使用控制传输执行所有枚举功能的USB设备来说是必不可少的。它们通常是突发性的随机数据包,由主机发起并尽最大努力传递。低速设备中控制传输的数据包长度必须为8字节,高速设备允许的数据包大小为8、16、32或64字节,全速设备的数据包大小必须为64字节。一个控制传输可以有三个阶段。
这个设置阶段是发送请求的位置。这包括三个包。首先发送包含地址和终结点编号的设置令牌。接下来发送数据包,并且始终具有data0的PID类型,并包含安装程序包详细说明了请求的类型。稍后我们将详细介绍设置包。最后一个数据包是用于确认成功接收或指示错误的握手。如果函数成功地接收到设置数据(CRC和PID等OK),它将以ACK响应,否则它将忽略数据并不发送握手数据包。函数不能发出暂停或NAK数据包以响应设置数据包。
可选的数据阶段由一个或多个输入或输出传输组成。设置请求指示此阶段要传输的数据量。如果超过最大数据包大小,数据将以多个传输方式发送,每个传输都是除最后一个数据包之外的最大数据包长度。根据数据传输的方向,数据阶段有两种不同的场景。在:当主机准备好接收控制数据时,它会发出一个IN令牌。如果函数接收到带错误的IN令牌,例如PID与反向的PID位不匹配,那么它将忽略数据包。如果令牌被正确地接收到,设备可以用包含要发送的控制数据的数据包、指示端点发生错误的暂停包或向主机指示端点正在工作但暂时没有要发送的数据的NAK包进行应答。输出:当主机需要向设备发送一个控制数据包时,它发出一个OUT令牌,后跟一个包含控制数据作为有效载荷的数据包。如果OUT令牌或数据包的任何部分损坏,则函数将忽略该包。如果函数的端点缓冲区为空,并且它已将数据记录到端点缓冲区中,它将发出一个ACK,通知主机它已成功接收到数据。如果端点缓冲区由于前一个包的处理而不是空的,那么函数将返回一个NAK。但是,如果端点出现错误,并且其停止位已设置,则返回暂停。
状态阶段报告整个请求的状态,此状态再次因传输方向而变化。状态报告始终由函数执行。
在:如果主机在数据阶段发送令牌以接收数据,则主机必须确认成功接收此数据。这是通过主机发送一个输出令牌和一个零长度的数据包来完成的。该函数现在可以在握手阶段报告其状态。ACK表示函数已完成命令现在可以接受另一个命令。如果在处理此命令期间发生错误,则函数将发出暂停。但是,如果函数仍在处理中,它将返回NAK,指示主机稍后重复状态阶段。
输出:如果主机在数据阶段发送令牌来传输数据,则该函数将响应于in令牌发送一个零长度包来确认数据的成功接收。但是,如果发生错误,它应该发出暂停,或者如果它仍然忙于处理数据,它应该发出NAK,要求主机稍后重试状态阶段。
现在这些是怎么组合起来的呢?例如,主机希望在枚举期间请求设备描述符。发送的数据包如下所示。主机将发送设置令牌,告诉函数以下数据包是设置数据包。地址字段将保存主机请求描述符的设备的地址。端点编号应为零,指定默认管道。然后主机将发送一个DATA0包。这将有一个8字节的有效负载设备描述符请求如USB规范第9章所述。USB功能然后确认安装包已正确读取,没有错误。如果收到的数据包已损坏,设备将忽略此数据包。主机将在短时间延迟后重新发送数据包。1安装令牌同步PID地址终点CRC5EOP公司地址和终结点编号2数据0包同步PID数据0CRC16型EOP公司设备描述符请求三。 Ack握手同步PIDEOP公司设备确认。安装程序包以上三个数据包代表第一个USB事务。USB设备现在将解码接收到的8个字节,并确定它是否是设备描述符请求。然后,设备将尝试发送装置描述元,这将是下一个USB事务。1象征性地同步PID地址终点CRC5EOP公司地址和终结点编号2数据1包同步PID数据1CRC16型EOP公司设备描述符的前8个字节三。 Ack握手同步PIDEOP公司主机确认数据包1象征性地同步PID地址终点CRC5EOP公司地址和终结点编号2数据0包同步PID数据0CRC16型EOP公司最后4个字节填充三。 Ack握手同步PIDEOP公司主机确认数据包在本例中,我们假设最大有效负载大小为8字节。主机现在可以向主机发送此令牌的数据。由于最大数据包大小为8字节,因此必须将12字节的设备描述符拆分成块来发送。除最后一个事务外,每个块必须是8字节。主机确认我们发送的每个数据包。一旦发送了设备描述符,状态事务就会随之发生。如果事务成功,主机将发送一个零长度的数据包,指示整个事务成功。然后,函数对这个零长度数据包进行响应,指示其状态。1输出令牌同步PID地址终点CRC5EOP公司地址和终结点编号2数据1包同步PID数据1CRC16型EOP公司零长度数据包三。 Ack握手同步PIDEOP公司设备确认。整个交易
任何有过微控制器中断请求经验的人都知道中断是设备产生的。但是在USB下,如果一个设备需要主机的注意,它必须等到主机轮询它之后才能报告它需要紧急关注!
中断传输
保证延迟
流管-单向
错误检测和下一周期重试。
中断传输通常是非周期性的、小设备“启动”的通信,需要有限的延迟。中断请求由设备排队,直到主机轮询USB设备请求数据。
低速设备的最大数据负载大小为8字节。
全速设备的最大数据负载大小为64字节。
高速设备的最大数据负载大小为1024字节。
上图显示了中断输入和中断输出事务的格式。
在:主机将定期轮询中断端点。此轮询速率在中指定端点描述符稍后会介绍。每次投****都需要主机发送一个IN令牌。如果IN令牌已损坏,则函数将忽略数据包并继续监视总线以查找新令牌。如果某个中断已被设备排队,则函数将在接收到IN令牌时发送一个包含与中断相关的数据的数据包。在主机上成功接收后,主机将返回ACK。但是,如果数据损坏,主机将不返回任何状态。另一方面,如果主机用IN令牌轮询中断端点时不存在中断条件,则函数通过发送NAK来通知此状态。如果此终结点上发生错误,则将发送一个暂停以答复in令牌。
输出:当主机想要发送设备中断数据时,它发出一个OUT令牌,后跟一个包含中断数据的数据包。如果OUT令牌或数据包的任何部分损坏,则函数将忽略该包。如果函数的端点缓冲区为空,并且它已将数据记录到端点缓冲区中,它将发出一个ACK,通知主机它已成功接收到数据。如果端点缓冲区由于前一个包的处理而不是空的,那么函数将返回一个NAK。但是,如果端点因此发生错误,并且其停止位已设置,则返回暂停。
等时转移是连续和周期性的。它们通常包含对时间敏感的信息,例如音频或视频流。如果音频流中的数据存在延迟或重试,则可能会出现一些包含故障的不稳定音频。节拍可能不再同步。然而,如果一个包或帧时不时地被丢弃,它就不太可能被侦听器注意到。
同步传输提供
保证访问USB带宽
有限延迟
流管-单向
通过CRC进行错误检测,但不进行重试或保证传输。
仅限全速和高速模式
没有数据切换
中指定了最大大小的数据负载端点描述符等时端点。对于全速设备,最大可达1023字节,对于高速设备,最大可达1024字节。由于最大数据有效负载大小将影响总线的带宽要求,因此最好指定一个保守的有效负载大小。如果您使用的是大型有效负载,那么指定一系列 替代接口具有不同的等时有效载荷大小。如果在枚举过程中,由于带宽限制,主机无法启用首选的同步终结点,则它需要依靠某些东西,而不仅仅是完全失败。在等时端点上发送的数据可能小于预先协商的大小,并且可能在每个事务的长度上有所不同。上图显示了一个同步进出事务的格式。等时事务没有握手阶段,无法报告错误或暂停/暂停条件。
批量传输可用于大批量突发数据。此类示例可以包括发送到打印机的打印作业或从扫描仪生成的图像。批量传输在数据有效载荷上以CRC16字段的形式提供纠错功能,并提供错误检测/重新传输机制,以确保无误地传输和接收数据。批量传输将在所有其他事务被分配后使用总线上未分配的空闲带宽。如果总线忙着同步和/或中断,那么大量数据可能会慢慢地通过总线。因此,批量传输只能用于不受时间影响的通信,因为不能保证延迟。
批量传输
用于传输大量突发数据。
通过CRC进行错误检测,保证交货。
不能保证带宽或最小延迟。
流管-单向
仅限全速和高速模式
批量传输仅由全速和高速设备支持。对于全速端点,最大批量数据包大小为8、16、32或64字节长。对于高速端点,最大数据包大小可以达到512字节长。如果数据负载低于最大数据包大小,则不需要用零填充。当批量传输传输了所请求的确切数据量、传输了小于最大端点大小的数据包或传输了零长度的数据包时,就认为完成了批量传输。上图显示了批量输入和输出事务的格式。
在:当主机准备好接收大容量数据时,它会发出一个IN令牌。如果函数接收到带错误的IN令牌,则忽略该包。如果令牌被正确地接收到,函数可以用包含要发送的大容量数据的数据包进行应答,或者用一个指示端点发生错误的暂停包或一个NAK包来向主机指示该端点正在工作,但临时没有要发送的数据。
输出:当主机想向函数发送一个大容量数据包时,它会发出一个OUT令牌,后跟一个包含该大容量数据的数据包。如果OUT令牌或数据包的任何部分损坏,则函数将忽略该包。如果函数的端点缓冲区为空,并且它已将数据记录到端点缓冲区中,它将发出一个ACK,通知主机它已成功接收到数据。如果端点缓冲区由于处理前一个数据包而不是空的,那么函数将返回一个NAK。但是,如果它的端点设置为暂停,则返回一个位。
主机负责管理总线的带宽。在配置同步和中断端点时以及在总线的整个运行过程中,这是在枚举时完成的。规范对总线进行了限制,允许在全速总线上为周期性传输(中断和等时)分配不超过90%的任何帧。在高速总线上,这一限制被降低到不超过80%的微帧可用于周期性传输。因此,您可以很快看到,如果您有一个高度饱和的总线周期性传输,剩下的10%用于控制传输,一旦这些被分配,批量传输将获得剩余的部分。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。