【问题标题】:How to send USB control transaction on nonzero endpoint (libusb)?如何在非零端点(libusb)上发送 USB 控制事务?
【发布时间】:2017-01-12 09:51:57
【问题描述】:

我正在编写代码来了解 Freescale Kinetis 微控制器上的 USB 外设。我已经设法通过 Linux 主机上的枚举,并且可以使用 EP0 上的供应商自定义代码发送和接收数据包,并与 libusb 测试程序进行交互。

看起来我可以在微控制器上配置额外的控制端点(非零端点号),但我看不到让 libusb 向这些端点发送/接收控制传输的方法。 (libusb_control_transfer 不需要端点编号,但 libusb_bulk_transferlibusb_interrupt_transfer 需要。)

非零控制端点是否如此不常见或不必要,以至于不值得打扰它们?有没有办法让 libusb 对非零端点执行控制事务?

【问题讨论】:

    标签: usb linux-device-driver microcontroller device-driver libusb


    【解决方案1】:

    有没有办法让 libusb 对非零端点执行控制事务?

    您可以尝试修改异步I/O API的libusb_transfer结构中的endpoint字段。

    但是,如果您的微控制器实际上可以支持非零控制端点,我会感到惊讶——没有那么多人支持。

    在实践中,您宁愿使用中断或批量端点。两者都具有较少的开销 - 通过批量传输允许更高的吞吐量(例如,参见 USB 2.0 SPEC 表 5-2 与表 5-9)。

    【讨论】:

    • 谢谢...我使用的是 libusb 的同步部分,因此我复制并修改了 send_control 函数以将不同的端点插入到它所构建的异步结构中。不高兴,但我没有协议分析器来判断是否有数据包发出。 (微控制器文档出错也不足为奇。)无论如何,我将尝试其他类型的端点,看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多