首页 文章

USB编程

提问于
浏览
22

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

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

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

P.S . :我知道:

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

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

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

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

  • ......

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

10 回答

  • 9

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

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

  • 3

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

  • 0

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

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

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

    HID设备通常使用打包到OS中的通用驱动程序 . 这样,您实际上不必编写任何驱动程序,只需使您的设备符合通用驱动程序并为其定制客户端软件即可 .

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

    甚至推荐HIDAPI用于与libusb FAQ中的HID设备进行简单通信,因为使用libusb跨平台进行HIDAPI要复杂得多 .

  • 3

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

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

  • 1

    如果您使用硬件USB进入AVR微控制器的框架,那么请查看LUFA,如果您使用的是带有USB软件的AVR,请查看V-USB . 他们都实现了许多USB类,因此您无需自己动手 - 只需使用它们即可 .

  • 0

    这听起来像一个伟大的项目!我'd suggest starting off with something a little simpler since you'重新 - 如你所说 - 一个"total 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的在线资料 .

    's enough to get your feet wet with AVR microcontrollers and the development tools. The sky is the limit at that point but since you said you want to get into USB I'建议使用优秀的V-USB框架让您的ATMega32充当USB设备 . 在那之后,正如他们所说,翻转LED的步骤是一块蛋糕:) .

  • 0

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

    对于libusb变体信息,请阅读this

  • 5

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

  • 0

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

    uboot中的

    • 小工具框架

    • HID specefication usb org

    • 调试工具,如USB协议分析器

    • libusb在主机PC上运行以发送数据包

  • 0

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

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

相关问题