精确选定模式的 HIL 准备¶
以下五项合同针对已有精确选定 provider 的软件,准备独立仪器采集。所有准备结果仍为 prepared_unbound / not_executed。未连接任何板卡、探针、串口对端或校准仪器。解析器单元测试使用合成字节,只能确立软件合同的行为。
用例 |
精确选定配置 |
分别保留的观测 |
|---|---|---|
|
STM32H743ZIT6 V |
完整独占的 32 字节 AXI Cache 行,TX Cache clean/RX prepare/invalidate,两个 DMA 均完成、线上空闲、CS 释放、撤回与 SETTLED 发布 |
|
相同的精确 H743 硅片/时钟/后端配置;USART3 PD8/PD9,DMA1 流 1/请求 45,连续 RX;Cache 关闭或开启 |
实际 CT/M0AR/M1AR/NDTR 轮换、等大的调用方块、持有块的内容、服务截止时间、丢失、停止与块借用的归还;TX 仍使用 IRQ |
|
相同的精确 H743 硅片/时钟/后端及 USART3 引脚;独立的 DMA1 流 0/请求 46 用于 TX,流 1/请求 45 用于 RX;Cache 关闭或开启 |
独立的有限 TX 请求与连续 RX stream 借用、真实 DMA/线上 TC、CPU acquire 后可见的字节、通路自身的 EN 拒绝撤回,以及联合域隔离保留 |
|
STM32U575ZIT6Q,TZEN0/SWAP_BANK0,MSIS 4 MHz,baremetal;USART1 PA9/PA10;GPDMA1 通道 0/请求 25;IRQ RX |
有限连续 SRAM1 载荷、两个紧凑排列的 12 字节节点、一个 64 KiB CLBAR 窗口、LAST 终止、线上 TC 及完整撤回 |
|
相同的 U575 启动前条件/时钟/后端;内部 LPTIM2,PCLK1/4,1 MHz RUN tick;IRQ 68,优先级 5,calls_os=false |
2..65536 个 tick、实际启用/停用同步、完整周期后的 UE、截止时间、隔离保留与撤回 |
准备与准入¶
常规 workloads.py 和 soc_acceptance.py 清单包含这些用例。选择器使用精确、规范化的已解析控制器 ID、模式、时钟、后端、物理 DMA 通路及有界描述符合同。芯片系列名称或另一个 UART 实例不能选中用例。Native、FreeRTOS 和 ThreadX 不继承这些 baremetal 模式合同。连续 RX 合同不选择有限 IDLE RX 或 DMA 双向模式。
维护的软件 fixture 包括:
tools/hil/fixtures/stm32h743_hsi_selected_reference.json;tools/hil/fixtures/stm32u575_nucleo_zi_q.json,用于 USART1 Board 身份;tools/hil/fixtures/stm32u575_lptim_selected_reference.json。
准入保护明确记录了这两组额外的参考 Board/料号组合。删除 scope、更改 Board 名称或更改料号都不能提升它们的资格。validate_station 仍然拒绝软件参考 fixture。先前 H743/U575 GPIO 和 IRQ 字节冒烟 fixture 的限制继续有效。新模式的准备不扩大冒烟验证资格。
仅 SPI 和无引脚 LPTIM 装配没有选定用于冒烟测试的控制台。其计划标为 independent_control_channel_unbound;对未来 UART 路由的描述不会创建 UART 控制器。实际测试站通过审查前,仪器身份和数值限值保持未设置。未来的物理测试站必须具有单独审查的 fixture 和对应工具变更,现有采集执行器才能操作它。
python tools/hil/soc_acceptance.py plan \
--fixture tools/hil/fixtures/stm32h743_hsi_selected_reference.json \
--resolved build/h743-spi-cache/generated/resolved.json \
--output station/selected-mode-plan.json
python tools/hil/soc_acceptance.py template --case H743-SPI-CACHE \
--fixture tools/hil/fixtures/stm32h743_hsi_selected_reference.json \
--resolved build/h743-spi-cache/generated/resolved.json \
--output station/selected-mode-template.json
第一条命令生成未绑定的计划,第二条生成不完整的编写模板。两条命令都不会刷写固件、启动适配器、提供测试站事实或将模板接受为已审协议。
独立原始观测¶
每个用例都有各自的已审协议和激励清单。四份分别保留的 JSON 导出记录构成其观测合同:
角色 |
必需内容 |
|---|---|
|
控制器/模式与时钟源/分频/微调/Cache/安全配置的读回值,芯片身份、 |
|
每次试验保留的发送/接收字节或定时器 tick 观测 |
|
每次试验的调用方地址/容量/独占所有权,保留的载荷快照、描述符链接及 RX 持有块快照 |
|
每次试验的接受结果、绝对单调截止时间/时间域/epoch、严格有序的时间戳与生命周期事件;RX 还包括实际目标寄存器快照 |
每份导出记录使用 schema 1 selected_mode_observation,并绑定其用例、角色、新的采集会话、已审协议哈希、上下文哈希、精确控制器 ID 和已审仪器。角色缺失、试验重复、会话错误、文件改变、选定实例不同或时钟/Cache 事实改变都会判为失败。逐用例合同拒绝未知效果及SETTLED 发布后的访问。不存在可替代观测的声明式 pass 字段。
寄存器、内存和生命周期导出记录绑定已审调试探针。线上导出记录绑定逻辑分析仪;LPTIM 则绑定校准定时器。仅写出同一协议内另一台仪器的名称,不能满足角色要求。U575 修订 ID 必须实际观测为 16 位整数;当前 provider 没有选定的修订允许列表,因此解析器记录该值,不虚构修订准入门禁。H743 保留精确的 V 0x2003 门禁。
nominal_core_hz 描述配置的时钟树,并不以 SI 赫兹测量 HSI 或 MSIS 的准确度。事件 at_ns、截止时间和服务采样使用同一正在运行的目标 Core 单调时间域的纳秒换算值,本导出合同将该域命名为 monotonic1。这些值不会自动成为经过校准的 SI 纳秒。外部仪器必须保留实际频率、校准、不确定度及其到该域的映射。频率误差和绝对物理延迟仍是分别审查的测量;振荡器不必运行在数学上精确的 64 MHz 或 4 MHz。
现有 soc_acceptance.capture 路径复用独占测试站锁、有界适配器子进程、固件/读回身份、超时及清理记录。校验会重建准入结果,核验已执行的 argv 和输入闭包,匹配适配器的实际清单,并在选定模式解析器运行前核验原始记录身份。单独运行解析器成功不携带任何实板状态。最终用例指标必须等于从已解析试验推导的值。
仪器和测试站适配器仍是由外部测试站拥有的集成。平台不提供通用 SPI 对端、波形解码器、调试探针采集驱动或自动连接的串口设备。生产激励固件必须使用精确获准的装配及其公共类型化接口;更改固件需要新的 ELF/配置/资源身份和采集。
激励与边界义务¶
SPI Cache DMA 覆盖 32 字节和 65504 字节传输、接近 TC 时的后期取消、撤回后期超时、未对齐存储和无效长度。两个被借用的缓冲区均由 AXI SRAM 内完整、独占且互不重叠的 Cache 行构成。TX DMA TC 和 RX DMA TC 先于观测到的线上空闲;RX Cache 失效处理和 CS 释放先于成功发布 SETTLED。撤回超时试验特意达到线上完成,却在后续引用撤回时失败:超过截止时间后仍必须隔离保留,不得发布 SETTLED或释放所有权。这不构成对任意 DMA 挂起情形的资格确认。
取消用例保留在线上传输/数据流撤回前发生的实际 cancel 调用;仅有场景标签不能证明该激励发生。拒绝用例保留已核验逐字节相同的前后内存,且观测到的线上活动为零,没有发送/接收载荷,也没有借用。引用缺失的快照或更改被拒绝的存储都会导致校验失败。双向合同将拒绝条件限定于被拒绝的方向:TX 因重叠被拒绝时,已经活动的 RX 数据流继续运行。被拒绝的 RX 启动不会提交 TX 请求。
连续 RX 覆盖环绕、持有块反压、IDLE 停止、服务预算到期、持有块期间取消、块重叠及块容量不足。至少需要三个等大、互不重叠的调用方 AXI 块。每次接受的试验保留初始目标快照,以及观测预热阶段至少三次 CT 切换。快照包括 CR、M0AR、M1AR、NDTR、持有地址及明确归还的地址。两个已配置生效的目标中都不得出现持有块。每次切换都在同一时间域内标注时间戳,并满足根据观测到的 NDTR 进度及真实十位 8N1 帧计算的保守最小接收间隔,同时为采样不确定度计入两个 1 us 量化单位。此计算与下文刻意保守的八位服务保护界限分别处理。CT 翻转时,新变为活动状态的目标必须保持不变;只能替换刚完成传输的非活动目标,且该完成地址必须对应新持有的借用块。独立保留的持有块快照必须始终逐字节相同。
替换预算使用实际采集的块容量、采样 NDTR 和选定 BRR,而不使用独立提供的请求字节数:
budget_us = max(0, floor((remaining + capacity - 20) * 8 * BRR / 64) - 2)
replace_by_ns = sampled_ns + 1000 * budget_us
TIM2 和 USART 必须共享选定的标称 64 MHz HSI 时间域。20 字节保护量和两个 1 us 量化单位是保守界限。服务迟到和反压必须报告丢失并停止;不得悄然继续使用持有缓冲区。Cache 开启时,块使用完整独占的 32 字节行。Cache 关闭时的观测不能继承 Cache 开启时的维护事件。停止后的新数据流需要重新显式提交;协议不规定自动重启策略。
独立 H743 双向用例¶
H743-DUPLEX-CONTINUOUS 有自身的用例 ID、协议、激励、会话及原始记录清单。即使 H743-RX-CONTINUOUS 的采集结果通过,也不能复用。两种 Cache 配置都要求相同的九个生产实现可达场景:
tx_min:Cache 关闭时为 1 字节,Cache 开启时为一条 32 字节 Cache 行;tx_max:Cache 关闭时为 65535 字节,Cache 开启时为 65504 字节;cancel_tx_tc:实际 cancel 发生在观测到 DMA TC 之后、线上 TC 之前;stop_rx_held:consumer 仍持有一个块时,producer 解除引用;tx_drain_timeout:DMA 和线上均完成后,TX EN 拒绝撤回;rx_drain_timeout:RX EN 拒绝撤回,且stop_rx返回BUSY;domain_taint:观测到 HSIDIV 改变、保留借用并隔离三个 IRQ;reject_tx_overlap:TX 存储与已绑定 RX 池发生别名重叠;reject_rx_overlap:重叠 RX 块被拒绝,不提交 TX 请求。
RX 采集窗口包含初始 DMA 目标采样及至少三次真实 CT 切换。它证明与 TX 起始阶段重叠,不声称在约 5.69 秒的最长 TX 全程连续 RX。实际测试站必须保留精确的观测区间。正常 TX 可以在 RX 仍活动时发布 SETTLED。有限请求的 SETTLED 状态既不指代 RX 数据流,也不负责 join 独立的适配器 observer。
memory_capture 将三个等大的 AXI RX 块与一个大小独立确定的 AXI TX 载荷区分开。Cache 开启时,载荷占用完整独占的 32 字节行;非空请求长度也必须覆盖完整行。调用方静态 owner、stream、三槽预留及 request 控制存储采用选定 AAPCS32 下的最小尺寸,依次为 272、40、120 和 32 字节,并按 8 字节对齐。允许更大的预留。控制存储彼此不重叠,也不与载荷重叠;嵌套成员不计为单独预留。控制存储大小不必是 Cache 行大小的倍数。本参考 workload 观测 wake_address=0,不挂接外部 wake 对象。
TX 前后字节必须保持不变。RX rx_before 是初始毒化模式;rx_after 是调试探针读取的物理 DMA 内存视图,rx_cpu_visible 则单独采集 CPU 在 stream acquire 之后读取的字节。仅有物理 RAM 不能证明 Cache 一致性。RX 观测将地址、槽 epoch、长度,以及完成、Cache 失效处理、块发布、acquire 和采样的时间,绑定到实际目标及槽状态快照。持有块的前后字节在保留的整个区间内绑定同一 consumer 所持块地址及 epoch。故障场景采样的是停止失败或隔离后仍由 consumer 持有的块,而非故障前已归还的旧块。
TX snapshots 保留实际 Core 请求状态、独立的 preparing 标志、活动请求地址/ref、发布者状态、DMA CR/NDTR/PAR/M0AR/FCR、DMAMUX CCR、USART CR1/CR3/ISR 及 DMA LISR。Core 状态仍为 READY、ACTIVE、DRAINING、QUARANTINED 和 SETTLED;不得将 PREPARING 和 REJECTED 虚构为 Core 状态。冷态 Cache clean 前的基线可具有为零的 PAR、M0AR 和 NDTR。准备期间基线必须保持不变,EN 和 DMAT 均关闭。启动使用 TDR 0x40004828、请求 46、有限且字节宽度的 MINC TX,以及精确的 V 修订 TRBUFF 策略。RX 使用 RDR 0x40004824、请求 45 及选定的字节 DBM 配置。未知模式、宽度、方向或替换 DMA 通路都会判为失败。
DMA TC 要求实际 NDTR 为零且 TCIF0 置位。新的线上 TC 和成功撤回均先于 SETTLED 发布;仅 DMA TC 不释放任何内容。延迟的软件 DMA 采样可能晚于物理线上边沿。取消试验特意在取消和线上 TC 之前采样 DMA TC。非成功结果中的 transferred=0 不表示发送字节为零:这些在 DMA TC 后取消及 EN 拒绝撤回的试验,要求独立线上采集保留完整载荷。只有域污染试验允许在故障前观测窗口内捕获源载荷前缀。发布 TX SETTLED 要求 EN、包含 HTIE 在内的 DMA 中断源、DMAT 及 UART TX 源已撤回,标志已清除,发布者已 join,活动指针/ref 已移除。它不会禁用 RX 或共享 USART NVIC 中断线。
有限 TX 排空截止时间从实际进入排空时起算,provider 预算为 floor(20000000 / baud) + 100 微秒。撤回失败时,请求须保留并跨过实际到期时刻。RX 没有与之对应的 provider TX 截止时间:其 BUSY 返回、仍为启用的 EN 读回、已撤回的 RX 源、保留的 producer 借用及单独声明的测试站停止预算到期,均分别记录。槽快照保留 producer 借用/pending、每个槽的状态与 epoch、stream 的 outstanding 计数和 stopping 状态。producer 借用降至零后,consumer 仍可以保留未归还的 BORROWED 块。BUSY 绝不会撤销该借用。
联合域污染记录实际 RCC CR/HSICFGR、CCR 及 clock-epoch 观测。最后有效的 Core 时间域边界、注入故障、软件首次观测到域丢失,以及隔离完成,是分别记录的事实。访问轨迹的范围限定为 USART3、DMA1 和 DMAMUX:软件观测到域丢失后,不得再访问该失效 I/O 域,也不得进行 Cache 维护或发布。仍允许通过 RCC/SCB 检测及执行 NVIC 隔离。这不保证外部 RCC 写入与随后软件检测之间不执行任何指令。三个 IRQ,即 DMA1 流 0、流 1 及 USART3,必须已禁用,且其发布者处于非活动状态;两个方向的借用均保持隔离保留。域丢失本身不会设置 stream 的正常 stopping 标志。
时钟失效后,持有字节和纯内存请求尾部快照使用围绕故障、观测及隔离分别保留的采集序列号。它们不在已失效的时间域内虚构 Core 截止时间已经到期。所有常规 RX 轮换及服务采样都先于该边界,且仍满足既有的八位替换保护量及十位线上时间下界。
同步 Cache clean 调用期间的取消仍属于采用 GoogleMock 替换的 host/模型白盒回归。生产实现的 Cache clean 没有回调,cancel 由同一个唯一 executor 执行。这种重入不是第十个物理 HIL 场景;没有为使其看似可达而添加 worker、ISR 取消或新 hook。
有限 U575 链覆盖 1、65535、65536、131070 和 131071 字节、接近 TC 时取消、撤回后期超时、无效描述符窗口及无效长度。公共计数的理论上限为 196605 字节,但实际互不重叠的 SRAM1 载荷还必须为生成节点、状态、环及控制存储留出空间。因此多块试验要求超过 131070 字节,并校验实际放置,而非要求不可能同时容纳的完整 192 KiB 载荷和私有节点。three_block_threshold 表示 131071 字节激励,不声明物理最大值。节点在相对基址的偏移 0 和 12 处紧凑排列,基址按 32 字节对齐,且节点保持在同一个 64 KiB 窗口内。必须采集实际紧凑排列的 block、source 和 link 字、初始 CLBAR/CLLR/CSAR/CBR1,以及每次硬件取节点的快照。单块传输使两个池条目均保持为零,初始 CLLR=0。双块传输使用一个硬件取出的节点,三块传输使用两个。实际 UB1/USA/ULL 更新位和 LA 偏移必须与源地址推进及最终零链接一致。成功撤回会清除通道引用及所有节点字。撤回失败则保留合法的 32 位引用和已发布节点。仅链完成不能替代 DMA/IRQ 撤回和线上 TC。
LPTIM 覆盖 2 tick 和 65536 tick 边界、提前出现 ARRM、同步延迟、撤回后期超时,以及不产生效果的单 tick 拒绝。启用/停用的写入/读回/DSB 锚点必须证明所要求的同步间隔。延迟用例必须保留超过普通同步间隔的读回延迟。UE 不得早于所请求的完整标称时间域周期。这是固定时钟的 RUN 合同,不确立 RTC、备份、VBAT、自主运行、Stop 或 TrustZone 行为。
交付状态与后续执行¶
软件交付包括选择器、未绑定计划、严格的已审协议、现有执行器集成、原始记录解析及解析器负向测试。尚未绑定物理测试站,也没有用例在硬件上执行。硬件可用时,须保留原始采集记录、适配器 stdout/stderr、回执及固件/资源身份。须记录成功用例、模式、硅片和条件的精确信息;选定模式的结果不能为其他控制器、Cache 配置、后端、Board 或产品建立资格。