ACK可能是USB总线分仪里最简单的包了。其主要包括两部分组成,分别为序列号和ACK的PID(包ID). 注意上图,这里显示的是B0~B7,也就是说,USB在数据发送时是先发送低位,再是高位,所以这叫做LSB->MSB ACK数据包PID PID占用一个字节8位,但实际上只有4位有效,别位4位是低4位的补码。 在USB规范中,定义ACK的PID为0010,所以
(2)主机发送DATA数据包给设备功能; (3)设备功能如果有数据会发送给主机,如果设备没有准备好接收主机的数据,则会给主机发送NAK握手包(你给我发送数据,我这会忙着,没办法收,你一会再发),如果设备不能进行传输,则会给主机发送STALL握手包,如果设备正确接收数据,则会给主机发送ACK握手包,在高速USB设备传输事务中,...
一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成。 翻转同步:发送端按照 DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输才会导致PID翻转,也就是说发送段只有在接收到ACK后才会翻转PID,发送下一个数据包,否则会重试本次事务传输。同样,若在接收端发现接收到的数据包不是按照此顺序翻...
在响应中,设备发送一个握手数据包(即 #436,以D↓表示)。 请注意,PID 值为 ACK(ACK 数据包)。 这表示设备确认了此事务。 数据交易 现在,让我们看看设备在响应请求时返回的内容。 实际数据在数据事务中传输。 下面是数据交易的跟踪记录。 在接收到 ACK 数据包后,主机会启动数据事务。 为了启动此事务,主机会发...
对于 SuperSpeed,主机发送 ACK 令牌来启动批量传输,而不是 IN 令牌。 设备使用数据包进行响应。 然后,主机通过发送 ACK 数据包来确认数据包。 如果终结点正忙且无法发送数据,则设备可以发送 NRDY 状态。 在这种情况下,主机将等待,直到它从设备获取 ERDY 数据包。
第三部分是握手信号。如果数据是IN方向,握手信号应该是Host端发出,如果是OUT方向,握手信号应该是Device端发出。握手信号可以为ACK,表示正常响应,也可以是NAK表示没有正确传送。STALL表示出现主机不可预知的错误。 在第二部分,即传输数据包的时候,数据传送由DATA0和DATA1数据包交替发送。数据传输格式DATA1和DATA0,这两...
主机回应 ACK 3.3 SET_CONFIGURATION SET_CONFIGURATION请求的结构如下: bmRequestType 1字节,参考GET_DESCRIPTOR的bmRequestType字段分析。 bRequest 1字节,参考GET_DESCRIPTOR 的 bRequest字段分析。 wValue 2字节,表示配置的值(configuration value),当该值和配置描述符中的 bConfigurationValue 字段一致时,表示选中该...
USB主机向USB设备发送OUT包和数据包,如果USB设备接收到的数据包没有任何错误(如位填充或者CRC错误),并且数据包的PID和自身包序列匹配,则USB设备返回ACK包;如果低速或全速的USB设备因自身内存空间不够等原因无法接收USB主机发送来的数据,则会向USB主机返回一个NAK包;如果USB设备的OUT端点被停止(Halt),那么USB设备向...
图中标号3: 数据阶段(Device->Host),在USB1.1设备中,0号端点的BUFFER都比较小,单次不能把数据发送完成,需要多次 图中标号4:ACK阶段(Host->Device),主机告诉设备数据正确接收完成 获取设备描述符 HOST端主机软件就是通过以上SETUP过程,一步一步完成整个枚举过程。
主机从USB设备获取配置信息,并设置设备的配置值。设置阶段的数据交换包含了SETUP令牌封包、紧随其后的DATA0数据封包以及ACK握手封包。它的作用是执行一个设置(概念含糊)的数据交换,并定义此控制传输的内容。 阶段二:数据传输阶段 数据传输阶段用来传输主机与设备之间的数据。控制读取是将数据从设备读到主机上,读取的数据...