我一直在寻找关于USB协议和布线如何工作很长时间没有运气的详细描述 . 我正在寻找一个详细但未过于复杂的解释,说明USB的软件和硬件方面的工作原理 . 链接和解释将不胜感激 . 我真的没有想法了,所以如果你可以帮助我的话会很棒 .
这就是我所知道的:
USB硬件可承载4线 - 5V电源,地线和2条全双工线路 .
连接时,设备可以要求指定的电流量 .
与传统的串行连接相比,USB的传输速度非常快 .
连接时,设备会将描述符输出到描述自身的主机 . 这些描述符也将用于数据 .
我不知道的是:
C / C中的程序如何直接写入USB端口?它是否写入端口中的地址?
某些设备如何将自己描述为HID?
司机如何运作?
其他一切......
谢谢!
1 回答
识别
每个设备都有(唯一的)供应商和产品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
我知道这不是你想要的,但也许它会让你开始!