您尚未登录。

楼主 # 2023-01-26 20:23:54

abgelehnt
会员
注册时间: 2022-05-01
已发帖子: 10
积分: 110

Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

目前软件部分已经完全编写完成,硬件部分由于手边没有电烙铁暂时作罢,等能进实验室了再说。硬件部分完全兼容@posystorage大佬的硬件,大伙可以先用大佬的硬件方案试一试。

项目的代码、预编译固件获取路径:GitHub:abgelehnt/Tiny-DAPLink

本项目在@posystorage 开源CH551/2实现的汇编优化高速DAP-Link (CMSIS-DAP v2)和@ljbfly CH552 版 CMSIS-DAP v2的基础上改进而来。

调试器的呈现方式依然为通用调试器和板载调试器,且以板载调试器为主。

通用调试器:使用5V供电,主频24Mhz。下载速度未经过详细测试,但是至少能比FullSpeed版本的CMSIS-DAP v1快。下载STM32F103C8T6需要6.5秒。硬件方面:由于CH552 所需外围电路简单,芯片体积也较小,调试器可以做得非常小。硬件主要构成为:CH552(¥2.3)、电平转换芯片SN74LVC1T45*2(¥2.8)、阻容及USB座(¥0.5)。可以说是相当便宜了。

板载调试器:使用3.3V供电,主频16Mhz。在16Mhz主频下串口不支持115200波特率,不过在板载调试器上问题倒也不是很大。如果是通用调试器不支持115200波特率的话,就显得有些鸡肋了。硬件方面:带调试器的小系统板相比不带调试器的只需要增加一个CH552、一个电容、一个USB接口而已。Tiny-DAPLink也因此得名。

代码基本的大框架没有动,不过细节部分改进甚多:

1. 串口优化
我认为串口完美可用的标志:回环测试正确,且连续发送时逻辑分析仪不会看到IDLE信号。

IDLE信号:通信线上在一个字节的时间内没有再接收到数据就会出现IDLE信号,连续发送时出现IDLE信号会导致类似HAL_UARTEx_ReceiveToIdle的功能无法正常使用。

我的代码使用ping-pong buffer的思想,利用双缓冲区进行数据搬移,相比于@posystorage的循环队列方案省去了一次性的大量数据搬移工作,把每次串口/USB收到数据后的响应时间优化为常数,解决了原版连续发送且收发并用的情况下极偶发的丢数据情况(平均200K数据丢几十字节)。现版本串口在115200波特率下完美可用。

在500000波特率下,我的版本与原版本都有丢数据情况,我的版本丢失的数据量较小,但是连续传输速度大幅满于原版本,原因:一次性的大量数据搬移工作在总响应时长上占更大优势。

2. SWD速度优化
@posystorage大佬的版本我使用下来,IO版本无法开启调试,SPI版本我甚至一次都没有下载成功过。

SPI版本的兼容性问题原因:在ADIv5手册P122中,

When the target samples SWDIO, sampling is performed on the rising edge of SWCLK. When the target drives SWDIO, or stops driving it, signal changes are performed on the rising edge of SWCLK.

也就是说在SPI读时应该使用模式2,SPI写时应该使用模式3。大佬可能没有注意到这点。不过CH552并没有模式2,所以可以使用SPI优化的部分会低于87%。

@ljbfly大佬的版本除了IO模式以外没有太大的问题,只是时序看起来占空比较高。

由于我对汇编实在是一窍不通,使用汇编进行时序刷写时总会有一些奇形怪状的问题,迫不得已才放弃了大佬现成的汇编代码。在我的版本中,只有8bit command和32bit WDATA使用SPI刷写,其余均用IO刷写。对于占空比看起来高的问题,我直接加了一堆nop粗暴解决。单次刷写消耗的时间在两位大佬之间。

3. 更正配置描述符
原先的配置描述符感觉属于“我也不知道为什么 但是它就是能跑”的状态,他多了一条接口关联描述符,并且使用了端点4。但是在USB中断中,端点4完全未被使用过。

它还存在一个偶发bug:烧写失败有可能导致Keil再也找不到CMSIS-DAP,解决方案为:设备管理器中找到此设备->卸载设备->重新拔插U盘。

我的版本空出了端点4,并且(可能)解决了这个偶发bug。

4. 中国大学式无意义创新点:新增电容键盘
此功能需要搭配特定的硬件电路才能实现。

此功能可以映射键盘上的任意一个按键,并在触摸调试器特定位置时按下一次此按键。

想象一下这样一个场景:你刚写完代码,点击编译,然后去摆弄硬件:连接杜邦线/插上排阵/开启设备电源,摆弄完硬件恰好编译完成,你可以触碰一下调试器的某处便捷的开始下载,整个过程快速而又优雅。

新增此功能是因为Keil没有类似编译后下载的按键,就会麻烦一些。

在串口工具中输入:DAT+KEY=41(大小写敏感)打开电容键盘并映射为F8。

也可以将电容键盘映射为其他按键USB HID键盘键值表

输入DAT+KEY=FF关闭电容键盘。

5. 开启睡眠功能
一些电脑在睡眠/休眠/关机状态下不会关闭USB的5V供电,不过调试器的功耗也无关痛痒就是了。

6. 唯一序列号
设备使用芯片唯一ID作为序列号,这样就可以同时插多个调试器了。

单次刷写时占空比情况

下次写东西不再用51了,在对性能有哪怕一点点追求的地方用51都是一种错误。

离线

#1 2023-01-26 22:05:26

XIVN1987
会员
注册时间: 2019-08-30
已发帖子: 245
积分: 306.5

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

CH32V203F8 3块钱,可以跑到 144MHz,也支持 crystall-less USB。。

如果不想用 RISC-V 的话,,AT32F425F8 3.75元,Cortex-M4 内核,96MHz,,同样支持 crystall-less USB。。

原理图 & PCB:https://oshwhub.com/xivn1987/daplink
源代码:https://github.com/XIVN1987/DAPLink

离线

#2 2023-01-27 09:32:21

Chin
会员
注册时间: 2020-10-19
已发帖子: 61
积分: 39

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

@abgelehnt
51不能调试有点不爽

离线

#3 2023-01-28 13:54:10

IOsetting
会员
注册时间: 2022-05-08
已发帖子: 59
积分: 65

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

@XIVN1987
AT32F425 手册上好像没有USB?

离线

#4 2023-01-28 14:05:50

IOsetting
会员
注册时间: 2022-05-08
已发帖子: 59
积分: 65

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

@XIVN1987
AT32F425 是不是换成 AT32F415 也可以? 415也带USB

离线

#5 2023-01-28 17:45:46

XIVN1987
会员
注册时间: 2019-08-30
已发帖子: 245
积分: 306.5

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

IOsetting 说:

@XIVN1987
AT32F425 是不是换成 AT32F415 也可以? 415也带USB

415 的 USB 不支持 Crystal-less,,电路不如 425 简单。。

另外 415 没有 SSOP20 封装,,最小封装是 QFN32,,感觉不如 SSOP20 焊接简单。。

离线

#6 2023-01-29 00:48:27

IOsetting
会员
注册时间: 2022-05-08
已发帖子: 59
积分: 65

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

XIVN1987 说:
IOsetting 说:

@XIVN1987
AT32F425 是不是换成 AT32F415 也可以? 415也带USB

415 的 USB 不支持 Crystal-less,,电路不如 425 简单。。

415也支持的吧? 手册里写的有专用的内建48MHz时钟

AT32F415内置1个集成了收发器的OTG全速(12 Mb/s)设备和主机模式控制模块。OTGFS模块兼
容USB2.0和OTG1.3协议。它具有可由软件配置的端点设置,并支持挂起/恢复机制。OTGFS模块专
用的48 MHz时钟由内部主PLL产生。

离线

#7 2023-01-29 09:49:39

XIVN1987
会员
注册时间: 2019-08-30
已发帖子: 245
积分: 306.5

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

@IOsetting

425 有个外设叫“HICK 自动时钟校准(ACC)”,它根据USB主机的SOF包将425的HICK时钟校准到0.25%的时钟精度,,满足USBFS通信要求,,415根本没有这个模块

你看下425的数据手册中“内部时钟源特性”章节,HICK 在 ACC校准条件下精度标的是0.25%,,415数据手册上标注的HICK时钟精度最高也就1%,,不满足USBFS对时钟精度的要求

离线

#8 2023-01-29 10:44:40

IOsetting
会员
注册时间: 2022-05-08
已发帖子: 59
积分: 65

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

@XIVN1987
明白了, 多谢

离线

#9 2023-01-29 21:15:20

Timaker
会员
注册时间: 2020-05-18
已发帖子: 63
积分: 41.5

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

支持调试吗?可以设置多少个断点?

离线

#10 2024-05-20 12:38:10

posystorage
会员
注册时间: 2018-05-06
已发帖子: 169
积分: 560

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

感谢指出问题,回头我改改代码

离线

#11 2024-05-20 12:38:43

posystorage
会员
注册时间: 2018-05-06
已发帖子: 169
积分: 560

Re: Tiny-DAPLink:开源CH552实现的CMSIS-DAP v2升级版

Timaker 说:

支持调试吗?可以设置多少个断点?

这个和daplink无关,看具体被调试的目标芯片

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn