usb - 关于 USB 的详细信息 - 到目前为止还没有运气

标签 usb

很长一段时间以来,我一直在寻找有关 USB 协议(protocol)和电缆如何工作的详细说明,但没有成功。我正在寻找关于 USB 的软件和硬件方面如何工作的详细但不过度复杂的解释。链接和解释将不胜感激。我真的没有想法了,所以如果你能帮助我,那就太好了。

这是我所知道的:

USB 硬件带有 4 条线路 - 5V 电源、地线和 2 条全双工线路。

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

与传统的串行连接相比,USB 的传输速度相当快。

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

我不知道的是:

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

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

驱动程序如何工作?

其他一切...

谢谢!

最佳答案

鉴别
每个设备都有一个(唯一的)供应商和产品 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 的所有者感到沮丧的人发布的。该代码更轻量级、最新,重要的是不需要像 libusb-0.1 和 libusb-1.0 那样的 root 权限(稍后讨论)。它支持同步或异步传输。
libusb-1.0
然后是 libusb-1.0。这是多年来对 libusb-0.1 的第一次更新。它与 libusb-0.1 不兼容。这与 libusbx 在同一天发布,作为报复(我假设)并试图纠正缺乏更新内容并保护用户群。它支持同步或异步传输。
隐藏.h
最后,还有隐藏库。这是建立在 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
我知道这不是您正在寻找的东西,但也许它会让您入门!

关于usb - 关于 USB 的详细信息 - 到目前为止还没有运气,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17679480/

相关文章:

android - 以编程方式防止使用 USB 端口

android - Android 上 USB 设备的 Linux 文件权限

linux - 在 Linux 上读取 USB 输入流

javascript - WebUSB - "Unable to claim interface"错误

c++ - 无法使用 AT 命令发送短信

android - Windows PC 作为 USB 主机通过 USB 与 Android 设备通信

android - 如何通过 USB 连接从 Android 设备发送 .proto 文件

windows - 如何查找我的电脑中创建的最新 com 端口?

vbscript - 通过VBScript获取已连接USB设备的VID/PID

python - 连接到设备时更改 pySerial 中的波特率?