XIVN1987 发表于 2022-12-6 23:45

基于AT32F425移植DAPLink,已经打通,源码分享。

本帖最后由 muyichuan2012 于 2024-7-5 09:27 编辑

AT32F425支持Crystal-less USB,,很适合用来做DAPLink。。所以移植了下,,代码在此:https://github.com/XIVN1987/DAPLink

现在基于HID的SWD调试器功能已经调通了,,基于CDC的虚拟串口通过串口助手往外发数据也没问题,,就是虚拟串口接收不到数据。。

对比了官方的 virtual_comport 例程,,实在找不出区别在哪里,,哪位熟悉AT32 USB的大神帮忙看下,,谢谢。。
--问题已解决,请看6楼。
有的群友反应GitHub访问速度慢,因此有下载一份源码放附件

XIVN1987 发表于 2023-1-3 12:29



原理图和 PCB 文件:https://oshwhub.com/xivn1987/daplink

没有晶振,,非常简介。。

muyichuan2012 发表于 2022-12-7 13:20

安装雅特力官网提供的串口驱动试试 https://www.arterytek.com/download/USB_Tool_Driver/VirtualCOM_DriverInstall_V1.0.31.zip

XIVN1987 发表于 2022-12-7 14:29


CDC是免驱的

XIVN1987 发表于 2022-12-21 23:31



看起来是AT32F425 USB的0x83端点给上位机的IN包反馈不正确,,前面反馈NAK是正常的,,但是执行 usbd_ept_send(&Otg.dev, CDC_BULK_IN_EP, buff, len); 后 0x83 端点反馈就不正常了,,不知道什么情况下USB会对IN包给出这种反馈。。


XIVN1987 发表于 2022-12-29 21:30

本帖最后由 ArterySW 于 2022-12-30 09:10 编辑


问题解决了,,是因为我修改了 usb_conf.h,,从
#define USBD_RX_SIZE      128
#define USBD_EP0_TX_SIZE24
#define USBD_EP1_TX_SIZE20
#define USBD_EP2_TX_SIZE20
#define USBD_EP3_TX_SIZE20
#define USBD_EP4_TX_SIZE20
#define USBD_EP5_TX_SIZE20
#define USBD_EP6_TX_SIZE20
#define USBD_EP7_TX_SIZE20修改成了
#define USBD_RX_SIZE      128
#define USBD_EP0_TX_SIZE64
#define USBD_EP1_TX_SIZE64
#define USBD_EP2_TX_SIZE64
#define USBD_EP3_TX_SIZE64
#define USBD_EP4_TX_SIZE20
#define USBD_EP5_TX_SIZE20
#define USBD_EP6_TX_SIZE20
#define USBD_EP7_TX_SIZE20

我以为这里的大小单位是字节,,原来是字。。

基于 AT32F425F8 的 DAPLink 已调通,,不需要晶振,,电路更简洁,,代码在此:https://github.com/XIVN1987/DAPLink


XIVN1987 发表于 2022-12-30 09:16


竟然获得了现金打赏,,感谢老板

adolphcocker 发表于 2023-1-5 12:44

直接printf不好用吗?            

ingramward 发表于 2023-1-5 12:52

虚拟串口有问题吗?            

XIVN1987 发表于 2023-1-5 13:04

ingramward 发表于 2023-1-5 12:52
虚拟串口有问题吗?

没问题。。

adolphcocker 发表于 2023-1-5 13:49

是不是程序进入了中断,不能执行后续的程序了。

XIVN1987 发表于 2023-1-5 13:51

adolphcocker 发表于 2023-1-5 13:49
是不是程序进入了中断,不能执行后续的程序了。

看6楼,,问题解决了。。

minzisc 发表于 2023-1-6 12:36

官网不是有源代码可以参考的吗            

tifmill 发表于 2023-1-6 17:59

你的虚拟串口是否打开了 ?            

beacherblack 发表于 2023-1-6 19:04

下载程序以后,建议重新插拔一下。

timfordlare 发表于 2023-1-6 20:05

这个没有移植过。            

muyichuan2012 发表于 2023-1-10 09:12

大家看6楼,问题已经解决了,已经把电路图和源码分享给大家。

shenxiaolin 发表于 2023-2-6 16:18

非常棒!!!感谢分享,正好想要研究一下

wziyi 发表于 2023-2-14 21:11

SWDd_host.c 是干什么的呢

XIVN1987 发表于 2023-2-15 00:23

本帖最后由 muyichuan2012 于 2023-5-16 15:21 编辑

wziyi 发表于 2023-2-14 21:11
SWDd_host.c 是干什么的呢


上位机通过 USB 发送命令给 DAPLink,DAPLink 将命令转换成 SWD 波形发送到目标芯片,从而完成对目标芯片的读写控制。。

pyocd 是一个开源的 DAPLink 上位机(库),其最底层的 read_dp()、write_dp()、read_ap()、write_ap() 四个函数就是通过 USB 向 DAPLink 发送需要其通过 SWD 接口发出的数据,从而实现对目标芯片 DP、AP 寄存器的读写,,其他所有高层函数都是通过调用这四个函数实现的

SWD_host.c 就相当于在 DAPLink 主控本地实现的 pyocd(DAPLink 上位机库),,因为是在本地实现的,,因此它就不需要通过 USB 给 DAPLink 发送命令了,,而是直接调用 SWD 的 swd_transfer_retry() 函数,,把需要通过 SWD 接口发出的数据作为参数传递给该函数即可。。当然,它也实现了 swd_read_dp()、swd_write_dp()、swd_read_ap()、swd_write_ap() 四个最关键的底层函数

https://github.com/XIVN1987/MCUProg 通过 pyocd 控制 DAPLink(DAP.c、SW_DP.c)实现对目标芯片在线烧写

https://github.com/XIVN1987/DAPProg 通过 SWD_host.c 控制 DAPLink(DAP.c、SW_DP.c)实现对目标芯片离线烧写
页: [1] 2 3 4 5
查看完整版本: 基于AT32F425移植DAPLink,已经打通,源码分享。