作者:xtoolbox
使用微软系统描述符2.0制作免驱动自定义USB设备
前言
在《使用微软系统描述符1.0制作免驱动自定义USB设备》一文中,介绍了如何使用1.0版本的系统描述符来制作免驱动设备,这里将介绍如何使用2.0版本的系统描述符来制作免驱动设备。无论是1.0还是2.0,都是为了让系统给设备安装WinUSB驱动,并且给接口指定GUID。2.0版本的系统描述符处理流程更加精简一些。2.0不再需要OS字符串描述符,而是使用了USB标准的BOS描述符来获取设备的vendor code。然后再通过一个叫做描述符集的描述符一次性返回所有接口所有配置的compat ID和属性。
如何迁移WordPress网站
最近老VPS过期了,要把博客迁移到新的地址上,这里对迁移过程做一个备忘。
博客使用的是nginx+php+mysql的方案,原来在centos上,现在迁移到了ubuntu上。
迁移博客主要就是数据库和模板,这些都有了内容也就过来了。
在新的VPS上装好nginx,php以及mysql,如果不想敲命令备份数据库,还可以装一个phpmyadmin,我这里觉得敲命令更方便就没用phpmyadmin。
将TeenyUSB加入到CubeMX生成的工程中
ST为其旗下的STM32系列芯片提供了图形界面的初始化工具STM32CubeMX,使用这个工具能够以可视化的方式完成引脚分配,时钟配置,并生成相应的代码,能够大大提高工作效率。TeenyUSB是一个简化的USB协议栈。下面将介绍如何在CubeMX生成的工程中加入TeenyUSB协议栈。这里以STM32F723E-Discovery开发板为例来说明。
打开CubeMX后新建一个工程,选择芯片型号为STM32F723IEK6
简单几步,让自定义USB设备也能免驱动运行
更完整的说明见《使用微软系统描述符1.0制作免驱动自定义USB设备》和《使用微软系统描述符2.0制作免驱动自定义USB设备》
做过USB设备开发的人,对USB中的自定义HID设备一定不陌生。很多时候为了通过USB接口与上位机进行通讯,都会采用自定义HID设备的方式。采用这种方式的通讯设备,优点是不需要写驱动程序,Windows上也有相应的API进行操作。这种方式的缺点是通讯速率比较慢,因为HID设备采用中断方式传输数据,对全速设备而言最快一秒钟只能传64K字节数据。而USB全速设备的理论带宽能达到1M字节每秒,连10%的性能都没有达到。
如果采用Bulk传输,则可以达到理论最大带宽,榨干USB总线的性能。但是采用Bulk传输的时候,设备要么做成串口这样的标准设备,免去驱动的编写,这样设备就不是自定义的,使用起来不如自定义设备那么方便。要么做成Bulk传输的自定义设备,但是这样就得写编写驱动程序,而驱动开发也是一个大坑。
那么能不能既能获得自定义的好处,又不进行驱动开发呢?答案是肯定的。
TeenyUSB问题反馈
TeenyUSB问题反馈
以下是TeenyUSB协议栈与《STM32 USB设备开发指南》中的常见问题,如果有新的问题也可以在评论中提出。
问:在哪里能获取TeenyUSB的完整代码?用什么工具编译?
答:TeenyUSB代码在 https://github.com/xtoolbox/teenyusb 可以获得,使用gcc进行编译,部分例程有Keil工程。
自己动手设计电路板-输出加工文件
自己动手设计电路板-输出加工文件及生产
在序中提到,制作一块电装好的PCBA,需要电路板制作文件,这个文件包含外框、板厚、铜皮、阻焊、锡膏、孔、丝印这些内容。
需要BOM表,根据BOM采购我们需要的器件,需要坐标文件,根据坐标文件贴装我们采购回来的器件。
工具自动生成
根据嘉立创对SMT贴装文件的要求,笔者做了一个KiCad自动输出加工文件的工具,在这里可以获取。
使用方法:
1 复制mf_tool.py gerber_drill.py loadnet.py sexpdata.py 这四个文件到”[KiCad安装目录]\share\kicad\scripting\plugins” 路径下
2 在KiCAD的Python命令行窗口中键入下列命令:
import mf_tool as mf
mf.GenSMTFiles()
执行完成后会在工程的gerber目录中生成Gerber文件、钻孔文件,在工程目录下生成csv格式的BOM表和坐标文件,这个两个文件可以直接发到嘉立创进行贴装。
使用微软系统描述符1.0制作免驱动自定义USB设备
2020-11-04
TeenyUSB
3 Comments
xtoolbox
本文介绍如何使用微软的操作系统描述符来实现自定义USB设备在Windows系统上的免驱动使用。
前言
在Linux上开发USB设备是不需要特别的驱动的,Linux内核的USB驱动会将USB设备的基本操作都暴露到应用层,由应用层来完成实际的业务逻辑。libusb就是这样的一种通用USB设备访问程序。
为了在Windows上也实现这样的效果,libusb最初提供了Windows上通用的内核态驱动程序,将基本访问接口暴露到应用层,由应用层来实现访问逻辑。随着发展,微软也提供了这样的驱动程序,那就是WinUSB通用驱动程序。
为了给设备安装WinUSB驱动,还需要使用包含设备VID和PID的inf文件,以及签名的cat文件(ST-Link就是使用WinUSB作为驱动的,它的驱动就是一个典型的WinUSB设备驱动)。
对于使用WinUSB驱动的设备来说,这些驱动文件做了两件事,1. 告诉系统使用这个设备使用了WinUSB驱动,2. 告诉系统我这个设备接口的GUID是什么,应用程序就能通过GUID来操作设备。
既然WinUSB的驱动程序只做了这两件事,能不能让这两件事更加自动化一些,这样不作编写驱动程序也可以安装。答案是肯定的,微软的操作系统描述符就是处理这个事情的。
Read More »
USB设备Windows免驱动