无法在STM32H753上写入TMC/ETF个寄存器

Cannot write TMC/ETF registers on STM32H753

此问题是 this one 的后续问题。

我尝试将 ETF 配置为循环模式,以便在 STM32H753 上出现严重错误时能够通过嵌入式软件读取执行跟踪。

我正在遵循 ARM 的跟踪内存控制器参考手册(第 2.2.2 节)中描述的算法

但我无法写入 ETF 寄存器:我​​通过将幻数 0xC5ACCE55 写入寄存器 ETF_LAR 来解锁 ETF 宏单元,但是当我读取 thez 寄存器时它们都是 0(通过调试器或 printf ) 并且当我写它们时它们保持在 0.

关于如何编写 ETF 寄存器有什么建议吗?

当使用 DAP(SWD 或 JTAG)进行访问时,作为与工具握手的一部分,调试子系统应该被启动。在自托管调试模式下,通常需要 clocks/power 的设备特定控制。

对于STM32H7,部件:

ETM 与核心在同一个 clock/power 域中,因此它通常是可见的。

CK_DBG_D1 clocks the trace components in the D1 power domain: System ROM table 2, CoreSight trace funnel, ETF, system CTI and TPIU. It is a gated version of the D1 domain system clock (CK_HCLK_D1).

自托管调试时钟和电源控制使用一组专用寄存器。

All the debug clocks (except DAPCLK) can be enabled and disabled by register bits in the DBGMCU.

实际上STM32H7文档中有一个错误:

几页之后:

我的理解是第二张图有误

我还必须使用 "Component base address (system bus)" 而不是 "component base address (debugger)"。双地址的概念非常混乱,例如 ETM 只有一个地址。

无论如何使用0x5C014000作为基地址,我可以read/write寄存器