[STM32] 发现一篇非常好的讲解libusb、winusb、libusbk关系的文章

一直搞不懂libusb、winusb、libusbK、libusb-win32、Zadig、inf-wizard.exe有什么联系和区别,,今天发现一篇文章讲解的非常清晰、易懂,,

原文:http://www.joenchen.com/archives/1360


转载:

刚开始接触USB驱动编程,一般是利用现成的库来做,但是网上一搜索,发现一大堆各种各样的lib把人搞的很头疼,这边总结一下。

== libusb ==
说明:libusb是一个跨平台的usb驱动框架。libusb原始项目在2010年后基本没有更新,曾有libusbx项目2012年从libusb分出来,2014年1月26日又合并回libusb了。当时的libusbx-1.0.18和libusb-1.0.18其实完全一样,相当于libusbx替换了libusb的代码!后续的版本其实都是基于libusbx的代码了!

包含两个主要分支1.x和0.1.x。
1.x和0.1.x并不兼容,可以同时存在,如果要在1.x基础上兼容0.1.x需要libusb-compat转换层。所以0.1.x和libusb-compat不能同时装上!

内核:目前1.x分支的驱动只有用户态,linux下支持usbfs,windows下支持WinUSB.sys。
也可以支持libusbK和libusb-win32(通过libusbK支持)。

工具:通过Zadig支持生成基于libusb0、libusbK、WinUSB的inf文件。
https://github.com/pbatard/libwdi/wiki/Zadig


== libusb-win32 ==
说明:libusb-win32是从libusb-0.1.x分支衍生的,
主要是针对Windows做优化,所以接口风格和libusb-0.1.x一致。

内核:WDM框架的libusb0.sys驱动。

工具:自带inf-wizard.exe生成基于libusb0.sys的inf文件。

注意:目前建议是新的项目尽可能使用libusb,而不是这个libusb-win32了。我在这个上面花了很多时间,一直报错,坑爹了,要注意libusb-win32已经废弃,目前使用的是libusb+Zadig的组合。


== libusbK ==
说明:libusbK主要是想做一个WinUSB接口风格的开源usb库,
支持基于KMDF的libusbK.sys和系统自带的WinUSB.sys。参考libusb-win32做的开发,部分工具是从libusb-win32整合而来的。因为源代码里也包含了libusb0.dll的加载功能和转换层,所以也可以支持WDM框架的libusb0.sys(libusb-win32)。

内核:基于KMDF框架的libusbK.sys、WDM的libusb0.sys、系统的WinUSB.sys

工具:自带libusbK-inf-wizard.exe(基于libusb-win32的工具改的)
生成基于libusb0、libusbK、WinUSB的inf文件。


简单说,就是不要去管libusb-win32和libusbK项目,目前不管是windows还是Linux都是使用libusb项目,主页是libusb.info。

在Windows上使用libusb时是调用微软的WinUSB接口,在Linux上是usbfs。用Zadig工具统一安装驱动,不用理什么inf-wizard.exe。

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STM32是意法半导体(STMicroelectronics)开发的一系列32位微控制器,具有广泛的应用领域。其中,STM32的USB功能可以通过libusb库实现下载功能。 libusb是一个跨平台的用户空间USB访问库,它允许我们在不编写底层驱动程序的情况下访问USB设备。通过使用libusb库,我们可以直接与STM32的USB接口进行通信。 要在STM32上实现USB下载功能,首先需要在开发环境中配置并编译libusb库。然后,通过编写代码来处理STM32的USB接口与PC之间的通信。接下来的步骤可以帮助实现这一过程: 1. 确保在开发环境中安装libusb库,并将其正确配置为与STM32的USB接口兼容。 2. 在PC端编写一个应用程序,用于与STM32进行通信。该应用程序可以使用libusb库提供的函数来初始化USB设备、发送和接收数据。 3. 在STM32上,编写固件代码以处理USB下载功能。这包括初始化USB接口、处理来自PC的下载请求、将固件数据发送到PC等。 4. 在STM32的固件中实现一个Bootloader,它可以在启动时检测到USB下载请求,并将控制权转移到USB下载功能代码中。 通过以上步骤,我们可以实现STM32的USB下载功能。需要注意的是,还需要确保PC端的libusb应用程序与STM32的固件代码之间的通信协议的一致性,以保证数据的正确传输。 总体而言,实现STM32的USB下载功能需要通过libusb库在PC端与STM32之间建立通信,并编写相应的固件代码来处理USB下载请求。这使得开发人员可以方便地在不编写底层驱动程序的情况下实现USB下载功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值