查看: 233|回复: 2

CMSIS DAP 制作简介

  [复制链接]

该用户从未签到

9

主题

3

回帖

107

积分

版主

积分
107
QQ
发表于 2024-12-28 11:28:14 | 显示全部楼层 |阅读模式
    许多 Arm Cortex 处理器都实现了 CoreSight 调试访问端口 (DAP),这使它们配备了强大的片上调试和跟踪功能。CMSIS-DAP 为嵌入式软件开发人员标准化并简化了对此功能的访问。
CMSIS-DAP 是一种协议规范和固件实现,可实现双方之间的标准化通信:
一. 基于 Arm Cortex 的处理器,用于执行嵌入式应用程序,
二. 在主机上运行的软件调试工具。
CMSIS-DAP 支持可以在独立的调试单元中实现,也可以作为集成在开发板上的组件实现。下图说明了这个概念:

    可以通过 CoreSight DAP 支持的物理接口与目标处理器连接:5 针 JTAG 或 2 针串行有线调试 (SWD) 接口。此外,它可以公开对 UART 的访问,以进行串行到 USB 通信。CMSIS-DAP 支持包含一个或多个 Arm Cortex 内核的目标设备。
    为了与调试程序通信,使用 USB 连接。广泛的 CMSIS-DAP 命令支持独立于实际探测的 CMSIS-DAP 的统一支持。
CMSIS-DAP 固件提供了 CMSIS-DAP 概念的模板实现,以及常用调试单元的几个示例项目。
可以使用验证调试单元操作中说明的脚本验证调试探针是否符合 CMSIS-DAP。

特性和优势:
  • 为调试器提供标准化接口。提供许多标准调试器的接口。
  • 访问所有 Cortex 处理器体系结构 (Cortex-A/R/M) 的 CoreSight 寄存器。
  • 通过 5 引脚 JTAG 或 2 引脚串行线调试 (SWD) 连接。
  • 支持多核调试。
  • 支持 Cortex-M 设备的串行线输出 (SWO)。
  • 易于部署,以调试基于 Cortex-M 微控制器的单元。
  • 调试单元可以集成在评估板上。
  • 使用 USB 批量传输可避免在主机 PC 上安装驱动程序。
  • 支持时间关键型 JTAG 或 SWD 命令执行。
  • 支持使用调试单元进行时间测量的 Test Domain Timer。
  • 支持 UART 通信端口,该端口可路由到 USB COM 端口(可选)或本机 CMSIS-DAP 命令(CMSIS-DAP 版本 2.1.0 中的新功能)。
  • 使用供应商特定的命令可以灵活定制。

访问 CMSIS-DAP
CMSIS-DAP 在 CMSIS-DAP GitHub 存储库中积极维护,该存储库包含 CMSIS-DAP 固件的完整来源以及本文档。下表说明了存储库结构。

目录 描述
📂  Documentation 包含此 CMSIS-DAP 文档源的文件夹
📂 Firmware  
包含 CMSIS-DAP 固件的文件夹
📄  LICENSE 许可协议 (Apache 2.0)
📄 README.md 存储库描述
有关 CMSIS 软件组件、工具和规范的概述,请参阅 CMSIS 文档。


该用户从未签到

9

主题

3

回帖

107

积分

版主

积分
107
QQ
 楼主| 发表于 2024-12-28 11:36:18 | 显示全部楼层
CMSIS-DAP 固件:
CMSIS-DAP 固件实现了 CMSIS-DAP 概念。固件在 CMSIS-DAP GitHub 存储库的源代码中提供,其中包含常用调试单元的多个参考实施。下表说明了目录结构。

文件夹和文件    描述
📂 Firmware 包含 CMSIS-DAP 固件的文件夹
📄 ┣ Config/DAP_config.h   
CMSIS-DAP 固件配置文件。请参阅配置 I/O 端口和调试单元。
📂 ┣ Examples CMSIS-DAP 固件适用于各种调试单元。请参阅 示例实现。
📂 ┣ Include
CMSIS-DAP 固件头文件。
📂 ┣ Source CMSIS-DAP 固件源代码。
📂 ┣ Template Keil MDK-Middleware 的接口模板。
📂 ┗Validation 验证项目。请参阅验证调试单元操作。

该实现由以下组件组成:
  • CMSIS-DAP 固件,使用 Cortex-M 器件的标准 I/O 引脚连接到 JTAG 或 SWD 引脚。
  • CMSIS-Driver USART 连接:
           Cortex-M 设备的 UART 连接到目标的 SWO 输出。
          从目标到 UART 的 Cortex-M 设备的附加 UART。
  • 使用以下方法连接到主机 USB 端口的 USB 堆栈:
         自定义类(用于 USB 批量端点),
         用于导出 USB COM 端口的 CDC ACM 类。
  • USB 设备中间件可能需要 CMSIS-RTOS 和 CMSIS-Driver USB。
   硬件要求:
    CMSIS-DAP 固件专为满足以下硬件要求的调试单元而设计:
  • 基于 Cortex-M 处理器的微控制器。
  • CPU 时钟:48 MHz 或更高;微控制器必须具有 SYSTICK 定时器。
  • RAM:8 KB 或更大。
  • Flash ROM:16 KB 或更大。
  • 全速或高速 USB 设备外围设备。
  • 7 个标准 I/O 引脚,用于 JTAG/SWD 接口。
  • 可选,2 个 I/O 引脚用于状态 LED。
  • 可选地,支持 SWO 捕获的 UART (Rx pin 连接到 SWO)。
  • (可选)一个 UART,用于支持额外的 UART 通信端口(用于 printf 调试)。
下图说明了 CMSIS-DAP 调试适配器的硬件接口。
   



   
   
   


该用户从未签到

9

主题

3

回帖

107

积分

版主

积分
107
QQ
 楼主| 发表于 2025-1-24 16:56:47 | 显示全部楼层

CMSIS - DAP配置信息简介

需要配置的信息:
(1)CMSIS-DAP调试单元中使用的Cortex-M处理器参数的定义。
(2)调试单元标识字符串(供应商,产品,序列号)。
(3)调试单元通信包大小。
(4)调试访问端口支持的模式和设置(JTAG / SWD和SWO)。
(5)有关已连接目标设备(用于评估板)的可选信息。

#define         CPU_CLOCK    72000000U
数值:CPU主频时钟
描述:调试单元中使用的Cortex-M MCU的处理器时钟。该值用于计算SWD / JTAG时钟速度。

#define         IO_PORT_WRITE_CYCLES    2U
数值:I/O时钟周期, 2=default,  1=Cortex-M0+ fast I/O
描述:I / O端口写操作时钟周期(主频)。此值用于计算Cortex-M MCU在调试单元中通过I / O端口写操作生成的SWD / JTAG时钟速度。大多数Cortex-M处理器需要2个处理器周期来进行I / O端口写操作。如果调试单元使用具有高速外围设备I / O的Cortex-M0 +处理器,则可能只需要1个处理器周期。

#define         DAP_SWD    1
数值:1 = available, 0 = not available
描述:表示在调试访问端口上使用SWD调试接口。此信息由命令DAP_Info作为Capabilities的一部分返回。

#define         DAP_JTAG    1
数值:1 = available, 0 = not available
描述:表示在调试端口上使用JTAG接口。此信息由命令DAP_Info作为Capabilities的一部分返回。

#define         DAP_JTAG_DEV_CNT    8U
数值:调试访问接口上外接的设备数
描述:在连接到调试访问端口的扫描链上配置JTAG设备的最大数量。此设置会影响调试单元的RAM要求。有效范围是1 ..255。

#define         DAP_DEFAULT_PORT    1U
数值:Default JTAG/SWJ Port Mode: 1 = SWD, 2 = JTAG
描述:调试访问端口上的默认通信模式,选择端口默认模式时,用于命令DAP_Connect。

#define         DAP_DEFAULT_SWJ_CLOCK    1000000U
数值:SWJ/JTAG时钟速度。
描述:SWD和JTAG模式的调试访问端口上的默认通信速度。用于初始化默认的SWD / JTAG时钟频率。可以使用命令DAP_SWJ_Clock覆盖此默认设置。

#define         DAP_PACKET_SIZE    512U
数值:数据包大小
描述:命令和响应数据的最大包大小。此配置设置用于优化与调试器的通信性能,并且取决于USB外设。对于全速USB HID或WinUSB,典型值是64,对于高速USB HID是1024,对于高速USB WinUSB是512。

#define         DAP_PACKET_COUNT    8U
数值:支持的数据包缓冲个数,即DAP_PACKET_SIZE的个数
描述:命令和响应数据的最大包缓冲区,此配置设置用于优化与调试器的通信性能,并且取决于USB外设。对于RAM或USB缓冲区有限的设备,可以减小设置(有效范围是1 .. 255)。

#define         SWO_UART    1
数值: 1 = available, 0 = not available
貌似:指示UART串行线输出(SWO)是否可用。此信息由命令DAP_Info作为Capabilities的一部分返回。

#define         SWO_UART_MAX_BAUDRATE    10000000U
数值:SWO波特率
描述:最大SWO UART波特率。

#define         SWO_MANCHESTER    0
数值:WO Manchester:  1 = available, 0 = not available
描述:指示曼彻斯特串行线输出(SWO)跟踪可用。此信息由命令DAP_Info作为Capabilities的一部分返回。

#define         SWO_BUFFER_SIZE    4096U
数值:SWO缓冲大小
描述:两个跟踪缓冲区大小。

#define         SWO_STREAM    0
数值:SWO Streaming Trace: 1 = available, 0 = not available
描述:SWO流跟踪。

#define         TIMESTAMP_CLOCK    100000000U
数值:时间戳
描述:测试域计时器的时钟频率。计时器值通过TIMESTAMP_GET返回。

#define         TARGET_DEVICE_FIXED    0
数值:Target Device: 1 = known, 0 = unknown
调试单元连接到固定的目标设备。调试单元可以是评估板的一部分,并且始终连接到固定的已知设备。在这种情况下,将存储设备供应商和设备名称字符串,调试器或IDE可以使用该字符串来配置设备参数。

#if TARGET_DEVICE_FIXED
#define TARGET_DEVICE_VENDOR    ""              ///< String indicating the Silicon Vendor
#define TARGET_DEVICE_NAME      ""              ///< String indicating the Target Device
#endif

厂商,产品ID和串行字符串获取代码如下:
/** Get Vendor ID string.
\param str Pointer to buffer to store the string.
\return String length.
*/
__STATIC_INLINE uint8_t DAP_GetVendorString (char *str) {
  (void)str;
  return (0U);
}

/** Get Product ID string.
\param str Pointer to buffer to store the string.
\return String length.
*/
__STATIC_INLINE uint8_t DAP_GetProductString (char *str) {
  (void)str;
  return (0U);
}

/** Get Serial Number string.
\param str Pointer to buffer to store the string.
\return String length.
*/
__STATIC_INLINE uint8_t DAP_GetSerNumString (char *str) {
  (void)str;
  return (0U);
}

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

本版积分规则

友情链接:

返回顶部 返回列表