硬汉嵌入式论坛

 找回密码
 立即注册
查看: 13932|回复: 14
收起左侧

[玩转DAPLINK] 第6篇:DAPLINK(CMSIS-DAP)的USB HID和WinUSB配置之WinUSB篇

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2020-9-2 11:32:44 | 显示全部楼层 |阅读模式
本帖前半部分和HID模式是一样,后半部分是WinUSB

配置USB,直接使用MDK的RTE开发环境配置即可,简单易用。

HID模式是配的CMSIS-DAP V1版,免驱
WinUSB模式是配的CMSIS-DAP V2版,需要一个inf驱动文件,Win10可以免驱。

USB配置注意事项
usb_config_0.c文件:
USB Device 0 - High-speed:  使能高速还是全速
Update Device Settings - Vendor ID  厂商ID
Update Device Settings - Product ID 专供Debug Unit调试单元
Update Device Settings - Device Release Number  更新版本
Update String Settings  - Manufacturer String  反映Debug Unit调试单元的厂家,必须与Vendor ID匹配
Update String Settings  - Product String  指示调试单元,请注意,“ CMSIS-DAP”必须是该字符串的一部分,以允许调试器进行标识(或USB复合设备的接口字符串的一部分)。

可选配置,每个调试单元可以提供唯一的序列号字符串 Serial Number String。如果未提供“ String Settings - Serial Number String”,则由于无法识别多个调试单元,因此只能将一个调试单元同时连接到主机。

强调一下:
1、固件配置时,USB设备设置高速/全速USB必须反映在DAP_config.h文件中。
2、String Settings - Product String 必须包含字符串“CMSIS-DAP”。调试器使用它来标识连接到主机的CMSIS-DAP兼容调试单元。





CMSIS-DAP V2使用WinUSB,速度更快。通过附加的USB端点可以支持SWO跟踪流。WinUSB配置要求 interface setting – Class Code: 0xFF (Vendor specific), Subclass: 0x00, Protocol code: 0x00 。根据配置,它使用以下USB端点,这些USB端点应按以下顺序在接口描述符中进行配置:

端点1:批量输出–用于从主机PC接收的命令。
端点2:批量输入-用于将响应发送到主机PC。
端点3:批量输入(可选)–用于流式传输SWO跟踪(如果启用了SWO_STREAM)。
要通过调试器识别CMSIS-DAP V2配置,必须使用以下WinUSB GUID:

{CDB3B5AD-293B-4663-AA36-1AAE46463776}

下图显示了USB自定义类的配置

MDK_USB_Custom.png

USB的inf驱动文件:

Windows 8和Windows 10不需要WinUSB驱动程序,前提是USB协议堆栈支持Microsoft描述符。CMSIS-DAP v2设备应配置为WCID(Windows兼容ID)设备,该设备向Windows系统提供额外的信息以促进自动驱动程序的安装。

对于Windows 7,如果PC连接到Internet,并且PC的“设备安装设置”设置为自动下载和安装设备的驱动程序,则CMSIS-DAP v2设备将自动安装。自动安装的设备将在“设备管理器”中的“通用串行总线”设备下显示为WinUsb设备。

如果没有可用的Internet连接,或者您希望设备在“设备管理器”下显示为不同的名称,则应提供一个.inf文件并对其进行签名以生成.cat文件。可从Microsoft下的主题为“设备驱动程序包的签名步骤”获得更多信息。

Windows 7主机提供以下CMSIS_DAP_v2.inf文件。

  1. [Version]
  2. Signature = "$Windows NT[        DISCUZ_CODE_0        ]quot;
  3. Class     = USBDevice
  4. ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
  5. Provider  = %ManufacturerName%
  6. DriverVer = 04/13/2016, 1.0.0.0
  7. CatalogFile.nt      = CMSIS_DAP_v2_x86.cat
  8. CatalogFile.ntx86   = CMSIS_DAP_v2_x86.cat
  9. CatalogFile.ntamd64 = CMSIS_DAP_v2_amd64.cat

  10. ; ========== Manufacturer/Models sections ===========

  11. [Manufacturer]
  12. %ManufacturerName% = Devices, NTx86, NTamd64

  13. [Devices.NTx86]
  14. %DeviceName% = USB_Install, USB\VID_c251&PID_f000

  15. [Devices.NTamd64]
  16. %DeviceName% = USB_Install, USB\VID_c251&PID_f000

  17. ; ========== Class definition ===========

  18. [ClassInstall32]
  19. AddReg = ClassInstall_AddReg

  20. [ClassInstall_AddReg]
  21. HKR,,,,%ClassName%
  22. HKR,,NoInstallClass,,1
  23. HKR,,IconPath,0x10000,"%%SystemRoot%%\System32\setupapi.dll,-20"
  24. HKR,,LowerLogoVersion,,5.2

  25. ; =================== Installation ===================

  26. [USB_Install]
  27. Include = winusb.inf
  28. Needs   = WINUSB.NT

  29. [USB_Install.Services]
  30. Include = winusb.inf
  31. Needs   = WINUSB.NT.Services

  32. [USB_Install.HW]
  33. AddReg  = Dev_AddReg

  34. [Dev_AddReg]
  35. HKR,,DeviceInterfaceGUIDs,0x10000,"{CDB3B5AD-293B-4663-AA36-1AAE46463776}"

  36. ; =================== Strings ===================

  37. [Strings]
  38. ClassName        = "Universal Serial Bus devices"
  39. ManufacturerName = "KEIL - Tools By ARM"
  40. DeviceName       = "CMSIS-DAP v2"
复制代码








回复

使用道具 举报

17

主题

248

回帖

299

积分

高级会员

积分
299
发表于 2020-9-2 12:17:38 | 显示全部楼层
winUSB这里应该还有一个字符串描述符要设置吧?我查阅了一些winUSB相关的内容,都有提到一个"支持 os 字符串描述符的内容"。microsoft也有相关文档:"针对 USB 设备的 Microsoft OS 描述符“提到。地址为:https://docs.microsoft.com/zh-cn ... ned-usb-descriptors
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2020-9-2 12:30:48 | 显示全部楼层
xieyang__ 发表于 2020-9-2 12:17
winUSB这里应该还有一个字符串描述符要设置吧?我查阅了一些winUSB相关的内容,都有提到一个"支持 os 字符 ...

主要有两处要配置
1.png

2.png
回复

使用道具 举报

17

主题

248

回帖

299

积分

高级会员

积分
299
发表于 2020-9-2 19:15:35 | 显示全部楼层
eric2013 发表于 2020-9-2 12:30
主要有两处要配置

回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2020-9-14 19:28:27 | 显示全部楼层
楼主,催更。。。 DAPLINK是目前对我而言最有用的功能了,什么时候能弄好啊??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2020-9-15 01:00:16 | 显示全部楼层
Nying 发表于 2020-9-14 19:28
楼主,催更。。。 DAPLINK是目前对我而言最有用的功能了,什么时候能弄好啊??

很快了,已经安排上了,下个月将率先带来V5, V6,V7的RL-USB教程,然后所有这些板子和H7-TOOL上都将配套一个CMSIS-DAP的例子。
回复

使用道具 举报

19

主题

62

回帖

119

积分

初级会员

积分
119
发表于 2021-9-14 00:05:46 | 显示全部楼层
@eric2013,请教几个问题:
1.WinUSB GUID:{CDB3B5AD-293B-4663-AA36-1AAE46463776} ,这个如何在win10上查看到?这个是不是首次插入的时候记录下来后续就不在更新的?
2.我已经按照上述教程调通winUSB驱动,并能正确收发,但是还没有移植DAP相关内容,这个时候在keil里没有找到DAP设备,这个是正常的现象嘛?还是说有问题没有能兼容识别成dap?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2021-9-14 08:22:07 | 显示全部楼层
mojinpan 发表于 2021-9-14 00:05
@eric2013,请教几个问题:
1.WinUSB GUID:{CDB3B5AD-293B-4663-AA36-1AAE46463776} ,这个如何在win10上查 ...

不正常,你再查查哪里的问题。
回复

使用道具 举报

0

主题

68

回帖

68

积分

初级会员

积分
68
发表于 2021-10-12 15:47:01 | 显示全部楼层
mark stm32 DAP  hid  winusb配置
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2021-10-13 10:51:48 | 显示全部楼层
mojinpan 发表于 2021-9-14 00:05
@eric2013,请教几个问题:
1.WinUSB GUID:{CDB3B5AD-293B-4663-AA36-1AAE46463776} ,这个如何在win10上查 ...

看一下 keil MDK Version??
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-8-1 16:18:44 | 显示全部楼层
大佬您好,看了您DAPLINK相关的帖子,我用官方开源的代码,keil只识别到了V1(HID),没有识别到V2(WinUsb),请问是需要改哪些地方吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2022-8-1 18:17:03 | 显示全部楼层
aaaaajkkk 发表于 2022-8-1 16:18
大佬您好,看了您DAPLINK相关的帖子,我用官方开源的代码,keil只识别到了V1(HID),没有识别到V2(WinUsb) ...

这个好像是USB的配置问题。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-8-1 18:26:40 | 显示全部楼层
eric2013 发表于 2022-8-1 18:17
这个好像是USB的配置问题。

官方那个和您这个有些不一样,代码太多太长了,不知道怎么修改
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
发表于 2022-12-14 14:10:10 | 显示全部楼层
感谢,这个很管用

Update String Settings  - Product String  指示调试单元,请注意,“ CMSIS-DAP”必须是该字符串的一部分,以允许调试器进行标识(或USB复合设备的接口字符串的一部分)。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-9-11 04:35:37 | 显示全部楼层
我也尝试用CMSIS-DAP官方例子为STM32F103配置了工程,但是无法被识别出来,像是RTX系统没有让DAP线程运行起来,而且USB库为封闭库,也不知道怎么弄了,后来自己用ST的USB官方库弄成WINUSB的,加入DAP,在对应端点回调函数里处理DAP的数据FIFO,改写DAP的请求和响应调用处理,没使用OS,在Main函数里的主循环顺序执行DAP,可以正常使用了,但是加入SWO后,如果不使用SWO_STREAM,单步调试时是正常的,但是全速运行后,像是被SWO卡死了一样,直到Keil 死机为止,开启SWO_STREAM流跟踪后,可以正常仿真,也能正常接收到printf信息,单步,全速都是正常的,但是会Keil底部状态条红色显示Trace:数据溢出,另外只要把SWO时钟频率即串口波特率,设置在2MHZ以上就会Keil底部状态条红色显示硬件溢出,比如3MHZ,4.5MHZ为STM32103最高的串口波特率,经研究,是串口读溢出,USART_Callback函数里的
if (event &  ARM_USART_EVENT_RX_OVERFLOW) {
    SetTraceError(DAP_SWO_BUFFER_OVERRUN);屏蔽掉这一句就没有这个提示了
  }
串口驱动直接搬了DAP例子工程里的,也不知道是不是驱动不太匹配STM32F103,估计重写这部分才能得到解决
应该是RX时RXNE还没取出接收到的数据就有新的数据接收到,这应该是对提取读到的数据的速度来不及取出,即RXNE标志还没清零时有新数据被接收到,但是Trace:数据溢出这个查不到原因,这像是串口读到的SWO数据太多了,然后通过IN端点发送到Keil 后判断为SWO数据溢出,反正很奇怪,不知道怎么解决,DAP部分却非常爽,IO模拟读写SWD下载速度感觉还可以,调试也是非常爽快的,USB用的是STM32_USB-FS-Device_Lib_V4.1.0标准库,对于STM32F103用这个库,查看手册,是没有FIFO,但是支持双缓冲端点,这相当于FIFO差不多了,批量端点,双缓冲,对于使用批量端点就得加入WINUSB描述符号,让WIN系统能识别为WINUSB设备,使用DAP专用的GUID,即可以被Keil 的DAP驱动识别到了,3个批量端点,OUT1 IN2 IN3,其中一对OUT和IN使用DAP数据收发专用的,一个IN是给SWO_STREAM返回数据使用,端点顺序可以是OUT1 IN2 IN3,即OUT1 IN2为DAP,IN3为SWO,也可以是IN1 OUT2 IN3,即IN1和OUT2为DAP,IN3为SWO,或者IN1 IN2 OUT3,即IN1和OUT3为DAP,IN2为SWO,但不可以是这样,IN1 IN2 OUT3,IN1 SWO ,IN2和OUT3为DAP,这样Keil 的DAP驱动无法识别到,接口是用IO模拟,但还是感觉很不错的速度,要是把SWD用SPI来处理8位和32位的数据读写应该可以更快,现在问题就是SWO无法处理好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 06:03 , Processed in 0.212549 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表