23

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

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

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

PS:我知道:

  • C(可能在这里需要它)

  • Java(这里可能不需要它)

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

  • 汇编程序(希望这里不需要它 XD)。

  • ...

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

4

10 回答 10

10

Well, although you can develop and write your own USB driver, the beauty of USB is that you don't need to write your own driver. the USB Implementers Forum has defined class specifications for all the standard device classes. If you can make your device fit into a standard device class the driver has already been written for you!

If you truly want to become familiar with USB development, you should start by reviewing the USB approved class specification documents.

于 2010-11-22T23:44:51.273 回答
5

如果您喜欢使用硬件 USB 的 AVR 微控制器框架,请查看LUFA,如果您喜欢使用软件 USB 的 AVR,请查看V-USB。他们都实现了许多 USB 类,所以你不必自己做 - 只需使用它们。

于 2010-11-23T08:18:22.307 回答
3

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

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

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

那些应该让你启动并运行。我建议四处搜索以寻求帮助编写你的第一个程序,但另一个很好的资源是康奈尔这门课程的在线材料。

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

于 2011-01-27T15:46:47.670 回答
3

我想知道用什么在电脑上编写自己的驱动程序

  1. libusb(这里这里这里
  2. wdk
  3. 驱动程序

对于 libusb 变体信息,请阅读

于 2011-01-28T11:26:56.510 回答
1

你可以给我们 libusb。它功能强大且跨平台。

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

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

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

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

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

于 2011-05-23T04:41:29.113 回答
0

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

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

于 2014-03-21T11:11:40.397 回答
0

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

对于 Linux,Linux USB网站应该能够为您指明正确的方向。特别是您需要Linux USB 设备驱动程序编程指南

于 2010-11-22T00:40:16.633 回答
0

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

于 2010-11-22T01:23:53.337 回答
0

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

于 2015-04-23T03:31:23.423 回答
0

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

  1. uboot 中的小工具框架
  2. HID 规格usb org
  3. USB 协议分析仪等调试工具
  4. 在主机 PC 上运行的 libusb 发送数据包
于 2017-04-14T11:22:33.773 回答