USB编程

时间:2010-11-22 00:08:46

标签: usb microcontroller drivers avr

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

我的系统编程水平:总noob(因此问题)

那么,为了获得USB技术的知识以及如何编写自己的驱动程序以及其他内容,您的人们会建议哪些文献?

P.S。:我知道:

  • C(可能需要它)

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

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

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

  • ...

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

10 个答案:

答案 0 :(得分:9)

嗯,虽然您可以开发和编写自己的USB驱动程序,但USB的优点在于您无需编写自己的驱动程序。 USB Implementers Forum已为所有标准设备类定义了类规范。如果您可以使您的设备适合标准设备类,则已经为您编写了驱动程序!

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

答案 1 :(得分:5)

如果您正在使用带有硬件USB的AVR微控制器框架,那么请查看LUFA,如果您使用的是带USB软件的AVR,请查看V-USB。他们都实现了许多USB类,所以你不必自己动手 - 只需使用它们。

答案 2 :(得分:3)

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

一旦你得到那些我建议你使用avr-gcc在Linux上进行开发(确保也安装avr-libc)。如果您正在使用Ubuntu,则可以轻松获得所需的所有软件包:

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

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

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

答案 3 :(得分:3)

  

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

  1. libusb(hereherehere
  2. wdk
  3. WinDriver
  4. 对于libusb变体信息,请阅读this

答案 4 :(得分:1)

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

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

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

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

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

甚至建议在libusb常见问题解答中使用HIDAPI与HID设备进行简单通信,因为使用libusb跨平台进行HIDAPI要复杂一点。

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

我去年为我的顶点创建了一个USB键盘适配器。我没有做主机编程,但使用了你可以在网上找到的现有代码。但我确实对设备进行了编程,为此我从这个网站获得了很多帮助Teensy查看他们的"代码库"其中包含键盘,鼠标等代码。此外,USB协议手册将始终有用,您应该在使用USB时进行咨询。

答案 9 :(得分:0)

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

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