usb小工具如何知道主机期望IN转移?

时间:2018-03-02 06:30:05

标签: usb endpoint libusb

我正在使用gadgetfs开发简单的环回,但我有点 混淆了gadgefs如何知道主机启动了IN传输。

Gadgetfs在端点上使用读/写,因此根据我的理解,它只能:

  1. 在OUT端点文件描述符上使用“read”时 - 接受来自主机的新传输 设备。

  2. 在IN端点文件描述符上使用“write”时 - 开始从设备到主机的传输。

  3. 上面的(1)似乎很容易理解,但我有 关于(2)的误解:

    不应该只在接受写入IN端点时才接受 主持人发起了一项交易(根据usb标准)?

    如果是这样,小工具如何知道主机发起了一个 IN端点中的事务,并期望此时转移?

1 个答案:

答案 0 :(得分:1)

Gadget将有一个USB设备控制器,可以处理来自USB主控制器的所有请求。因此,GadgetFS的工作是在设备控制器驱动程序的帮助下填充端点缓冲区。以下是事件序列 -

  
      
  1. 在USB小工具中运行的应用程序有一些数据要传输到主机
  2.   
  3. 应用程序使用GadgetFS接口传输数据
  4.   
  5. GadgetFS然后使用标准USB设备控制器驱动程序API将数据发送到控制器
  6.   
  7. USB设备控制器驱动程序获取gadgetFS传递的缓冲区地址,并将其添加到目标控制器的异步列表中   端点(EHCI控制器)
  8.   
  9. 当设备控制器收到" IN"来自控制器的令牌请求,您的设备控制器将从中读取EP详细信息   令牌并安排相应的EP进行数据传输。
  10.   
  11. 控制器DMA然后从步骤4中添加的缓冲区地址读取数据
  12.   

这是整体步骤。您可以查看控制器规格以获取更多详细信息。 这些步骤或多或少与EHCI和XHCI相同。

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