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

Blu*_*Ice 10 usb

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


这就是我所知道的:

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

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

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

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


我不知道的是:

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

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

司机如何运作?

其他一切......


谢谢!

eat*_*hil 19

鉴定

每个设备都有(唯一的)供应商和产品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库.这是建立在libusb之上的另一个抽象层.但老实说,我认为这真的很混乱,只是增加了必要的开销.

一些好的资源

了解HID描述符

控制消息传输文档(非常好的链接IMO)

滚动您自己的HID描述符

HID报告的良好视觉传输

bmRequestType常量的绝佳列表(你需要这个或类似的)

一个简单的终端应用程序,使用libusbx和libusb-0.1与DigiSpark通话

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