USB 编程

Posted

技术标签:

【中文标题】USB 编程【英文标题】:USB programming 【发布时间】:2011-05-13 13:49:24 【问题描述】:

我想对微控制器 (AVR) 进行编程,以通过 USB 控制一些 LED。它只是出于对如何构建和编程 USB 设备的兴趣。 有一些 AVR 微控制器支持 USB 协议,或者我可以自己在另一个微控制器中实现 USB 协议,但我想知道在计算机上使用什么来编写自己的驱动程序。

我在系统编程方面的水平:完全菜鸟(因此问题)

那么,您会建议哪些文献来更好地了解 USB 技术以及如何编写自己的驱动程序及其他内容?

PS:我知道:

C(这里可能需要)

Java(这里可能不需要)

Python(希望可以在这里使用)

汇编器(希望这里不需要它 XD)。

...

P.P.S:不同操作系统的驱动程序开发不同。我使用 Linux 和 Windows,因此欢迎提供与这些系统中的一个或两个相关的任何材料。

【问题讨论】:

【参考方案1】:

好吧,虽然您可以开发和编写自己的 USB 驱动程序,但 USB 的美妙之处在于您不需要编写自己的驱动程序。 USB Implementers Forum 为所有标准设备类定义了类规范。如果您可以使您的设备适合标准设备类,那么驱动程序已经为您编写好了!

如果您真的想熟悉 USB 开发,您应该从查看USB approved class specification documents 开始。

【讨论】:

【参考方案2】:

如果您喜欢使用硬件 USB 的 AVR 微控制器框架,请查看 LUFA,如果您喜欢使用软件 USB 的 AVR,请查看 V-USB。它们都实现了许多 USB 类,因此您不必自己动手 - 只需使用它们即可。

【讨论】:

这两个项目对avr usb空间都有很大帮助【参考方案3】:

这听起来是一个很棒的项目!我建议从更简单的东西开始,因为你 - 正如你所说 - 一个“总 n00b”。我不确定您目前拥有(或想到的)什么硬件,但我对初学者的建议是STK500。它是一个在 Linux 和 Windows 中都得到很好支持的开发板,将为您提供最大的灵活性。它为您的项目内置了 LED 和开关,但您需要获得一个微控制器。为此,我推荐ATMega32,这是一款出色的多用途 IC,它也得到很好的支持,并且在网络上有大量文档。

一旦你得到这些,我建议你在 Linux 上使用 avr-gcc 进行开发(确保也安装 avr-libc)。如果您使用的是 Ubuntu,很容易获得所需的所有软件包:

% sudo apt-get install gcc-avr avr-libc avrdude

那些应该让你启动并运行。我建议在谷歌上搜索以寻求帮助编写你的第一个程序,但另一个很好的资源是this class at Cornell 的在线资料。

这足以让您熟悉 AVR 微控制器和开发工具。那时天空是极限,但既然你说你想进入 USB,我建议使用优秀的V-USB 框架让你的 ATMega32 充当 USB 设备。之后,正如他们所说,翻转 LED 的步骤就是小菜一碟:)。

【讨论】:

好提示:v-usb - 也有很好的原理图 - 易于diy【参考方案4】:

我想知道用什么来写你自己的 计算机上的驱动程序

    libusb(here、here 和 here) wdk WinDriver

有关 libusb 变体信息,请阅读 this

【讨论】:

【参考方案5】:

您可以使用我们的 libusb。它功能强大且跨平台。

但是您要做的是一个相当简单的控制界面。我认为,您可以使用 HIDAPI 避开大部分复杂性。

http://www.signal11.us/oss/hidapi/

HID 设备通常使用打包到操作系统中的通用驱动程序。这样一来,您实际上不必编写任何驱动程序,只需使您的设备与通用驱动程序兼容并为其定制客户端软件。

我认为这是业余爱好者电子领域通常会做的事情,这就是您在这里感兴趣的。

在 libusb 常见问题解答中甚至建议将 HIDAPI 用于与 HID 设备的简单通信,因为使用 libusb 跨平台执行此操作有点复杂。

【讨论】:

【参考方案6】:

一个好方法就是开发一个 HID 设备,因为驱动程序内置在大多数更高级别的操作系统中,并且对于您所说的简单 IO 非常灵活。另一个不错的选择是仅使用 USB RS232 设备或软件。我使用具有许多带有 USB 板载的好设备的 PIC。

【讨论】:

【参考方案7】:

我基于 ARDUINO UNO 构建了自己的测试平台,我使用的是 usbasp 类型的 ionlabs 编程器,它工作得非常好,但它不允许将 TTL 转换回 Rs-232,因此我不能使用 serial.print() 等功能,我必须安装 ftdi 电缆才能做到这一点。 驱动程序是运行良好的 libusb 1.xx。

如果您想对 AVR 进行编程,您可以使用 ARDUINO 软件包或 stino 来上传程序。 您需要了解 c(仅基础知识)。

【讨论】:

【参考方案8】:

去年我为我的 capstone 创建了一个 USB 键盘适配器。我没有进行主机编程,而是使用了您可以在网络上找到的现有代码。但我确实对设备端进行了编程,为此我从这个网站Teensy 获得了很多帮助,请查看他们的“代码库”,其中有键盘、鼠标等的代码。此外,USB 协议手册总是很有用的,当您使用 USB 进行操作时,应始终查阅它。

【讨论】:

【参考方案9】:

我想知道您的 AVB 是充当主机还是设备。我猜你的主板是一个 USB 设备,你需要点亮主板上的 LED。因此,将您的电路板初始化为 HID 设备可能是一种好方法。为了实现这一目标,您需要在您的板上运行一个 HID 小工具软件堆栈。参考文献如下:

    uboot 中的小工具框架 HID 规格usb org 调试工具,例如 USB 协议分析器 在主机 PC 上运行 libusb 以发送数据包

【讨论】:

【参考方案10】:

WDK(Windows 开发工具包)的 Microsoft 文档区最近可在 MSDN 上找到。有一个关于 USB 的部分,尽管您最好先阅读前面的部分,特别是“入门”区域。他们假设您将使用 C 作为驱动程序开发的编程语言。

WDK Site WDK - USB Section

对于 Linux,Linux USB 网站应该能够为您指明正确的方向。特别是你会想要Programming Guide for Linux USB Device Drivers。

【讨论】:

以上是关于USB 编程的主要内容,如果未能解决你的问题,请参考以下文章

使用 Objective-C 进行 USB 编程

批量 USB 设备连接和编程

使用时以编程方式弹出 USB 设备

三菱USB-SC09编程电缆驱动(USB转串口)

可编程 USB 转串口适配器开发板的详细接口与功能

是否可以将 Android 编程为物理 USB 键盘?