老丁带你学USB-解疑2:USB协议中的ACK、NAK、STALL三种返回包含义

三种返回确认信息

ACK 、NAK 、STALL

【ACK 包】

ACK(确认) 表示 主机和设备已经收到数据,没有出现错误。设备必须在Setup 事务的交换包中返回ACK,设备也必须在OUT事务的交换中返回ACK。

主机在IN事务的交换包中返回ACK。

【NAK 包】(NAK包只能从设备发向主机)

NAK(未确认) 表示设备正忙或没有数据要返回。如果主机在设备太忙而不能接受数据时发送数据,

则设备在交换包中发出NAK。如果主机在设备没有数据可发送时向设备请求数据,则设备在数据包

中发出NAK。在上述两种情况的任何一种下,NAK表示一个暂时的状况,而主机会在以后重试。

【STALL包】

不支持的控制请求,控制请求失败或终端失败

当一个设备接收到一个终端不支持的控制传输请求,那么这个设备返回一个STALL 给主机。设备

在它支持这个请求但是由于某些原因不能采取请求的动作时,也会发出STALL给主机。

STALL 的另一个用途是在终端暂停特性设置的情况下来响应传输请求,表示终端根本不能发送

或接收数据。规范称这个类型的延迟为功能延迟。

批量和中断终端必须支持功能延迟。

在接收到一个功能STALL后,主机停止所有与设备悬而未决的请求,并且不会恢复通信直到它

已经发送一个成功的请求来清除设备的暂停特性。

主机绝不会发送STALL

 

你可能感兴趣的:(USB)