首页 文章

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

提问于
浏览
0

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

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

  • 在OUT endpoints 文件描述符上使用“read”时 - 接受从主机到设备的新传输 .

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

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

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

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

1 回答

  • 1

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

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

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

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

相关问题