U575 跨 Stop2 的有限 SRAM4 复制¶
本文描述已实现的 STM32U575ZIT6Q TZEN0 裸机有限复制合同。有针对性的软件模型、独立源码审查、一个选定公共 Cortex-M33 复位镜像链接及一个搬移安装版开发 SDK consumer 已通过。完整 clean v7 验证计划、当前 CI/离线资格及物理验证仍属独立范围;这些开发检查不建立物理结果。完整的 IO-32 与 SOC-35 退出仍开放;物理 HIL 为 not_executed。
可选的 Nexus::U575LpdmaCopy receiver 只使用 LPDMA1 通道 0 和 0x28000000..0x28003fff 的 16 KiB 非安全 SRAM4 窗口。同一具体 Nexus::U575Stop2Copy owner 控制 RTC AlarmA、WUT 及完整睡眠/恢复顺序。仅 WUT 的 Nexus::U575Stop2 是另一可选 target;同时选择两者会被 CMake 拒绝。这是有限的存储器到存储器复制,不提供外设路由、通用 LPBAM 计划、RTOS worker、队列或生成的 factory。
FIG-27 与仅使用 WUT 的 FIG-24 分开。实线箭头标明调用、硬件事件或有序清理;虚线箭头标明外部前提或尚未完成的物理退出。仅 DMA 通道 idle 不能释放该复合借用。
准备精确的存储与时钟 owner¶
维护的装配 显式选择 SRAM4。此模式只链接 Nexus::U575Stop2Copy;它带入 copy 与 retained-time 依赖。其仅复位启动必须从 DMA 门控关闭状态开始,核对既有 Range4 供电及 SRAM4 供电/保留状态,启用 SRAM4,初始化其 DATA/BSS,然后启用并读回 LPDMA1EN。启动保留 NOINIT 字节;这些字节的存在既不证明数据有效,也不证明描述符已构造。运行态 owner 不得通过改变掉电字段来补救已经丢失的 SRAM4。
运行时,外部门控 owner 必须保持 SRAM4EN 与 LPDMA1EN 启用,并在 stop 及全部退出期间保持硬件配置稳定。初始四个 LPDMA 通道和向量都必须安静;不得启动其他通道。选定配置要求 TZEN0、未交换 Flash、有效 MSIS4 和 MSIK4、等分总线、真实 Range4(VOS=00、VOSRDY=1、BOOSTEN=0)及 cache 关闭。既有 Stop2 合同 规定其余屏蔽中断的 MSP、RUN 已停止、SRAM 保留与外部排除条件。
源、目标及完整的 24 B、四字节对齐生成 LLI workspace 必须在该精确 SRAM4 窗口内互不重叠。CPU owner 存储和 request 可留在保留的 SRAM1,但所有控制存储必须与借用范围分离。两块都使用地址递增的字节传输;长度至少为 2 B,且每个范围必须完整落在窗口内。provider 生成全部六个 LLI word;调用方不提供原始 DMA 指令。
声明以保留时间 API、复制 API 和 Stop2 复制 API 为权威。一个特权 Thread 串行调用生命周期与控制操作;ISR 或并发 producer 不使用这些对象。复制的 face 仍保留相同 owner 身份,其外部 observer 也必须退出。
准入、触发与恢复一次复制¶
使用
nx_stm32u575_retained_time_initialize_alarm_a_copy和wake_owner=nx_stm32u575_stop2_identity()初始化保留时钟。以同一个有效时钟及身份初始化 Stop2 owner 与nx_stm32u575_lpdma_copy_initialize。初始 RTC AlarmA、WUT 及 IRQ 状态必须安静。普通只读时钟初始化函数不授权该 AlarmA 模式。初始化 request base,成功取得
nx_stm32u575_retained_time_sample,再向nx_stm32u575_lpdma_copy_request_prepare传入独立 snapshot、SRAM4 范围、workspace,以及该保留时间域内的绝对 deadline 或 NEVER。prepare 复制元数据,不借用或访问 buffer 和 workspace。拒绝保持 request 字节不变。Platform 停止前结束旧 Core TIM2 deadline;不在两个时间域之间转换 deadline。将每个 RUN producer 和 observer 注册到精确的 Stop2 ClockDomain。关闭准入,停止 Platform/System,通过实际 API 退出 producer、IRQ/DMA 用户及 deadline consumer,并在真实排空后释放其 lease。向
nx_stm32u575_stop2_copy_enter传入该关闭且为空的屏障、具体 copy face、已准备的 request、4096..65536 RTC/16 ticks 的escape_ticks(标称 2..32 s),以及正的逐阶段poll_limit。进入和每次保留恢复尝试期间都保持特权 MSP Thread、CONTROL=0、PRIMASK=1 和 BASEPRI=FAULTMASK=0。调度器不得已启动。Stop2 owner 私有地核对就绪、arm receiver 并核对睡眠条件,然后才启用 RTC producer。拒绝不保留新借用;
accepted=true借用 request、两个 buffer 及 workspace,即使后续设置步骤失败也不撤销。
AlarmA 使用全部日历 mask 位、ALRMASSR=0、ALRAIE=0 和 ALRAFCLR=0。下一个整秒事件以 trigger 14 上升沿触发首个 floor(length/2) 字节。生成的第二个 LLI 不经触发复制余下字节;TCEM 选择最后一个 LLI 完成,最终链接为零。producer 启用期间,owner 保留 ALRAF 和 DMA pending。清理只在撤回 producer 后清除它们。WUT 提供独立逃逸唤醒。通道 0 IRQ114 或 RTC IRQ2 可在中断屏蔽时唤醒 WFI,且不执行中断 handler。已有 pending 可使等待立即返回;wait_executed 只证明执行了 WFI,不证明物理 Stop2 驻留。没有 AlarmA 事件而发生 WUT 逃逸时锁存 TIMEOUT,并排空有限 receiver。
返回的 accepted、dma_wake 和 transition 描述准入与睡眠边界,不是最终复制结果。只有 acquire 观察到 request 的 SETTLED 状态后才能读取结果和传输计数。deadline 或 nx_stm32u575_lpdma_copy_cancel 请求撤回,不撤销任何借用;已观察到 DMA 完成后的迟到取消以 STATE 拒绝。公共 service 执行有界 DMA 推进/排空,stop 关闭复制准入;两者都不能独立发布 SETTLED。
唤醒或设置失败后,在任何 RTC 或 DMA MMIO 前核对选定 RUN 访问配置。配置未知时只允许撤回 CPU deep 位/向量,并保留复合借用及外设效果。在外部已审 owner 恢复所需配置前,保持 RUN 准入关闭和全部存储有效。nx_stm32u575_stop2_recover 重试同一复合清理,不再次 WFI。活动借用期间观察到外部 LPDMA1 reset 会永久隔离该借用。撤销 reset 或观察到安静的 reset 值不能证明此前 master 的最终访问;只有实际外部系统 reset 才终止该责任。
配置有效时,先撤回并观察 AlarmA/WUT producer,再排空 DMA。receiver 证明 idle,启用中通过 suspend/SUSPF 取得该证明,然后写入完整 word 的通道 RESET 值,并在清除通道地址/链接引用、flag 和 NVIC pending 状态前观察到完整 CCR 等于零。通道已禁用时,仅检查 EN/SUSP 不能发现 RESET 写入被忽略;完整 word 写入也将普通 interrupt-enable 字段清零。它只恢复所占通道 0 privilege 和 LPDMA/SRAM4 SMEN/AMEN 位,保留 RTC 与无关位;它不拥有整控制器 reset 或 engine-enable 门控。全部 RTC、DMA、IRQ、供电、门控及 clock 恢复完成后,Stop2 才分离其 face/request 引用并调用私有最终 release。此时 SETTLED 是 provider 对 request 的最后一次访问。任一证明失败都保留整个借用,即使 DMA 本身已经 idle。保留的 copy marker 在最终 release 成功前一直有效,即使硬件效果已为零;它拒绝普通 enter 与另一次 copy。recover 也重试最终 release。
硬件隔离可在保留时钟已 tainted 时完成并发布错误,但不能产生新的成功 elapsed-time 结果。显式停止/重开时钟前,退出全部时钟用户;新代次使每个旧绑定和 deadline 失效。仅在全部效果为零后重开 RUN 准入并重启 Platform,建立新的 Core TIM2 epoch。保留时钟采样分辨率为 3906.25 µs;WUT 使用独立的 2048 Hz tick。max_gap_seconds 必须覆盖整个间隔以及外部有界的 arm、唤醒和排空延迟。poll_limit 只限制观察次数,不限制耗时;硬件唤醒失败时,WFI 没有 CPU 时长上界。
范围与证据¶
公共头文件及复制实现 定义源码合同;私有协作 只连接具体 Stop2 owner。生产变更前执行了有意义的 RED。有针对性的 Native 执行通过 receiver 30 项、保留时钟 33 项、使用全部三个真实 C owner 及 Core 的耦合测试 17 项,以及仅 WUT 的兼容测试 30 项(21 项单元测试和 9 项真实时钟测试)。独立源码审查已完成。四个直接源码 Cortex-M33 镜像通过开发检查:公共复制复位镜像,以及 default/retained/WUT 三个省略验证镜像。一个搬移后的非可发布安装版 SDK consumer 也针对已审源码编译、链接通过。直接源码复制镜像使用 15,816 B Flash;安装版 consumer 使用 15,840 B,24 B 差异来自源码路径字符串和对齐。两者均保留 2,384 B SRAM1(含 2,048 B MSP)、64 B SRAM4,且没有 heap。开发收据将这些检查绑定到精确源码。这不构成完整 clean v7 计划 50 个镜像或当前整个候选版本 CI/离线资格的执行。本复制不继承先前软件候选或物理结果。
本纵切片不实现外设 LPBAM、通用自主调度、仅 SRAM4 运行、DVFS、RTOS Tick 补偿、TrustZone 睡眠、Standby 或 VBAT 连续性。物理复制正确性、Stop2 驻留、保留、电流、振荡器精度及唤醒延迟仍未执行。软件模型与 ARM 链接结果必须绑定精确源码;原始 IO-32/SOC-35 退出仍开放且保持不变。