usb小工具如何知道主机在传输中的期望值?

usb小工具如何知道主机在传输中的期望值?,usb,endpoint,libusb,Usb,Endpoint,Libusb,我正在使用gadgetfs开发简单的环回,但我有点 对gadgefs如何知道主机是在传输中启动的感到困惑 Gadgetfs在端点上使用读/写,据我所知,它只能: 当在输出端点文件描述符上使用“读取”时-接受来自主机的新传输 设计 在端点文件描述符中使用“写入”时,启动从设备到主机的传输 (1) 上面的内容似乎简单易懂,但我有 误解(2): 是否只有在以下情况下才应接受写入端点 主机启动了事务(根据usb标准) 如果是这样的话,小工具如何知道主机启动了 是否在终结点中创建事务,并希望此时进行传输

我正在使用gadgetfs开发简单的环回,但我有点 对gadgefs如何知道主机是在传输中启动的感到困惑

Gadgetfs在端点上使用读/写,据我所知,它只能:

  • 当在输出端点文件描述符上使用“读取”时-接受来自主机的新传输 设计

  • 在端点文件描述符中使用“写入”时,启动从设备到主机的传输

  • (1) 上面的内容似乎简单易懂,但我有 误解(2):

    是否只有在以下情况下才应接受写入端点 主机启动了事务(根据usb标准)

    如果是这样的话,小工具如何知道主机启动了
    是否在终结点中创建事务,并希望此时进行传输

    小工具将有一个USB设备控制器,用于处理来自USB主机控制器的所有请求。因此GadgetFS的工作就是在设备控制器驱动程序的帮助下填充端点缓冲区。以下是事件的顺序:

  • 运行在USB小工具中的应用程序有一些数据要传输到主机
  • 应用程序使用GadgetFS接口传输数据
  • GadgetFS然后使用标准USB设备控制器驱动程序API将数据发送到控制器
  • USB设备控制器驱动程序获取gadgetFS传递的缓冲区地址,并将其添加到目标控制器的异步列表中 端点(EHCI控制器)
  • 当设备控制器收到来自控制器的“IN”令牌请求时,您的设备控制器将从中读取EP详细信息 标记并安排相应的EP进行数据传输
  • 然后,控制器DMA从步骤4中添加的缓冲区地址读取数据
  • 这是总体步骤。您可以查看控制器规格以了解更多详细信息。 对于EHCI和XHCI,这些步骤或多或少是相同的


    请记住,所有事务都由设备控制器处理,应用程序/GadgetFS有一个任务来填充EP指向的缓冲区。

    在某些情况下,我认为应该清除缓冲区(以便设备控制器不会在下一个事务中发送它。是否可以在GadgetFS中清除缓冲区(如fflush)?从主机读取和从设备写入的周期似乎也应该相同(特别是在中断端点的情况下),否则缓冲区将被填满,主机将读取较旧的事件,对吗?Thanx了解详细答案是,您的主机应以正确的间隔读取中断EP,否则数据可能会被覆盖。也不要使用“从设备写入”术语。USB设备无法启动任何传输。USB主机应读取和写入EP。