首页 文章

有关USB的详细信息 - 目前还没有运气

提问于
浏览
9

我一直在寻找关于USB协议和布线如何工作很长时间没有运气的详细描述 . 我正在寻找一个详细但未过于复杂的解释,说明USB的软件和硬件方面的工作原理 . 链接和解释将不胜感激 . 我真的没有想法了,所以如果你可以帮助我的话会很棒 .


这就是我所知道的:

USB硬件可承载4线 - 5V电源,地线和2条全双工线路 .

连接时,设备可以要求指定的电流量 .

与传统的串行连接相比,USB的传输速度非常快 .

连接时,设备会将描述符输出到描述自身的主机 . 这些描述符也将用于数据 .


我不知道的是:

C / C中的程序如何直接写入USB端口?它是否写入端口中的地址?

某些设备如何将自己描述为HID?

司机如何运作?

其他一切......


谢谢!

1 回答

  • 18

    识别

    每个设备都有(唯一的)供应商和产品ID . 这些由usb.org提供(出售)以识别设备 . 您可以使用libusbx之类的库来枚举所有连接的设备,并选择具有您要查找的供应商和产品ID的设备 .

    HID描述符

    HID描述符的重点实际上是取消了驱动程序 . HID描述符是描述您的设备的通用方式,因此您不需要为每个系统/体系结构/ etc /而浪费时间在驱动程序上 . (与JVM的概念相同 . )

    报告

    您将使用输入,输出或功能报告来读取或写入您的设备 . 您可以在输入或功能报告上将流发送到设备 . 我相信这通常是8个字节 . 其中只有一个是你想写的单个字符 . HID描述符包含将报告组合在一起所需的所有信息 . 虽然我很难找到一个相关的链接来澄清这一点 .

    潜在的图书馆

    为了在这里保持开放的态度,我熟悉的所有图书馆以及有关它们的一些信息 .

    libusb-0.1

    首先是libusb-0.1 . 这曾经是我认为的许多Linux内核和Windows内置的内容 . 它非常易于使用,并且有很多文档 . 但是,所有者从未更新,并且多年未编辑 . 它仅支持同步传输 . (如果发生错误,程序可以在期望传输时无限期等待 . )

    libusbx

    接下来是libusbx . 这是大多数人今天所建议的,我同意 . 它是由libusb-0.1所有者感到沮丧的人发布的 . 代码更轻量级,更新,并且重要的是不需要root权限,如libusb-0.1和libusb-1.0(在一秒钟内讨论) . 它支持同步或异步传输 .

    libusb-1.0

    然后是libusb-1.0 . 这是libusb-0.1多年来的第一次更新 . 它与libusb-0.1不兼容 . 这与libusbx在同一天发布,作为报复(我假设),并试图纠正缺乏更新内容并保护用户群 . 它支持同步或异步传输 .

    hid.h

    最后,还有hid库 . 这是 Build 在libusb之上的另一个抽象层 . 但老实说,我认为这真的很混乱,只是增加了必要的开销 .

    一些好的资源

    Understanding HID Descriptors

    Control Message Transfer Documentation(非常好的链接IMO)

    Rolling Your Own HID Descriptor

    Good Visual of HID Reports for Transfers

    Great List of bmRequestType constants(你需要这个或类似的)

    A simple terminal app for speaking with DigiSpark using libusbx and libusb-0.1

    我知道这不是你想要的,但也许它会让你开始!

相关问题