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