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

问题描述 投票:0回答:1

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

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

  1. 在OUT端点文件描述符上使用“read”时 - 接受从主机到设备的新传输。
  2. 在IN端点文件描述符上使用“写入”时 - 开始从设备到主机的传输。

(1)上面似乎很容易理解,但我对(2)有误解:

是不是只有在主机启动事务时才接受写入IN端点(根据usb标准)?

如果是这样,小工具如何知道主机在IN端点启动了一个事务,并且此时需要转移?

usb endpoint libusb
1个回答
1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.