1、概述

很久很久以前,在立创买了块虚拟示波器的空板,没事的时候把它做出来了,然后就扔在那里了,回顾一下,顺便折腾下看能不能弄好。

这是官方给的效果图,我实际收到的板子是绿色的,其他跟图上基本一致,BNC插头用的全金属的,其他跟上图一致,懒得拍照了。

官方给的资料,还挺全的,不过,做好之后烧录程序,设备管理器只能搜到一个串口,给的软件也搜索不到设备,去仪星官网搜索了一下最新的兼容程序,依然搜索不到设备,失败!

2、苦哈哈的探索历程

2.1 USB设备

设备连入电脑,设备管理器显示“USB串行设备(COM5)”,第一反应是这个识别不对。

仔细查看代码。检查一下USB配置没什么大问题,注意到给的驱动文件有一下描述符:

STM         = "STMicroelectronics"
MFGNAME     = "STMicroelectronics"
DESCRIPTION = "STM Virtual COM Port"
SERVICE     = "USB Virtual COM port"
显然和电脑识别到的不一致,再此查看驱动。

ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
%DESCRIPTION%=DriverInstall,USB\VID_0483&PID_5740
%DESCRIPTION%=DriverInstall,USB\VID_0483&PID_5740

以上内容一致,但制造商描述不一致,name的描述也不一致

同时,查找仪星给出的最新Demo,代码托管在Github上,拉取后,在Open-Instrustar\Driver-windows找到Dso.inf

内部定义了:

[Strings]
ProviderName="YiXingDianZi"
USB\OSCDevice.DeviceDesc="YiXingDianZi USB DSO Driver"
USB\OSCDeviceVer5.DeviceDesc="YiXingDianZi USB DSO(v5) Driver"
USB\OSCDeviceVer6.DeviceDesc="YiXingDianZi USB DSO(v6) Driver"
WinUSB_SvcDesc="YiXingDianZi USB DSO"
DISK_NAME="YiXingDianZi DSO Driver Installation Disk"

似乎这个是对的,But这个驱动装不上。。但这毕竟是人家最新的驱动程序,从官网下载多功能虚拟信号分析仪3.12.1.1版本,自动安装驱动

然后打开DSO.inf文件看一看~

%USB\OSCDevice.DeviceDesc% = USB_Install, USB\VID_d4a2&PID_5660

USB开发小白根据以上内容直接更改设备的VID 和 PID:

const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
  {
    0x12,   /* bLength */
    USB_DEVICE_DESCRIPTOR_TYPE,     /* bDescriptorType */
    0x00,
    0x02,   /* bcdUSB = 2.00 */
    0x02,   /* bDeviceClass: CDC */
    0x00,   /* bDeviceSubClass */
    0x00,   /* bDeviceProtocol */
    0x40,   /* bMaxPacketSize0 */
    0xA2,
    0xD4,   /* VID idVendor = 0x0483 */
    0x60,
    0x56,   /* PID idProduct = 0x5740 */
    0x00,
    0x02,   /* bcdDevice = 2.00 */
    1,              /* Index of string descriptor describing manufacturer */
    2,              /* Index of string descriptor describing product */
    3,              /* Index of string descriptor describing the device's serial number */
    0x01    /* bNumConfigurations */
  };

注释没删,做个对比吧,但是,,重新烧录后显示设备描述符请求失败,,继续折腾吧。

2.2设备描述符

以下为摘录:

USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述符即设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,还有百标准描述符,如类描述符。USB设备通过这些描述符向USB主机汇报设备的各种各样属性,主机通过对这些描述符的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。

  USB设备通过描述符反映自己的设备特性。USB描述符是由特定格式排列的一组数据结构组成。

  在USB设备枚举过程中,主机端的协义软件需要解析从USB设备读取的所有描述符信息。在USB主向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。

  USB描述符包含标准描述符、类描述符和厂商特定描述3种形式。任何一种设备必须USB标准描述符(队字符串描述符可选外)。

  在USB1.X中,规定了5种标准描述符:设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)和字符串描述符(String Descriptor)。

  每个USB设备只有一个设备描述符,而一个设备中可包含一个或多个配置描述符,即USB设备可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口),接口的特性通过描述符提供。

  在USB主机访问USB设备的描述符时,USB设备依照设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述符和接口描述符,如果USB设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。

具体设备描述符结构不在赘述----------------------------------------------------------------------------------------------------------------------------------

const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR] =
  {
    VIRTUAL_COM_PORT_SIZ_STRING_VENDOR,     /* Size of Vendor string */
    USB_STRING_DESCRIPTOR_TYPE,             /* bDescriptorType*/
    /* Manufacturer: "YiXingDianZi" */
    'Y', 0, 'i', 0, 'X', 0, 'i', 0, 'n', 0, 'g', 0, 'D', 0, 'i', 0,
    'a', 0, 'n', 0, 'Z', 0, 'i', 0
  };

const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT] =
  {
    VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT,          /* bLength */
    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
    /* Product name: "YiXingDianZi USB DSO Driver" */
    'Y', 0, 'i', 0, 'X', 0, 'i', 0, 'n', 0, 'g', 0, 'D', 0, 'i', 0,
    'a', 0, 'n', 0, 'Z', 0, 'i', 0, ' ', 0, 'U', 0, 'S', 0,
    'B', 0, ' ', 0, 'D', 0, 'S', 0, 'O', 0, ' ', 0, 'D', 0, 'r', 0,
    'i', 0, 'v', 0, 'e', 0, 'r', 0, ' ', 0, ' ', 0
  };

把字符串也改掉,设备可以被识别了,成功的一小步

然而,打开仪星的上位机,显示设备被其他软件占用,,,,Orz。。。

2.3设备被其他软件占用

首先尝试使用SDK 2.8.6提供的程序进行Debug,发现,程序根本就不会触发设备插入的回调函数,,陷入僵局,,,

USB开发不太了解,或许需要一个开放库进行USB的插入测试验证下我改的STM32代码是否正确了,

没办法换回原来的上位机和原来的程序,采样看起来还是那么丑。。

从设备属性和下位机代码来看,

static const uint8_t banbe[32]=                    /*仪器版本信息*/
{
    'Y','i','X','i','n','g','D','i','a','n', 'Z', 'i', 0, 0, 0, 0,     //厂商ID   16*8B
    'S','t','u','-','0','.', '2', 0, 0 , 0 , 0  ,  0 , 0, 0, 0, 0        //型号ID   16*8B
};

问题应该是出在协议上了,无能为力啊。。。

3总结

瞎折腾一番,最终可以确认,硬件焊的没问题、软件烧录没问题,强行适配官方发售的版本配套的软件还是不行呀,唯一的收获是USB设备描述符?

基于STM32F103C8T6的USB虚拟示波器相关推荐

  1. HS4、HS6 USB示波器,USB虚拟示波器,多通道数据分析软件功能图解

    HS3.HS4.HS5.HS6 USB高速USB虚拟示波器不但具有采集卡的全部功能,还包括二次开发,Labview,Matlab调用,最主要的是 配有一套强大的多功能仪器分析软件包括(数字存储示波器, ...

  2. linux系统串口透传,基于CC2540的USB虚拟串口透传方案

    1.USB虚拟串口代替物理串口的可行性 首先,越来越多带USB接口的器件涌现出来,如带USB接口的单片机,或独立的USB接口器件,而且这些器件的成本已经很接近于使用RS232电平转换芯片所带来的成本. ...

  3. 基于STM32的虚拟示波器

    仓库地址 https://github.com/shuai132/ScopeMCU ScopeMCU Oscilloscope for MCU MCU: STM32F103C8Tx 需配合ScopeG ...

  4. 【单片机笔记】基于STM32F103C8的 USB 外部flash虚拟U盘

    学习stm32已经很长时间了,但是一直没有过多的学习stm32的USB部分,因为实际工作还是用的比较少.说起USB那就有的说了,因为USB的功能很强大,这里主要重点记录一下STM32的USB部分,这个 ...

  5. USB总线虚拟示波器,用高性能硬件模块,组合成多种仪器

    虚拟示波器HS系列是利用高性能的模块化硬件,结合高效灵活的软件来完成各种测试.测量和自动化的应用,并通过现有的计算机组合成多种测量仪器,完成你想要的各种测试. HS6 虚拟示波器 HS5 虚拟示波器 ...

  6. 虚拟示波器OSC802介绍、拆机

    介绍 外壳正面贴的标签明确告知了OSC802示波器的一些参数,2通道,-5V~+5V(此电平的话应该是探头在1x衰减档时刻的,如果配上标配的探头打在10x衰减档的话可以测量-50V~+50V电平),8 ...

  7. Jlink使用技巧之J-Scope虚拟示波器功能

    J-Link简介 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器.简单地说,是给一个JTAG协议转换盒.其连接到计算机用的是USB接口,而到目标板内部用的还是jtag协议. ...

  8. 基于Linux的USB 主/从设备之间通讯的三种方式

    转载:http://archive.eet-china.com/www.eet-china.com/ART_8800323770_617693_TA_eda530e7.HTM 随着简单易用的USB接口 ...

  9. stm32 usb 虚拟串口 相同_为什么说你要学习USB?(一)

    来源:公众号[鱼鹰谈单片机]作者:鱼鹰OspreyID   :emOsprey本篇笔记为 USB 系列教程第一篇,一共有多少篇鱼鹰心里也没底,鱼鹰不会因为篇幅多而停止,会尽可能的将 USB 讲透,让你 ...

最新文章

  1. (转)全文检索技术学习(一)——Lucene的介绍
  2. mysql注入单引号被过滤_证明过滤单引号的ORDER BY可以注入
  3. 64位linux系统安装32位应用程序
  4. DappSo周榜丨Dapp整体交易额呈下降趋势
  5. 【JZOJ4790】【NOIP2016提高A组模拟9.21】选数问题
  6. GlusterFS 部署和应用
  7. Excel函数实战技巧精粹(二)常用函数之VLOOKUP全解
  8. 电脑开机计算机配置,电脑开机显示正在配置更新请勿关闭计算机 重新启动之后,电脑里的数...
  9. AARRR模型是什么?
  10. 【unity 3d】--- 瞄准镜效果
  11. [论文笔记] Detection of Glottal Closure Instants from Speech Signals: CNN Method
  12. 运行时服务(二)、warnings模块
  13. 跑步听歌用哪种耳机更合适、推荐几款听歌跑步的耳机
  14. 2048游戏代码java总结_软件工程——Java版2048游戏学习报告
  15. 博弈论 —— 海盗分金
  16. 基于springboot jpa驾校管理系统源码
  17. JAVA Integer取值范围问题
  18. Linux 内存分配
  19. linux下思维导图软件,MindMaster|MindMaster思维导图软件 for Linux 6.3下载_太平洋下载中心...
  20. 1065: 人名查询

热门文章

  1. 考勤数据计算-Excel
  2. [BLE--GAP]GAP Service及其使用
  3. Perl语言开发工具(持续整理)
  4. c++ 复合命题打真值表
  5. GCC 编译使用动态链接库和静态链接库
  6. 什么样的企业需要关注远程接入
  7. 酷派童年童装×××间
  8. SQL 常用高级函数大全
  9. 【keras】python mnist_mlp.py下载数据集mnist.npz失败的解决
  10. ucos ii堆栈大小检测