我正在使用gadgetfs开发简单的环回,但我对gadgefs如何知道主机启动IN传输感到有点困惑。
Gadgetfs在端点上使用读/写,所以根据我的理解,它只能:
(1)上面似乎很容易理解,但我对(2)有误解:
是不是只有在主机启动事务时才接受写入IN端点(根据usb标准)?
如果是这样,小工具如何知道主机在IN端点启动了一个事务,并且此时需要转移?
Gadget将有一个USB设备控制器,可以处理来自USB主控制器的所有请求。因此,GadgetFS的工作是在设备控制器驱动程序的帮助下填充端点缓冲区。以下是一系列事件 -
- 在USB小工具中运行的应用程序有一些数据要传输到主机
- 应用程序使用GadgetFS接口传输数据
- 然后,GadgetFS使用标准USB设备控制器驱动程序API将数据发送到控制器
- USB设备控制器驱动程序获取gadgetFS传递的缓冲区地址,并将其添加到目标控制器端点(EHCI控制器)的异步列表中
- 当设备控制器从控制器收到“IN”令牌请求时,设备控制器将从令牌读取EP详细信息并安排相应的EP进行数据传输。
- 然后,控制器DMA从步骤4中添加的缓冲区地址中读取数据
这是整体步骤。您可以查看控制器规格以获取更多详细信息。对于EHCI和XHCI,这些步骤或多或少相同。
请记住,所有事务都由设备控制器处理,应用程序/ GadgetFS有一个工作来填充EP指向的缓冲区。