首页 文章

USB传输需要什么状态阶段?

提问于
浏览
0

基本上在每次IN,OUT或SETUP事务之后,我们在事务结束时都有一个ACK / NAK数据包 . 如果握手包是每个传输的一部分,因为它是在令牌包之前的数据包之后,那么为什么我们需要一个状态阶段?这似乎存在于控制转移中 .

1 回答

  • 1

    在协议中, endpoints 处于以下状态:ACTIVE,HALT,STALL,......在状态阶段,确定此状态( GET_STATUS (0x00)请求(http://www.beyondlogic.org/usbnutshell/usb6.shtml))

    状态阶段检查有点像整个请求的CRC校验和,而不是每个数据包 .

    http://www.beyondlogic.org/usbnutshell/usb4.shtml

    "

    Status Stage reports the status of the overall request 并且由于转移方向而再次变化 . 状态报告始终由该功能执行 .

    IN :如果主机在数据阶段发送IN令牌以接收数据,则主机必须确认此数据的成功接收 . 这是由主机发送OUT令牌后跟零长度数据包完成的 . 该功能现在可以在握手阶段报告其状态 . ACK表示功能已完成,命令现在已准备好接受另一个命令 . 如果在处理此命令期间发生错误,则该函数将发出STALL . 但是,如果该功能仍处理,则返回NAK,指示主机稍后重复状态阶段 .

    OUT :如果主机在数据阶段发送OUT令牌以发送数据,则该功能将通过发送零长度数据包来响应IN令牌来确认数据的成功接收 . 但是,如果发生错误,它应该发出STALL,或者如果它仍然忙着处理数据,它应该发出一个NAK,要求主机稍后重试状态阶段 .

    "

    或者看http://wiki.osdev.org/Universal_Serial_Bus

    " 最后,从函数到主机的STATUS事务指示[控制]传输是否成功 . "

相关问题