# A77 连续双ADC DMA数据链与HSI16实时性瓶颈

状态：候选源码、主机寄存器模型、ARM镜像与独立解压重建通过；实时性未通过，FABRICATION_HOLD。不能宣称当前HSI16固件已实现20kHz可用采样或FOC。没有实物上电、烧录、采购、送厂或效果验收。

本轮重要结论：通过Unicorn 2.1.4执行实际ARM镜像中健康STREAM配置的du_ok路径，返回true，计数1,193条执行指令。按每周期一条指令的乐观估算，HSI16下约74.5625us，仅一次完整关断/配置检查已超过20kHz的50us周期，且不包含数据拷贝、消费者或FOC。当前前台还重复执行该检查。因此HSI16实时性不能判定为合格；需要先修改现有STM32G431的核心时钟和重复检查调度，并在全部PWM/SPI/ADC/TIM2/SysTick时钟配置保持一致后重验证，再测真实CPU周期/波形。该执行计数不是周期精确仿真或实测，估算不含总线、Flash、IRQ延迟。证据见performance_model/guard_instruction_receipt_A77.json与复现脚本。

连续数据链候选：复用A76双ADC/内部TIM1，只在READY且没有正在转换时设置ADC12 CCR MDMA=12/10bit、DMACFG unlimited，然后DMA1 Channel1从CDR执行32位外设到32位SRAM传输，MINC/CIRC、高优先级、无DMA IRQ。DMAMUX1 Channel0 request=5（ADC1），无同步/请求生成。两槽各一个IA/IB原始配对，半传输HT确认槽0完成、全传输TC确认槽1完成；DMA剩余计数与完成标志必须一致。ARM链接检查两槽共8字节、4字节对齐并在正常SRAM内，未放入CCM。

DMA1/DMAMUX1从整个域时钟关闭、复位未占用、DMA2时钟关闭的状态接管并复位；这是明确的独占候选，尚不支持与其他DMA用户共存。已有共享域启用时拒绝，且不改变ADC/计时器已有READY配置。故障先停内部TIM1、关闭驱动，再复位独占ADC12与DMA1、禁用本候选DMA/DMAMUX时钟，锁定FAILED，无自动重试。正常bench stop也回到硬关断锁定状态，需要重新冷启动，尚无生产级流暂停/恢复协议。

数据交接采用DMA写入完成标志，不能只凭CNDTR变化认定内存已完整。读取前后核对CNDTR，使用DMB，复核配置/ADC错误、DMA传输错误及DMAMUX过载；CDR打包数据中的保留位非零拒绝。循环reload时CNDTR0视为2，只有与TC完成一致时接收。HT和TC同时出现、无进度却有完成标志、未消费旧样本又来新样本、读期间DMA推进或其他故障均拒绝，避免拼接跨周期数据；只清除已消费槽的完成标志。计数已变化但完成标志尚未到达时等待，不能发布半写数据。

前台服务最大30us间隙，100us无DMA进度失效；读期间使用真实TIM2重新核对窗口，结果须在观察时间后30us内取走。take内部刷新TIM2，以免前一轮poll在稍后的真实时刻记下observed_us、主循环再次传入较早缓存now而误判时间逆行。原始记录有两路计数、观察时间、arm时间、序号及停表计数观察，calibration_verified仍false；这些不是硬件采样孔径时间戳。严格窗口目前与HSI16指令开销冲突，属于本轮明确发现的未完成项，不能用模型夹具时间代替真实服务能力。

main已接入流消费者，取数据到局部记录后以奇偶epoch/DMB发布SWD诊断快照，并计接收次数。读取者需读取相同的两个偶数epoch夹住载荷，拒绝写入中的快照。main不调用stream_start或任何bench begin，默认驱动睡眠、三相GPIO/RUN低、TIM1 CEN/CCER/MOE关闭、ADC及DMA时钟关闭，没有FOC消费者或运行电机许可。现有4路顺序诊断/单次双ADC与流模式互斥，不在此模式采IC/VM。

依据：[ST官方LL ADC](https://github.com/STMicroelectronics/stm32g4xx-hal-driver/blob/master/Inc/stm32g4xx_ll_adc.h) 的MULTI_REG_DMA_UNLMT_RES12_10B定义与可在ADC enabled/no conversion条件设置说明；[ST官方LL DMAMUX](https://github.com/STMicroelectronics/stm32g4xx-hal-driver/blob/master/Inc/stm32g4xx_ll_dmamux.h) 的ADC1 request5；DMA尺寸、循环、标志位使用包内G431原厂设备头文件。ARM指令执行使用[Unicorn](https://github.com/unicorn-engine/unicorn)，不模拟片上外设或硬件周期。

主机模型验证：283个流/消费者场景，包括两组连续64配对跨缓冲循环与TIM2回绕、128种DMA/DMAMUX逐位配置污染、15种过时/缺数据/未消费/指针异常/TE/DMAMUX错误/保留位/读期间DMA推进/读期间延迟或新错误、reload0、5种域占用拒绝、完成标志缺失等待与矛盾标志、取数据时间戳刷新。DMA推进、标志和模拟内存由夹具控制，不证明ADC→DMAMUX→DMA真实请求已发生。

复跑1645双ADC、645顺序ADC、241异步配置、24SPI配置组合、65,632 SPI、65,772 PWM、363时基及256真实main启动模型。ARM反汇编确认main消费入口，没有stream start调用；包独立解压后复跑7个检查脚本、重建ARM、重执行指令计数，二进制SHA和1,193计数一致。Unicorn是复现分析的外部依赖（2.1.4），不编入或捆绑到固件；无需该库也能构建目标及运行原生C模型。详情见A77-extracted-package-verification.json。

下一步优先修正核心时钟与全外设时序、减少重复全配置扫描，满足服务预算后再进入校准/电流保护/第三相一致性、观察器和FOC闭环。还缺真实同步/连续波形、真实CPU预算、速度与正反转、堵转/回生/声振/续航和工厂DFM/MPN/成本审核。三款原产品20项功能效果要求仍未实物验证，目标保持完整，没有制造放行。
