USB传输需要什么状态阶段?
What does USB transfer need status phase?
基本上在每个 IN、OUT 或 SETUP 交易之后,我们在交易结束时都有一个 ACK/NAK 数据包。如果握手数据包是每次传输的一部分,因为它在令牌数据包之前的数据包之后出现,那么为什么我们需要一个状态阶段?这似乎存在于控制转移中。
协议端点处于以下状态:ACTIVE、HALT、STALL、...
在状态阶段,这个状态被确定(GET_STATUS
(0x00)请求(http://www.beyondlogic.org/usbnutshell/usb6.shtml))
状态阶段检查有点像对整个请求而不是对每个数据包的 CRC 校验和。
http://www.beyondlogic.org/usbnutshell/usb4.shtml:
"
Status Stage 报告整个请求的状态,这再次因传输方向而异。状态报告始终由函数执行。
IN:如果主机在数据阶段发送IN token(s)接收数据,那么主机必须确认成功接收到该数据。这是通过主机发送一个 OUT 令牌后跟一个零长度数据包来完成的。该函数现在可以在握手阶段报告其状态。 ACK 表示功能已完成命令现在准备好接受另一个命令。如果在处理此命令期间发生错误,则该功能将发出 STALL。但是,如果函数仍在处理中,它 returns 一个 NAK 指示主机稍后重复状态阶段。
OUT:如果主机在数据阶段发送了 OUT 令牌以传输数据,该函数将通过发送零长度数据包来确认数据的成功接收对 IN 令牌的响应。然而,如果发生错误,它应该发出一个 STALL 或者如果它仍然忙于处理数据,它应该发出一个 NAK 请求主机稍后重试状态阶段。
"
或参见http://wiki.osdev.org/Universal_Serial_Bus
"
最后,从函数到主机的 STATUS 事务指示 [控制] 传输是否成功。
"
基本上在每个 IN、OUT 或 SETUP 交易之后,我们在交易结束时都有一个 ACK/NAK 数据包。如果握手数据包是每次传输的一部分,因为它在令牌数据包之前的数据包之后出现,那么为什么我们需要一个状态阶段?这似乎存在于控制转移中。
协议端点处于以下状态:ACTIVE、HALT、STALL、...
在状态阶段,这个状态被确定(GET_STATUS
(0x00)请求(http://www.beyondlogic.org/usbnutshell/usb6.shtml))
状态阶段检查有点像对整个请求而不是对每个数据包的 CRC 校验和。
http://www.beyondlogic.org/usbnutshell/usb4.shtml:
"
Status Stage 报告整个请求的状态,这再次因传输方向而异。状态报告始终由函数执行。
IN:如果主机在数据阶段发送IN token(s)接收数据,那么主机必须确认成功接收到该数据。这是通过主机发送一个 OUT 令牌后跟一个零长度数据包来完成的。该函数现在可以在握手阶段报告其状态。 ACK 表示功能已完成命令现在准备好接受另一个命令。如果在处理此命令期间发生错误,则该功能将发出 STALL。但是,如果函数仍在处理中,它 returns 一个 NAK 指示主机稍后重复状态阶段。
OUT:如果主机在数据阶段发送了 OUT 令牌以传输数据,该函数将通过发送零长度数据包来确认数据的成功接收对 IN 令牌的响应。然而,如果发生错误,它应该发出一个 STALL 或者如果它仍然忙于处理数据,它应该发出一个 NAK 请求主机稍后重试状态阶段。
"
或参见http://wiki.osdev.org/Universal_Serial_Bus
" 最后,从函数到主机的 STATUS 事务指示 [控制] 传输是否成功。 "