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

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

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

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

PS:我知道:

  • C(这里可能需要)

  • Java(这里可能不需要)

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

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

  • ...

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

【问题讨论】:

    标签: usb microcontroller drivers avr


    【解决方案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】:

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

      1. libusb(hereherehere
      2. wdk
      3. 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 小工具软件堆栈。参考文献如下:

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

                【讨论】:

                  【解决方案10】:

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

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-03-11
                    • 1970-01-01
                    • 2011-03-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多