[牛人杂谈] 如何自己制作一块CMSIS-DAP/DAPLink

[复制链接]
 楼主| wahahaheihei 发表于 2025-6-24 21:32 | 显示全部楼层 |阅读模式
硬件要求:

ARM Cortex-M 内核:CMSIS-DAP 协议本身是为 ARM Cortex 处理器设计的调试接口,因此单片机必须是 ARM Cortex-M 系列(如 M0, M0+, M3, M4, M23, M33 等)。新唐有丰富的 Cortex-M 产品线(如 M0 的 NUC100/200, M0+ 的 M251/M261, M4 的 M480 等),满足这个核心要求。

USB 接口:需要支持 USB Device 模式(全速 FS 或高速 HS)。大部分新唐 Cortex-M 单片机都集成了 USB 2.0 FS 控制器(如 NUC12x, NUC13x, M251, M480 等)。

足够的资源:需要足够的 Flash (>= 64KB) 和 RAM (>= 16KB) 来运行 DAPLink 固件及其协议栈。

GPIO:需要足够的 GPIO 引脚来实现 SWD/JTAG 接口(至少需要 SWCLK, SWDIO, nRESET, GND,可选 TDI, TDO, TCK, TMS 等)。

软件要求:

CMSIS-DAP/DAPLink 固件支持:这是最大的挑战。官方 DAPLink 仓库 (ARMmbed/DAPLink) 目前没有直接支持任何新唐单片机作为 HIC (Hardware Interface Chip) 的现成移植。

需要移植工作:你必须基于 DAPLink 的开源代码,为新唐选定的单片机型号进行移植。这涉及:

HAL (硬件抽象层) 适配:实现底层 GPIO 控制(SWD/JTAG 时序)、时钟、中断等。

USB 协议栈集成:将 DAPLink 的 USB HID (用于调试命令) 和 CDC (用于串口) 功能与新唐的 USB 驱动对接。新唐通常提供自己的 USB Device 库和示例。

Flash 编程算法:如果希望调试器支持通过它对新唐自身或其他 ARM 芯片进行烧录 (而不仅仅是调试),还需要实现或集成相应的 Flash 编程算法(这部分在 DAPLink 中通常独立于 HIC)。

构建系统适配:将移植的代码整合到 DAPLink 的构建系统(CMake)中。

 楼主| wahahaheihei 发表于 2025-6-24 21:33 | 显示全部楼层
选择具体型号: 挑选一款满足硬件要求且你熟悉的新唐 Cortex-M 单片机。推荐选择:

资源较丰富的型号(如 M480 系列),开发调试更从容。

有官方成熟 USB 库和示例的型号(新唐大部分带 USB 的型号都有)。

开发板易得的型号(如 NuMaker 系列开发板),方便前期验证。

研究 DAPLink 架构:

仔细阅读 DAPLink 的官方文档:https://armmbed.github.io/DAPLink/

研究 source/daplink 目录结构,重点关注:

interface:CMSIS-DAP 命令解析和响应核心。

hic_hal:硬件抽象层接口定义(你需要实现这个)。

projects.yaml:构建配置,需要添加你的新板子和 HIC。

学习现有 HIC 的实现(如 hic_hk32f103m, hic_stm32f103xb, hic_stm32f072xb, hic_rp2040)。它们是很好的参考模板。

搭建开发环境:

安装 Python (DAPLink 脚本依赖)。

安装 ARM GCC 工具链。

安装 CMake。

克隆 DAPLink 仓库:git clone https://github.com/ARMmbed/DAPLink.git

创建新 HIC 目标:

在 hic_hal 下创建一个新目录(如 hic_nuvoton_m480)。

根据 hic_hal/template 或参考现有 HIC 实现,创建必要的文件:

IO_Config.h:定义引脚映射(SWDIO, SWCLK, nRESET, LED, 按钮等)。

target_board.h/c:定义板级信息(名称、ID、是否提供目标板电源等)。

target_family.h:定义目标芯片系列。

gpio.h/c:实现 GPIO 的初始化、读写函数(特别是 SWDIO/SWCLK 的位操作)。

uart.h/c:如果支持串口桥接,实现 UART 驱动。

usb.h/c:核心难点。实现 USB 初始化、控制传输处理、HID 端点报告发送/接收、CDC 端点数据收发。需要调用新唐的 USB Device 库。

timing.h/c:实现延时函数(用于 SWD 时序)。

flash_manager.h/c:如果支持板载 Flash 编程(作为 MSD 拖拽烧录),需要实现 Flash 操作函数(擦除、编程)。否则可以先不实现或留空。

reset.h/c:实现复位控制(控制目标板的 nRESET 引脚)。

power.h/c:如果支持控制目标板电源,实现相关函数。

修改 projects.yaml,添加你的新板子和 HIC 配置。

集成新唐 SDK/USB 库:

将新唐官方提供的该型号单片机的标准外设库(特别是 USB Device 库)集成到你的 HIC 目录中,或者将其路径包含到构建系统中。

修改新唐 USB 库的底层(如中断处理、端点配置),使其适配 DAPLink 的 USB HID 和 CDC 需求。DAPLink 要求特定的报告描述符和端点配置。

编译与调试:

使用 CMake 和 progen 工具生成对应 IDE(如 Keil, IAR)或 Makefile 的项目。

编译固件。

使用另一个调试器(如 J-Link, ST-Link, 或另一个 DAPLink)烧录和调试你的新固件到新唐开发板上。

重点调试:

USB 枚举是否成功(电脑能否识别到 CMSIS-DAP/DAPLink 设备)。

HID 报告通信:能否响应基本的 CMSIS-DAP 命令(如 DAP_Info)。

SWD/JTAG 引脚操作:能否正确产生时钟和读写数据(用逻辑分析仪观察)。

nRESET 控制:能否正确复位目标板。

(可选)串口桥接功能。

(可选)MSD 拖拽烧录功能。

硬件设计:

一旦固件在开发板上调试稳定,可以设计一个专用 PCB,包含:

新唐单片机及其最小系统(时钟、复位、电源、去耦)。

USB 连接器(Type-C 或 Micro-B)。

标准的调试接口连接器(10-pin JTAG, 4-pin SWD)。

LED 状态指示。

可选:目标板供电控制电路(LDO 或开关)、电压选择跳线。
 楼主| wahahaheihei 发表于 2025-6-24 21:33 | 显示全部楼层
挑战与注意事项
移植工作量大: 这是最大的挑战。USB 协议栈集成和确保稳定的 SWD/JTAG 时序尤其需要耐心和调试技巧。需要对 USB 协议和 ARM 调试接口有较深理解。

时序要求: CMSIS-DAP 对 SWD/JTAG 操作的实时性有一定要求(尤其是自适应时钟模式)。需要优化 GPIO 操作速度,可能涉及汇编或紧密循环。

USB 稳定性: 确保 USB 通信可靠,不丢包,正确处理所有控制请求和端点中断。

社区支持有限: 不像 STM32 或 RP2040 那样有大量现成的 DAPLink 移植参考和社区讨论。遇到问题可能需要更深入地阅读 DAPLink 源码和新唐手册。

官方支持: 新唐官方不提供 DAPLink 移植支持,你需要完全自行完成或依赖社区(如果恰好有人做过)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

231

主题

3196

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部

231

主题

3196

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部