如何为Windows平台的USB设备编程驱动程序?
我正在寻找一种通过USB接口读取接线电压并返回数据的设备。我将如何进行编程以解释这些数据,以及我将使用哪种语言?
编辑:
如果有帮助,该项目将为不支持全面ODB2数据端口的较旧引擎开发数字测速仪。因此,它将读取直流电路上的电压并具有准确的图形界面。我绝对不知道从哪里开始,但我决心使它起作用!它用于Windows。
解决方案
看看libusb。它适用于Linux和Windows。
作弊并使用libusb。我是为一个已经从事了一段时间的项目所做的,并编写了一个C ++ / wxWidgets应用程序来处理数据。
我最近一直在考虑使用wxPython在PC上重新编写应用程序,因为它对于GUI开发而言要快得多。
我们想如何显示/记录数据?有很多可用的选项。使用wxWidgets的OpenGL功能(无论是2D还是3D数据表示形式),都可以轻松地完成一些非常酷的工作。
在我看来,如果我们想读取接线电压,则需要一个A / D转换器。我们在制作自己的A / D转换器吗?如果是这样,那么我们将在设备端完成一些不错的固件编程,而不仅仅是我们在这里要询问的主机端驱动程序。否则,我们将要购买一个A / D转换器,而应该只使用供应商提供的驱动程序。
如果可以的话,我会建议使用像libusb这样的库,就像kris和Jon Cage所建议的那样。
如果libusb不能满足需求,并且我们正在为Windows开发,则应该看看Jungo提供的软件。同样,这会将usb软件移至用户空间,而不需要Windows内核开发。
(编辑3:Ilya在评论中指出Jungo也可用于Linux)
如果必须进行某些内核开发(Windows或者Linux),那么C是我们唯一的选择。研究Rubini的这本书以进行Linux开发。对于Windows驱动程序开发,我可以推荐Oney的这本书。
但是在这两种情况下,我都会优先研究libusb选项而不是驱动程序开发。
顺便提一句。如果我们感兴趣的只是能够测量USB设备上的电压(并且编写代码并不重要),那么有很多产品可以满足需求。看看National Instruments的一些产品。这些将处理usb的辛苦工作和数据采集,并为我们提供一个可在应用程序中使用的良好编程接口。
(编辑2)
还有一些USB串行芯片(例如,这些USB串行芯片)可以直接连接到仅使用uart的嵌入式处理器。这些通常带有驱动程序。
除非我们在固件方面对自己的USB驱动程序进行了一些改动,否则芯片可能会附带PC驱动程序。例如,Microchip的PIC微控制器不仅带有PIC的固件,还带有Windows驱动程序。我希望其他支持USB的芯片也将带有自己的驱动程序。
请记住,在固件侧直接与USB端口进行交互时,在PC侧,我们实际与之交互的只是主机控制器的驱动程序。
由于我们仍在寻找将电压转换为信息的设备,因此建议我们看一下实现USB-HID(人机接口设备)接口的设备,例如在此处找到的设备。
它们的好处是不需要开发任何设备驱动程序,也不需要安装驱动程序。它们就像鼠标,键盘或者闪存驱动器一样即插即用。该接口非常通用,大多数制造商还提供了必要的库来从设备读取信息,在插入/拔出设备时通知我们,发现设备,等等。
另外,请看一下这篇文章,其中介绍了如何在C#中使用HID设备。
戴夫
我们最简单的选择可能是购买某种现成的数据采集设备。许多公司都做这种事情,但有时价格却非常高昂:
- 国家仪器
- 扩增子
- LabHyman
我们也可以使用工具包构建自己的工具,尽管我暂时找不到适合链接。
如果我们想要更多定制的东西,可以使用EZ-USB或者PIC。它们提供了USB驱动程序(至少适用于Windows),使我们无需编写驱动程序即可与设备进行交互。
对于其中的大多数,我们都有相当广泛的编程语言可供选择,我过去编写的软件可以与Visual Basic 6中的EZ-USB设备进行通信。
大多数微控制器都具有内置ADC,并且其中许多还具有内置USB子系统。赛普拉斯,PIC,AVR浮现在脑海。每当我为自己的项目进行USB工作时,我都会使用pyusb和wxPython。尽管最初的学习过程很艰难,但它们使完成工作非常容易。
撇开无耻的自我插入,我为USB-LCD设备编写了一个带有pyusb的小型python驱动程序。我们可以在此处查看我的源代码。
我个人使用Microchip PIC,具有AD / DA转换器,USB端口,免费驱动程序和引导加载程序,而所有这些都不到4美元。插入这样的设备后,我们将获得一个额外的COM端口,其余的则微不足道。
我们没有说要查看的平台。如果目标是Windows,那么USB Revealed是一个很棒的参考。
对于硬件,请看FTDI产品。
如果我们有硬件并想在Windows中访问它,我最近发现了WinUSB。如果这是我们需要的,请查看此白皮书。
除了WinUSB,libusb和Jungo,还有另一种用于从用户模式用户模式驱动程序框架(UMDF)编程USB设备的选项。
编写UMDF驱动程序基本上是使用我们喜欢的工具创建一个进程内COM组件。