【发布时间】:2018-02-19 22:47:53
【问题描述】:
libusb 是否支持 OUT 事务的 PING 流控制?
根据我正在与之连接的设备的数据表,“对于每个 OUT 数据包,都会向主机返回一个 NYET 握手。主机 ping OUT 端点,当设备的内部处理完成时,会返回一个 ACK对 PING 的响应。”
是否可以使用 libusb 实现这一点?
【问题讨论】:
libusb 是否支持 OUT 事务的 PING 流控制?
根据我正在与之连接的设备的数据表,“对于每个 OUT 数据包,都会向主机返回一个 NYET 握手。主机 ping OUT 端点,当设备的内部处理完成时,会返回一个 ACK对 PING 的响应。”
是否可以使用 libusb 实现这一点?
【问题讨论】:
PING 是由您的 USB 主机控制器而非软件生成的令牌数据包。 PING 令牌由您的主机控制器自动处理。
EHCI 控制器为每个队列头保留 PING 状态位(每个队列头将对应每个端点)。您的主机控制器驱动程序将每个队列头的 ping 状态初始化为 0。
Ping 状态 -
0B - (Do OUT) - 主机控制器将在到此端点的下一次总线事务期间使用 OUT PID。
1B - (Do Ping) - 主机控制器将在下一个总线期间使用 PING PID 到此端点的事务。
协议 -
主机控制器将首先发送 OUT 数据包。如果响应是 NAK 或 NYET,控制器会将 ping 状态更改为 1 并开始发送 PING 令牌。 当 PING 令牌返回 ACK 时,主机控制器将引脚状态更改回 0 并重新传输 OUT 令牌。
因此,软件开发人员无需担心,您无需做任何事情。
【讨论】: