# STM32F103RET6 四档固化验证与 USB 修复 2026-09-14。MKLINK V4,探针 HPM5301 / 360 MHz;目标 STM32F103RET6 / 72 MHz / RT-Thread 5.1.0;LA5032,500 MSa/s,CH1 SWDIO、CH2 SWCLK。本报告为开发分支的实板验证,不是官方固件发布。 ## 对应版本 pipe-r20,UF2 SHA256 `85b51a4fb19eef7a0414bf9d09f8f5d70c0a6eded9b69ed88667f15319a2ec00`。ILM 使用 125856 B,剩余 5216 B;RT 堆 12 KiB、主线程栈 6 KiB 保持。独立 USB DMA 槽占用额外 2 KiB AHB SRAM。 ARM 与 HPM 的公开档位统一为 **4 / 10 / 20 / 30 MHz,默认 10 MHz**。20/30M 经正常 SDK、CLI、MCP、CMSIS-DAP 和脚本时钟入口选择,不需要实验相位属性。每次改频重新选择对应时序;CDC 命名档位入口要求精确回执;CMSIS-DAP/脱机结果只认证本报告的配套固件。四档可用不等于任意目标和接线都已认证。 ## 同一固件的周期 mem_dump 请求周期 1 µs;剔除起始 200 ms。连续四变量是一组 16 B;4 KiB 两个 2048 B 分块完整收齐才计一个块。本轮不以 mem_read、mem_write 或 RTT 吞吐替代周期读取。 | 档位 | 单变量时长 s | 持续 kSa/s | 主机接收 kSa/s | 批内 kSa/s | 连续四变量 k组/s | RAM 4KiB KiB/s | Flash 4KiB KiB/s | |---|---:|---:|---:|---:|---:|---:|---:| | 4M | 20 | 59.598 | 59.464 | 70.335 | 10.190 | 273.564 | 277.195 | | 10M | 20 | 111.956 | 111.725 | 146.344 | 20.038 | 579.964 | 583.863 | | 20M | 60 | 157.770 | 157.442 | 230.921 | 28.373 | 882.290 | 890.421 | | 30M | 120 | 187.636 | 187.298 | 281.084 | 32.373 | 1059.433 | 1072.973 | 持续速率为 `(N-1)/(末时间戳-首时间戳)`,包含全部批间空隙。批内速率只排除每 64 条的批界,不能冒充持续速率。主机列用相同稳态区间墙钟;常量读回不证明目标变量同速变化,动态场景另行验证。协议暂无批序号,因此不能仅靠 CRC 独立证明没有丢失整批。 | 档位 | 单变量记录数 | 批界平均 µs | 最大间隔 µs | 动态单变量 kSa/s | |---|---:|---:|---:|---:| | 4M | 1,169,536 | 178.152 | 375 | 59.999 | | 10M | 2,202,816 | 141.160 | 347 | 112.274 | | 20M | 9,401,383 | 132.833 | 360 | 163.620 | | 30M | 22,422,080 | 116.954 | 345 | 180.864 | 20 个场景全部通过静态逐字节比对、动态有限值与变化、CRC、flags、时间戳递增、SWD 错误增量及正常停止检查。每档连续 16 B、动态 4 B、Flash 4 KiB 各 15 秒,RAM 4 KiB 各 20 秒。WAIT 保留原始计数,不称从无重试。 ## 实际线频率和入口校准 以下读写数据阶段来自奇偶有效 SWD 事务,排除事务间空闲;500 MSa/s 有 2 ns 量化。它不是完整协议错误率分析,转向和 ACK 建立时间也不应计入数据位时钟。 | mem_dump 档位 | 读数据 MHz | 写数据 MHz | |---|---:|---:| | 4M | 3.947 | 3.948 | | 10M | 9.967 | 9.973 | | 20M | 19.961 | 19.969 | | 30M | 29.956 | 29.939 | | 入口 | 设置 MHz | 读数据 MHz | 写数据 MHz | 功能结果 | |---|---:|---:|---:|---| | Keil | 1 | 0.999 | 1.000 | 编程与校验通过 | | Keil | 2 | 2.001 | 2.005 | 编程与校验通过 | | Keil | 5 | 5.028 | 5.053 | 编程与校验通过 | | Keil | 10 | 9.819 | 9.970 | 编程与校验通过 | | 在线烧录 API | 4 | 3.915 | 3.930 | 成功 | | 在线烧录 API | 10 | 9.809 | 9.964 | 成功 | | 在线烧录 API | 20 | 19.800 | 19.952 | 成功 | | 在线烧录 API | 30 | 29.921 | 29.916 | 成功 | | 生成脱机脚本 | 4 | 3.940 | 3.945 | 成功 | | 生成脱机脚本 | 10 | 9.963 | 9.973 | 成功 | | 生成脱机脚本 | 20 | 19.944 | 19.954 | 成功 | | 生成脱机脚本 | 30 | 29.930 | 29.925 | 成功 | Keil 当前选择器最高 10M;测试前先由 SDK 选择 30M,再由 Keil 自己改频。四项编程/校验通过,数据阶段读写频率与设置偏差均小于 2%。1/2/5M 原 C 延时路径曾明显偏慢且不均匀:r17 读数据约 0.645/1.377/3.899 MHz;r18 接入 ILM 后首次参数仍不准确;r19 按逻辑分析仪重新标定,r20 保留该校准。1–10M 使用紧凑移位器,完整事务保护 IRQ,四档热函数地址保持一致。未逐点认证所有任意自定义频率。 在线入口执行连接、擦除、编程、校验、复位、断开;脱机入口实际生成并部署脚本后触发下载,未额外声称独立整片读回。各入口的频率单独实测,不拿 mem_dump 的波形替代。目标镜像 SHA256 `16c5e4fe438f47cf4041b6f5c137183816bb1b823a5684576b50dd0ca7179015`。 ## USB 已复现故障与修复边界 r15 普通矩阵通过,但暂停主机接收 3 秒后反复出现 32 B 缺失。工作进程原始串口字节与解析器输入一致,Windows 未报告溢出;关闭快速复制仍失败。r16 恢复旧 ZLP 顺序仍失败,均保留失败证据。 r17 引入独立的 64 B 对齐、2048 B AHB DMA 槽,复制后刷新缓存并执行屏障;DMA 完成前不复用,完成回调才推进已发送 ring 字节,提交失败不消费。通过 12 次严重暂停恢复测试。r20 保留该修复,并再次通过 8 项 20/30M 接收暂停(50ms、200ms、500ms、3s)及 12 次四档切换启停;12 次真实 CDC 参数变化通过。CRC、静态数据和错误标记都进行校验,不仅判断串口有没有返回。 此外,连续有数据时不插入多余 ZLP;整 MPS 空队列尾部保留 ZLP,失败可重试。CDC 参数修改不再误清 DMA busy;USB reset/disconnect 统一复位传输状态。实测对照支持独立 DMA 槽解决已复现缺失,尚未单独证明具体控制器/对齐/缓存机制,不宣称芯片勘误。有限缓冲不保证无限暂停或物理断线无损;不能将本轮恢复测试写成所有 USB 故障全部消失。 四档 RTT 版本回显、8 次 SystemView 功能采集、CLI 四档周期采样及真实 MCP 四档 4B/4096B 已分别通过;这些属于功能回归,没有把 RTT 吞吐作为本轮性能数字。 ## RTT/SystemView 启动并发修复 r19 的四档采样和 USB 压力通过,但功能切换曾出现 RTT 地址回执不一致。原始输出捕获到目标日志插入启动回执行和错误的缓冲区描述值;同一后台线程也可能与启动命令争用 SWD。复测偶尔通过不代表问题消失。 r20 将 REPL 命令执行至完整提示符入队的区间设为活动状态,RTT/SystemView 后台任务在此期间暂停读写,随后恢复。没有通过延长固定等待掩盖竞态。100 组实际 C 命令处理/后台泵抢占测试通过;真机 16 轮四档切换、32 次 RTT/SystemView 启动检查回执无目标日志、地址和缓冲区描述正确、无新增 SWD 错误。原始失败与修复后证据分别保留。 ## HPM 批时间与后续空隙 HPM 已接入同一固定 4B 快速组帧及批时间戳换算:每批一次 64 位除法,然后用带余数的 32 位差值精确换算,长跨度或回绕回退,保持每条真实完成时间戳。多变量同样使用该换算;不把样本改成假定等间隔。HPM 批长保持 24,ARM 固定 4B 为 64。USB 队列满时保存原批重试,不重新读取后冒充原采样。 实际 C 批处理、CRC/时间戳等价、队列满重试、异常批处理及 DMA 槽测试通过。**当前接的是 STM32F103RET6,本版 HPM5301/HPM6E80 真机回归尚未完成**;既有 HPM 数据仍属于对应旧固件,不能标成本版收益。 批界仍包含 CRC/组帧、复制、调度及下一批建立,不全是 USB 传输时间。下一步可计时拆分,再考虑预留发送区直接组包,或带批序号、每样本时间戳和旧格式回退的批量协议,减少重复头/CRC;尚未实现或给出性能承诺。 ## 证据与固化 本地保留每场景 JSON、间隔直方图、KVData/CSV、Keil 日志、在线任务、生成脚本和失败原始字节;固件归档包含 UF2/ELF/map、Git 基线与源文件差异及脏子模块差异。构建后检查 10 个 SWD 热函数地址;改变布局或工具链需重新校准。 r12/r15/r17/r19 的数字及失败结论保留历史,不覆盖成 r20。源码推送至 `codex/v0.2.1-development` 供审核,不修改正式发布通道。 ## 安装后的 Chrome GUI 验证 本地 Skill 已用开发分支 `0bc525069ff96244a188ff1f9d89dba77dba99a2` 的公开运行包更新,2460 个文件逐一与安装包校验。通过安装后的 `mklink gui` 启动,实际使用 Chrome GUI 连接、加载 AXF、选择动态变量、切档和停止。配置页、在线/脱机旧 10 MHz 限制已补齐;仅开放已校准的 20/30 MHz,不开放 25 MHz 等任意高频。V2/V3 脱机仍保持旧上限。 SuperWatch 前后端最小请求间隔从 10 µs 统一为 1 µs,默认仍 1 ms。1 µs 是请求值,不承诺每微秒完成采样;显示速率来自真实时间戳。Chrome 截图为当时的动态窗口,不代替上方完整稳态测试。 | GUI 操作入口 | 设置 MHz | 实测读数据 MHz | 状态记录时累计样本 | 订阅丢样本 | |---|---:|---:|---:|---:| | 配置页 | 4 | 3.933 | 443,840 | 0 | | 配置页 | 10 | 9.806 | 2,115,456 | 0 | | 配置页 | 20 | 19.948 | 4,246,080 | 0 | | 配置页 | 30 | 29.922 | 6,952,411 | 0 | | SuperWatch | 4 | 3.932 | 1,183,168 | 0 | | SuperWatch | 10 | 9.865 | 4,565,504 | 0 | | SuperWatch | 20 | 19.941 | 9,415,899 | 0 | | SuperWatch | 30 | 29.937 | 14,225,179 | 0 | 30M 单页面最终状态累计 21,248,026 条,读错误、CRC 错误、订阅丢批为 0。启动文本造成的解析器跳过字节计数另保留,未将其写成全流零丢弃字节。 双页面测试曾发生订阅队列丢批(其中旧 Chrome 页面在提示框后无法正常消费);原始失败状态保留。新服务仅一个页面复测 20/30M 时丢批为 0。该现象属于主机订阅背压,不能将其误记为已修复 USB 字节损坏,也不能声称慢浏览器无限缓存无损。截图分别保留两种场景。 本轮主机入口 Python 405 项、采样间隔 Python 66 项通过;配置/在线/脱机 GUI 144 项及新增配置 29 项(覆盖重叠)、波形 GUI 95 项通过,生产构建通过。既有前轮 108/32 项亦有覆盖重叠,不累加成独立总数。 固化范围:STM32F103RET6 四档与本报告所列功能。HPM 共用 USB 和批时间戳代码已纳入同一包,但新固件 HPM 实板资格仍待补齐。未发布官方渠道或标签。