U575 保留经过时间域¶
Nexus::U575RetainedTime 为精确 STM32U575ZIT6Q TZEN0 baremetal 参考提供显式经过时间时钟。它只读取由外部准备并保留的 RTC,不改变硬件。它不进入电源模式、恢复时钟、提供 LPBAM,也不证明物理 Stop2 连续计时。原始 IO-32 与 SOC-35 退出条件仍开放;物理 HIL 为 not_executed。
FIG-24 描述仅 WUT 的参考,与 FIG-27 中显式选入的有限 SRAM4 复制 分开。它将独立 RTC domain 与已排空 RUN domain 分开。实线箭头标记当前调用、准入或清理迁移;虚线箭头标记外部源前提及仅 WUT 范围以外的退出条件。硬件排空不修复受污时钟。另行选入的 Stop2 owner 提供 WUT 与恢复;只读时钟组件本身不提供这些机制。任何箭头均不建立物理驻留或自动登记。
独立选定的 LPTIM1 单组 LPBAM 使用普通保留时钟初始化器,设置 wake_owner=nx_stm32u575_stop2_identity(),沿用同一 concrete Stop2 owner,无需 AlarmA-copy opt-in。其公开 receiver start/stop 负责 LPTIM1 访问准备与恢复;部分 start 失败会保留其效果,直到 joined stop 证明已归还。这不改变只读时钟合同或 FIG-24 的 WUT-only 范围。
选择唯一 RTC owner¶
使用公共保留时间头文件,并显式链接 Nexus::U575RetainedTime。可选目标仅在 U575 baremetal 单一状态装配且未选入轮询 AlarmA [rtc.*] factory 时存在。它不是生成的 factory、全局 Core 时钟替代物或运行期注册表。厂商类型保持私有;状态使用一个清零初始化、由调用方拥有的 nx_stm32u575_retained_time_storage_t。
源码 consumer 选择受维护的空装配,将 Nexus 作为子目录加入并链接组件:
set(NEXUS_ASSEMBLY_FILE "/path/nexus/tools/configure/assemblies/nucleo-u575-baremetal-empty.toml")
add_subdirectory("/path/nexus" nexus)
nexus_add_firmware(product SOURCES main.c LIBRARIES Nexus::U575RetainedTime)
公共 C11 consumer 展示显式构造、face 读取、Platform 停止后的受检 sample,以及 join 后的时钟停止。这个链接夹具不提供振荡器设置或 PCB 事实。Board 与 boot owner 必须独立建立下述源条件。
预备源与访问边界¶
外部 boot 拥有有效的原始 BCD 24 小时日历、PRER=127/255、BYPSHAD=1、32768 Hz 晶体 LSE、RTCSEL=LSE、LSEON、LSERDY、RTCEN 与 RTCAPBEN。LSEBYP=0 及驱动代码 LSEDRV=10/11 定义此保守配置。ES0499 Rev12 第2.2.3和2.2.16节影响 revision X;表3注明 W/U 已修复。本参考不建立硅修订版资格。第2.2.1节要求外部 boot 与 Board owner 排除本 LQFP 器件晶体 LSE 模式下的 PC13 跳变;GPIO 读取不能证明电气静默。本参考不声明 PCB 走线、已安装晶体、驱动调整或振荡器实测结果。
调用方在特权 Thread 模式串行执行所有生命周期调用。initialize 和 stop 要求未屏蔽 Thread;sample 与 wake validation 允许传入 PRIMASK 0 或 1,并保持该值。排除 Handler 模式、BASEPRI 与 FAULTMASK。共享 helper 在每组 tuple pair 前检查选定有效 MSIS range 4、就绪 MSIS 源、等速总线与 RTC APB gate。该保守 MSIS4 配置提供标称 4 MHz PCLK,高于 32768 Hz 的七倍。RM0456 Rev7 第63.3.12节在 shadow mode 下讨论七倍比率;选定 BYPSHAD 读取器遵循该节完整重复 tuple 规程。此选定配置不建立通用 RTC 写入频率规则。排除并发时钟配置写入者。单独的 power owner 在唤醒后访问 RTC 前验证恢复的访问配置。本组件不拥有 RCC 恢复。
初始 alarm、WUTE/WUTIE、RTC 状态标志或活动 RTC IRQ 在对象发布前拒绝,包括请求 WUT 委托时。排除 binary mode、shift、calibration、源/gate 漂移及外来日历配置。原始 year-00 的来源属于外部前提;INITS 不能证明它。读取不要求 DBP 或已解锁 WPR。实现不写 RTC、RCC、PWR、TAMP、backup、GPIO、中断或保护字段。
经过时间 sample 与独立 deadline¶
initialize 复制配置并返回独立 nx_clock_t。它以第一个一致日历 tuple 为零点。sample 按 RTC 闰年算术在 36525 日、100 年周期内扩展原始 256 Hz tick,包括自然 99-to-00 回绕。tuple 读取器与既有 RUN AlarmA provider 共享:最多八组完整匹配 SSR/TR/DR pair、BCD/范围验证,且失败不改变输出。这不隐含 UTC 世纪或闰秒模型。
成功 snapshot 绑定存储 identity、不回绕 generation、经过 tick 与 floor(ticks*1000000/256) 微秒。3906.25 微秒源量子在各 sample 之间精确累计四分之一微秒余量;相邻 sample 可以返回相同时间。溢出不能返回保留 NEVER 值或回绕。任何 Core TIM2 值或 timeout 均不转换为日历 epoch。
调用方将 max_gap_seconds 声明为 1..86400,并在此间隔内观察。完整经过间隔必须满足该上界,包括唤醒延迟与恢复。若唤醒失败,标称 WUT 周期并不是最长持续时间。snapshot 无法检测较小的外部日历设置或漏过完整 100 年周期;外部必须排除所有日历写入者。
sample 在有限重试仍不稳定后返回 BUSY,不改变 owner 或输出。源/配置丢失、越界/倒退观察或耗尽会永久污染当前 epoch。输出保持不变,后续 sample 返回 STATE。nx_clock_t 读取回调没有错误返回通道,因此任何读取失败都会污染 epoch、保留中断屏蔽、携原因观察 NX_FAULT_PLATFORM,若 fault observer 返回则停驻。旧时间值绝不恢复 deadline consumer 的执行。故障观察不释放任何借用、存储或 observer。
独立 face 与 nx_time_now_us() 保持不同 domain。默认 Core TIM2 停止与失效行为不变。在 Platform stop 前结束旧 Core deadline;绝不将其与本经过时间域比较。所有复制的 face、deadline user、observer 与受委托 wake owner join 后,显式 clock stop 关闭读取。reopen 推进 generation 并开始新的零基 domain;旧数值 deadline 与 wake binding 仍无效。
显式 WUT 委托¶
NULL wake_owner 选择只读 RTC 独占,要求 WUT 与 RTC IRQ 静默。非 NULL 的稳定 assembly identity 仅向同一串行 wake owner 委托 WUCKSEL/WUTE/WUTIE、WUTR、WUTF/SCR.CWUTF 及 RTC vector。ICSR.WUTWF 可以随其有限 WUT 操作变化。delegate 保持每个日历与源字段。初始构造仍要求静默;该能力不能接管无关的活动唤醒源。
validate_wake 比较该 identity 与 sampled generation,不重开或修复时钟。它是受信装配绑定,不是安全能力。源漂移污染时钟,并在新 wake 写入前返回可观察错误。WUT 排空失败时,wake owner 的效果与 clock storage 必须保持有效,直到真实恢复及 join。本组件自身不承诺 wake IRQ、WFI、RUN 恢复、Stop2、SRAM4 放置或 VBAT 保证。另行选入的电源模式必须证明哪些内存保留状态;只读 RUN 时钟没有 SRAM4 准入要求。
选择并使用 Stop2 owner¶
在同一未选 AlarmA 的装配中显式链接 Nexus::U575Stop2。其公共头文件、组件合同 和公共 C11 consumer 定义精确 STM32U575ZIT6Q TZEN0 baremetal 规程。先用 wake_owner=nx_stm32u575_stop2_identity() 和覆盖完整经过间隔的最大观察间隔初始化保留时钟,再用该存储及显式 RUN-consumer 容量初始化 Stop2 owner。存储须覆盖两个 owner 和每个复制 face 的生命期。绑定属于受信静态装配,不是硬件认证;其他 RTC/AlarmA owner 不能共存。
将每个平台及产品 producer、device、IRQ、DMA、observer 和 Core deadline consumer 登记到该 owner 的 ClockDomain。在租约仍有效时关闭 RUN 准入,通过实际 API 停止 Platform/System 并 join consumer,然后仅在真实排空后释放各租约。已登记计数为零后传入这个精确 closed barrier。barrier 只证明已登记 owner;未登记硬件与异步参与者仍是外部责任。独立保留时钟位于这个已停止 RUN domain 之外。结束所有旧 Core TIM2 deadline;任何数值 deadline 均不能跨越其 stop/restart 边界。
在任何 scheduler 启动前,以特权 MSP Thread、CONTROL=0、PRIMASK=1、BASEPRI=FAULTMASK=0 调用 enter。Platform/System 必须已停止且无残余效果。入口仅接纳选定 MSIS4/等速总线与 VOS=00、VOSRDY=1、BOOSTEN=0 的 Range4 供电状态(RM0456 第10.10.4节),要求 caches/debug/MPU/SysTick/其他 IRQ 和 EXTI 源关闭、外设 gate 静默、所有 SRAM 保留及 Flash prefetch 关闭。boot 提供预备 LSE 日历、访问 gate 与 DBP=1。外部必须排除 watchdog、NMI/HardFault agent、其他 bus master 与并发配置写入者;寄存器零值不能证明这些条件。组件合同列出精确排除条件与 errata 依据。
请求 2..65536 个 RTC/16 tick,标称 2048 Hz;owner 观察到 WUTWF 后设置 WUTR=ticks-1、WUTOCLR=0。首次 WUTF 断言位于 enable 后 WUTR 至 WUTR+2 个 counter tick 之间。RTC sample 分辨率为 3906.25 微秒,因此短请求可以报告零经过时间。poll_limit 限制每个阶段的观察次数,不是经过时间;硬件唤醒失败时,WFI 没有 CPU 持续时间上界。保留时钟配置的间隔必须覆盖置备、实际睡眠/唤醒延迟及排空执行。
WFI 后 owner 清除 SLEEPDEEP,并在任何 RTC 读写前验证选定 RUN 配置。配置无效时只允许清除 core deep 位及撤回 CPU vector;WUT 与相关效果保持所有权,直到外部经审查 owner 恢复 MSIS4。配置有效时,它观察 wake flag,并仅捕获同一 generation 的 RTC sample。它撤回 WUT 源与 IRQ,在释放效果前验证/恢复保存的 WUTR、MSIK enable 状态、power 与自增 sleep/autonomous gate。受保护 WUT 写入使用有限作用域 WPR 解锁/重新锁定。每次返回均保持传入屏蔽状态。wait_executed 证明 WFI 已执行,不证明物理 Stop2 驻留。
分别检查 primary、cleanup 与 remaining-effects 结果。排空失败时 RUN 准入保持关闭,clock/owner 存储保持有效;不得重启 Platform 或回收借用。在同一屏蔽边界重试 nx_stm32u575_stop2_recover;它绝不执行 WFI,并在 RTC 操作前检查访问配置。硬件隔离完成后时钟仍可能受污。真实排空且所有 clock user join 后,clock stop/reopen 可以建立新 generation;旧 deadline 仍无效。仅在没有残余效果时重开 RUN 准入并重启 Platform,创建新的 Core TIM2 epoch。此仅 WUT 顺序不提供 RTOS Tick 补偿、LPDMA/LPBAM、Standby、VBAT 连续性或物理保留/功耗/时延资格。
源码依据与验证限制¶
源码依据为 RM0456 Rev7 第63.3.7、63.3.12节与 RTC 寄存器定义,以及 ES0499 Rev12 第2.2.1、2.2.3、2.2.16及2.19.3节。后一项 shadow-read erratum 采用 BYPSHAD 及完整重复 tuple。官方 CMSIS U5 头文件仍固定为 624374fa1e21ca195d6f2102ac0caaa50d0ea4c8;未修改厂商字节。
生产源码、共享 tuple 读取器 与 GoogleTest/GoogleMock 回归 通过外部寄存器及 fault-observer 端口检查真实 C11 行为。开发 RED/GREEN 与 M33 公共链接记录为其精确源码身份建立软件行为证据。它们不建立物理计时精度、LSE 驱动/电气行为、振荡器保留、唤醒延迟、Stop2 电流、复位持久性、VBAT 连续性或完整 IO-32/SOC-35 退出资格。