CW32F030调试接口(DBG)全解析
一.CW32F030C8T6 调试接口(DBG)1.1概述
CW32x030 的内核为 ARM® Cortex®-M0+,内核内置 DAP 硬件调试模块,支持 SWD 模式调试。硬件调试模块可实 现在取指 ( 指令断点 ) 或访问数据 ( 数据断点 ) 时挂起,程序停止运行,调试器可通过 DAP 对 M0 的内核状态和 片内的外设状态及存储单元进行查询;且内核和外设可以被复原,程序继续执行。
当使用调试仿真工具通过 SWD 接口连接到 CW32x030,进入调试模式,通过芯片内核中的 DAP 硬件调试模块进 行调试操作。
1.2串行线调试端口
SWD 使用 CW 专用调试器或通用调试仿真工具的 SWD 接口和目标芯片内部的 DAP 调试模块连接,通过包传输协议进 行数据交换,实现调试操作。SWD 方式是 2 线串行通信,包括一条时钟线 SWCLK 和一条双向数据线 SWDIO。 如下图所示:
1.3功能框图
1.4 调试通信协议
调试器和目标芯片的 DAP 调试模块通过 SWD 包传输协议进行通信,包传输协议为 2 线同步串行协议,使用 SWCLK 时钟信号和 SWDIO 数据信号:
SWCLK 为单向时钟信号,由调试器输出给目标芯片。
SWDIO 为双向数据信号,由调试器和目标芯片双向分时驱动。
协议定义了长度为一个 SWCLK 周期的收发端转换时间,在收发端转换时间内,调试器和目标芯片都不驱动 SWDIO,SWDIO 由上拉电阻上拉到高电平。
SWDIO 信号线上传输数据时,遵循最低位 LSB 最先传输,最高位 MSB 最后传输原则。
通过包传输协议,调试器可以对目标芯片 DAP 调试模块内的 DP 寄存器和 AP 寄存器进行读写访问,下文中写作 SW-DP 和 SW-AP。
1.5 传输协议格式
DAP 调试模块包含有 DP 调试端口寄存器和 AP 存取端口寄存器,调试器和目标芯片的 DAP 调试模块进行通信实 际上就是对 DP 寄存器和 AP 寄存器的读写操作。
传输通信帧通常包含 3 个字段:
包请求 长度为 8bit,调试器到目标芯片。
响应 长度为 3bit;目标芯片到调试器。
数据传输 长度为 33bit,目标芯片到调试器或者调试器到目标芯片,可选字段。
包请求各位的功能定义如下:
1.6 SW-DP 状态机
SW-DP 内部有一个 ID CODE 寄存器,固定值为 0x0BB11477(为 ARM 公司 Cortex®-M0+ 识别码)。在采用 SWD 包协议进行目标寄存器读写之前,必须先读取此 ID 号以激活目标芯片的 SW-DP 逻辑,否则目标芯片的 SW-DP 的状态机不工作。 操作步骤如下:
步骤 1:在上电复位后或者 SWDIO 线路处于高电平超过 50 个周期后,SW-DP 状态机进入复位状态;
步骤 2:进入复位状态后,保持 SWDIO 线路处于低电平至少 2 个周期,SW-DP 状态机进入空闲状态;
步骤 3:进入空闲状态后,对 DP-SW 的 ID CODE 寄存器执行读访问;
注意: 如果不执行此操作,则目标板在后续的包通信响应阶段,会发送 FAULT 响应。
步骤 4:按照包协议对需要访问的寄存器进行读写访问。
1.7 SW-DP 和 SW-AP 的读写访问
SW-DP/SW-DP 的写访问 调试器接收到 ACK 后,经过 1 个时钟周期的转换时间后,必须立即发送数据。
SW-DP 的读访问
‒ 当目标芯片已做好数据发送准备,则发送 OK 响应,然后立即发送数据。
‒ 当目标芯片 DAP 未做好数据发送准备,则发送 WAIT 响应结束本次通信。
‒ 当目标芯片 DAP 状态错误时,发送 FAULT 响应,结束本次通信。
SW-AP 的读访问 对 AP 的读访问为寄存式,即本次读 AP 操作并不能返回所需要的结果,而是等到下次 AP 操作才能返回本次 读操作的结果。如果要执行的下次访问不是 AP 读访问操作,则必须读取 DP-RDBUFF 寄存器来获取本次读操 作的结果。
每次进行 SW-AP 读访问或 DP-RDBUFF 读请求时都会更新 M0 内核的调试控制 / 状态寄存器 DP-CTRL/STAT 寄存器的 READOK 标志位,以指示 AP 读访问是否成功。
SW-DP 有写缓冲区(用于 SW-DP 或 SW-AP 写入),在读写操作未完成时,可以接受下一个写入操作。如 果 SW-DP 的写缓冲区已满,则芯片 SW-DP 逻辑会回复 WAIT 响应以通知主机暂缓操作。特殊操作除外,如 IDCODE 读取、DP-CTRL/STAT 读取或 ABORT 写入操作,这几项操作在写缓冲区已满时也会被接受。
由于 SWCLK 和 HCLK 不是同步时钟,属于异步时钟域,因此写操作后(数据传输的奇偶校验位后)还需要 两个额外的 SWCLK 周期,以保证写入操作生效。在主机驱动这 2 个 SWCLK 周期时应将 SWDIO 线路驱动为 低电平(空闲状态)。在对 DP-CTRL/STAT 寄存器写入上电请
1.8 SW-DP 寄存器
1.9 SW-AP 寄存器
当 APnDP 为 1 时,访问 AP 寄存器。由于 SW-AP 寄存器较多,需要将 A 和 SW-DP 选择寄存器 SELECT 的 APBANKSEL 位域值组合才能对 SW-AP 寄存器进行唯一寻址。
本文不对 SW-AP 逐一赘述,仅介绍一个常用的 IDR 公共寄存器(地址为 0xFC),如下表所示:
1.10 内核调试
1.11 断点单元 BPU
Cortex®-M0+ BPU 断点单元提供四个断点寄存器,实现了基于 PC 指针的断点功能。 有关 BPU CoreSight 组件的标识寄存器和访问类型的更多信息,请参阅《ARMv6-M Architecture Reference Manual》和 ARM® CoreSight 组件技术参考手册。
1.12 数据观察点与跟踪 DWT
Cortex®-M0+ DWT 提供了两个观察点寄存器组。实现如下功能:
设置数据监视点 数据或者外设的地址可以被标记为监视变量,对该地址的访问会产生调试事件,会暂停程序执行。
ARMv6-M 中可选的 DWT 程序计数器采样寄存器 (DWT_PCSR) 功能。允许调试程序定期采样 PC 指针,提供 粗略分析,无需停止处理器。
1.13 调试组件 DBG
1.14 注意事项
CW32x030 在调试期间需要使用 HCLK 进行调试连接,不允许在调试会话期间关闭 HCLK,因此在调试环境下执 行 WFI,会关闭内核 HCLK,导致调试功能失效。
如目标芯片当前已经进入深度休眠模式,此时 DAP 硬件调试模块不工作,调试器无法和目标芯片的 DAP 硬件调 试模块进行连接,无法实现调试功能。
用户必须保证芯片处于运行模式(Active mode)或休眠模式(Sleep mode)才能使用调试器进行调试。
因此建议用户在合并深度休眠的相关代码前,先完成非深度休眠模式下设备的所有功能调试,最后再进行深度休 眠相关代码的调试。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43260261/article/details/149168358
页:
[1]