# A80 实际MCU计时读取说明（尚无硬件回执）

适用状态：源码/模型候选，不是制造或上电许可。先完成工厂DFM、器件/电源核验、限流和关断引脚检查；本说明不安排采购、烧录或上电。原产品三款效果仍待验证。

计时位置：DWT CYCCNT在服务开始前读取，TIM2 1us值在校验时读取；窗口包含前台/SPI/配置/ADC处理、DMA消费和SWD流快照发布，以及结束时的DWT/TIM2可用性检查。记录最后/最大cycles与us。记录更新自身以及可选保留快照的写入发生在终点计数读取后，单次elapsed不包含这些尾部指令；连续忙态的下一次begin同时检查相邻起点的DWT与TIM2差值，因而把尾部写入、主循环和中断间隔纳入30us/3840cycle约束。idle后的正常WFI不算服务间隔超时。未屏蔽IRQ；实际计数应包含在窗口内发生的中断，但仍需实测确认。

初始化只置CoreDebug DEMCR.TRCENA及DWT CTRL.CYCCNTENA，保留现有计数与其他trace设置，不写SWO/ITM或比较器，不清零CYCCNT。NOCYCCNT、使能失败、32次有限屏障中计数不前进均拒绝。运行中计数/时基失效、零cycle、窗口>30us或>3840cycle、忙态间隔超限锁定失败。32位差值允许短窗口内的正常回绕；不提供独立硬件看门狗，长时间debug暂停/CPU死循环与整个32位周期的别名不是该前台监测能够证明已覆盖的风险。

默认main只测量关断态空闲服务；不调用DRV配置begin、ADC begin、DMA start或任何FOC/输出使能。默认窗口通过不能证明连续采样、电机效果或制造可用。active_windows包含配置/诊断等所有忙态，也不能单独证明STREAM。

读取两种记录：

1. live `drill_debug_timing` 为64字节，内部epoch在服务期间为奇数，整段服务判定后才为偶数。一次读取需要用两个相同偶数epoch夹住live记录以及流快照，拒绝fault或flags缺少completed validity。高速连续模式下SWD读速可能无法满足相同epoch，不得使用变化中的数据或通过暂停MCU来宣称连续时序合格。
2. 实用的保留快照：向 `drill_debug_timing_capture_request` 写1，等待它回0且 `drill_debug_timing_capture_epoch`变成新的偶数，然后读取104字节的 `drill_debug_timing_capture`，并再次读capture epoch。两次值须相同且为偶数。这个快照保留到下一次请求，即使live继续变化也可以慢速读取。只允许一个未完成请求，等待完成后再写1；写其他值不触发任何操作。请求只复制诊断记录，不配置ADC/SPI/电机、不复位故障。计时故障在完成关断后会强制保存最终故障快照。

104字节布局：前64字节dt_record，后24字节du_sample，再后4个u32分别为dual_state、config_state、stream_received、stream_epoch。u32均little-endian。du_sample的IA/IB/timer为u16，偏移8/12/16为armed_us/observed_us/sequence，偏移20为calibration_verified；padding不能作为信息。具体符号地址应从当前ELF的nm或调试符号获取，不能沿用旧版本地址。

示例（文件必须来自实际读取，当前没有此文件）：

```
python3 decode_timing.py capture.bin --epoch-before 2 --epoch-after 2
```

解码器仅检查结构与所提供epoch值的一致性，不验证来源、仪器、设备序列号或真实读操作；输出始终physical_validation=false、actual_hardware_source_proven=false、continuous_20kHz_qualified=false。需要另外保存当前固件bin SHA、PCB版本、设备/仪器编号、供电/限流、负载、时钟实测、调试是否halt、窗口时长、IRQ负载，以及逻辑分析仪ADC/TIM触发/连续进度证据。

采样窗口需要同时满足timing无fault/有效、dual_state=9(STREAM)、config_state=5(READY)、stream_received持续增加、stream_epoch稳定偶数，以及实际IA/IB电压/标定/同步核验。一个保留快照不是长时间连续采样证明；应多次非暂停请求，比较计数/最大窗口，并测真实触发与DMA时序。calibration_verified当前始终false，不能把raw计数当成电流或驱动许可。

软件状态变化只允许通过已定义bench API及正常服务调用，在工程师测得供电与驱动关断满足要求后逐项核验返回值。不得用SWD直接写DU_STREAM/DC_READY、伪造DMA标志、强制counter profile或把qualified参数当成实际测量。这些操作只出现在明确标记的主机/仿真夹具中，不能用于实物验收。

故障快照可能包含服务期间更新过的流数据，但timing fault/validity会将整个窗口标为无效。禁止仅凭stream_received或stream_epoch接受它。硬件电平与停机延迟仍需台架实测；当前没有FOC，任何计时通过都不授予电机运行、充电或量产许可。

依据：[Arm CMSIS Cortex-M4寄存器定义](https://github.com/ARM-software/CMSIS_5/blob/develop/CMSIS/Core/Include/core_cm4.h) 的DWT CTRL/CYCCNT/NOCYCCNT与CoreDebug DEMCR.TRCENA。CMSIS结构定义不是G431实测结果。
