作者:xtoolbox


使用微软系统描述符1.0制作免驱动自定义USB设备


本文介绍如何使用微软的操作系统描述符来实现自定义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 »


使用微软系统描述符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和属性。

Read More »


USB Packet Viewer问题反馈


USB Packet Viewer问题反馈

已知问题:

Carplay不能抓取角色交换之后的包

解决办法,把抓包器设置为高速模式进行抓包,在此模式下不能看到reset总线事件。采用下图中的参数进行搜索,可以定位到角色切换命令。Carplay的示例数据包在此下载。此问题后面会通过更新固件来修复。

 

以下是USB Packet Viewer中的常见问题,如果有新的问题也可以在评论中提出。

问:USB PV在哪里下载,需要什么样的运行环境?

答:下载地址。USB PV及其驱动安装程序可以在XP及以后的所有Windows系统上运行。

Read More »

如何迁移WordPress网站


最近老VPS过期了,要把博客迁移到新的地址上,这里对迁移过程做一个备忘。

博客使用的是nginx+php+mysql的方案,原来在centos上,现在迁移到了ubuntu上。

迁移博客主要就是数据库和模板,这些都有了内容也就过来了。

在新的VPS上装好nginx,php以及mysql,如果不想敲命令备份数据库,还可以装一个phpmyadmin,我这里觉得敲命令更方便就没用phpmyadmin。

Read More »


STM32开源开发环境搭建


本文主要介绍如何在Windows上搭建STM32的开源开发环境

使用到的工具有:VSCode, arm-none-eabi-gccTortoiseGitOpenOCD, mingw32-make,

在整个开源环境中,可以完成开发,编译,下载,调试这些基本功能。

Read More »

在VSCode中配置TouchGFX开发调试环境


TouchGFX是ST公司的一个UI开发工具,能够生成适用于STM32芯片的GUI代码。目前已经和CubeMX进行了整合。TouchGFX还可以生成PC上的仿真程序,对于UI开发调试非常方便。TouchGFX生成的仿真程序工程有GCC和Visual Studio两个版本。VS版本的工程可以直接在VS中打开,编译和调试,这里暂且不表。本文主要介绍如何在VSCode中配置TouchGFX仿真程序的开发和调试环境。

仿真程序采用MinGW编译,工程组织使用的是Makefile,因此需要在msys环境下进行编译。TouchGFX安装成功后会在桌面生成一个进入MinGW编译环境的图标。点击这个图标再进入到工程目录可以调用gcc进行仿真工程的编译。

VSCode做为目前最受欢迎的代码调试环境,免费且开源,有众多的插件支持,是写代码的利器。只需要简单的几个配置就能在VSCode编译调试TouchGFX工程。

Read More »

将TeenyUSB加入到CubeMX生成的工程中


ST为其旗下的STM32系列芯片提供了图形界面的初始化工具STM32CubeMX,使用这个工具能够以可视化的方式完成引脚分配,时钟配置,并生成相应的代码,能够大大提高工作效率。TeenyUSB是一个简化的USB协议栈。下面将介绍如何在CubeMX生成的工程中加入TeenyUSB协议栈。这里以STM32F723E-Discovery开发板为例来说明。

打开CubeMX后新建一个工程,选择芯片型号为STM32F723IEK6

Read More »

简单几步,让自定义USB设备也能免驱动运行


更完整的说明见《使用微软系统描述符1.0制作免驱动自定义USB设备》和《使用微软系统描述符2.0制作免驱动自定义USB设备

做过USB设备开发的人,对USB中的自定义HID设备一定不陌生。很多时候为了通过USB接口与上位机进行通讯,都会采用自定义HID设备的方式。采用这种方式的通讯设备,优点是不需要写驱动程序,Windows上也有相应的API进行操作。这种方式的缺点是通讯速率比较慢,因为HID设备采用中断方式传输数据,对全速设备而言最快一秒钟只能传64K字节数据。而USB全速设备的理论带宽能达到1M字节每秒,连10%的性能都没有达到。

如果采用Bulk传输,则可以达到理论最大带宽,榨干USB总线的性能。但是采用Bulk传输的时候,设备要么做成串口这样的标准设备,免去驱动的编写,这样设备就不是自定义的,使用起来不如自定义设备那么方便。要么做成Bulk传输的自定义设备,但是这样就得写编写驱动程序,而驱动开发也是一个大坑。

那么能不能既能获得自定义的好处,又不进行驱动开发呢?答案是肯定的。

Read More »

TeenyUSB问题反馈


TeenyUSB问题反馈

以下是TeenyUSB协议栈与《STM32 USB设备开发指南》中的常见问题,如果有新的问题也可以在评论中提出。

问:在哪里能获取TeenyUSB的完整代码?用什么工具编译?

答:TeenyUSB代码在 https://github.com/xtoolbox/teenyusb 可以获得,使用gcc进行编译,部分例程有Keil工程。

Read More »

自己动手设计电路板-输出加工文件


自己动手设计电路板-输出加工文件及生产

在序中提到,制作一块电装好的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表和坐标文件,这个两个文件可以直接发到嘉立创进行贴装。

Read More »