eric2013 发表于 2020-9-2 11:32:44

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

本帖前半部分和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兼容调试单元。

https://img.anfulai.cn/dz/attachment/forum/202009/01/121732b1lxeg4vo70vee61.png

static/image/hrline/4.gif

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自定义类的配置



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文件。


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

; ========== Manufacturer/Models sections ===========


%ManufacturerName% = Devices, NTx86, NTamd64


%DeviceName% = USB_Install, USB\VID_c251&PID_f000


%DeviceName% = USB_Install, USB\VID_c251&PID_f000

; ========== Class definition ===========


AddReg = ClassInstall_AddReg


HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,0x10000,"%%SystemRoot%%\System32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================


Include = winusb.inf
Needs   = WINUSB.NT


Include = winusb.inf
Needs   = WINUSB.NT.Services


AddReg= Dev_AddReg


HKR,,DeviceInterfaceGUIDs,0x10000,"{CDB3B5AD-293B-4663-AA36-1AAE46463776}"

; =================== Strings ===================


ClassName      = "Universal Serial Bus devices"
ManufacturerName = "KEIL - Tools By ARM"
DeviceName       = "CMSIS-DAP v2"







xieyang__ 发表于 2020-9-2 12:17:38

winUSB这里应该还有一个字符串描述符要设置吧?我查阅了一些winUSB相关的内容,都有提到一个"支持 os 字符串描述符的内容"。microsoft也有相关文档:"针对 USB 设备的 Microsoft OS 描述符“提到。地址为:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors

eric2013 发表于 2020-9-2 12:30:48

xieyang__ 发表于 2020-9-2 12:17
winUSB这里应该还有一个字符串描述符要设置吧?我查阅了一些winUSB相关的内容,都有提到一个"支持 os 字符 ...
主要有两处要配置



xieyang__ 发表于 2020-9-2 19:15:35

eric2013 发表于 2020-9-2 12:30
主要有两处要配置

{:33:}{:33:}{:33:}{:33:}

Nying 发表于 2020-9-14 19:28:27

楼主,催更。。。:D DAPLINK是目前对我而言最有用的功能了,什么时候能弄好啊??

eric2013 发表于 2020-9-15 01:00:16

Nying 发表于 2020-9-14 19:28
楼主,催更。。。 DAPLINK是目前对我而言最有用的功能了,什么时候能弄好啊??

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

mojinpan 发表于 2021-9-14 00:05:46

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

eric2013 发表于 2021-9-14 08:22:07

mojinpan 发表于 2021-9-14 00:05
@eric2013,请教几个问题:
1.WinUSB GUID:{CDB3B5AD-293B-4663-AA36-1AAE46463776} ,这个如何在win10上查 ...

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

wander 发表于 2021-10-12 15:47:01

mark stm32 DAPhidwinusb配置

borland6538 发表于 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??

aaaaajkkk 发表于 2022-8-1 16:18:44

大佬您好,看了您DAPLINK相关的帖子,我用官方开源的代码,keil只识别到了V1(HID),没有识别到V2(WinUsb),请问是需要改哪些地方吗?

eric2013 发表于 2022-8-1 18:17:03

aaaaajkkk 发表于 2022-8-1 16:18
大佬您好,看了您DAPLINK相关的帖子,我用官方开源的代码,keil只识别到了V1(HID),没有识别到V2(WinUsb) ...

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

aaaaajkkk 发表于 2022-8-1 18:26:40

eric2013 发表于 2022-8-1 18:17
这个好像是USB的配置问题。

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

sunwindsz 发表于 2022-12-14 14:10:10

感谢,这个很管用:)

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

dbxzjq 发表于 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无法处理好
页: [1]
查看完整版本: 第6篇:DAPLINK(CMSIS-DAP)的USB HID和WinUSB配置之WinUSB篇